`
edgar108
  • 浏览: 32478 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

IP分片

阅读更多

       当Ip数据报的长度超过贞的MTU时,将被分片传输。IP头部中的三个字段给IP的分片和重组提供了足够的信息:数据报标识,标志和片偏移。一个IP数据报的每个分片都具有自己的IP头部,它们具有相同的标识值,但具有不同的片偏移,并且除了最后的一个分片外,其他分片都将设置MF标志,此外,每个分片的IP头部的总长度字段将被设置为该片的长度。

      以太网帧的MTU是1500字节,因此它携带的IP数据报的数据部分最多是1480字节(IP头部占用20字节)。考虑用IP数据报封装一个长度为1481字节的ICMP报文(包括8字节的ICMP头部,所以其数据部分长度为1473字节),则该数据报在使用以太网帧传输时必须被分片。

例如,长度为1501字节的IP数据报,会被拆成2个IP分片,第一个IP分片为1500字节,第二个IP分片长度为21字节。每个IP分片都包含自己的IP头部(20字节),且第一个IP分片的IP头部设置了MF标志,而第二个IP分片的IP头部没有设置MF标志,因为是最后一个分片。原始IP数据报的ICMP头部内容被完整的复制到了第一个IP分片中,第二个IP分片不包含ICMP头部信息,因为IP模块重组该ICMP报文的时候,只需要一ICMP头部信息,重复传递这个信息没有任何益处。1473字节(1500 -20IP头部-8ICMP头部 +1)的ICMP报文数据的前1472字节被IP模块复制到第一个IP分片中,其总长度为1500字节,从而满足MTU的要求,而多出的最后一个字节责备复制到第二个IP分片中(21字节)。

      另外,ICMP报文的头部长度取决于报文的类型,其变化范围很大,ping程序使用的ICMP回显和应答报文的头部长度是8字节。

      用ping程序举例:

ping -s 1473 -c 1 192.168.1.106   用 tcpdump抓包:

sudo tcpdump -ntv -i enp0s3 icmp #只抓取icmp报文

 

      看前4行,两个ip分片的知识都是39125,说明它们是同一个IP数据报的分片。第一个分片的片偏移值为0,第二个则是1480,很显然,第二个分片的片偏移值实际上是第一个分片的ICMP报文长度。第一个分片设置了MF标志以表示还有后续分片,所以tcpdump输出"flags[+]".而第二个分片没有设置任何标志。所以tcpdump输出"flags[none]".这两个分片的长度分别为1500和21字节。

 

 

  • 大小: 56.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics