用考研题看看你会不会Ipv4数据报分片

题目:

若路由器向MTU=800B的链路转发⼀个总⻓度为1580B的IP数据报(⾸部⻓度 为20B)时,进⾏了分⽚,且每个分⽚尽可能⼤,则第2个分⽚的总⻓度字段和MF标志位的值分 别是( )。

A、796,0 B、796,1 C、800,0 D、800,1

自己做一下,给出你的答案

你或许是这么想的。

我们知道最大传输单元是800B,我一个IPv4数据报是1580B,超过了该最大值,所以我要进行分包。

首先,抛去20字节的IP首部,剩余的数据(不难知道是应用层要传的数据比如“hallo”+传输层的协议如TCP的20字节的首部,当然也有其他情况,比如三次握手)为1580-20=1560字节。

其次,我分几个包呢,一个IP首部需要20字节,我每个分包都要有IP首部,不然到了人家的网层层谁知道你是干啥的啊,题目说了尽可能大,所以不难知道一个包为780+20 。

好了,那第一个包就是0~779(剩余的数据) +20  

              第二个包是780~1560(剩余的数据) +20 

哎嘿,这下好了 第一个包长度是800字节,第二个包长度也是800字节。

最后那MF呢,我们知道,mf是more fragment 也就说后面还有没有分片。

首先我们知道肯定是让分片的,DF为0,当然我们只是理解嘛。

好了,我第一个包后面有没有分片呢,肯定有嘛,那就为1

但是我第二个包后面没有分片了,那就为0.

你看看,选C!!!!

正确答案:B!!!!!!!

经典的答案,标准的错误

请问,你是不是忘记了,片偏移。

没错,每一片的长度一定是8的倍数。注意片的长度是不加上IP首部的!

而,上面的780除以8为97.5,不是8的倍数。

哎嘿,776/8=97,是8的倍数

我们这样分

0~775+20   776~1551+20   1552~1560+20  

片偏移分别是0     97    194

这样,只要在接受的时候按这个排序就可以啦。

但你知道为什么乘8吗?

我们分包,每个分包直接分就好了吗,你这个片为什么非得是8的倍数呢

你片偏移不就是为了在重组报的时候排正确的序的吗。

的确如此,我们不妨看向IP数据报格式。如下

 我们可以看到,片偏移的为31-18=13bit(),2的13次方为8192。

也就是说,我的片偏移最多到8192。

但是,

我的一个数据报最大长度为65535字节,减去20字节的首部,还有65515个字节。

假设你MTU=300,我传的报是9000字节,我的片偏移为几就表示第多少个字节。

标识是001

你不会不认识这个标识吧,最高位也就是最左边的,为0,这是规定。

中间位DF为0,表示允许分片,最低位为1,表示后面还有分片。

假设片现在包分成这样了

8200~8300(当然这是错误的),我的片偏移应该为8200吧,但是我最大为8192.

得,怎么办

乘8,2的13次方*2的3次方=2的16次方=65536。

小写1000字,乐此但不疲。拜拜

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天写bug的屑闲鱼

请我杯饮料吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值