2647 字
13 分钟
网络学习(四):从协议分层到 TCP 握手,再到 MTU 与 MSS

1. 同一个请求,为什么会有好几种地址#

前面已经整理了地址与 DNS和子网划分。但抓包时,除了 IP 和 MAC,还会看到端口、序列号、协议号和各种长度。

这一篇把第五天的分层模型、第七天的传输层,以及第八天的可靠性、MTU 和 MSS 放在一起理解。

先抓住一条主线:应用产生数据,每一层加上完成自己工作所需的信息,接收方再逐层处理。

2. OSI 七层与 TCP/IP 模型#

OSI 层次可以先这样理解TCP/IP 四层模型中的位置
应用层应用使用的通信协议与服务应用层
表示层数据表示、编码等功能应用层
会话层会话建立、维持等功能应用层
传输层端到端传输,区分应用端点传输层
网络层逻辑寻址与跨网络转发网际层
数据链路层本地链路上的帧交付网络接口层
物理层传输电信号、光信号等网络接口层

教材还常把 TCP/IP 的网络接口层拆成数据链路层和物理层,得到便于教学的五层表示。模型有不同划分方式,不意味着同一个数据包真的走了两套网络。

OSI 更适合用来划分职责,实际协议的功能也未必严格落在单独一格里。

3. 封装:每一层关心不同的问题#

以 IPv4 以太网上的普通 HTTP/1.1 请求为例:

应用数据
↓ 加 TCP 首部
TCP 段:源端口、目的端口、序列号等
↓ 加 IPv4 首部
IP 包:源 IP、目的 IP、TTL 等
↓ 加以太网首部与帧校验信息
以太网帧:源 MAC、目的 MAC、Type、FCS 等
↓ 物理层发送
信号 / 比特流

PDU 是“协议数据单元”的统称。入门时常把 TCP 的 PDU 叫段,UDP 的叫数据报,网络层的叫包,数据链路层的叫帧。

3.1 三种“交给谁”#

字段接收方用它判断什么
以太网 Type帧中承载的是 IPv4、ARP 还是其他协议
IPv4 Protocol上层是 TCP(6)、UDP(17)还是其他协议
TCP/UDP 目的端口交给本机的哪个传输层端点

协议号 6 不是 TCP 端口 6。不同层的字段要分开理解。

以太网 FCS 使用 CRC 检测传输错误,它不是加密,也不是“没有 FCS 错误就一定安全”。另外,抓包能否显示 FCS,取决于网卡、驱动和抓包位置。

4. 端口把通信交给具体应用#

TCP 和 UDP 的端口字段都是 16 位,取值范围为 0~65535。其中 0 是保留端口,不能把完整范围简单写成 1~65535。

按 IANA 端口登记表的分类,系统端口为 0~1023、用户端口为 1024~49151、动态或私有端口为 49152~65535。客户端临时端口的实际分配范围仍取决于操作系统。

服务常见端口本文需要记住的边界
HTTPTCP 80常见 HTTP/1.1 默认端口
HTTPS443常见 HTTP/1.1、HTTP/2 使用 TCP;HTTP/3 使用 QUIC/UDP
DNSUDP/TCP 53不能认为 DNS 只使用 UDP
FTPTCP 21、2021 用于控制;20 是传统主动模式的服务器数据端口
TFTPUDP 69初始请求端口,后续传输使用选定的传输标识端口
DHCPv4UDP 67、68服务器 67,客户端 68
TelnetTCP 23远程终端协议
SSHTCP 22加密远程登录协议

这些都是常见约定,服务也可以配置其他端口。FTP 被动模式更不是固定用 20 传数据。

假设客户端用本地端口 51000 访问服务器的 80 端口,返回时源、目的端口方向相反。连接识别还要结合双方 IP 和传输协议,而不只看一个端口数字。

5. TCP 与 UDP 的区别,不能只背“快”和“慢”#

对比项TCPUDP
通信方式面向连接无连接数据报
数据组织字节流,不保留应用消息边界保留数据报边界
有序可靠交付协议提供确认、重传、排序等机制协议自身不提供这些保证
流量控制有协议自身没有
拥塞控制有相应机制协议自身没有,应用需按需实现
基本首部长度最少 20 字节,可带选项固定 8 字节

TCP 的可靠性并不保证对方业务已经处理成功。连接失败时,应用仍要处理错误;支付、文件保存等业务还需要自己的确认机制。

UDP 本身没有 TCP 式的重传与排序,但运行在 UDP 上的应用或协议可以提供这些能力。不能从“底层是 UDP”直接推出“业务一定不可靠”。

同样,“TCP 一定慢,UDP 一定快”也不成立。性能还取决于网络条件、实现和应用需求。

6. 三次握手在确认什么#

以下是不携带应用数据的简化过程:

客户端 A 服务器 B
│ │
│── SYN,seq=x ────────────────────────>│
│<─ SYN+ACK,seq=y,ack=x+1 ────────────│
│── ACK,seq=x+1,ack=y+1 ─────────────>│
│ │

双方分别提出自己的初始序列号,再确认对方的序列号。SYN 本身占用一个序列号,因此确认值会加 1。

这里 ACK 标志表示确认字段有效,ack 的数值表示期望收到的下一个字节序号,两者不要混为一谈。

6.1 为什么 TCP 叫字节流#

假设接下来发送 100 字节,起始序列号为 1001;接收方收到完整连续数据后,确认号可以是 1101。

应用连续两次写入数据,并不意味着接收方一定通过两次读取分别取回。TCP 负责有序字节流,消息边界需要应用协议自己定义。

例如,HTTP 可以通过首部和消息长度等规则区分内容;自定义协议也可以使用长度字段或明确分隔符。

7. 确认、重传和窗口怎样配合#

课堂把可靠性拆成确认、重传、排序和流控,可以对应到几个具体问题:

  • 对方收到哪里了?看确认号。
  • 数据可能丢了怎么办?通过超时或其他丢包检测机制触发重传。
  • 到达顺序乱了怎么办?依据序列号组织字节流。
  • 对方来不及接收怎么办?受接收窗口约束。

滑动窗口让发送方在等待确认时继续发送一定数量的数据,而不必每发一小段就完全停下来。

同时,接收窗口关注接收方的处理能力,拥塞窗口关注网络中的拥塞情况。可发送的数据还要考虑已经发出但尚未确认的部分,不能把“窗口”理解成随便发送的固定包数。

7.1 连接关闭为什么常画成四次挥手#

A B
│── FIN ─────────────────>│ A 不再发送
│<─ ACK ──────────────────│ B 确认
│<─ FIN ──────────────────│ B 也不再发送
│── ACK ─────────────────>│ A 确认

TCP 的两个方向可以分别关闭,B 确认收到 A 的 FIN 时,可能还要继续发送剩余数据。

这是一张典型示意图,不是“关闭连接必须恰好四个包”的规定。确认与 FIN 可能合并,异常连接也可能通过 RST 终止。上述 TCP 机制可进一步对照 RFC 9293。

8. TTL 限制的是 IP 包继续转发的寿命#

路由器转发 IPv4 包时会减少 TTL。若剩余值不足以继续转发,包会被丢弃,并可能返回 ICMP Time Exceeded。

普通二层交换不会像三层转发一样减少 IP TTL。

如果 Ping 回复显示 ttl=127,在已知回复初始 TTL 为 128 的前提下,可以推测回复经过了一次三层转发。但不能仅凭 127 确定对方操作系统,也不能忽略回程路径与去程可能不同。

9. MTU 与 MSS:先问限制的是哪一层#

普通以太网常见 IP MTU 是 1500 字节,表示链路能够承载的 IP 包大小上限。它包含 IP 首部,不包含外层以太网首部和 FCS。

MSS 讨论的是一个 TCP 段中的数据部分大小。

在没有 IP/TCP 选项、没有额外隧道开销的 IPv4 示例里:

IP MTU 1500
- IPv4 首部 20
- TCP 首部 20
= TCP 数据 1460 字节

所以 1460 是有条件的常见值,不是 TCP 的固定常量。IPv6 首部、隧道、路径中的较小 MTU,以及实际选项开销,都可能影响可承载的数据量。

IMPORTANT

MSS 选项表示发送该 SYN 的一端能够接收的最大 TCP 数据段大小。双方分别通告,约束的是对方发来的数据;实际发送大小还要考虑路径限制等条件。它不是简单地让双向通信共同选定一个最小值。参见 RFC 9293 的 MSS 定义。

10. TCP 分段与 IP 分片要分开#

TCP 可以把应用字节流组织成多个段。IP 分片则处理一个 IP 包超过相应链路承载能力的问题,发生的层次不同。

IPv4 分片相关字段包括:

字段作用
Identification同一原始数据报的分片使用相同标识,接收方还要结合源、目的地址和协议等信息重组
DFDon’t Fragment,不允许分片
MFMore Fragments,后面是否还有分片
Fragment Offset分片在原始数据中的位置,以 8 字节为单位

IPv4 包过大且允许分片时,路由器可能进行分片;如果设置 DF 而链路又放不下,则需要丢弃并按条件返回 ICMP 通知。IPv6 路由器不会替源主机分片。

UDP 没有 TCP 那样的流式分段机制,但承载 UDP 的 IP 包仍可能发生 IPv4 分片。因此“UDP 不分段”不等于“UDP 的 IP 包绝不会分片”。

11. 抓包时按层找证据#

在 eNSP 中复用已经建立的客户端、服务器拓扑,可以尝试这些 Wireshark 显示过滤器:

tcp.flags.syn == 1
tcp.flags.fin == 1
tcp.analysis.retransmission
ip.flags.mf == 1 || ip.frag_offset > 0

查看握手时的 MSS 选项、TCP 序列号与确认号、IP TTL 和包长,再对照外层 MAC。

过滤器只能帮助定位现象。没有捕获到重传或分片并不意味着实验失败;如果没有制造对应条件,正常通信本来就可能看不到它们。

下一篇:VRP 设备管理、远程登录与配置保存。

网络学习(四):从协议分层到 TCP 握手,再到 MTU 与 MSS
https://bbcslook.top/posts/networklearning/hcia-04-tcpip-tcp-mtu/
作者
BBCSLOOK
发布于
2026-10-14
许可协议
CC BY-NC-SA 4.0

评论区

CC