计算机网络 第五章 运输层
5.1 运输层概述
5.1.1 运输层的核心作用
运输层为应用层提供端到端的通信服务。
网络层实现的是主机与主机之间的通信,而运输层在此基础上,实现两台主机内部应用进程与应用进程的端到端通信,是真正面向用户应用的通信层级。
5.1.2 核心功能:复用与分用
- 复用:多个应用进程可同时使用同一个运输层协议传输数据。
- 分用:运输层收到数据后,可根据标识将数据准确交付给对应的目标应用进程。
5.1.3 两大运输层协议
运输层包含两种核心协议,特性完全不同:
- TCP(传输控制协议):面向连接的可靠协议。即便底层网络不可靠,也可为上层提供全双工可靠逻辑信道。
- UDP(用户数据报协议):无连接的不可靠协议。底层网络不可靠,其逻辑通信信道依然为不可靠信道。
5.1.4 端口号
端口号是应用进程与运输层交互的唯一标识,仅具备本地意义,TCP/IP 协议采用16 位端口号标识端口。
端口号分类:
- 服务器端端口号:1~49151,供各类服务器程序固定使用
- 客户端端口号:49152~65535,客户端进程临时动态使用
5.2 用户数据报协议(UDP)
5.2.1 UDP 核心概述
UDP 在 IP 无连接服务的基础上,仅新增复用分用和差错检验两项基础功能,结构极简、开销极低。
5.2.2 UDP 六大核心特点
- 无连接:通信前无需建立连接,直接发送数据。
- 尽最大努力交付:不保证数据可靠传输,无重传、确认机制。
- 面向报文:完整保留应用层交付的报文边界,不拆分、不合并数据。
- 无拥塞控制:不会根据网络拥堵情况调整发送速率,网络拥堵时易丢包。
- 支持多交互通信:支持一对一、一对多、多对多通信模式。
- 首部开销小:首部固定 8 字节,传输效率极高。
总结:UDP 简单高效、实时性强,但传输不可靠。
5.2.3 UDP 首部格式
UDP 报文由首部字段 + 数据字段两部分组成,总首部固定 8 字节,包含四个字段:
- 源端口
- 目的端口
- 报文长度
- 检验和
补充:UDP 检验和校验范围包含首部 + 全部数据部分,用于检测传输过程中的数据差错。
5.3 传输控制协议(TCP)概述
5.3.1 TCP 五大核心特点
- 面向连接:数据传输前必须建立专属连接,传输结束后释放连接。
- 点对点通信:一条 TCP 连接仅存在两个通信端点,仅支持一对一传输。
- 可靠交付:通过确认、重传、校验等机制,保证数据无差错、不丢失、不重复、按序到达。
- 全双工通信:连接建立后,双方可同时发送、接收数据。
- 面向字节流:将应用层数据视为无结构的字节序列,可拆分、重组报文,无固定报文边界。
5.3.2 TCP 连接与套接字
- 套接字(插口):TCP 连接的通信端点,由IP 地址 + 端口号拼接构成,格式:
IP:端口号 - TCP 连接唯一标识:一条 TCP 连接由两端套接字唯一确定公式:
TCP = {socket1, socket2} = {(IP1:port1), (IP2:port2)} - 核心特性:TCP 端点是抽象的套接字,而非主机、端口或进程。
5.4 可靠传输工作原理
可靠传输的理想条件:传输信道无差错、接收方处理速率始终匹配发送方发送速率。
5.4.1 停止等待协议
核心逻辑:发送方发送一个分组后,停止发送,等待接收方确认后,再发送下一个分组。
- 无差错场景:发送方发送分组 → 接收方接收并返回确认 → 发送方收到确认,发送下一组数据。
- 传输出错场景:出现分组丢失、出错时,触发超时重传机制。
协议三大核心注意点
- 发送方发送分组后,必须临时保存分组副本,用于超时重传。
- 所有传输分组、确认报文必须编号,区分有序数据。
- 超时计时器的重传时间,需大于数据平均往返传输时间。
特殊异常场景:确认丢失、确认迟到
处理规则:
- 接收方收到重复分组,直接丢弃重复数据。
- 接收方向发送方重新发送确认报文。
通过确认 + 超时重传机制,可在不可靠网络中实现可靠传输,该机制统称为ARQ 自动重传请求协议。
协议优缺点
优点:逻辑简单、易实现缺点:信道利用率极低,资源浪费严重
5.4.2 连续 ARQ 协议
为解决停止等待协议信道利用率低的问题,提出连续 ARQ 协议。
- 核心规则:发送方无需等待单个确认,可连续发送多个分组;每收到一个确认,发送窗口向前滑动一格。
- 接收方式:采用累积确认机制,仅对按序到达的最后一个分组发送确认,代表该分组及之前所有分组均已正确接收。
5.5 TCP 报文段格式
TCP 报文段结构复杂,首部长度可变(20~60 字节),核心字段如下:
- 源端口、目的端口
- 序号:标识报文段数据的首个字节序号
- 确认号:告知发送方下一次期望接收的字节序号
- 数据偏移:标识 TCP 首部长度
- 保留位:预留未使用
- 六大标志位:URG 紧急、ACK 确认、PSH 推送、RST 复位、SYN 同步、FIN 终止
- 窗口:接收方告知发送方自身接收窗口大小,用于流量控制
- 检验和:校验首部 + 数据全部内容
- 紧急指针:配合 URG 标志,标识紧急数据长度
- 选项:可变长度,核心选项为MSS 最大报文段长度,定义 TCP 报文段数据字段的最大长度
5.6 TCP 可靠传输的实现
TCP 基于字节流、滑动窗口、超时重传、选择确认实现完整可靠传输。
5.6.1 以字节为单位的滑动窗口
TCP 滑动窗口以字节为最小单位,通过窗口滑动机制,实现连续数据传输、有序接收和差错重传,提升传输效率。
5.6.2 超时重传时间(RTO)自适应算法
- RTT 往返时间:报文段从发送到收到确认的时间差。
- 核心计算公式:
RTO = RTTs + 4 × RTTD- RTTs:加权平均往返时间
- RTTD:RTT 时间偏差加权平均值
- 关键规则:重传的报文段,不参与 RTT 采样计算,保证超时时间计算精准。
5.6.3 选择确认(SACK)
当部分字节丢失、部分字节在接收窗口内正常接收时,接收方保留已收到的乱序数据,并通过 SACK 告知发送方具体接收区间,让发送方仅重传丢失字节,避免重复传输,提升传输效率。
5.7 TCP 流量控制
5.7.1 核心目的
流量控制:限制发送方发送速率,防止发送方发送过快,导致接收方缓冲区溢出、数据丢失。
5.7.2 实现方式
基于滑动窗口机制实现,接收方通过窗口字段,实时告知发送方自身剩余接收缓冲区大小,发送方严格根据接收窗口大小调整发送量。
5.7.3 TCP 传输效率优化(Nagle 算法)
算法规则:
- 优先发送首个字节数据。
- 后续零散字节先缓存,待首个字节确认返回后,将所有缓存数据整合为一个报文段发送。
- 有效减少零散小报文传输,降低网络开销,提升传输效率。
5.8 TCP 拥塞控制
5.8.1 核心目的
拥塞控制:全局调控网络数据注入量,避免大量数据涌入网络,导致路由器、链路过载、网络拥堵瘫痪。
区别:流量控制是点对点控制,拥塞控制是全网全局性控制。
5.8.2 核心控制机制
发送方传输窗口 = 接收窗口(流量控制) & 拥塞窗口(拥塞控制)
1. 慢开始 + 拥塞避免
- 慢开始:初始拥塞窗口极小,指数增长探测网络负载,逐步增大数据发送量。
- 拥塞避免:网络无拥堵时,拥塞窗口线性缓慢增长,稳定传输,避免突发拥堵。
2. 快重传 + 快恢复
- 快重传:发送方连续收到3 个重复确认,判定为个别报文丢失(非全网拥堵),立即重传丢失报文,无需等待超时。
- 快恢复:触发快重传后,不重置拥塞窗口,小幅调整窗口大小,直接进入拥塞避免阶段,大幅提升故障恢复速度。
5.9 TCP 运输连接管理
TCP 是面向连接协议,完整通信分为三个阶段:连接建立 → 数据传送 → 连接释放
5.9.1 TCP 连接建立:三次握手
通过三次报文交互,完成双向连接建立,确认双方收发能力正常,同步初始序号。
5.9.2 TCP 连接释放:四次挥手
数据传输完毕后,通信双方可主动发起连接释放,需四次报文交互,实现双向连接断开。
5.9.3 最长报文段寿命(MSL)
MSL 定义 TCP 报文段在网络中能存在的最长时间,用于保证所有残留报文段全部消散,避免新旧连接数据混淆,保障连接释放的安全性。
