首页 理论教育IP报文转发实践-计算机网络基础与实践

IP报文转发实践-计算机网络基础与实践

【摘要】:MTU 一般取1 500 字节,这就决定了IP 报文长度不能超过1 500 字节。除去IP 头部固定的20 字节,IP 报文的上层数据不能超过1 480 字节。因此,超过UDP 和TCP 能够承载的最大数据长度的分组就需要进行分片。标志符占3 位,目前只有前两位有意义。如果接收到的所有分片的数据长度等于源IP 报文数据部分长度,说明所有分片均已到达。

1.为什么要分片

由于网络接口的硬件限制,以太帧数据字段长度不超过MTU。MTU 一般取1 500 字节,这就决定了IP 报文长度不能超过1 500 字节。除去IP 头部固定的20 字节,IP 报文的上层数据不能超过1 480 字节。如果上层协议是UDP,除去UDP 头部的8 字节,UDP 数据不能超过1 472 字节;如果上层协议是TCP,除去TCP 头部的20 字节,TCP 数据不能超过1 460 字节。因此,超过UDP 和TCP 能够承载的最大数据长度的分组就需要进行分片。

2.IP 分片的方式

标识符占16 位,来自同一个IP 报文的分片具有相同的ID。

标志符占3 位,目前只有前两位有意义。标志符字段的最低位是MF(More Fragment),MF=1 表示后面还有分片,MF=0 表示最后一个分片;标志符字段中间的一位是DF(Don't Fragment),只有当DF=0 时才允许分片。

偏移量占12 位,它表示较长的分组在分片后某片在原分组中的相对位置。片偏移量以8 字节为偏移单位。

3.IP 分片的重组(www.chuimin.cn)

(1)怎样确定一个包是否为一个分片?

如果一个包的段偏移量为0 而Frag 字段不为1,则该报文必定不是一个分片。

(2)对于接收到的无序分片,怎样确定哪些分片来自同一个包?

来自同一个包的分片具有相同的源IP 及ID 号。

(3)接收端怎样确定来自同一个包的所有分片都已到达?

当收到标志位为0 的分片时,说明这是最后一个分片。根据最后一个分片的段偏移量可知在源报文中最后一分片以前含有的数据长度,再加上最后一分片的数据长度即原IP 报文数据部分长度。如果接收到的所有分片的数据长度等于源IP 报文数据部分长度,说明所有分片均已到达。此时即可按段偏移量重新组包。