1.3个标志位是哪3位?
目前只有两位有意义
<1>标志位中的最低位记为MF(More Fragment)。MF=1即表示后面"还有分片"的数据报。MF=0表示这已是若干数据报片中的最后一个。
<2>标志字段中间的以为记为DF(Don't Fragment)。意思是"不能分片"的数据报。只有当DF=0是才允许分片。
2.描述数据报的分片和组装过程
分片和重新组装的过程对传输层是透明的,其原因是当IP 数据报进行分片之后,只有当它到达下一站时,才可以进行重新组装,
且它是由目的端的IP 来完成的。分片之后的数据报根据需要也可以再次进行分片。
IP分片的原理:
IP分片和完整IP报文差不多拥有相同的IP头,ID域对于每个分片都是一致的,这样才能在重新组装的时候识别出来自同一个IP报文
的分片。在IP头里面,16位识别号位移记录了一个IP报文的分片。在IP头里面,16位识别号唯一记录了一个IP报文的ID
,具有同一个ID的IP分片将会重新组装;而13位片偏移则记录了某IP片相对整个包的位置;而这两个表中间的3位标志位,则标志着该分片后面是否还有新的分片,这三个域就组成了IP分片的所有信息,接受方就可以利用这些信息对IP数据进行重新组织
IP分片的步骤:
一个未分片的数据报的分片信息字段全为0,即多个分片标志位为0;即多个分片标志位为0;且偏移量为0.分片一个数据报,需执行以下几个步骤:
(1) 检查DF标志位,查明是否允许分片,如果DF=1,则将该数据报丢弃,并将一个ICMP错误返回给源端。
(2) 基于MTU值,把数据字段分成两个部分或者多个部分。除了最后的数据部分外,所有新建数据选项的长度必须为8的倍数。
(3) 每个数据部分被放入一个IP数据报,这些数据报的报文头略微修改了原来的报文头。除了最后的数据报分片外,所有分片都设置了多个分片标志位。
每个分片中的片偏移量字段设为这个数据部分在原来数据报中所占的位置,这个位置相对于原来未分片数据报中的开头处。
(4) 设置新数据报的报文头字段及总长度字段。
(5) 重新计算报文头部校验和字段。
IP报文的重组:
为了重组数据报分片,接收主机在第一个分片到达时分配一个存储缓冲区。这个主机还将启动一个计时器。当数据报的后续分片到达时,数据被复制到缓冲区存储器中片偏移量字段指出的位置。当所有分片都到达时,完整的未分片的原始数据报就被恢复了。处理如同未分片数据报一样继续进行。
如果计时器超时并且分片保持尚未认可状态,则数据报被丢弃。这个计时器的初始值称为IP数据报的生存期值。它是依赖于实现的。一些实现允许对它进行配置。在某些IP主机上可以使用netstat命令列出分片的细节。如TCP/IP for OS/2中的netstat-i命令。
在接收方,一个由发送方发出的原始IP数据报,其所有分片将被重新组合,然后才能提交到上层协议。每一个将被重组的IP 数据报都用了一个ipq结构实例来表示,因此先来看看ipq这个非常重要的结构。
为了能高效地组装分片,用于保存分片的数据结构要有一下几点:
1. 快速定位属于某一个数据报的一组分组。
2. 在属于某一个数据报的一组分片中快速插入新的分片
3. 有效地判断一个数据报的所有分片是否已经全部接收
4. 具有组装超时机制,如果在重组完成之前定时器溢出,则删除该数据报的所有内容