传输层本质与分层逻辑
1.1 端到端通信 底层定义
点到点通信 (网络层/数据链路层):仅实现相邻节点 之间的数据交付,聚焦设备硬件寻址,路由器、交换机仅转发数据包,不感知上层应用。
端到端通信 (传输层):跨越整个通信子网,实现源主机进程 --- 目的主机进程 的直接通信,屏蔽中间所有路由转发、链路异构、硬件差异。
核心分层逻辑:
- 网络层 :负责主机寻址,解决「数据发到哪台设备」;
- 传输层 :负责进程寻址,解决「数据交给设备上哪个程序」;
- 传输层是资源子网与通信子网的隔离边界 :通信子网(网络层及以下)不可靠、无状态;传输层向上层提供可靠/不可靠、面向连接/无连接的标准化服务。
1.2 传输层服务访问点 TSAP
每层都存在层间接口寻址标识:
- 数据链路层:MAC地址;
- 网络层:IP地址;
- 传输层:端口号(TSAP);
- 应用层:自定义服务标识。
操作系统内核通过TSAP(端口)完成上下层数据交付,是复用与分用的底层硬件级依据。
TSAP 全称:Transport Service Access Point,中文叫传**输服务访问点。
1.3 传输层服务原语
面向连接服务四类原语:
- 建立原语:主动请求连接、接受连接;
- 数据传输原语:发送、接收;
- 释放原语:主动关闭、被动关闭;
- 异常处理原语:复位、报错。
无连接服务仅提供:发送原语、接收原语,无连接建立与释放。
1.4 复用与分用 深层原理
(1)复用(向上复用,发送端)
多个应用层进程,共享同一个传输层协议实体(TCP/UDP协议栈),共用网络层IP路由出口发送数据。
- 向上复用:应用→传输层;
- 分类:
- 无连接复用(UDP):基于端口一对一映射,无连接上下文;
- 面向连接复用(TCP):基于五元组隔离多条长连接,同一端口可并发数千条连接。
(2)分用(向下分用,接收端)
IP分组到达目的主机后,剥离IP首部,根据IP首部协议字段分流:
- 协议号6 → TCP;
- 协议号17 → UDP;
传输层解析报文首部目的端口,将数据交付至绑定该端口的应用进程。
核心铁律:分用唯一依据 = 目的端口,源端口仅用于回复报文寻址。
(3)两种分用模式
- 一对一分用:UDP,一个端口绑定一个进程;
- 一对多分用:TCP,服务端监听端口统一接收,内核通过五元组区分不同客户端连接。
一、端口、套接字、五元组
1.1 端口 硬件与编码原理
端口是 16位无符号二进制整数,编码范围:
0≤Port≤216−1=655350 \le Port \le 2^{16}-1 = 655350≤Port≤216−1=65535
16位定长编码是TCP/IP协议簇全局硬性规定,决定了单主机单协议最大并发端口上限。
端口分级 完整约束规则
-
熟知端口(0~1023)
IANA官方统一分配,特权端口 ,类Unix系统中仅
root超级进程可绑定,普通用户无法监听;
作用 :标准化通用服务,避免端口冲突 ;典型协议绑定:
FTP控制(21)、SSH(22)、Telnet(23)、SMTP(25)、DNS(53)、HTTP(80)、HTTPS(443)、SNMP(161)。 -
注册端口(1024~49151)
非特权端口,普通应用、中间件、工业设备自定义使用;
无强制标准化,仅需人为规避冲突;
工业/开发常用:MySQL(3306)、Redis(6379)、Modbus-TCP(502)、OPC UA(4840)。 -
动态/临时端口(49152~65535)
客户端主动建连时,操作系统自动随机分配 ;
连接销毁后端口立即回收,短连接高并发场景极易出现端口耗尽 ;
内核可通过参数修改动态端口区间。
IANA 官方全称:Internet Assigned Numbers Authority中文:互联网数字分配机构。
它是负责全球互联网协议参数(端口号、IP 地址、协议号等)分配与登记的官方机构,现由 ICANN 下属的 PTI 运营
1.2 套接字 Socket 结构
(1)半套接字
单向通信端点 :(IP地址: 端口号)
唯一标识一台主机内的一个传输层通信端点。
(2)完整通信套接字对
一条端到端通信链路由两个套接字组成:
(源IP:源端口, 目的IP:目的端口)\big(源IP:源端口,\ \ 目的IP:目的端口\big)(源IP:源端口, 目的IP:目的端口)
(3)五元组(内核连接唯一标识)
TCP/UDP协议栈内核维护连接的核心键值,全网绝对唯一:
(源IP, 源端口, 目的IP, 目的端口, 传输层协议)\boldsymbol{(源IP,\ 源端口,\ 目的IP,\ 目的端口,\ 传输层协议)}(源IP, 源端口, 目的IP, 目的端口, 传输层协议)
- 协议隔离:TCP 80 与 UDP 80 是完全独立端点,互不冲突;
- 内核行为:所有TCP连接状态、收发缓冲区、序号、定时器、拥塞窗口,全部通过五元组索引管理。
1.3 端口绑定 底层限制
- 同一主机、同一传输协议下,一个端口同一时刻只能被一个进程监听;
- TCP与UDP端口完全独立,可同时占用同一个端口;
- 服务端固定端口被动监听 ,客户端随机端口主动发起;
- 端口冲突本质:同一协议下端口重复绑定,内核直接拒绝创建Socket。
二、可靠传输理论基础(TCP底层)
传输层所有可靠机制,全部基于连续ARQ协议体系:停止等待ARQ、后退N帧GBN、选择重传SR。
ARQ:Automatic Repeat reQuest 中文:自动重传请求
2.1 停止等待协议(单帧ARQ)
工作时序完整流程
- 发送方发送一个数据单元,停止发送,启动超时计时器;
- 接收方正确接收,校验无误后,返回显式ACK确认报文;
- 发送方收到ACK,关闭计时器,发送下一个数据单元;
- 若数据丢失、ACK丢失、报文出错 ,计时器超时,触发超时重传。
序号设计原理
仅使用1bit序号(0/1交替):
- 区分新旧重复报文;
- 防止因ACK丢失导致接收方重复接收同一数据。
信道利用率 公式推导
设:
- TdT_dTd:数据传输时延
- TRTTT_{RTT}TRTT:往返传播时延
- TtT_tTt:发送时延
停止等待信道利用率:
U=TtTt+RTT+T超时U = \frac{T_t}{T_t + RTT + T_{超时}}U=Tt+RTT+T超时Tt
致命缺陷:长链路、高时延网络中,信道大量空闲,利用率极低,仅适用于低速短距离通信。
2.2 后退N帧协议 GBN(连续ARQ)
核心思想
采用流水线传输,发送方无需等待单帧ACK,连续发送多个未确认报文,提升信道利用率。
窗口机制
- 发送窗口 WT>1W_T > 1WT>1:允许连续发送多个未确认PDU;
- 接收窗口 WR=1W_R = 1WR=1:仅接收按序到达的报文,乱序报文直接丢弃。
累计确认机制
接收方仅回复当前连续正确接收的最大序号 ,一次性确认该序号前所有数据。
优点:减少ACK报文数量,降低开销;
缺陷:无法精准反馈单帧丢失。
失效场景与代价
当链路中某一个报文丢失:
- 接收方拒收所有后续乱序报文;
- 发送方超时后,重传当前发送窗口内所有未确认报文;
- 弱网环境下重传冗余数据极多,带宽浪费严重。
GBN序号空间约束
WT≤2n−1W_T \le 2^n - 1WT≤2n−1
(n) 为序号比特数,防止新旧窗口序号重叠。
2.3 选择重传协议 SR
核心优化
接收窗口 (W_R>1),缓存乱序到达的正确报文,仅重传真正丢失的单个报文,是现代可靠传输的核心思想。
工作机制
- 接收方为每个接收成功的报文返回独立选择性确认SACK;
- 乱序数据存入接收缓冲区,等待缺失报文补全后,有序上交上层;
- 仅对丢失/出错的报文单独重传,无冗余重传。
SR序号空间硬性约束
WT≤2n−1,WR≤2n−1W_T \le 2^{n-1},\quad W_R \le 2^{n-1}WT≤2n−1,WR≤2n−1
收发窗口必须严格小于序号空间一半,杜绝新旧报文序号混淆。
2.4 三大协议对比
- 停止等待:(W_T=1,W_R=1),逻辑简单,效率最低;
- GBN:(W_T>1,W_R=1),累计确认,丢包全窗口重传;
- SR:(W_T>1,W_R>1),选择性确认,资源开销大,传输效率最高。
TCP 综合设计:累计确认+SACK选择性确认,融合GBN低开销与SR精准重传优势。
三、UDP 协议
3.1 UDP理念
极致轻量化传输协议,舍弃所有复杂控制逻辑 ,仅保留:进程寻址、基础校验、数据封装 ;
设计目标:最小头部开销、最低转发时延、无状态、支持多播广播,为实时业务服务。
3.2 UDP 首部 8字节 逐比特拆解
UDP首部固定8字节,无可变字段、无保留扩展位,由4个16bit字段严格组成:
- 源端口(16bit)
本地发送进程端口;取值为0时,表示无需应答的单向无回应通信。 - 目的端口(16bit)
传输层分用核心字段,接收端依靠该端口匹配监听进程,无此字段则数据无法交付。 - UDP总长度(16bit)
单位 :字节;范围8∼65535;
包含 :UDP首部 + 应用层数据;
最小值8:代表无应用数据,纯控制空报文。 - 校验和(16bit)
全网差错检测字段,覆盖伪首部+首部+数据 。

3.3 UDP 伪首部 跨层校验机制
伪首部结构(12字节,仅参与计算,不实际传输)
- 源IPv4地址(32bit)
- 目的IPv4地址(32bit)
- 填充位(8bit,固定0,对齐)
- 上层协议号(8bit,UDP=17)
- UDP报文总长度(16bit)
引入伪首部的底层必要性
- 绑定IP+端口+协议,防止IP路由错误导致数据跨主机错误交付;
- 抵御链路层篡改,实现跨层层间校验;
- 协议强制约束:IPv4中UDP校验和可关闭,IPv6强制开启,不可禁用。
3.4 校验和 二进制反码求和 计算流程
- 将伪首部、UDP首部、应用数据整体划分为连续16bit分组;
- 所有分组进行二进制反码加法(进位回卷);
- 全部相加完成后,对最终结果按位取反,写入校验和字段;
- 接收方重复上述运算,若最终结果为全1二进制,则无比特差错,否则直接丢弃报文。
3.5 UDP 面向报文 底层强约束
- 不管应用层下发多大数据块,UDP都直接封装为一个独立报文;
- 不拆分、不合并、不缓存、不重组,严格保留应用层报文边界;
- 接收端读取操作必须匹配报文大小:若应用缓冲区小于UDP报文长度,报文截断,剩余数据直接丢弃,无分片重组;
- 对比TCP字节流:无边界、自动拆分合并,无数据截断问题。
3.6 UDP 广播/组播 实现原理
- TCP基于面向连接的点对点状态机,仅支持单播;
- UDP无连接无状态,内核支持:单播、有限广播、定向广播、组播;
- 工业场景底层:
工业以太网设备发现、PLC集群时钟同步、机器人设备心跳、视频组播数据流,全部依赖UDP组播; - 组播核心:路由器维护组播组列表,按需转发组播报文,降低全网流量开销。
3.7 UDP 固有缺陷与应用层补偿
1. 无超时重传 :链路丢包直接永久丢失数据;
2. 无乱序整理 :报文到达顺序完全随机,无排序机制;
3. 无流量控制 :发送速率不受接收缓冲区限制;
4. 无拥塞控制 :网络拥堵时持续高频发包,加剧全网拥塞崩溃;
- 工程补偿:游戏、直播、工业自定义通信,均在应用层自研序号、ACK、重传、限流、滑动窗口,实现自定义可靠UDP。
3.8 扩展:UDP-Lite
轻量化差错传输,仅校验关键头部,允许数据段比特差错,适配音视频弱网容错场景。
四、TCP 协议
4.1 TCP 核心特性
-
面向连接
通信前必须通过三次握手初始化逻辑连接上下文 :序号初始值、收发缓冲区、状态机、定时器、拥塞参数;
连接为纯软件逻辑,无物理链路绑定,底层仍基于无连接的IP网络传输。
-
可靠交付
组合机制 :32位字节序号、累计确认+SACK、超时重传、比特校验、乱序缓存、重复去重;
严格保障:数据无丢失、无重复、无乱序、无比特差错。 -
面向字节流
应用层数据被抽象为无限连续的无边界字节序列 ;
TCP内核自主根据MSS、拥塞窗口、接收窗口,动态拆分/合并报文段;
发送缓冲区、接收缓冲区流式读写,是TCP粘包的根本成因。
-
全双工通信
内核独立维护:发送缓冲区、接收缓冲区 ;
双方可在同一时刻双向发送数据,收发逻辑完全解耦。
-
完备控制体系
内置:流量控制、拥塞控制、紧急数据传输、连接复位、保活探测、时间戳防绕回。

4.2、TCP报文头完整详解(按字段拆解)
TCP报文头分为固定头部(20字节) 、选项字段(0~40字节)和数据部分三部分,最大总头部长度为60字节(20+40)。
4.2.1 固定头部(前20字节,必选)
这部分是所有TCP报文都必须包含的基础信息,共5个32位(4字节)单元。
1 源端口(Source Port,16bit) & 目的端口(Destination Port,16bit)
- 作用 :标识发送方和接收方的应用进程,实现"端到端"的通信。
- 特点:端口号范围0 ~ 65535,其中0 ~ 1023是知名端口(如HTTP的80、HTTPS的443),1024~65535是动态端口。
- 示例:客户端访问网页时,源端口是随机动态端口(如50000),目的端口是服务器的80端口。
2 序号(Sequence Number, Seq,32bit)
- 作用:对TCP报文段的数据部分进行编号,解决乱序、重复和丢包问题。
- 规则 :
- 初始序号(ISN)是随机生成的(防止序列号预测攻击);
- SYN报文(连接建立)和FIN报文(连接释放)会占用一个序号;
- 数据报文的序号 = 上一个报文的序号 + 上一个报文的数据长度。
3 确认号(Acknowledgment Number, Ack,32bit)
- 作用:接收方告诉发送方"我已经收到了序号为N之前的所有数据,下一个我期望收到的序号是N"。
- 规则 :确认号是累计确认,即确认号=N表示序号≤N-1的数据都已收到;
- 前提:只有ACK标志位为1时,确认号才有效。
4 数据偏移(Data Offset,即"头部长度",4bit)
- 作用 :表示TCP头部的总长度 ,单位是4字节(不是1字节)。
- 计算:最大取值为15(4bit能表示的最大值),因此TCP头部最大长度为15×4=60字节;
- 意义:区分头部和数据部分的边界,因为选项字段长度可变。
5 保留位(Reserved,6bit)
- 作用:为TCP协议的未来扩展预留空间,默认必须全为0;
- 现状:部分扩展协议(如TCP时间戳、选择性确认)会复用其中部分位,但标准中仍定义为保留。
6 控制位(TCP Flags,6bit)
- 作用 :携带连接控制信息,每个bit对应一个标志,取值为1时表示该标志有效。
- 6个标志位的含义:
- URG(紧急):表示紧急指针有效,需要优先处理紧急数据;
- ACK(确认):表示确认号有效,连接建立后所有报文都应设置ACK=1;
- PSH(推送):要求接收方立即将数据交给应用层,不等待缓冲区填满;
- RST(复位):强制关闭连接,用于处理错误连接或异常情况;
- SYN(同步):用于连接建立,请求同步双方的初始序号;
- FIN(结束):用于连接释放,通知对方数据发送完毕。
7 窗口大小(Window Size,16bit)
- 作用 :实现TCP的流量控制,表示接收方当前能接收的最大数据量(单位是字节);
- 规则:发送方发送的数据量不能超过接收方通告的窗口大小,避免接收方缓冲区溢出;
- 扩展:通过窗口缩放选项,可将窗口大小扩展到32bit,支持更大的吞吐量。
8 校验和(Checksum,16bit)
- 作用:检测TCP报文在传输过程中是否发生比特错误;
- 计算:包含TCP头部、数据部分和伪头部(源IP、目的IP、协议类型、TCP长度);
- 规则:发送方计算校验和并填入,接收方重新计算并对比,不一致则丢弃报文。
9 紧急指针(Urgent Pointer,16bit)
- 作用:当URG标志位为1时有效,指向紧急数据的最后一个字节的序号;
- 场景:用于传输紧急数据(如Ctrl+C中断信号),跳过正常的缓冲区处理流程。
4.2.2 选项字段(Options,0~40字节)
- 位置:固定头部之后,数据部分之前,长度可变(0~40字节);
- 作用 :扩展TCP的功能,常见选项包括:
- 最大报文段长度(MSS) :告知对方自己能接收的最大TCP数据段长度;
- 窗口缩放(WS,Window Scale):扩展窗口大小到32bit,提升高带宽延迟网络的性能;
- 选择性确认(SACK):允许接收方只确认丢失的报文段,避免重传所有未确认数据;
- 时间戳(Timestamp):用于计算往返时间(RTT)和防止序号绕回(PAWS)。
4.2.3 数据部分(Payload)
- 作用:承载应用层的数据(如HTTP请求、文件内容等);
- 长度:TCP报文的总长度(IP层的总长度字段)减去IP头部和TCP头部的长度;
- 限制:最大长度由MSS决定,通常为1460字节(以太网MTU为1500字节,减去IP头部20字节和TCP头部20字节)。
4.3 TCP 字节流缓冲区 内核工作机制
- 应用层
write/send写入数据,首先存入内核发送缓冲区; - TCP协议栈根据:拥塞窗口cwnd、接收窗口rwnd、MSS阈值、Nagle算法,自主定时/定量封装报文段发送;
- 对端数据到达后,存入内核接收缓冲区 ,应用层
read/recv主动拉取数据; - 缓冲区解耦收发双方,实现异步通信,也是流量控制、滑动窗口的物理载体。
五、TCP 连接管理:状态机+三次握手+四次挥手 全流程
5.1 TCP 11种标准状态 完整流转逻辑
CLOSED → LISTEN → SYN_SENT / SYN_RCVD → ESTABLISHED → FIN_WAIT_1 → FIN_WAIT_2 / CLOSING → CLOSE_WAIT → LAST_ACK → TIME_WAIT → CLOSED
- CLOSED:初始关闭状态,无连接资源;
- LISTEN:服务端监听状态,等待客户端连接请求;
- SYN_SENT:客户端发送SYN后,等待服务端同步确认;
- SYN_RCVD:服务端收到SYN,回复SYN+ACK,等待客户端最终确认;
- ESTABLISHED:连接完全建立,双向数据正常传输;
- FIN_WAIT_1:主动关闭方发送FIN,等待对方ACK;
- FIN_WAIT_2:收到关闭ACK,等待对方FIN报文;
- CLOSE_WAIT:被动关闭方收到FIN,回复ACK,进入半关闭;
- LAST_ACK:被动关闭方发送FIN,等待最终ACK;
- CLOSING:双方同时发起关闭,并发挥手;
- TIME_WAIT:主动关闭方最终ACK发送完成,等待2MSL。
5.2 三次握手

-
第一次握手:客户端 → 服务端
报文 :(SYN=1,seq=ISN(x), ACK=0)客户端初始化本地初始序号ISN(x),申请建立连接,进入
SYN_SENT;ISN随机生成,抵御序号劫持攻击。
-
第二次握手:服务端 → 客户端
报文 :(SYN=1, ACK=1,seq=ISN(y),ack=x+1)服务端确认客户端连接请求,同时同步自身序号ISN(y),进入
SYN_RCVD;内核临时分配半连接资源。
-
第三次握手:客户端 → 服务端
报文 :(ACK=1,seq=x+1,ack=y+1)客户端确认服务端同步请求,双方内核完整初始化缓冲区、定时器、窗口参数;
两端同步进入
ESTABLISHED,正式传输数据。
为何必须三次握手?
网络中存在延迟重复的过期SYN报文:
- 历史旧连接的SYN报文因路由拥堵延迟到达服务端;
- 若采用两次握手:服务端直接确认并创建半连接,占用内存、端口资源;
- 客户端早已断开,不会发送任何数据,服务端永久僵死等待,引发半连接洪水资源耗尽;
- 三次握手通过客户端最终ACK校验,确保连接请求为实时有效请求,杜绝无效半连接。
5.3 四次挥手

核心根源:TCP全双工架构,收发通道完全独立,单向关闭互不影响,因此需要四次交互。
- 第一次挥手:主动关闭方
(FIN=1),本方无数据发送,请求关闭本地发送通道。 - 第二次挥手:被动关闭方
(ACK=1),确认关闭请求,进入半关闭状态 ;
此时:主动方不能发数据,但被动方仍可继续向主动方发送数据。 - 第三次挥手:被动关闭方
被动方业务数据全部发送完毕,(FIN=1),关闭自身发送通道。 - 第四次挥手:主动关闭方
(ACK=1),最终确认,双向通道全部关闭。
5.4 TIME_WAIT 与 2MSL 原理
MSL定义
报文最大生存时间,TCP报文在全网路由中允许的最大存活时长,超出则路由器强制丢弃。
2MSL 两大不可替代作用
- 保障最终ACK可靠交付
若第四次挥手的ACK报文丢失,被动关闭方超时后会重发FIN;
主动关闭方处于2MSL等待,可重新回复ACK,避免连接残留僵死。 - 清除网络中残留过期报文
等待两倍最大传输时延,确保旧连接所有分片、延迟报文全部自然失效;
防止新建立的同名连接,接收上一条连接的过期乱序数据,杜绝数据错乱。
工程问题
高并发短连接服务大量TIME_WAIT会耗尽动态端口;
解决方案:开启TCP端口复用、快速回收、调整2MSL内核参数。
5.5 连接异常机制
- RST复位:非法报文、端口未监听、进程崩溃、数据格式错误时,强制清空连接资源,立即断连;
- 半打开连接:主机断电、断网、异常宕机,无挥手报文,连接长期僵死;
- TCP Keepalive保活:内核定时发送探测报文,检测对端存活,自动清理无效僵死连接。
六、TCP 流量控制 滑动窗口
6.1 流量控制核心定义
端到端局部控制 :限制发送方发送速率,匹配接收方应用读取速率,防止接收缓冲区溢出、数据丢失 。
区别:流量控制=两端设备;拥塞控制=全网路由设备。
6.2 滑动窗口模型
TCP以字节为单位维护滑动窗口:
实际发送窗口=min(cwnd 拥塞窗口, rwnd 接收窗口)\boldsymbol{实际发送窗口 = \min(cwnd\ 拥塞窗口,\ rwnd\ 接收窗口)}实际发送窗口=min(cwnd 拥塞窗口, rwnd 接收窗口)
- rwnd:接收方通过TCP窗口字段实时通告,代表接收缓冲区剩余空间;
- cwnd:拥塞控制算法计算得出,代表网络允许的最大发送量。
6.3 延迟ACK 底层机制
接收方不立即回复ACK,刻意延迟50~200ms:
- 合并多个连续报文的确认,减少ACK报文数量,降低网络开销;
- 配合糊涂窗口规避算法,提升传输效率;
缺陷:轻微增加单向时延,不适用于超低时延工业场景。
6.4 零窗口与零窗口探测
- 接收缓冲区写满时,(rwnd=0),发送方立即停止数据发送;
- 发送方定时发送零窗口探测小包,持续轮询接收窗口状态;
- 避免双方因窗口为0永久阻塞死锁。
6.5 糊涂窗口综合征
发送端糊涂窗口
成因 :应用频繁写入1~10字节极小数据,TCP频繁封装小包;
后果 :头部开销(20~60B)远大于数据载荷,带宽利用率极低;
解决 :Nagle算法,缓存小数据,积攒至MSS大小或超时后统一发送。
接收端糊涂窗口
成因 :接收方缓冲区少量释放,立即通告极小窗口;
后果 :触发发送方小包发送,全网碎片化严重;
解决 :Clark算法,缓冲区空闲空间达到阈值后,才更新窗口通告。
七、TCP 拥塞控制
7.1 拥塞本质
全网范围内,路由器缓存溢出、链路带宽不足、中间设备处理能力瓶颈,导致报文大规模丢失、时延激增、吞吐量断崖式下降。
7.2 核心变量
- (cwnd):拥塞窗口,网络层限制的最大发送字节数;
- (ssthresh):慢启动阈值,区分慢启动与拥塞避免的临界值。
7.3 四大算法 逐RTT完整逻辑
-
慢启动
触发条件 :(cwnd < ssthresh)
增长规则 :每个RTT指数翻倍cwnd=1→2→4→8→16cwnd = 1 \to 2 \to 4 \to 8 \to 16cwnd=1→2→4→8→16
目的:连接初期快速探测网络带宽上限。 -
拥塞避免
触发条件 :(cwnd >= ssthresh)
增长规则 :每个RTT线性+1缓慢抬升窗口,避免突发流量冲击路由设备。
-
快重传
触发条件 :连续收到3个重复ACK
判定 :单报文轻度丢失,非全网重度拥塞;
行为:不等待超时,立即重传丢失报文,降低重传时延。 -
快恢复
触发条件 :快重传执行后执行流程:
① (ssthresh = cwnd / 2)
② (cwnd = ssthresh)
③ 直接进入拥塞避免,跳过慢启动
7.4 两类拥塞触发 差异化处理
-
超时重传(重度拥塞)
全网路由拥堵,大规模丢包;
处理:(ssthresh = cwnd/2,\ \ cwnd=1),重启慢启动。
-
3次冗余ACK(轻度拥塞)
局部链路抖动,单报文丢失;
处理:快重传+快恢复,窗口平缓下调,保障传输稳定。
7.5 现代拥塞控制算法
- CUBIC:桌面/互联网默认,长距离网络优化;
- BBR:基于带宽与时延探测,弱网、高速网络最优;
- DCTCP:数据中心专用,低时延、微批量传输。
八、传输层常见概念辨析
8.1 TCP粘包/拆包 底层本质
- 粘包:多个应用数据被TCP合并为一个报文;
- 拆包:单个应用大数据被TCP拆分为多个报文;
- 根源 :TCP面向字节流,无应用层报文边界;
- 工业标准化解决方案:头部长度字段(唯一通用可靠方案)。
8.2 分段与分片 严格区分
- TCP分段:传输层,上层大数据切割为适配MSS的报文;
- IP分片:网络层,IP分组切割为适配链路MTU的小片。
8.3 TCP与UDP对比
| 维度 | TCP | UDP |
|---|---|---|
| 连接属性 | 面向连接,状态机维护 | 无连接,无状态 |
| 数据形式 | 字节流,无边界 | 面向报文,边界固化 |
| 可靠性 | 序号/重传/排序/去重 全可靠 | 仅校验和,尽力交付 |
| 控制机制 | 流量控制、拥塞控制、紧急传输 | 无任何控制机制 |
| 通信模式 | 仅单播 | 单播/广播/组播 |
| 头部开销 | 20~60字节 | 固定8字节 |
| 适用场景 | 文件、数据库、工控指令、网页 | 直播、游戏、DNS、设备发现 |