TCP的路径MTU发现问题( 五 )


ack1523306221win16384
22:33:32.310307A1>B:.ack1win8760(DF)
22:33:32.323496A1>B:P1:1461(1460)ack1win8760(DF)
22:33:32.323569C>A1:icmp:129.99.238.5unreachable-
needtofrag(mtu1024)(DF)(ttl255,id20666)
22:33:32.783694A1>B:.1:985(984)ack1win8856(DF)
22:33:32.840817B>A1:.ack985win16384
22:33:32.845651A1>B:.1461:2445(984)ack1win8856(DF)
22:33:32.846094B>A1:.ack985win16384
22:33:33.724392A1>B:.985:1969(984)ack1win8856(DF)
22:33:33.724893B>A1:.ack2445win14924
22:33:33.728591A1>B:.2445:2921(476)ack1win8856(DF)
22:33:33.729161A1>B:.ack1win8856(DF)
22:33:33.840758B>A1:.ack2921win16384
[...]
22:33:34.238659A1>B:F7301:8193(892)ack1win8856(DF)
22:33:34.239036B>A1:.ack8194win15492
22:33:34.239303B>A1:F1:1(0)ack8194win16384
22:33:34.242971A1>B:.ack2win8856(DF)
22:33:34.454218A2>B:S1523591299:1523591299(0)
win8856(DF)
22:33:34.454617B>A2:S732408874:732408874(0)
ack1523591300win16384
22:33:34.457516A2>B:.ack1win8856(DF)
22:33:34.470683A2>B:P1:985(984)ack1win8856(DF)
22:33:34.471144B>A2:.ack985win16384
22:33:34.476554A2>B:.985:1969(984)ack1win8856(DF)
22:33:34.477580A2>B:P1969:2953(984)ack1win8856(DF)
[...]
注重会话A2的SYN包定义了MSS为984 。
解释什么是正确处理的输出文件
和前面一样,输出文件是在中间主机上用tcpdump记录 。主机A初始化两条到主机B的单独
的连接A1和A2 。路由器是在MTU瓶颈位置 。TCP选项照常从所有非SYN包中移走 。
22:36:58.828602A1>B:S3402991286:3402991286(0)win32768
echo1123370309>(DF)
22:36:58.844040B>A1:S946999880:946999880(0)
ack3402991287win16384

22:36:58.848058A1>B:.ack1win32768(DF)
22:36:58.851514A1>B:P1:1025(1024)ack1win32768(DF)
22:36:58.851584C>A1:icmp:129.99.238.5unreachable-
needtofrag(mtu1024)(DF)
22:36:58.855885A1>B:.1:969(968)ack1win32768(DF)
22:36:58.856378A1>B:.969:985(16)ack1win32768(DF)
22:36:59.036309B>A1:.ack985win16384
22:36:59.039255A1>B:FP985:1025(40)ack1win32768(DF)
22:36:59.039623B>A1:.ack1026win16344
22:36:59.039828B>A1:F1:1(0)ack1026win16384
22:36:59.043037A1>B:.ack2win32768(DF)
22:37:01.436032A2>B:S3404812097:3404812097(0)win32768
echo1123372916>(DF)
22:37:01.436424B>A2:S949814769:949814769(0)
ack3404812098win16384

22:37:01.440147A2>B:.ack1win32768(DF)
22:37:01.442736A2>B:.1:969(968)ack1win32768(DF)
22:37:01.442894A2>B:P969:985(16)ack1win32768(DF)
22:37:01.443283B>A2:.ack985win16384
22:37:01.446068A2>B:P985:1025(40)ack1win32768(DF)
22:37:01.446519B>A2:.ack1025win16384
22:37:01.448465A2>B:F1025:1025(0)ack1win32768(DF)
22:37:01.448837B>A2:.ack1026win16384
22:37:01.449007B>A2:F1:1(0)ack1026win16384
22:37:01.452201A2>B:.ack2win32768(DF)
注重会话A1和A2使用同样的MSS 。
如何检测
可以通过追踪两个单独连接的包来检测;第一个应该激活PMTUD;在第一个之后第二个
应该在PMTU值未超时前尽快启动 。
如何修改
如[RFC1122]和[RFC1191]中指出的,MSS应该基于系统接口的MTU来设置 。
3安全考虑
本备忘录指出的第一个安全考虑是,ICMP黑洞经常由于过于热心于安全的治理员阻塞所有
ICMP消息引起 。那些设计和配置安全系统的人理解严格过滤上层协议的影响是至关重要
的 。若大多数TCP实现无法从中传输数据的话,世界上最安全的web站点也就没有任何价
值 。修复所有黑洞要比修复所有TCP实现要好得多 。
4致谢
感谢MarkAllman,VernPaxson,和JamshidMahdavi慷慨的帮助审阅了文档,感谢