zoukankan      html  css  js  c++  java
  • IPv4报文分片

    1:为什么需要分片

    每个数据链路层协议都有自己的帧格式,在这个格式中有一个字段是"数据字段最大长度"(MTU,最大传输单元),当数据报被封装成帧时,数据报的总长度必须小于这个最大长度.

    它是由网络使用的硬件和软件带阿里的限制确定的.

    IPv4数据报的最大长度2^16(65535)字节,如果MTU>=2^16,那么什么也不用做,直接把IPv4的数据报塞到帧的数据段中就行了,但是对于MTU<2^16的数据链路层协议,那就应该把

    数据报分成很多份,这个步骤就是分片.

    2.怎么分片

    当数据报被分片时

    1:每一个数据报文都有自己的首部,大部分的字段是重复的

    2:选项可以复制也可以不复制.只有数据报中的数据是分片的

    3:检验和必须重新计算,因为检验和只包含头部,然而头部最少有三个字段(标识,标志,分片偏移量)改变了

    4:如果分片后的数据遇到更小的MTU,需要再次分片

    使用IPv4协议中 标识,标志,分片偏移来进行数据报分片.

    标识:头部中16位的字段,标志了从源主机发出的一个数据报,当数据报离开源主机后,此标识与源IP地址的组合必须唯一确定这个数据报.

       进行分片时,这个字段必须复制到所有的分片中,这样目的主机收到所有被分片的报文后,才知道把那些分片组装起来

    标志:头部中3位的字段,

       1:第一保留未用

       2:第二位称为不分片位,如果是1,这个数据报不能进行分片,如果不分片过不了网络,只能丢弃,然后发送一个ICMP差错报文回去.如果是0,那就可以分片

       3:第三位是还有分片位,若这个值是1,则表示这个数据报不是最后的分片,如果是0,表示是最后一个分片

    分片偏移:头部中13位的字段

      1:这个字段表示的是分片在整个数据报中的相对位置,看后面的计算过程

      2:8字节为度量,为什么?而这个字段只有13位,它不能表示超过8191个字节,如果以8字节为度量单位,那么可以表示65528字节,

         超过IPv4中数据段的最大值(2^16-1-20)=65515

      3:第一个分片的字节数量必须能够被8除尽

    具体分片过程

                 IPv4数据报首部格式

    Ip协议版本4位

    首部长度4位

    服务类型8位

    总长度16位

    标识16位

    标志3位

    分片偏移量13位

    生存时间8位

    协议8位

    头部检验和16位

    源IP地址  32位

     

    目的IP地址 32位

     

    选项+填充

     

              未分片的数据报:首部长度是20,数据长度是5000

    5020

    123

    0

    0

    0

              假设我们一个分片大小是2000

                第一个分片如下

    2000+20=2020

    123

    0

    1

    0   (0/8=0)

    0-1999字节(为了便于观看加上的内容)

                第二个分片

    2000+20=2020

    123

    0

    1

    250  (2000/8=250)

    2000-3999字节

                第三个分片

    1000+20=1020

    123

    0

    0

    500  (4000/8=500)

    4000-4999字节

       

  • 相关阅读:
    巧用数据流让 Word 文档在线阅读
    《开源公开课分享》:Java开源框架案例分享
    存储过程
    opencv求取RGB分量
    opencv中的矩阵操作
    三维高斯模型 opencv实现
    线性均值滤波和中值滤波的比较
    opencv 画延长线
    MATLAB曲线绘制
    如何在博客园发博客时插入优酷视频
  • 原文地址:https://www.cnblogs.com/shuiyonglewodezzzzz/p/6885898.html
Copyright © 2011-2022 走看看