思科路由器MTU及ip tcp adjust-mss测试
一.测试拓扑:
二.基本配置:
---省略:主要是接口配置和路由配置。
三.测试步骤:
A.R3连接R4的接口设置MTU 500
R3(config)#int e0/1
R3(config-if)#ip mtu 500
R3(config-if)#do show ip int e0/1 | in MTU
MTU is 500 bytes
B.在R1上ping R4
---指定IP荷载大小为500,并且不允许分片
- R1#ping 30.1.1.4 df-bit size 500
- Type escape sequence to abort.
- Sending 5, 500-byte ICMP Echos to 30.1.1.4, timeout is 2 seconds:
- Packet sent with the DF bit set
- !!!!!
- Success rate is 100 percent (5/5), round-trip min/avg/max = 336/629/980 ms
C.在R1上ping R4
---指定IP荷载大小为501,并且不允许分片。
---ping之前先在R3路由器上运行debug ip icmp,并在R2与R1之间的接口进行抓包
- R1#ping 30.1.1.4 df-bit size 501
- Type escape sequence to abort.
- Sending 5, 501-byte ICMP Echos to 30.1.1.4, timeout is 2 seconds:
- Packet sent with the DF bit set
- M.M.M
- Success rate is 0 percent (0/5)
---可以看到这时无法ping通,此时R3上的debug信息如下:
- R3#debug ip icmp
- ICMP packet debugging is on
- *Mar 1 00:10:33.967: ICMP: dst (30.1.1.4) frag. needed and DF set unreachable sent to 10.1.1.1
- *Mar 1 00:10:35.451: ICMP: dst (30.1.1.4) frag. needed and DF set unreachable sent to 10.1.1.1
- *Mar 1 00:10:36.531: ICMP: dst (30.1.1.4) frag. needed and DF set unreachable sent to 10.1.1.1
---从wireshark的抓包,可以看到,R3给R1反馈了的type 3 code 4的icmp包:
----接口的mtu设置,只对出该接口的流量生效,对进入该接口的流量不生效。
D.修改R4上面的mss值:
---测试发现思科路由器默认发出的TCP包设定的MSS为536,2008操作系统为1260
R4(config)#ip tcp mss 1260
E.R4作为FTP客户端从PC1上下载文件:
---开始下载之前,先对R2连接R1的接口,已经R3和R4的接口进行抓包。
- R4(config)#ip ftp username xll
- R4(config)#ip ftp password 1234qwer,
- R4(config)#end
- R4#copy ftp: disk0:
- Address or name of remote host [10.1.1.10]?
- http://www.luyouqiwang.com/16553
- Source filename [sudo-1.8.9-ia64-11.31.depot.gz]?
- Destination filename [sudo-1.8.9-ia64-11.31.depot.gz]?
- Accessing ftp://10.1.1.10/sudo-1.8.9-ia64-11.31.depot.gz...
- Loading sudo-1.8.9-ia64-11.31.depot.gz !!!
---在R3上面的debug信息可以看到,在FTP传文件过程中,R2给FTP服务器端发送了type 3 code 4的icmp包。
R3#
*Mar 1 00:17:55.207: ICMP: dst (30.1.1.4) frag. needed and DF set unreachable sent to 10.1.1.10
---从抓包的两个截图可以看到,虽然在FTP数据通道建立的TCP三次握手中,客户端和服务端mss都为1260,但是当服务器将IP封包大小为1260时,会收到路由器返回的ICMP包,里面告诉了下一跳的MTU值。
---比较奇怪的是,FTP服务器(2008 R2 64位)虽然收到该icmp包,后面的封包还是大于500,并且后续的包没有设置DF位,从下面可以看到R2还是对数据包进行分片,再转给R3
R3#show ip traffic | include fragment
4121 fragmented, 8242 fragments, 7 couldn't fragment
----从R4接口的抓包可以很清楚的看到,数据进行了分片。
----调整R3的接口MTU为1000,这次正常了,服务器端发送的数据为1000,并且设置了DF位,估计是windows有一个最小的MTU设置,为556+40=596.
---调整R3的接口MTU为600,可以验证这一点,这是IP包总长度正好为600,并且设置了DF位,不像之前设置500的时候,发送数据总长度为569,并且没有设置DF位
F.在R2路由器上设置ACL,不允许来自R3的ICMP unreachable数据包进入:
----仍然保留接口MTU为600
ip access-list extended denyicmpunreach
deny icmp any any packet-too-big #####实际输入的是deny icmp any any 3 4
permit ip any any
interface Ethernet0/1
ip access-group denyicmpunreach in
G.重新进行FTP下载,并抓包:
----对应的R4上面抓包如下:
H.R3设置MTU的接口设置 ip tcp adjust-mss:
interface Ethernet0/1
ip mtu 600
ip tcp adjust-mss 560
I.重新进行下载,并在两侧进行抓包:
---对比两边抓包可以看到,虽然两边各自发出的MSS为1260,但是收到的却都是560,已经被路由器修改过。
四.测试总结:
A.路由器接口MTU影响方向:
----只是对出方向数据流有影响,因为路由器封包从这个接口出去,才会考虑接口MTU
B.路由器接口设置ip tcp adjust-mss的影响方向:
----这个是双方向的,对TCP三次握手的SYN包和SYN ACK包都会修改其MSS值。
---参考链接:
关于ip tcp adjust-mss(转):http://www.doc88.com/p-5520150200.html
错误的网络访问控制策略导致PMTUD实现故障一例: http://www.doc88.com/p-5520150200.html
思科网站:
http://www.cisco.com/en/US/tech/tk827/tk369/technologies_white_paper09186a00800d6979.shtml
http://www.cisco.com/en/US/tech/tk870/tk877/tk880/technologies_tech_note09186a008011a218