这些数据包如何知道大小?

网络工程 IPv4 tcp mtu
2022-02-16 12:28:29

源和目标之间的最小 MTU 是 600。我不明白的是 TCP 如何知道最多只包含 548 个字节,这样 TCP 和 IP 开销就不会超过 600。MTU 路径发现已启用,我了解它是如何工作的,但我不了解 TCP 是如何使用它的,因为在初始握手之前没有网络活动。我的来源是否有可能基于以前的活动以某种方式缓存了这些信息?TCP如何知道数据报有多大?

2个回答

简单来说,是的,系统会缓存该信息。[路由缓存、FIB 等]

如果您了解 PMTUd 的工作原理,您就会知道一旦流量流动,最大分段大小是如何确定的。几乎每个现代网络堆栈都实现了路由缓存。与每个数据包的完整路由表查找相比,这是一种查找路径更快的方法。缓存中包含主路由表中通常不存在的参数。一对主机之间的最大段大小只有一个。

例如:

debian1:~/[11:29 PM]:ip route show table cache [A]
[A] from [B] via [B gw] dev eth0 
    cache  expires 543sec mtu 1444 rtt 615ms rttvar 610ms cwnd 35 advmss 1460 hoplimit 64

通过 IPSec 隧道,必须降低 MTU。在我要求比“1500”数据包更大的东西之前,缓存条目仍然是mtu 1500

TCP不知道。中间的路由器将根据需要对 IPv4 数据包进行分段。TCP 段是 IPv4 数据包的有效负载。

RFC 791,INTERNET PROTOCOL详细介绍了分段过程,以及终端设备在收到数据包时需要做什么来对数据包进行碎片整理。IPv4 标头具有促进分段/碎片整理过程的字段。

1.1。动机

互联网协议设计用于分组交换计算机通信网络的互连系统。这样的系统被称为“catenet”[ 1 ]。互联网协议提供从源到目的地传输称为数据报的数据块,其中源和目的地是由固定长度地址标识的主机。互联网协议还提供了 长数据报的分段和重组,如有必要,通过“小包”网络进行传输。

1.4. 手术

互联网协议实现了两个基本功能:寻址和 分片