一,为什么要分包
当你传输数据大于1500的时候,就会触发分包,也就是为了让你的数据包能接受你发过来的数据,不然太大,也不分包,就一下全丢了,不要超过一千五的数据了,所以有分包也就是为了让你数据能传输的更大一点,而且也可以根据不同的路劲来传输数据,使效率提高,也更好的提高可靠性,不会丢包。
二,分包组包过程中和哪些 IP 报头字段有关联
分包和组包主要跟五个报头字段有关联:
1.标识字段(Identification)
用于唯一一个标识一个ip数据报,在拆包组包过程有很重要的作用,每个包可以根据不同的标识符来组装成原始的数据包
2.片偏移字段(Fragment Offset)
数据组包过程中根据这个片段在原始数据报的那个位置。比如现在片偏移是0,那就证明这个片段一个在第一个位置
3.标志位字段(Flags)
这个也就是你现在传输过来后,后面还有片段在传输,比如现在是1,那就还需要等待其他的片段传输过来,如果是0,那就证明这是最后一个片段了。
4.协议字段(Protocol)
这个代表着数据报携带的协议类型,比如6代表TCP协议这种
5.校验和字段(Header Checksum)
这个很重要,在于校验数据过来是否被损坏,在传输过程中,每个路由器会重新计算校验和,以确保字段的完整性。
三,组包时如何保证数据的顺序和完整性?
1.先是利用片偏移字段来确保数据的顺序,因为上述已经说了,片偏移字段会说明传输过来的这个片段在第几个位置,跟着一安排就自动排好顺序了。
2.利用标识符字段来确保数据包全部到达,而不是缺胳膊少腿的。
3.排序和重组,收到所有的片段之后,根据上面的来排序,并重组成之前的原始数据包。
4.计算校验和,来确保片段在传输过程中没有丢失之类的操作,如果校验和不匹配,就不能使用。