3. IP重组

在完成本实验所有实验要求的情况下,实验分加1分(不会超过20分满分)。

在基础实验的网络层,我们实现了IP大包的分片,这是很容易的事情。 但是由于网络环境的复杂性,不同IP包的不同分片可能以乱序到达,同一个IP包的分片可能不等长,部分分片可能丢包。 所以,IP重组是一个复杂的工作,具体的实验要求为:

  1. 你可以直接在ip.c的ip_in函数中修改代码,并添加你认为需要添加的其他函数,就像ip_out和ip_fragment_out的关系一样

  2. 你需要设计一个数据结构,其可以快速定位并乱序插入单个IP包的不同分片,也能够判断是否已经重组完成

  3. 你需要为每个IP包维护一个生存时间(仿照ARP协议),在每次分片到达时更新该时间,在超过生存时间后丢弃整个未完成的IP包,以避免丢包导致的内存泄露

  4. 你需要处理多个IP包的分片乱序到达的情况,如A,B两个IP包,各分为两片,到达顺序为A1->B2->B1->A2

  5. 你需要处理同一个IP包的分片不等长的情况,这在链路聚合等复杂网络情况下是可能的

3.1. 实验提交

请提交实验报告和代码。

实验报告需要给出设计方案、实验结果及分析。