【探索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

Flutter 组件 short_uuids 适配鸿蒙 HarmonyOS 实战:唯一标识微缩技术,构建高性能短 ID 生成与分布式索引架构

Flutter 组件 short_uuids 适配鸿蒙 HarmonyOS 实战:唯一标识微缩技术,构建高性能短 ID 生成与分布式索引架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 short_uuids 适配鸿蒙 HarmonyOS 实战:唯一标识微缩技术,构建高性能短 ID 生成与分布式索引架构 前言 在鸿蒙(OpenHarmony)生态迈向万物互联、涉及海量离线资源标识、蓝牙广播载荷(BLE Payload)及二维码数据极限压缩的背景下,如何生成既能保留 UUID 强随机性、又能极大缩减字符长度的唯一标识符,已成为优化存储与通讯效率的“空间必修课”。在鸿蒙设备这类强调分布式软总线传输与每一字节功耗敏感的环境下,如果应用依然直接传输长度达 36 字符的标准 UUID,由于由于有效载荷溢出,极易由于由于传输协议限制导致数据截断或多次分包带来的延迟。 我们需要一种能够实现高进制转换、支持双向编解码且具备低碰撞概率的短 ID 生成方案。 short_uuids 为 Flutter 开发者引入了将标准 UUID 转化为短格式字符串的高性能算法。它利用

By Ne0inhk
爬虫使用代理IP全解析:原理、类型与实战指南

爬虫使用代理IP全解析:原理、类型与实战指南

代理IP是爬虫系统中保障连接稳定性与提升数据采集效率的重要技术组件。在实际开发过程中,很多人都会疑问:代理IP到底是如何工作的?在Python爬虫项目中又该如何正确配置?本文将围绕代理IP的通信原理、常见类型差异以及具体代码实现方式进行系统解析,帮助你更清晰地理解其在爬虫架构中的作用。 代理IP的基本原理是什么? 从网络通信结构来看,普通请求流程是: 本地服务器 → 目标服务器 → 返回数据 当引入代理IP后,请求路径变为: 本地服务器 → 代理服务器 → 目标服务器 → 代理服务器 → 本地服务器 代理服务器相当于一个“中转节点”。它在客户端与目标服务器之间建立连接,并转发请求与响应数据。 常见代理IP类型 在爬虫系统中,常见代理IP类型主要分为动态IP与静态IP。 对比维度动态IP静态IPIP变化频率每次请求或定期更换长时间固定适用场景高频采集任务长周期数据同步管理难度较低需要稳定维护并发扩展性更强相对稳定 动态IP更适用于高频、大规模数据采集任务;而静态IP则适用于持续连接型的数据交互需求。 选择哪种类型,并没有绝对标准,而是取决于采集频率、并发

By Ne0inhk
2025年08月12日 Go生态洞察:Go 1.25 正式发布与深度解析

2025年08月12日 Go生态洞察:Go 1.25 正式发布与深度解析

2025年08月12日 Go生态洞察:Go 1.25 正式发布与深度解析 摘要 📝 大家好,我是 猫头虎 🐯🦉。今天给大家带来最新的 Go 1.25 正式发布深度解读!这篇文章将是 Go语言 Go1.25新特性 Go生态 洞察 编译器优化 标准库更新 等关键词解读的博客。 我带你从工具链、运行时、编译器、链接器到标准库全面了解这次发布的亮点,并对实验性功能进行深度剖析。 引言 🌟 2025年8月12日,Go团队宣布了 Go 1.25 的正式发布。相比于 Go 1.24,这次版本在工具、运行时、编译器、链接器和标准库上都有实质性改进,甚至新增了一个标准库包。同时,还引入了若干 实验性特性,比如新的垃圾回收器和新的 encoding/

By Ne0inhk
【MySQL】数据库的 “红绿灯”:非空、主键、外键到底管什么?

【MySQL】数据库的 “红绿灯”:非空、主键、外键到底管什么?

表的约束:表中一定要有各种约束,通过各种约束,保证未来数据库中的数据的准确的;约束的本质是:通过技术手段倒逼程序员,插入正确的数据,进而保证数据库中的数据的正确的; 一、非空约束 两个值:null(默认的)和not null(不为空) 数据库默认字段基本都是字段为空,但是实际开发时,尽可能保证字段不为空,因为数据为空没办法参与运算。 null Vs ''  null : 表示什么都没有; '' :有,但是为空; 二、default 约束 default : 跟 C++ 的缺省值一样; not null  and default: 注意:如果我们的表中没有设置 default 和 not null 约束,他默认 default

By Ne0inhk