跳到主要内容

5. 数据包生成 (Packet Generation)

当数据包沿网络层向下传送时, 路由机制确定该数据包下一跳的协议地址, 以及期望在哪块硬件上找到具有直接目标协议地址的站点. 对于 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 以太网中为全 1). 然后将此数据包广播到由路由机制最初确定的以太网电缆上的所有站点.