CS144-2021|Lab6 个人实验记录

142 阅读1分钟

lab6

个人实验留档:cs144-2021

Overview

image.png

在这个实验中,主要完成的是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

实验测试网络拓扑如下:

image.png

测试结果:

image.png