TCP 路径 MTU 发现
TCP路径MTU发现协议选项在 AIX® 中默认启用。该选项允许协议栈确定当前位于两个主机之间路径上的任何网络的最小MTU大小,并由 tcp_pmtu_discover=1控制。
TCP 路径 MTU 发现的实现使用连接本身的 TCP 信息包,而不是 ICMP ECHO 消息。 TCP/IP 内核扩展保留一个名为 PMTU 的表,以存储相关的 PMTU 发现信息。 当与每个目标建立 TCP 连接时,在 PMTU 表中将创建该目标的条目。 PMTU 值就是流出的接口 MTU 值。
TCP 信息包在发送时 IP 报头中带有 Don't Fragment 或者 DF 位设置。 如果 TCP 信息包到达一个网络路由器,且该路由器的 MTU 值小于 TCP 信息包的大小,那么路由器将发送回一条 ICMP 错误消息,指出无法转发消息,因为消息无法分段。 如果发送错误消息的路由器符合 RFC 1191,那么网络的 MTU 值就包含在 ICMP 错误消息中。 否则,对于要重新传输的 TCP 包,必须从 AIX TCP/IP 内核扩展中的已知 MTU 值表分配较小的 MTU 大小值。 然后 PMTU 表中的目标 PMTU 值将更新为新的较小的 MTU 大小,然后重新发送 TCP 信息包。 到该目标的任何后续 TCP 连接都将使用更新的 PMTU 值。
# pmtu display
dst gw If pmtu refcnt redisc_t exp
-------------------------------------------------------------------------
10.10.1.3 10.10.1.5 en1 1500 2 9 0
10.10.2.5 10.10.2.33 en0 1500 1 0 0
未使用的 PMTU 条目(即值为 0 的 refcnt 条目)将被删除,以防止 PMTU 表变得太大。 未使用的条目将在 refcnt 值等于 0 后的 pmtu_expire 分钟内删除。 pmtu_expire 网络选项的缺省值为 10 分钟。 要防止 PMTU 条目到期,您可以将 pmtu_expire 值设置为 0。
对于该 TCP 路径 MTU 发现的实现,路由克隆是不必要的,这意味着路由表更小且更便于管理。