Stanford CS144 lab5
- 综述
- 这个lab将实现
网际接口network interface
也就是IP数据包与链路层之间的桥
- 这张图展示了lab5与其他lab的联系,
TCP peers
的报文通过网际接口真正的传递,对于TCP中的IP层实现,Lab4中官方已经帮忙实现了;而IP层
通过最长前缀匹配原则
传递到合适网卡,其中网际接口层
充当中间接口,这边是router
的一部分
- 对于TCP数据报放入UDP中传送,UDP中,应用需要提供
payload
与target 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 frame
与ARP
帧,等会,这里为什么会有IPV4的帧鸭?不是都封装在以太网帧里了吗?红线
是指丢掉不给自己的帧
- 本地IP地址与以太网帧的映射存30秒
- 一个要点
- 实现中的问题
- 可以用
git log
查看commit
号,用git reset
回滚,之后可以用git reflog
查看所有的HEAD
的历史
revisited webget
还是不行,待解决
- 没看懂