4.1、引言
当一台主机吧以太网数据帧发送到同一局域网上的另一台主机时,是根据48 bit的以太网地址来确定目的接口的。
设备驱动程序从不检查IP数据报中的目的IP地址。
4.2、一个例子
任何时候我们敲入一下这个形式的命令:
% ftp bsdi
都会进行以下这些步骤。
1)应用程序FTP客户端调用函数gethostbyname(3)把主机名(bsdi)转换32 bit的IP地址。这个函数在DNS(域名系统)中称作解析器。这个转换过程或者使用DNS,或者在较小网络中使用一个静态的主机文件(/etc/hosts)。
2)FTP客户端请求TCP用得到的IP地址建立连接。
3)TCP发送一个连接请求分段到远端的主机,即用上述IP地址发送一份IP数据报
4)如果目的主机在本地网络上(如以太网、令牌环网或点对点连接的另一端),那么IP数据报可以直接送到目的主机上。如果目的主机在一个远程网络上,那么就通过IP选路函数来确定位于本地网络上的下一站路由器地址,并让它转发IP数据报。在这两种情况下,IP数据报都是被送到位于本地网络的一台主机或路由器。
5)假定是一个以太网,那么发送端主机必须把32b bit的IP地址变换为48 bit的网络地址。从逻辑Internet地址到对应的物理硬件地址需要进行翻译。这就是ARP的功能。
6)ARP发送一份称作ARP请求的以太网数据帧给以太网上的每个主机。这个过程称为广播。ARP请求数据帧中包含目的主机的IP地址。
7)目的主机的ARP层收到这份广播报文后,识别出这是发送端在询问它的IP地址,于是发送一个ARP应答。这个ARP应答包含IP地址和对应的硬件地址。
8)收到ARP应答后,使ARP进行请求—应答交换的IP数据报现在就可以传送了。
9)发送IP数据报到目的主机。
内核必须知道目的端的硬件地址才能发送数据,
点对点链路不使用ARP。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的IP地址。像以太网地址这样的硬件地址并不涉及。
4.3、ARP高速缓存
4.4、ARP的分组格式
以太网报头中的前两个字段是以太网的源地址和目的地址。目的地址为全1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
两个字节长的以太网帧类型表示后面的数据类型。对于ARP请求或应答来说,该字段的值为0x0806。
硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。
协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示IP地址。它的值与包含IP数据报的以太网数据帧中的类型字段的值相同,这样是有意设计的。
硬件地址长度和协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别是6和4。
操作字段指出四种操作类型,它们是ARP请求(值为1),ARP应答(值为2),RARP请求(值为3),RARP应答(值为4);
接下来四个字段是发送端的硬件地址、发送端的协议地址(IP地址)、目的端的硬件地址和目的端的协议地址。这里有一些重复信息:在以太网的数据报头中和ARP请求数据帧中都有发送端的硬件地址。
对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。当系统收到一份目的端为本机的ARP请求报文后,它就把硬件地址填进去,然后用两个目的地址分别替换两个发送端地址,并把操作字段置为2,最后把它发送回去。
4.6、ARP代理
如果ARP请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托ARP或ARP代理。
4.7、免费ARP
指主机发送ARP查找主机的IP地址。
免费ARP可以有两个方面的作用:
1)一个主机可以通过它来确定另一个主机是否设置了相同的IP地址。
2)如果发送免费ARP的主机正好改变了硬件地址,那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。