报文(packet)= 数据包
是一种相对宽泛和通用的说法,基本上每一层都可以用
HTTP 报文
TCP 报文
IP 报文
帧(frame)
帧(frame)是二层也就是数据链路层的概念,代表了二层报文,它包含帧头、载荷、帧尾。
💡帧是有尾部的.
其他像 IP、TCP、HTTP 等层级的报文,都没有尾部.
我们不可以说“TCP 帧”或者“IP 帧”,虽然也许对方也明白你的意思,但我们都想做得专业一点,不是嘛。这里还有个小知识点:HTTP/2 实现了多路复用,其中也有帧的概念,不过那个帧,跟这里网络二层的帧,除了名称相同以外,就没有别的联系了。
分组
分组是 IP 层报文,也就是狭义的 packet。
段
特指 TCP segment。既然 segment 是“部分”的意思,那这个“整体”又是什么呢?它就是在应用层交付给传输层的消息(message)。
当 message 被交付给传输层时,如果这个 message 的原始尺寸,超出了传输层数据单元的限制(比如超出了 TCP 的 MSS),它就会被划分为多个 segment。这个过程就是分段(segmentation),也是 TCP 层的一个很重要的职责
📝 分段与分片
说到 segmentation,你可能也会想到 fragmentation(分片)。这俩是同一个东西吗?
数据报
🚨数据包 ≠ 数据报
Datagram ⊆ Packed
Datagram 的中文叫“数据报”,但不是“数据包”。读音类似,但意思并不完全相同。前面说过,“数据包”是一个通用词,所以用“UDP 数据包”指代“UDP 数据报”并没有问题。但反过来,非 UDP 协议的数据包,比如 TCP 段,就不能叫“TCP 数据报”了,因为 TCP 不是 Datagram。