计算机网络习题,第十题的A选项有没有一种可能IP分组刚开始DF位为1就不允许该IP分组分片?
第十题的A选项有没有一种可能IP分组刚开始DF位为1就不允许该IP分组分片?对于B选项我看ICMP协议规定对第一个分片的数据报片的所有后续数据报片,都不在放送ICMP差错报文。而B选项中说分组的长度又超过MTU,是不是之前已经至少经历过一次分片然后在进行一次分片那如果该分组不是第一个数据报片是不是不用发差错报文?
A 选项 ✓
一个IP Packet被IP路由到一个出接口(Outgoing Interface),需要check:
IP Packet Length ≤ Outgoing Interface's MTU
Yes,需要判断
Outgoing Interface Queue == FULL
Yes,丢弃。
No,将IP Packet放入出接口的Output Queue,物理接口处理。
No, 需要判断
DF==1
Yes,丢弃,并发送Type 3 Code 4 ICMP Error Message。
No,将IP Packet分割成小Fragment,满足
Fragment Length ≤ Outgoing Interface's MTU
故,A 选项是对的,只要IP分组长度> 出接口MTU时,必须分片。
至于能不能分片,这个由DF是否为1来决定。
但是必须分片,和能不能分片,这是2回事。
必须分片的含义是,从这个接口出去的报文最大长度由MTU框死上限。
如果不能分片,就丢了。
B 选项 ✗
通过上文描述,需要给源主机发送Type 3 Code 4 ICMP Error Message,并附带上出接口的MTU值。
源主机收到这个ICMP消息,会以控制通道(Control Channel)通知肇事方(用户进程)这个出错信息,并附带这个MTU值。
源主机如何知道Type 3 Code 4 ICMP Error Message谁才是肇事方(用户进程)?
ICMP Error Message携带了原始的肇事Packet的至少64bit位,即8个Byte。
无论肇事方是TCP、UDP、ICMP,8个Byte足够可以找到它们:
TCP、UDP包头的前8个Byte,包含源端口、目的端口。
ICMP Echo包头一共也就8个Byte,包含ID信息。
C 选项 ✓
MF = More Fragment,这是一个bit位。
MF =0时,表示这是最后一个Fragment。
MF =1时,表示这不是最后一个Fragment。
至于每个Fragment的排序,由Offset值决定。
Offset =0 表示这个第1个分片,MF=1,运输的字节0-999共1000个Byte。
Offset =125 表示这个第2个分片,MF=0,运输的字节1000-出接口MTU上限。
D 选项 ✓
分片的IP Fragment,只有到达目的地才能Reassemble。
Reassemble的工作如下:
到IP Quque里Source IP、Destination IP、ID为三元组的Key提取出来,
依据它们的Offset大小,进行排序,如果成功,完整恢复原始的IP报文。
如果不成功,丢弃处理。
如果Fragment呆在IP Quque超时,其它的Fragment依然没有到来,丢弃处理。同时还会发一个TTL Exceeded Error Message给源主机。
是不是之前已经至少经历过一次分片,然后再进行一次分片。如果该分组不是第一个数据报片,是不是不用发差错报文?
是的,上文C选项的画线部分。
很显然第二个分片,运输的字节并不包含肇事方传输层(Transport Layer)信息。通俗地说,就是不包含TCP、UDP端口号,ICMP的ID信息,即使将第二个分片中打头的8 个Byte(应用层数据)携带在ICMP Error Message里,源主机也无法找到肇事的进程。
故,只对第一个分片引起的肇事事故,发送ICMP Error Message。
如何判断第一个分片?
Offset ==0
一家网络大厂,会对过往的IP Fragment做一个Virtual Reassemly,以决定ALL IN or ALL OUT。
Virtual Reassemly,虚拟重组,看看能否重组成一个完整的IP Packet,再看看是否满足防火墙的Filter Permit策略.
如果Yes,全部的Fragment Permited。
如果No,全部的Fragment Denied。
结果出事了,因为收到的Fragment DF=1,防火墙没有见过这个大场面,这个大场面确实不太常见。故,直接全部丢弃处理,客户很生气!
防火墙/路由器见过的场面一般为Fragment DF=0。
最后怎么解决的?
只要MF==0 且Offset ==0同时满足,一个完整的IP报文,无需动作。
否则,就做Virtual Reassemly。
这样无论DF是否为1,只要有分片的行为,就会发生Virtual Reassemly。
推荐阅读:。
推荐站内搜索:最好用的开发软件、免费开源系统、渗透测试工具云盘下载、最新渗透测试资料、最新黑客工具下载……
还没有评论,来说两句吧...