以太网地址转换协议或转换网络协议地址( 三 )


般不会互相通信(因此转换表中有100个没用的表项),它们主要和大型机,文件服务器或网
桥通信,而仅和很少数量的主机通信(例如交互谈话) 。本文描述的协议只在需要时发送信
息,并且每台机器每次启动时只发一次 。
这种包格式不答应在一个包中进行多于一个的转换 。这是为了简单 。假如复杂的话,
包将较难被分析,并且很多信息是没用的 。想想一个有四种协议的网桥告诉工作站四个协
议地址,而其中三个工作站从来都不会用到 。
这种包格式答应应答包重用请求包的存储空间,应答包和请求包具有相同的长度,有
些字段也相同 。
硬件字段(ar$hrd)的值来自一个列表 。现在只有为10兆以太网定义的一个值(ares_hrd
$Ethernet=1) 。已经在讨论在PacketRadioNetworks上使用这个协议,这需要为希望使
用这个协议的其它硬件介质分配值 。
对于10兆以太网,协议字段(ar$pro)的值来自集合ether_type$,这是对已分配的协议
类型的自然重用 。把它和操作码(ar$op)结合起来,将有效地减半可使用这个协议转换的协
议的数量,同时将对网络监控和排错造成更多的困难(见下面网络监控和排错) 。希望不会
有32768个协议,但Murphy制造了一些不答应我们作这个假设的规则 。
理论上,长度字段(ar$hln和ar$pln)是多余的,因为通过硬件类型(在ar$hrd中)和协
议类型(在ar$pro中)就可以决定协议地址的长度 。它们被包括是为了可选的一致性检查和
网络监控和排错(见下面) 。
操作码决定了是请求(可能导致一个应答)还是对先前请求的应答 。16比特长了一些,
但这个字段是必须的 。
发送者的硬件地址和协议地址绝对是有用的,通过它们才能从转换表中得到结果 。
在请求包格式中,目的协议地址是必须的,这样机器才能决定是否把发送者信息放到
转换表中,是否发送应答 。假如假设应答是由请求引起的,那么在应答包中这个字段不是
必须的 。包括它是为了完整性,网络监控,和使上面描述的算法更简单(把发送者信息放到
转换表中后才去看操作码) 。
目的硬件地址被包括进来是为了完整性和网络监控 。它在请求包中毫无意义,因为机
器要问的就是这个数字 。它在应答包中是处理请求机器的地址 。在某些实现中(例如不检察
14比特的以太网头),把这个字段作为包的目的硬件地址发送到硬件驱动器,存在寄存器或
栈空间中 。
地址间没有填充字节 。包数据被看作字节流,其中只有3个字节对可看作字(ar$hrd,a
r$pro和ar$op),它们在发送时高位字节在前 。
10.网络监控和排错
以上的地址转换协议答应机器在以太网上获得高层协议活动(例如CHAOS,Internet,
PUP,DECnet)的信息 。它能决定哪个以太网地址正在使用(通过值),以及每个协议类型的
协议地址 。事实上,监控者不必使用任何一种高层协议 。它象下面这样工作:
当收到地址转换包,它总是把<协议类型,发送者协议地址,发送者硬件地址>存入转
换表 。硬件和协议地址的长度可从包的ar$hln和ar$pln字段得到 。假如操作码是应答,监
控者可以丢弃这个包 。假如操作码是请求,并且目的协议地址与监控者的协议地址相同,
监控者通常会发应答包 。监控者将只得到一个映射,因为请求的应答将被直接发送到请求
主机 。监控者可试着发自己的请求,但要小心,这会造成两个监控者陷入请求发送循环 。
由于没有把协议和操作码合并成一个字段,监控者不必知道每个高层协议的请求操作

推荐阅读