Lectures Note
略
Exercises
TCP片段传输到对等方的过程:
- TCP-in-UDP-in-IP. Linux 提供了一种接口(即“数据报套接字”,UDPSocket),它允许应用程序仅提供用户数据报的有效载荷和目标地址,而内核则负责构建 UDP 头、IP 头以及以太网头,并将数据包发送到适当的下一跳。
- TCP-in-IP. 在通常的使用中,TCP 段几乎总是直接被放置在互联网数据报中,在 IP 头和 TCP 头之间没有 UDP 头。这就是人们所说的“TCP/IP”。Linux 提供了一种名为 TUN 设备的接口,它允许应用程序提供整个互联网数据报,而内核则负责处理其余的部分。
- TCP-in-IP-inEthernet. TCP-in-IP-inEthernet(这个check将)生成原始的以太网帧,这些帧将通过一种名为 TAP 设备的接口交给 Linux —— 这种设备类似于 TUN 设备,但更为底层,因为它交换的是原始链路层帧而不是 IP 数据报。
这个check的大部分工作是为每个下一跳IP地址查找(和缓存)以太网地址。这个协议叫做Address Resolution Protocol(ARP)。
在网络通信中,“hop”(跳)指的是数据包从一个网络设备(如路由器或交换机)传输到下一个网络设备的过程。每个“hop”代表数据包经过的一个中间节点。
网络接口连接了互联网数据报和链路层帧的世界;
网络接口组件可以做为一个主机的TCP/IP栈,也可以作为IP路由器的一部分(见下图)。
NetworkInterface:包括一个IP地址映射至以太网地址的方法。
定时器例子:
struct Timer {
size_t _ms {};
constexpr Timer& tick( const size_t ms_since_last_tick ) noexcept { return _ms += ms_since_last_tick, *this; }
[[nodiscard]] constexpr bool expired( const size_t& TTL_ms ) const noexcept { return _ms >= TTL_ms; }
};
代码实现起来,需要定义ARP的map,使用的是unordered_map。
参考:
- CS 144
- CS144 | Winter 2024, Lab 0~7 记录(已开源)