TCP与UDP
一,TCP的介绍
1,TCP定义
TCP 提供面向有连接的通信传输,面向有连接是指在传送数据之前必须先建立连接,数据传送完成后要释放连接。
TCP 的特点可以用 “可靠、有序、面向连接” 三个词概括,而 “字节流” 是理解 TCP 数据传输方式的核心概念。
2,特点
重传和等待2MSL
TCP把数据字节流分块,数据丢失没返回时,上一个握手会重新传输
TCP最后断开连接时要等待2MSL,确保服务端收到并且断开连接
传输控制协议
可靠的、面向连接的协议
传输效率低
二,TCP的工作原理
1,协议各层图
2,TCP的封装格式图
1. 定位应用程序:源端口号 + 目的端口号(共 4 字节)
源端口号(16 位):
TCP 靠这两个端口,把数据准确交给 “发送方的某个程序” 和 “接收方的某个程序”(比如把浏览器的请求交给服务器的 80 端口 HTTP 服务)。
2. 保证数据有序和可靠:序列号 + 确认号(共 8 字节)
序列号(seq):
如果要传 1000 字节数据,拆成两个段,第一段含 500 字节,序列号 = 1;第二段含 500 字节,序列号 = 501。
作用:接收方按序列号重组数据,解决 “乱序到达” 问题。确认号(ack):
接收方收到序列号 1-500 的数据,会回复确认号 = 501(意思是 “1-500 已收,该发 501 了”)。
作用:实现 “确认机制”,让发送方知道哪些数据已被接收,避免重复传输。
3. 头部控制:数据偏移 + 保留位 + 控制位(共 4 字节)
控制位(6 位):
6 个二进制位,每个位代表一个控制功能,决定 TCP 段的 “类型”(如连接、数据、断开等):URG(紧急指针有效):为 1 时,“紧急指针” 字段有效(表示数据中有紧急内容,如中断信号)。
ACK(确认有效):为 1 时,“确认号” 字段有效(几乎所有数据传输阶段的报文都设为 1)。
PSH(推送数据):为 1 时,接收方应立即把数据交给应用层(不缓存),适合实时性要求高的场景(如命令行输入)。
RST(重置连接):为 1 时,表示强制断开连接(如接收方收到无效报文,要求重新建连)。
SYN(同步序列号):为 1 时,表示这是 “建立连接” 的请求(三次握手的关键标志)。
FIN(结束连接):为 1 时,表示 “数据已发完,请求断开连接”(四次挥手的关键标志)。
4. 流量控制:窗口大小(2 字节)
窗口大小(16 位):
接收方缓冲区剩余 1000 字节,窗口大小 = 1000 → 发送方最多发 1000 字节,直到接收方处理完数据并更新窗口大小。
作用:实现 “流量控制”,协调发送方和接收方的速度。
5. 数据校验与紧急处理:校验和 + 紧急指针(共 4 字节)
校验和(16 位):
检测数据在传输中是否被篡改或损坏。紧急指针(16 位):
TCP 段总长度 500 字节,紧急指针 = 100 → 前 100 字节是紧急数据,接收方应优先处理。
三,TCP传输的实现
1,TCP连接,三次握手
大写为标志位,确认是否收到请求确认或判断错误
小写的为序列号,确认或符合规则后,标志位输出做个标记
1,第一次握手
Host A向Host B发送链接请求,同步标志位SYN=1,随机序列号seq,假设为100
2,第二次握手
Host B收到seq,确认标志位ACK=1,ack同步序列号100+1,接受Host A连接请求,同步标志位SYN=1
同时向Host A发送一个随机序列号seq为300
3,第三次握手
确认ack=100+1同步序列号,同步标志位ACK=1,确认序列号seq=300+1
2,TCP断开,四次握手
2,断开连接,四次挥手
1,第一次挥手
Host A发起挥手请求,向Host B端发送标志位是FIN报文段,设置序列号seq,此时,Host A进入FIN_WAIT_1
状态,这表示Client端没有数据要发送给Server端了。
2,第二次分手
Host B收到了Host A发送的FIN报文段,向Host A返回一个标志位是ACK的报文段,ack设为seq加1,Host A进入FIN_WAIT_2
状态,Server端告诉Client端,我确认并同意你的关闭请求。
3,第三次分手
Host B向Host A发送标志位是FIN的报文段,请求关闭连接,同时Host B进入LAST_ACK
状态。
4,第四次分手
Host B收到Host A发送的FIN报文段,向Host A发送标志位是ACK的报文段,然后Host B进入TIME_WAIT
状态。Host B收到Host A的ACK报文段以后,就关闭连接。此时,Host A等待2MSL的时间后依然没有收到回复,则证明Host B已正常关闭,那好,Host A也可以关闭连接了。
四,UDP
1,UDP定义
UDP 的全称是用户数据报协议(User Datagram Protocol),是 TCP/IP 协议族中位于传输层的核心协议之一,直接基于 IP 协议(网络层)工作。
其本质是一种 **“轻量级、无连接的数据传输协议”**—— 它不建立端到端的可靠连接,仅负责将应用层发送的 “数据块”(称为 “数据报”)封装后,通过 IP 协议转发到目标主机,不对传输过程中的可靠性、顺序性做任何保障。
2,UDP原理
字段名称 | 长度(字节) | 核心作用 |
---|---|---|
源端口号(Source Port) | 2 | 标识发送方的应用进程(如客户端端口),可选(若不需要接收方回复,可设为 0) |
目的端口号(Destination Port) | 2 | 标识接收方的应用进程(如服务器端口,必须正确,否则无法交付到目标应用) |
UDP 长度(UDP Length) | 2 | 表示整个 UDP 数据报的总长度(头部 8 字节 + 数据载荷长度),单位是字节 |
校验和(Checksum) | 2 | 可选字段(IPv4 中可选,IPv6 中必选),用于检测 UDP 数据报是否在传输中损坏 |
3,UDP特点
对比维度 | UDP(用户数据报协议) | TCP(传输控制协议) |
---|---|---|
连接性 | 无连接 | 面向连接(三次握手建立,四次挥手释放) |
传输可靠性 | 不可靠(不确认、不重传、不排序) | 可靠(确认、重传、排序、流量控制、拥塞控制) |
数据单位 | 面向数据报(每个数据报独立) | 面向字节流(无固定单位,按字节拼接 / 拆分) |
头部长度 | 固定 8 字节 | 最小 20 字节,最大 60 字节(含选项) |
开销 | 极低(无连接管理、无重传等开销) | 较高(连接管理、重传、滑动窗口等额外开销) |
延迟 | 低(无连接建立延迟,无重传延迟) | 高(连接建立延迟、丢包后重传延迟) |
端口号 | 用源 / 目的端口标识应用进程 | 用源 / 目的端口标识应用进程 |
支持的通信方式 | 点对点、广播、多播 | 仅支持点对点(一对一) |
应用场景 | 实时通信、广播 / 多播、短请求响应 | 文件传输、网页加载、邮件(需可靠传输的场景) |