lab6
个人实验留档:cs144-2021
Overview
在这个实验中,主要完成的是ip路由的转发功能。如上图所示,一个路由上有多个端口,通过合适的端口选择(最长匹配原则)来实现将路由收到的数据报转发到合适的端口上。
Implementing the Router
主要实现两个函数:
-
void add_route(const uint32_t route_prefix, const uint8_t prefix_length, const optional<Address> next_hop, const size_t interface_num);
这个函数的作用是将一个路由表条目添加到路由表中。其中,路由表的数据结构需要自己定义。
函数参数:
- route_prefix:路由前缀,32bit
- prefix_length:路由前缀的长度
- next_hop:为optional类型,当其有值时,表明数据报的目的地址的主机没有与路由直接相连,需要先转发到next_hop;当其没有值时,表明数据报的目的地址的主机与路由直接相连,可以直接转发到dst_ip
- interface_num:端口号
在实现时,可以使用一个结构体保存路由表的条目内容,使用一个简单的vector作为路由表。
-
void route_one_datagram(InternetDatagram &dgram);
在这个函数里面实现路由转发数据报。主要实现:
- 最长匹配原则选择合适的转发端口。最长匹配原则如果没有匹配到路由表上的条目,则需要转发到默认端口(ip为:0.0.0.0/0)。
- 如果TTL > 1,则将TTL-1后将数据报转发。
最长匹配原则可参考: 路由的最长匹配原则 - 知乎 (zhihu.com)
个人实现见:
Testing
实验测试网络拓扑如下:
测试结果: