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


码对应的应答操作码 。长度字段要带有可“分析”协议地址的足够信息,虽然它并不带有
协议地址的意义 。
地址转换协议的一个成功实现还可为不成功的实现排错 。假设一个硬件驱动者成功地
广播了以太网类型为ether_type$ADDRESS_RESOLUTION的包 。由于实现的错误或维护表的复
杂性,包格式可能不正确 。因为请求是广播,监控者会收到这个包,假如需要可显示出来
进行排错 。
11.一个例子
假设在同一根10兆以太网电缆上有机器X和Y 。它们有以太网地址EA(X)和EA(Y),DOD
Internet地址IPA(X)和IPA(Y) 。假设Internet的以太网类型为ET(IP) 。机器X刚启动,并
且它迟早都会向机器Y发包 。X知道要发包给IPA(Y),并把IPA(Y)告诉硬件驱动者(这里是
以太网驱动者) 。驱动者让地址转换模块把转换成48比特以太网地址,但
因为X刚启动,它没有这些信息 。它先不发包,生成一个地址转换包,
(ar$hrd)=ares_hrd$Ethernet
(ar$pro)=ET(IP)
(ar$hln)=EA(X)的长度
(ar$pln)=(IPA(X)的长度
(ar$op)=ares_op$REQUEST
(ar$sha)=EA(X)
(ar$spa)=IPA(X)
(ar$tha)=任意值
(ar$tpa)=IPA(Y)
并广播到电缆上的所有机器 。
机器Y收到这个包,判定自己是否懂这种硬件类型(以太网),是否理解这种协议(Inter
net),包是否是给自己的((ar$tpa)=IPA(Y)) 。然后把映射到EA(X)的信
息记下来(可能会覆盖已有表项) 。然后又意识到是请求,于是就交换字段,把EA(Y)填入发
送者以太网地址字段(ar$sha),把操作码设为应答,再把包直接发送(不是广播)到EA(X) 。
这个时候,Y已经知道怎样向X发送,而X还不知道怎样向Y发送 。s
机器X收到Y发送的包,生成到EA(Y)的映射,意识到是个应答包,
于是丢弃 。下次X的Internet模块试图向Y发送包,地址转换就会成功了,并且包也能到达 。
假如Y的Internet模块要向X发送,它也会成功,因为Y已经从X的地址转换请求中记住了
需要的信息 。
12.相关情况
也许希望转换表会过期,这些的实现超出本协议的范围 。这里有一个较具体的描述(感
谢MOON@SCRC@MIT-MC) 。
当主机移动时,假设移动时清除了地址转换表,那么从该主机发起的任何连接都可以
工作 。但是发起过到该主机连接的其它主机并没有任何理由会知道去丢弃它们的旧地址 。
而48比特以太网地址是唯一的,任何时候都是固定的,不会变 。假如主机名(和其它协议地
址)在不同物理硬件上被重新分配,主机就“移动”了 。而且从经验来说,总会存在由于硬
件或软件错误产生的错误路由信息,但这种错误不答应永远存在 。也许发起某个连接的失
败,会使地址转换模块认为由于对方当机或转换表项错误等原因而不可到达对方 。从而删
除这个信息 。也许收到一个来自某个主机的包,会更新用来向该主机发送的转换表项的时
钟 。假如一定时间没有收到来自某个主机的包,这条转换表项会被删除 。这将产生为每个
收到的包扫描转换表的额外负担 。或许使用散列或索引会快一些 。
收到地址转换包的建议算法试图缩短主机移动以后的恢复时间 。假如<协议类型,发送
者协议地址>已经在转换表中,那么发送者的硬件地址将覆盖这个表项 。因此在良好的以太
网上,当请求广播到达后,每个工作站都将得到这个新的硬件地址 。
另一种方法是有一个守护进程在处理超时 。经过一定时间,守护进程考虑删除一个表
项 。它先用表里的以太网地址直接发送地址转换请求包(假如需要可重传几次) 。假如在一

推荐阅读