第 5 章 名词库
这一页是复习主入口。 目标是把第 5 章的名词收全,并把每个词的边界和适用范围钉死。
每条最多四行:是(定义)/不是(划掉最常见的误解)/易混(成对的对手)/范围(该结论在什么条件下才成立)。
本章最容易出错的是两类:一类是序号的加减(SYN 消耗 1、FIN 消耗 1、确认号是期望的下一个字节、窗口从确认号算起);另一类是四个计时器和三个窗口(重传、持续、保活、时间等待;发送窗口、接收窗口、拥塞窗口)。章末的「高频范围限定清单」专门收前一类。
5.1 传输层提供的服务
传输层
- 是:为运行在不同主机上的进程之间提供逻辑通信;面向通信部分的最高层,用户功能中的最低层。
- 不是:不提供主机之间的通信(那是网络层);路由器没有传输层。
- 范围:即使网络层不可靠,传输层仍能提供可靠服务。
逻辑通信
- 是:对等层之间的通信好像是沿水平方向传送的,但两个对等层之间并没有一条水平方向的物理连接。
复用与分用
- 是:复用指发送方不同的应用进程都可以使用同一个传输层协议传送数据;分用指接收方的传输层在剥去报文首部后把数据正确交付到目的应用进程。
- 易混:↔ 网络层的复用分用(不同协议的数据都封装成 IP 数据报,按协议字段交付)。
- 范围:分用的依据是目的端口号(2018)。
端口
- 是:传输层的服务访问点,16 位,标识主机中的应用进程。
- 不是:不是交换机、路由器上的硬件端口;端口号只有本地意义。
- 范围:TCP 与 UDP 各有一套端口号,可以使用相同的号码。
熟知端口号
- 是:0~1023,由 IANA 指派给最重要的应用;登记端口号 1024~49151;客户端(短暂)端口号 49152~65535。
- 范围:FTP 21(数据 20)、TELNET 23、SMTP 25、DNS 53、TFTP 69、HTTP 80、SNMP 161。
套接字
- 是:(IP 地址 : 端口号),唯一标识网络中一台主机上的一个应用进程。
- 范围:一条 TCP 连接由两端的套接字唯一确定;同一端口号可出现在多条连接中。
面向连接服务
- 是:通信前先建立连接,通信中连接可被实时监控和管理,通信完毕释放连接;保证可靠和顺序交付。
- 不是:不是”效率高、时延小”——开销比无连接服务大。
无连接服务
- 是:不建立连接,直接发送;不保证可靠,也不保证有序。
5.2 UDP
UDP
- 是:用户数据报协议;无连接、不可靠;在 IP 之上只增加复用分用与差错检测。
- 范围:首部 8B;无拥塞控制;支持一对一、一对多、多对一、多对多;DNS、TFTP、SNMP、RTP、DHCP、RIP 使用它。
面向报文
- 是:UDP 对应用层报文既不合并也不拆分,保留报文边界,一次交付一个完整报文。
- 易混:↔ TCP 的面向字节流。
- 范围:报文太长会导致 IP 分片,太短会使首部相对开销大。
UDP 首部
- 是:4 个字段各 2B——源端口(不需要回信时可全 0)、目的端口、长度(含首部,最小 8)、检验和(可选,不计算时全 0)。
- 不是:没有”首部长度”字段(固定 8B)。
伪首部
- 是:12B,含源 IP、目的 IP、全 0、协议号(UDP 为 17、TCP 为 6)、UDP/TCP 长度;只为计算检验和临时添加。
- 不是:既不向下传送,也不向上递交;不计入 UDP 长度字段。
- 范围:因为它,检验和能检查出投错主机的数据报。
二进制反码求和
- 是:16 位字逐个相加,最高位进位回卷到最低位加 1,最后取反得检验和(2024)。
- 范围:接收方把包括检验和在内的各字相加,结果全 1 表示无差错。
5.3 TCP
TCP
- 是:面向连接、可靠、全双工、面向字节流的传输层协议;一条连接只有两个端点,只能一对一。
- 不是:不提供广播和多播。
- 范围:报文段长度由接收方窗口和网络拥塞程度决定。
面向字节流
- 是:TCP 把应用程序交下来的数据视为一连串无结构的字节流,按字节编号。
- 范围:应用交互是一次一个数据块,TCP 可拆可合。
TCP 报文段
- 是:TCP 传送的数据单元;首部固定 20B,加选项最长 60B。
- 范围:整个报文段作为 IP 数据报的数据部分。
序号
- 是:4B,本报文段所发送数据的第一个字节的序号;按字节编号,共
个。 - 不是:不是报文段的编号。
确认号
- 是:4B,期望收到对方下一个报文段的第一个数据字节的序号;确认号为
表示到 为止都已正确收到。 - 易混:↔ 链路层 GBN 的 ACK
(表示 号及之前都收到),两者差 1。
数据偏移
- 是:4 位,TCP 首部长度,以 4B 为单位,最大 60B。
- 不是:不是 IP 分片的片偏移(那个以 8B 为单位)。
标志位
- 是:URG(紧急指针有效)、ACK(确认号有效)、PSH(尽快交付)、RST(严重差错,释放并重建)、SYN(连接请求/接受)、FIN(释放连接)。
- 范围:连接建立后所有报文段的 ACK 都必须置 1。
窗口字段
- 是:2B,从本报文段的确认号算起,接收方允许对方发送的数据量(字节)。
MSS
- 是:最大报文段长度,TCP 报文段中数据字段的最大长度,在三次握手时由双方通告并取较小值。
- 不是:不是报文段总长度,也不是 MTU。
- 范围:TCP 按 MSS 分割数据发送,重传也以此为单位。
三次握手
- 是:SYN=1,seq=
→ SYN=1,ACK=1,seq= ,ack= → ACK=1,seq= ,ack= 。 - 范围:SYN 报文段不能携带数据但消耗一个序号;第三次握手可以携带数据,不携带则不消耗序号。
四次挥手
- 是:FIN=1,seq=
→ ACK=1,ack= → FIN=1,ACK=1,seq= ,ack= → ACK=1,seq= ,ack= 。 - 范围:FIN 即使不携带数据也消耗一个序号;被动关闭方在半关闭期间仍可发送数据。
半关闭
- 是:一方发送 FIN 并收到确认后,它到对方的方向已关闭,但对方到它的方向仍可传送数据。
TIME-WAIT 与 2MSL
- 是:主动关闭方发出最后一个 ACK 后进入 TIME-WAIT,等待 2MSL 才进入 CLOSED。
- 范围:主动关闭方释放连接的最短时间为 1RTT + 2MSL,被动关闭方为 1.5RTT。
TCP 的四种计时器
- 是:重传计时器(超时重传)、持续计时器(零窗口探测)、保活计时器(对方是否故障)、时间等待计时器(TIME-WAIT 的 2MSL)。
累积确认
- 是:只确认数据流中至第一个丢失字节为止的字节;接收方可捎带确认。
- 范围:缺口之后已收到的字节不会被确认号越过。
冗余 ACK
- 是:对同一个报文段的重复确认;比期望序号大的失序报文段每到达一个,就发一个冗余 ACK。
- 范围:收到 3 个冗余 ACK 即执行快重传(2019)。
超时重传时间
- 是:RTO,应略大于加权平均往返时间 RTTS。
- 易混:↔ RTT(一个报文段发出到收到确认的时间)。
接收窗口
- 是:rwnd,接收方根据接收缓存大小动态调整,通过窗口字段通知发送方。
拥塞窗口
- 是:cwnd,发送方根据网络拥塞程度维护的窗口。
- 不是:不是接收方通知的。
- 范围:发送窗口上限 = min(rwnd, cwnd)。
持续计时器与零窗口探测
- 是:收到零窗口通知就启动持续计时器,超时发送零窗口探测报文段,对方在确认中给出当前窗口值。
慢开始
- 是:cwnd 从 1 个 MSS 开始,每收到一个新报文段的确认加 1,即每个 RTT 加倍。
- 不是:“慢”不是指增长慢,而是指一开始注入的报文段少。
- 范围:加倍后若超过 ssthresh,则取 ssthresh。
拥塞避免
- 是:每个 RTT 把 cwnd 加 1(加法增大)。
- 不是:不能完全避免拥塞。
慢开始门限
- 是:ssthresh;cwnd < ssthresh 用慢开始,cwnd > ssthresh 用拥塞避免。
- 范围:出现拥塞时设为当时 cwnd 的一半(不小于 2),不是旧门限的一半。
快重传
- 是:收到 3 个冗余 ACK 就立即重传相应报文段,不等超时(2019)。
快恢复
- 是:收到 3 个冗余 ACK 时,ssthresh = cwnd/2,cwnd 也设为 ssthresh,然后执行拥塞避免。
- 易混:↔ 超时(ssthresh = cwnd/2,cwnd = 1,执行慢开始)。
高频范围限定清单
| 结论 | 成立的条件,或容易被抽掉的限定 |
|---|---|
| 端口号只有本地意义 | 不同主机的相同端口号无关;TCP 与 UDP 各一套,可同号 |
| 熟知端口 0~1023 | 客户端短暂端口 49152~65535(教材口径) |
| 套接字唯一标识一个进程 | IP 地址 + 端口号;一条 TCP 连接要两个套接字 |
| 面向连接保证可靠有序 | 但开销大、效率低于无连接 |
| UDP 长度字段 | 含首部,最小 8;不含伪首部 |
| 伪首部 12B | 只参与检验和计算,不发送、不上交 |
| UDP 检验和可选 | 不计算填全 0;计算结果为 0 则填全 1 |
| UDP 出错的处理 | 丢弃,或交付上层并附错误报告(教材口径) |
| UDP 保障可靠传输 | ❌ 只检错不重传,可靠性由应用层实现(2014) |
| TCP 首部 20B | 最长 60B;数据偏移以 4B 为单位 |
| 确认号 | 表示到 |
| SYN、FIN | 即使不带数据也各消耗一个序号;纯 ACK 不消耗 |
| 第三次握手 | 可以携带数据;不携带则下一个数据段序号仍为 |
| 已发送数据字节数 | FIN 序号 − SYN 序号 − 1(无重传时) |
| 被动关闭方的 FIN 序号 | 不一定等于上一个 ACK 的序号,半关闭期间可能又发了数据 |
| 释放连接的最短时间 | 主动方 1RTT + 2MSL,被动方 1.5RTT |
| 窗口字段的起点 | 从确认号算起,不是从已发送数据的末尾 |
| 还能发送的字节数 | min(rwnd, cwnd) − 已发送未确认的 |
| 零窗口 | 仍可发送零窗口探测报文段和紧急数据 |
| 重传的数据量 | ≤ 发送窗口 |
| 快重传的触发 | 3 个冗余 ACK(即对同一序号共收到 4 个 ACK) |
| 超时后的 cwnd | ssthresh = 当时 cwnd 的一半,cwnd = 1 |
| 3 个冗余 ACK 后的 cwnd | ssthresh = 当时 cwnd 的一半,cwnd = ssthresh |
| 慢开始阶段加倍 | 若 |
| cwnd 的增加时刻 | 都发生在收到确认之后 |
| 32 位序号绕回 | 按字节计;40Gb/s 下约 859ms |
| TCP 分割数据的单位 | MSS(不是字节、不是 MTU) |
| 流量控制 vs 拥塞控制 | 前者接收方决定、端到端;后者发送方检测网络、全局性 |
链接
- 🏠 章总览:计算机网络第 5 章:传输层总览
- 📐 TCP 窗口与拥塞控制公式表
- 📋 常用报文字段、协议号与端口速查表
- 🔗 第 3 章名词库 · 第 4 章名词库