数据封装在 TCP/IP 堆栈中是如何工作的?

网络工程 以太网 IPv6 UDP
2022-02-27 01:25:41

当 UDP 段沿堆栈向下遍历时,每一层都会添加一个标头。

发生这种情况会发生什么?内核做了一堆东西然后添加标题吗?

我对以太网系统上从网络层到数据链路层的转换特别感兴趣。

是否执行 ARP 然后搜索缓存以提供下一个希望信息?

2个回答

每个操作系统可以以不同的方式执行此操作。这取决于操作系统设计人员如何在操作系统中具体发生。

RFC 826,以太网地址解析协议——或——将网络协议地址转换为 48 位以太网地址以在以太网硬件上传输,为您提供了应该发生的情况的大致轮廓,但操作系统可以跳过整个表的创建和对每个数据包使用 ARP 请求。

数据包生成:

当一个数据包通过网络层向下发送时,路由决定了数据包下一跳的协议地址,以及它期望在哪个硬件上找到具有直接目标协议地址的站点。在 10Mbit 以太网的情况下,需要地址解析,并且某些较低层(可能是硬件驱动程序)必须咨询地址解析模块(可能在以太网支持模块中实现)将 <protocol type, target protocol address> 对转换为一个 48 位以太网地址。地址解析模块尝试在表中找到这对。如果找到该对,它将相应的 48 位以太网地址返回给调用者(硬件驱动程序),然后调用者发送数据包。如果没有,它可能会通知调用者它正在丢弃数据包(假设数据包将由更高的网络层重新传输),并生成类型字段为 ether_type$ADDRESS_RESOLUTION 的以太网数据包。然后地址解析模块将 ar$hrd 字段设置为 ares_hrd$Ethernet,将 ar$pro 设置为正在解析的协议类型,将 ar$hln 设置为 6(48 位以太网地址中的字节数),ar$pln到该协议中地址的长度,ar$op 到 ares_op$REQUEST,ar$sha 用它自己的 48 位以太网地址,ar$spa 用它自己的协议地址,ar$tpa 用它的协议地址试图被访问的机器。它不会将 ar$tha 设置为任何特别的值,因为它试图确定的正是这个值。它可以将 ar$tha 设置为硬件的广播地址(在 10Mbit 以太网的情况下为所有地址),如果这样便于实现的某些方面。然后,它会将此数据包广播到最初由路由机制确定的以太网电缆上的所有站点。

它由一个协议栈,即互联网协议栈来处理。例如,有轻量级 Internet 协议栈一旦您到达链路层,例如以太网或 WiFi,您就在谈论固件功能。