【探索java之路】简单聊聊网络通讯核心协议

【探索java之路】简单聊聊网络通讯核心协议

目录

引言

一、传输层协议详解

TCP(传输控制协议)

UDP(用户数据报协议)

TCP vs UDP 对比分析

二、应用层协议详解

HTTP(超文本传输协议)

HTTPS(安全超文本传输协议)

三、协议间的协同工作

端到端通信流程实例

常见通信模式


引言

网络通信的核心协议,不仅是后端开发的必备技能,也是前端优化、架构设计乃至安全防护的基础。OSI七层模型与TCP/IP四层模型是理解网络通信的理论框架。在实际应用中,TCP/IP模型更为广泛使用,包括应用层、传输层、网络层和链路层。本文重点讨论应用层协议HTTP/HTTPS和传输层协议TCP/UDP。


一、传输层协议详解

TCP(传输控制协议)

TCP是互联网中最重要、应用最广泛的传输层协议之一,以其可靠性有序性著称。

核心特性

  • 面向连接:通信前必须建立连接,通信结束后释放连接
  • 可靠传输:通过确认、重传、校验等机制确保数据正确到达
  • 流量控制:滑动窗口机制防止发送方淹没接收方
  • 拥塞控制:慢启动、拥塞避免、快速重传、快速恢复算法

三次握手建立连接

这个过程确保了双方都准备好收发数据,并协商初始序列号。

四次挥手释放连接

双向连接的独立关闭保证了数据传输的完整性。

UDP(用户数据报协议)

UDP是另一种传输层协议,以简单高效为设计理念。

核心特性

  • 无连接:发送数据前不需要建立连接
  • 不可靠传输:不保证数据到达,不保证顺序
  • 无状态:不维护连接状态
  • 开销小:头部仅8字节,比TCP的20字节更精简

TCP vs UDP 对比分析

特性TCPUDP
连接性面向连接无连接
可靠性高(确认、重传)低(无机制)
顺序性保证顺序不保证顺序
速度较慢(建立连接、确认)快(无握手)

选择策略

  • 选择TCP:需要可靠传输、数据完整性优先的场景
  • 选择UDP:实时性要求高、可容忍少量丢包、需要多播的场景
  • 混合使用:部分应用在UDP上实现可靠传输机制

二、应用层协议详解

HTTP(超文本传输协议)

协议演进

  • HTTP/1.0:每个请求/响应后关闭连接
  • HTTP/1.1:持久连接、管道化、分块传输
  • HTTP/2:多路复用、头部压缩、服务器推送
  • HTTP/3:基于QUIC,解决队头阻塞

常用方法

  • GET:获取资源
  • POST:提交数据
  • PUT:更新资源
  • DELETE:删除资源
  • PATCH:部分更新
  • HEAD:获取头部信息
  • OPTIONS:查询支持方法

状态码分类

  • 1xx:信息性状态码
  • 2xx:成功(200 OK、201 Created、204 No Content)
  • 3xx:重定向(301 Moved Permanently、304 Not Modified)
  • 4xx:客户端错误(400 Bad Request、403 Forbidden、404 Not Found)
  • 5xx:服务器错误(500 Internal Server Error、502 Bad Gateway)

HTTP/2核心改进

  1. 二进制分帧:将消息分解为独立帧,交错发送
  2. 多路复用:一个连接并行多个请求/响应
  3. 头部压缩:HPACK算法减少头部大小
  4. 服务器推送:服务器主动推送客户端可能需要的资源

HTTPS(安全超文本传输协议)

HTTPS = HTTP + SSL/TLS,为HTTP通信提供加密、完整性和身份验证。

加密原理

  1. 对称加密:加密解密使用相同密钥,速度快算法:AES、DES、3DES
  2. 非对称加密:公钥加密,私钥解密,安全性高算法:RSA、ECC、DH
  3. 混合加密:结合两者优势,用非对称加密交换对称密钥

数字证书与PKI

  • CA(证书颁发机构):受信任的第三方
  • 数字证书:包含公钥、持有者信息、CA签名
  • 证书链:根证书 → 中间证书 → 服务器证书

TLS握手过程

  1. ClientHello:客户端支持的TLS版本、密码套件、随机数
  2. ServerHello:服务器选择TLS版本、密码套件、随机数,发送证书
  3. 证书验证:客户端验证服务器证书
  4. 密钥交换:客户端生成预主密钥,用服务器公钥加密发送
  5. 计算密钥:双方用随机数和预主密钥计算会话密钥
  6. 完成消息:验证握手过程完整性

HTTPS优势

  • 防窃听:加密传输内容
  • 防篡改:数字签名保证完整性
  • 防冒充:证书验证身份
  • SEO优势:搜索引擎排名因素

三、协议间的协同工作

端到端通信流程实例

我们以访问"https://www.example.com"为例:

  1. DNS解析:UDP查询www.example.com的IP地址
  2. TCP连接:与服务器443端口三次握手建立连接
  3. TLS握手:协商加密参数,验证证书
  4. HTTP请求:发送加密的HTTP请求
  5. HTTP响应:接收加密的HTTP响应
  6. 渲染页面:浏览器解析HTML,加载资源
  7. 连接关闭:四次挥手释放连接

常见通信模式

短连接模式(HTTP/1.0默认):

请求 -> 响应 -> 关闭连接 新请求 -> 新连接 -> 响应 -> 关闭连接

  • 优点:服务器资源占用少
  • 缺点:连接建立开销大

持久连接模式(HTTP/1.1默认):

建立连接 请求1 → 响应1 请求2 → 响应2 ... 请求N → 响应N 关闭连接
  • 优点:减少连接建立开销
  • 缺点:服务器需维护连接状态

HTTP/2多路复用

连接 ├─ 流1:请求1 → 响应1 ├─ 流2:请求2 → 响应2 ├─ 流3:请求3 → 响应3 └─ 流4:服务器推送资源
  • 完全解决队头阻塞
  • 头部压缩减少开销

制作不易,如果对你有帮助请点赞,评论,收藏,感谢大家的支持

Read more

C++ 日志系统实战第一步:项目功能与技术架构详解

C++ 日志系统实战第一步:项目功能与技术架构详解

C++-基于多设计模式下的同步&异步日志系统 全是通俗易懂的讲解,如果你本节之前的知识都掌握清楚,那就速速来看我的项目笔记吧~    (全文手敲,受益良多) 本人也是做到项目了,后面会日更项目笔记。  我们要实现日志系统,先了解 什么是日志?    程序运行过程中所记录的程序运行的状态信息。为什么要这些信息呢?便于程序员对程序运行状况判断,进而分析,修改代码子类的。所以 日志作用:记录了程序运行状态信息,便于程序员能够随时根据状态信息,对系统的运行状态,进行分析 项目功能:能够让用户非常简便的进行日志的输出,及其控制。 一.项目介绍 本项目主要实现一个日志系统,其主要支持以下功能: 支持多级别日志消息:(级别有:调试,提示,警告,错误,致命,不同级别对应不同场景:例如调试级别的日志不输出…)  支持同步日志和异步日志:(同步指的是该工作由自己干,异步指的是该工作由别人干,自己等结果就行)同步日志指的是将日志写入到文件或数据库中去,这个操作由业务线程自己完成。异步日志指的是,将日志放到内存中去,由于担心磁盘满了,

By Ne0inhk
【C++初阶】:C++入门相关知识(3):引用 & inline内联函数 & nullptr相关概念

【C++初阶】:C++入门相关知识(3):引用 & inline内联函数 & nullptr相关概念

🎈主页传送门:良木生香 🔥个人专栏:《C语言》 《数据结构-初阶》 《程序设计》《鼠鼠的C++学习之路》 🌟人为善,福随未至,祸已远行;人为恶,祸虽未至,福已远离 前言:在上一篇文章中,我们学习了C++的输入输出,缺省参数以及函数重载,这些都是C++入门必备的基础知识,那么在这篇文章中,我们就要来学习剩下C++其他的基础知识,那就是引用、inline、以及nullptr这些知识。 一、引用 1.1、引用的概念和定义 引用不是定义一个新变量,而是给已经存在的变量起一个别名,那么编译器就不会为别名重新开辟空间,它和引用变量共同使用同一块空间。就好比我们把土豆称为马铃薯,番茄称为西红柿一样,都是取了一个新的别名,但是东西是同一个东西,所以引用的语法如下: 类型& 别名 = 变量 使用方法如下: int a = 10; int&

By Ne0inhk
【C++】priority_queue和deque的使用与实现

【C++】priority_queue和deque的使用与实现

priority_queue与deque的使用与模拟实现 ✨前言:在C++ STL中,priority_queue和deque是两个重要的容器适配器,它们分别基于堆和双端队列的概念,为不同的应用场景提供了高效的解决方案。本文将深入探讨它们的使用方法、底层实现原理以及在实际开发中的应用选择。 📖专栏:【C++成长之旅】 目录 * priority_queue与deque的使用与模拟实现 * 一、priority_queue * 1.1 介绍 * 1.2 使用 * 1.3 模拟实现 * 二、deque * 2.1 介绍 * 2.2 缺陷 * 三、STL标准库中对于stack和queue的模拟实现 * 3.1 为什么选择deque作为stack和queue的底层默认容器 * 3.2 stack的模拟实现 * 3.3 queue的模拟实现 一、priority_

By Ne0inhk
计算机毕设java电子商务网站的设计与实现 基于Spring Boot的在线购物平台开发与实现 Java技术驱动的B2C网络商城系统构建

计算机毕设java电子商务网站的设计与实现 基于Spring Boot的在线购物平台开发与实现 Java技术驱动的B2C网络商城系统构建

计算机毕设java电子商务网站的设计与实现4940z9(配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。 随着互联网技术的飞速发展和移动支付的普及,电子商务已成为推动经济增长的重要引擎。传统零售模式面临渠道单一、运营成本高昂、客户触达受限等困境,而线上购物以其便捷性、多样性和价格优势赢得了消费者的青睐。与此同时,中小企业数字化转型需求迫切,亟需低成本、高效率的电商解决方案来拓展销售渠道、提升品牌影响力。然而,市面上成熟的电商平台往往存在入驻费用高、数据归属不清、功能同质化等问题,难以满足个性化运营需求。基于此,采用Java语言结合Spring Boot框架,开发一套电子商务网站,通过B/S架构实现商品展示、在线交易、订单管理、用户互动等核心功能,旨在为商家提供自主可控的线上销售平台,为消费者打造安全便捷的购物体验,助力数字经济的普惠发展。 系统功能模块 本系统采用Spring Boot作为后端开发框架,数据库选用MySQL进行数据存储,基于B/S架构设计。系统涵盖以下核心功能模块: 用户管理模块:实现用户基

By Ne0inhk