3. IP重组
在完成本实验所有实验要求的情况下,实验分加1分(不会超过20分满分)。
在基础实验的网络层,我们实现了IP大包的分片,这是很容易的事情。 但是由于网络环境的复杂性,不同IP包的不同分片可能以乱序到达,同一个IP包的分片可能不等长,部分分片可能丢包。 所以,IP重组是一个复杂的工作,具体的实验要求为:
你可以直接在ip.c的ip_in函数中修改代码,并添加你认为需要添加的其他函数,就像ip_out和ip_fragment_out的关系一样
你需要设计一个数据结构,其可以快速定位并乱序插入单个IP包的不同分片,也能够判断是否已经重组完成
你需要为每个IP包维护一个生存时间(仿照ARP协议),在每次分片到达时更新该时间,在超过生存时间后丢弃整个未完成的IP包,以避免丢包导致的内存泄露
你需要处理多个IP包的分片乱序到达的情况,如A,B两个IP包,各分为两片,到达顺序为A1->B2->B1->A2
你需要处理同一个IP包的分片不等长的情况,这在链路聚合等复杂网络情况下是可能的
3.1. 实验提交
请提交实验报告和代码。
实验报告需要给出设计方案、实验结果及分析。