频道栏目
首页 > 资讯 > 网络协议 > 正文

【TCP/IP】知识学习之IP分片

18-05-26        来源:[db:作者]  
收藏   我要投稿

IP分片

IP把MTU与数据报长度进行比较,如果需要则进行分片。分片可以发送在原始发送端主机上,也可以发送在中间路由器时。把一份IP数据报分片以后,只有到达目的地才进行重新组装,重新组装是由目的端的IP层来完成的,其目的是使分片和重新组装过程对传输层是透明的,已经分片过的数据报可以再次进行分片。

标识位:每个IP数据报都有唯一的标识符,通常多发一个包这个标识就+1(操作系统不一样可能也不一样),由这个数据报可能产生了很多分片,但是每个分片的标识位都是一样的,当抵达最终目的地时,网络层会根据标识位相同的数据包进行重组,然后交给传输层,这时对两端的传输层来说,它们是不知道数据报有没有被分片过(透明的),只知道完整的收到了对端的数据。

CU:没有使用

DF:分片(0)或者不分片(1),如果对DF设置值为1,而且数据报的大小又大于路径MTU,那么中间的路由器会把数据报给丢到,并发送一个ICMP差错报文“需要分片,但是设置了DF位”

MF:标识该分片是不是数据报的最后一片,1表示不是最后一片,0表示是最后一片

片偏移:指出较长的分钟再分片后,某片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。也就是说,每个分片的长度一定是8字节(64位)的整数倍。

例子:一数据报的总长度为3820字节,其数据部分为3800字节长(使用固定首部),需要分片为长度不超过1420字节的数据报片。因固定首部长度为20字节,因此每个数据报片的数据部分长度不能超过1400字节。于是分成3个数据报片,其数据部分的长度分别分为1400,1400和1000字节。原始数据报首部被复制为各数据报片的首部,但必须修改有关字段的值。

当IP数据报被分片后,每一片都成为一个分组,具有自己的IP首部,并在选择路由时与其他分组独立,当数据报的这些片到达目的端时有可能会失序,但是在IP首部中有足够的信息让接收端能正确组装这些数据分片,传输过程中,哪怕丢失一片数据也要重传整个数据报。IP本身没有超时重传的机制,由更高层的TCP来完成,一些UDP应用程序也具有超时和重传。

在分片时,除最后一片外,其他每一片中的数据部(除IP首部外的其余部分)必须是8字节的整数倍。只有第一个分片携带四层信息,IP数据报(从传输层给网络层,由网络层发下来的数据叫数据报)是指IP层端到端的传输单元(分片之前和重组之后),分组(在网络中传输的叫分组)是指IP层和链路层之间传送的数据单元。一个分组可以是一个完整的IP数据报,也可以是IP数据报的一个分片。

ICMP不可达差错(需要分片):

在出接口查MTU

当路由器收到一份需要分片的数据报,而在IP首部又设置了不分片(DF)的标志比特,路由器就会返回一个ICMP不可达信息。

Ping的时候DF置为(echo设置DF位,echo-reply也会设置DF位),A去B的时候可能数据报大小小于MTU,但是回来的时候却大于MTU,这时A就会显示超时,不会收到ICMP不可达信息,而是由B收到ICMP不可达信息。

MTU发现机制,在IPsec VPN中,要防止IP分片,因为有分片的话会严重影响效率,所以两台路由器都会做一个 path MTU发现技术,发送一个数据报为1500字节的IP数据报,并且DF置1。如果中间路由器MTU比1500小,就会对源端发送一个ICMP不可达信息,在这个ICMP不可达信息中,携带此路由器的最大MTU值,这时源端主机收到后修改数据报大小继续发送,如果中间路由器还有跟小的,又会向源发送一个ICMP不可达信息,源端主机再次修改,如此重复,只到到达目的地,就知道单向路径MTU的最小值了。

相关TAG标签
上一篇:怎么用shell同时执行多个scrapy命令?
下一篇:Centos7 add delete Swap exchange partitions 说明与学习
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站