简介
IP是Internet Protocol(网际互连协议)的缩写,是TCP/IP体系中的网际层协议。
IP数据报
版本:
包含IP数据报的版本号:ipv4为4(0100),ipv6为6(0110)
首部长度:
其中保存的是整个首部中的“32位字”的数量。
这个字段正常的值为:5(假设“可选字段长度为0”)
该字段最大值为:15(可选字段长度全满加上原有字段)
分片
当IP层接收到要发送的IP数据报时,通过查找“转发表”,会判断该数据报应该从那个本地“接口”发送以及MTU(最大传输单元,指一种通信协议的某一层上面所能通过的最大数据包大小(以字节为单位))是多少。
如果IP数据报超过MTU值,则进行分片。IPv4的分片可以在原始发送方主机和端到端路径上的任何中间路由器上进行,即:一个分片在到达接收主机的路径中,还可能被继续分片。
当一个IP数据报被分片后,直到它到达最终目的地才会被重组。(因为同一个数据报的不同分片,可能经由不同的路径到达相同的最终目的地,所以中途有可能无法重组)
标识符:
主机将数据报分片后,在发送前,会给每一个分片数据报一个ID值,放在16位的标识符字段中。
这个ID值可以用来识别哪些分片是属于同一个数据报的,方便重组。
标志:
标志字段在IP报头中占3位,
第1位作为保留,置0;
第2位,分段,有两个不同的取值:该位置0,表示可以分段;该位置1,表示不能分段;
第3位,更多分段,同样有两个取值:该位置0,表示这是数据流中的最后一个分段,该位置1,表示数据流未完,后续还有分段,当一个数据报没有分段时,则该位置0,表示这是唯一的一个分段。
当目的主机接收到一个IP数据报时,会首先查看该数据报的标识符,并且检查标志位的第3位是置0或置1,以确定是否还有更多的分段,如果还有后续报文,接收主机则将接收到的报文放在缓存直到接收完所有具有相同标识符的数据报,然后再进行重组。
偏移量:
就像之前说过的,各个IP分片数据报在发送到目的主机时可能是无序的,所以就需要“偏移量”字段来指明“该分片在原数据报中的位置顺序”。
偏移量的计算方法为:已经“装载”好的分片字节数/8(偏移量就是某片在原分组的相对位置,所以8个字节作为偏移单位。)
分片1偏移量为:0(0=0/8,因为该偏移量之前没有装载过任何分片,自然也就是0除以8了)
分片2偏移量为:175(175=1400/8,由于分片1已经装载好了1400字节,所以此分片的位置就在1400字节之后,也就用1400除以8了)
分片3偏移量为:350(350=2800/8,目前已经装好了两个分片也就是2800字节已经装载完了,那么分片3自然就跟在2800字节之后了,也就是用2800除以8)