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字节

 

   

 

posted on 2017-05-21 20:39 好吧,就是菜菜 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/shuiyonglewodezzzzz/p/6885898.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
IPv4报文格式是一种用于在网络中传输数据的协议头部格式。它由固定长度的20字节(或者更多,取决于选项字段的使用)组成。以下是IPv4报文格式的各个字段: 1. 版本(Version):占4位,表示IPv4协议的版本,通常为4。 2. 首部长度(Header Length):占4位,表示IPv4首部的长度,以32位字为单位。IPv4首部最小长度为20字节。 3. 区分服务(Differentiated Services):占8位,用于定义服务质量和优先级。 4. 总长度(Total Length):占16位,表示整个IPv4数据报的长度,包括首部和数据部分。 5. 标识(Identification):占16位,用于唯一标识一个数据报片段。 6. 标志(Flags):占3位,用于控制数据报的分片和重组。 7. 片偏移(Fragment Offset):占13位,用于指示数据报片段在原始数据报中的位置。 8. 生存时间(Time to Live,TTL):占8位,表示数据报在网络中可经过的最大路由跳数。 9. 协议(Protocol):占8位,表示数据报的封装协议,如TCP或UDP。 10. 首部校验和(Header Checksum):占16位,用于检验IPv4首部的完整性。 11. 源地址(Source Address):占32位,表示发送方的IP地址。 12. 目标地址(Destination Address):占32位,表示接收方的IP地址。 13. 选项字段(Options):占可变长度,用于传输一些额外的控制信息,如时间戳或记录路由。 14. 数据(Data):占变长,包括传输的实际数据。 以上是IPv4报文格式中的主要字段,其中一些字段可以根据具体的使用情况而变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值