Stanford CS144 lab5


  • 综述
    • 这个lab将实现网际接口network interface也就是IP数据包与链路层之间的桥
    • 这张图展示了lab5与其他lab的联系,TCP peers的报文通过网际接口真正的传递,对于TCP中的IP层实现,Lab4中官方已经帮忙实现了;而IP层通过最长前缀匹配原则传递到合适网卡,其中网际接口层充当中间接口,这边是router的一部分
    • 对于TCP数据报放入UDP中传送,UDP中,应用需要提供payloadtarget address,内核提供UDP header与IP header与以太header等,并发送到下一跳
    • 一般情况下TCP数据报总是放到IP数据报,这种情况比较复杂,Linux提供一个接口,叫做TUN 设备,它让application需要提供一个完整的数据报,包括IP头部,内核负责写入以太网帧头并通过物理网卡发送数据等,
    • 需要实现ARP,传递以太网帧TUN?,ARP大多数工作就是找以太地址与缓存以太地址
  • 实现
    • ARP维持缓存与软状态,重启时,把映射清空
    • 还能收到IPV4数据报
    • send_datagram函数用来将InternetDatagram转换为Ethernet frame并发送它;tick函数用于防止flood的发生,这里还有
    • recv_frame函数用于接收以太网帧,这里还要区分IPV4 frameARP帧,等会,这里为什么会有IPV4的帧鸭?不是都封装在以太网帧里了吗?红线是指丢掉不给自己的帧
    • 本地IP地址与以太网帧的映射存30秒
    • 一个要点
  • 实现中的问题
    • 可以用git log查看commit号,用git reset回滚,之后可以用git reflog查看所有的HEAD的历史
    • revisited webget还是不行,待解决
    • 没看懂