由于Lab5和Lab6相对比较简单(跟着文档一步一步写就行),于是放在一起做一个简单概述(主要是懒得写了…)
Lab汇总
Lab5概述
lab5要求实现一个IP与Ethernet(以太网)之间的网络接口,说白了就是将IP数据报封装为帧的一个组件(网络层与链路层之间的接口)。其主要功能为:
-
为网络层提供封装成帧的接口,将上层提交下来的IP数据报封装成以太网的帧,添加上源IP和目标IP的MAC地址,如果暂时没有目标IP对应的MAC地址的缓存,将该IP数据报暂时缓存下来,并根据ARP协议封装请求数据报并将该数据报广播至整个子网中。
-
根据ARP(Address Resolution Protocol)协议发送ARP数据报所封装的帧,等待接收回应。(在实际使用中可能收不到回应,但是在lab中不需要考虑这个问题)
-
当接收到一个链路层的帧时,需要判断该帧的类型(IPv4或ARP);如果为IPv4的帧,则解封装后返回;如果为ARP的帧,则缓存帧中发送方的IP与MAC映射(30s),同时如果该ARP为请求数据报(类型为REQUEST),还需要向该数据报发送方发送ARP回应数据报。
lab6概述
lab6要求实现一个路由器数据平面的转发功能,即维护一个路由表,根据数据报的IP字段匹配采用最长前缀匹配法匹配路由表,根据最佳表项的动作进行转发。主要实现的有:
-
添加一个路由表表项
-
根据收到的IP数据报的IP字段,匹配路由表表项,若匹配不到或者该数据报的TTL字段小于等于1,则丢弃该数据报;否则将数据报所匹配的表项中的接口和下一跳IP地址(Next-Hop)进行转发(若Next-Hop为空,则说明下一跳为数据报中的目标IP地址)