Internet Protocol Internet协议( 六 )


最高位
格式
类
0
7位网络用,24位主机用
a
10
14位网络用,16位主机用
b
110
21位网络用,8位主机用
c
111
扩充地址模式
 假如网络域为零意味着本网络,这种方式仅在于特定的ICMP消息中使用;扩展的地址模型未定义 。
由本地网络指定的本地地址必须考虑到单个的主机可以作为不同的网络主机使用 。也就是说,必须在网络主机地址和网络/主机接口之间进行映射,这种接口答应几个IP地址对应一个接口 。同时还应该考虑到一台主机有多个处理接口,对于从不同接收收到的信息应该看做是来自同一个IP地址的 。
分段和重组
Internet标记域(ID)和源地址,目的地址和协议域一起用于确认数据报分段和重组 。假如数据报不是最后一段,则设置多段标记位(MF) 。段偏移域标记段位置,它是相对于未分段时的数据报而言的 。段以8个字节为单位,这样的分段策略使未分段的数据报有全零的分段信息(MF = 0,段偏移= 0) 。假如进行分段,边界必须是8个字节的倍数 。这种格式答应2的13次方(8192)个8字节段,一个数据报的最大长度刚好和长度域标明的数据64K一致 。在分段时,有些选项被复制,有些则不 。
每个IP模块必须能够不分段地传送68字节的数据报 。这因为IP包头会达到60字节,而最小数据段长为8,68=60 8;而它也必须能够接收576字节的数据,不论这数据是未分段的还是分段的 。
会被分段影响的域包括:

(1) 选项域
(2) 多段标记
(3) 段偏移
(4) Internet包头长度域
(5) 总长度域
(6) 包头校验码
假如设置了不分段标记(DF),则不可进行分段,即使数据报会因此而被抛弃 。假如接收主机不能进行重组时则需要设置此位 。我们在进行无盘引导时,则需要设置这一位 。下面通过例子说明这一过程 。其中#代表不等于,X到Y指的是包括X,而不包括Y的所有数据 。
能够在下一个网络传送的最大数据报称为最大传输单元(MTU) 。假如数据报的长度小于等于MTU,进行下一步;否则分为两段,第一段的大小等于MTU,第二段就是剩余的长度,将第一段传送,假如第二段仍然大于MTU,则重复分段过程,直到可以发送为止 。下面我们给出一个定义:
FO - 段偏移
IHL - Internet包头长度
DF - 不分段标记
MF - 多段标记
TL - 总长度
OFO - 原段偏移
OIHL - 原Internet包头长度
OMF - 原多段标记
OTL - 原总长度
NFB - 段数
MTU - 最大传输单元
过程:
IF TL <= MTU THEN 将此数据报提交给下一处理阶段
ELSE IF DF = 1 THEN 抛弃数据报
ELSE 产生第一段:
(1) 复制源internet包头;
(2) OIHL <- IHL;OTL <- TL;OFO <- FO;OMF <- MF;
(3) NFB <- (MTU-IHL*4)/8;
(4) 附加第一个NFB*8个数据字节;
(5) 校正包头:MF <- 1;TL <- (IHL*4) (NFB*8);重新计算校验码;
(6) 提交数据段到下一个数据报处理阶段;
假如要产生第二个段:
(7) 有选择地复制internet头;
(8) 附加剩余数据;
(9) 校正包头:IHL <- (((OIHL*4)-(未复制的选项长度)) 3)/4;
TL <- OTL - NFB*8 - (OIHL-IHL)*4);
FO <- OFONFB;MF <- OMF;重新计算校验码;
(10) 将此段提交分段检测;结束 。
上例中除了最后一段外,其它段都达到了MTU的大小,各种实现不同,只要能够得到的段小于等于MTU就可以了 。
重组过程例子
对于每个数据报,缓冲区标记是由源地址,目的地址,协议和标记域一起确认的 。假如数据报未分段,那就不需要进行重组,处理进行下一阶段 。重组需要的数据结构有:数据缓冲区,包头缓冲区,段块位表,数据长度域和计数器 。段中的数据根据段偏移和长度放在相应位置,段块标准表中的相应位根据接收的段块被设置 。