目录
个人主页:东洛的克莱斯韦克-CSDN博客
相关文章:【网络】从零认识IPv4-CSDN博客
MTU值
由于物理层的硬件限制,为了使网络性能最优,在数据链路层会有一个MTU值,表示数据链路的最大传输单元。
而不同数据链路的MUT的值可能不同。如下表格
数据链路协议 | MTU(字节) | 总长度(字节,包含FCS) |
---|---|---|
Hyperchannel | 65535 | 65535 |
IP over HIPPI | 65280 | 65320 |
16Mbps IBM Token Ring | 17914 | 17958 |
IP over ATM | 9180 | - |
IEEE 802.4 Token Bus | 8166 | 8191 |
IEEE 802.5 Token Ring | 4464 | 4508 |
FDDI | 4352 | 4500 |
以太网 | 1500 | 1518 |
PPP (Default) | 1500 | - |
IEEE 802.3 Ethernet | 1492 | 1518 |
PPPoE | 1492 | - |
X.25 | 576 | - |
IP协议的统一性抹平了数据链路层的差异,如果上层交付给网络层(IP层)的数据包过大,就需要把数据包分开发送,这称为IP分片。
IP分片与重组
由于数据链路层的协议可能不同,数据包不止再本主机会被分片,也可能会被其他路由器再分片。被分片的一般都是UDP的数据包,UDP协议是面向数据报的,UDP向下交付数据时可能会很大。而TCP协议是面向连接和字节流的,在三次握手是就协商好了MTU值,向下交付的数据一般不需要IP层进行分片。
路径MTU发现
随着时代的变迁,计算机网络的物理传输速度不断上升。这些高速的链路,对路由器和计算机网络,提出了更高的要求。另一方面,随着人们对网络安全的要求提高,路由器需要做的其他处理也越来越多,如网络过滤等。因此是不希望由路由器进行IP数据包的分片处理的。
其次,在分片处理中,一旦某个分片丢失,则会造成整个IP数据报作废。为,了避免此类问题,TCP的初期设计还曾使用过更小的分片进行传输。其结果是,网路的利用率明显下降。为了应对以上问题,产生了一种新的技术"路径MTU发现"(PathMTUDis-,covery)。
所谓路径MTU(PathMTU)是指从发送端主机到接收端主机之间不需,要分片时最大MTU的大小。即路径中存在的所有数据链路中最小的MTU。而路径MTU发现从发送主机按照路径MTU的大小将数据报分片后进行发送。进行路径MTU发现,就可以避免在中途的路由器上进行分片处理,也可以在TCP中发送更大的包。现在,很多操作系统都已经实现了路径MTU发现的功能。
路径MTU发现原理
首先在发送端主机发送IP数据报时将其首部的分片禁止标志位设置为1(IP层报头的标志位)。根据这个标志位,途中的路由器即使遇到需要分片才能处理的大包,也不会去分片,而是将包丢弃。
随后,通过一个ICMP的不可达消息将数据链路上MTU的值给发送主机。,下一次,从发送给同一个目标主机的IP数据报获得ICMP所通知的MTU值以后,将它设置为当前MTU。发送主机根据这个MTU对数据报进行分片处理。如此反复,直到数据报被发送到目标主机为止没有再收到任ICMP,就认为最后一次ICMP所通知的MTU即是一个合适的MTU值。
那么,当MTU的值比较多时,,最少可以缓存约10分钟。在这10分钟内使用刚刚求得的MTU,但过了这10分钟以后则重新根据链路上的MTU做一次路径MTU发现。