通过wireshark查看MTU_IP

 

 

通过wireshark查看MTU_重发_02

 

 

 

以太网包的长度(mtu)是1500,加上前后字节是1518,wireshark不计算后4个字节,所以是1514。这个长度是物理特性导致的,跟什么都没有关系。如果路由器,交换机接收的包超过它的mtu,我估计它会直接丢弃包。

ip逻辑单包最大长度应该是2的16次方(ip头协议长度字段是16位),只不过以太网支持不了,所以ip逻辑包要被分成最大1500字节的实际单包。所以接收方ip层收到的实际包可能是分割的,它会等待一个ip逻辑包完全接收到。ip实际包头有identification+片偏移,用来拼凑逻辑包。如果接收方不能接收完整,它会直接丢弃该实际包,ip半包攻击的原理在此。每一个ip逻辑包完全收到后,判断是什么协议包,比如tcp,则会交给tcp层处理。

tcp协议会有自动重发机制,发送端一直收不到确认包,会重发。

 

tcp在握手协议阶段,两个主机会协商mss。途径的路由器,交换机也会更改这个mss。所以tcp协议的ip包没有分包的现象。

如下的一个udp包例子,这是两个ip包,第一个包有udp层的端口号,第二个包没有。wireshark自动将ip包粘包了,不知道如何不让它粘包显示。

通过wireshark查看MTU_重发_03

 

 

进行测试mss被更改的例子如下。

mss最大为1460,但是wireshark里发现没有到这个长度的,都是1434的

通过wireshark查看MTU_重发_04

 这是为什么呢?从网上文章得知ip分包的最大值mss会被更改。

https://wenku.baidu.com/view/47561ded551810a6f524865a.html

于是找两台主机测试一下。

通过wireshark查看MTU_重发_05

 

 上面的一次连接,本方mss1460,对方要求1380。

从对方的监控看一下

通过wireshark查看MTU_重发_06

 

 对方收到封包的mss值果真被更改了。

看来经过外网的时候果真有个设备更改了mss值。

 

另外纯本地局域网测试了一下,mss值没有被更改。

通过wireshark查看MTU_IP_07

 

结论:

以太网tcp包的最大实际长度为协商好的mss+tcp头(20),最大是1480

以太网IP包实际长度为tcp包实际长度+20,最大1500

tcp包的逻辑最大长度应为2的16次方-20(ip头)

ip包的逻辑最大长度为2的16次方