TCP/IP详解卷1第四章笔记

引言

ARP为IP地址到对应的硬件地址之间提供动态映射。我们之所以用动态这个词是因为这个过程是系统自动完成的。一般应用程序用户和系统管理员不必担心

当我们敲击以下命令:

1
% ftp bdsi

会发生:

  1. 应用程序FTP客户端调用函数**gethostbyname()**把主机名bdsi转换成32bit的IP地址;
  2. FTP客户端用请求得到的IP地址建立连接;
  3. TCP发送一个连接请求分段到远程的主机;
  4. 如果目的主机在本地网络上(如以太网、令牌环网或点对点链路的另一端),那么IP数据报就可以直接送到目的主机上;
  5. 假定是一个以太网,那么发送端主机必须把32bit的IP地址转换为48bit的以太网地址;
  6. ARP发送一份称为ARP请求的以太网数据帧给以太网上的每个主机(广播);
  7. 目的主机的ARP层收到这份广播报文后,识别出这是它的发送端在识别它的IP地址;
  8. 收到ARP应答后,使ARP请求应答交换的IP数据报现在就可以传送了;
  9. 发送IP数据报到目的主机
    当用户输入ftp命令arp的操作
图一.当用户输入ftp命令时arp的操作

在ARP背后有一个概念:网络接口有一个硬件地址。ARP的作用是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。

点对点链路不适用ARP。

ARP高速缓存

ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存。高速缓存在每一项的生存时间大概是20分钟,起始时间从被创建时开始算起。

48bit的以太网地址用6个十六进制的数表示,中间以冒号隔开。

ARP的分组格式

ARP请求或应答分组格式

图二.ARP请求或应答分组格式

以太网报头的前两个字段是以太网的源地址和目的地址。目的地址全为1的特殊地址是广播地址。

以太网帧类型表示后面数据的类型。对于ARP请求或应答来说,该字段的值是0x0806

硬件类型字段表示硬件地址的类型。它的值为1即表示以太网地址。协议类型字段表示要映射的协议地址类型。它的值为0x0800即表示IP地址

硬件地址长度协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上IP地址的ARP请求或应答来说,它们的值分别是6和4

最后四个字段分别是发送端的硬件地址发送端的协议地址目的端的硬件地址目的端的协议地址。这里有一些重复信息:在以太网的数据帧报头中和ARP请求数据帧中都有发送端的硬件地址。

对于一个ARP请求来说,除目的端硬件地址外的所有其他的字段都有填充值。

ARP举例

对不存在主机的ARP请求

大多数的BSD实现把TCP连接请求的时间限制在75秒

ARP高速缓存超时设置

在ARP高速缓存中的表项一般要设置超时值。从伯克利系统演变而来的系统一般对完整的表项把超时值设置为20分钟,对不完整的表项把超时值设置为3分钟。

ARP代理

如果ARP请求是从一个网络的主机发往另一个网络的主机,那么连接这两个网络主机的路由器就可以回答该请求。这个过程称为委托ARP或者ARP代理。

ARP代理也称作混合ARP(promiscuous ARP)或者ARP出租(ARP hack)。这样的名字来源于ARP的其他用途:通过两个物理网络之间的路由器可以互相隐藏物理网络。

免费ARP

免费ARP是指主机发送ARP查找自己的IP地址。通常,它发生在系统引导期间进行接口配置的时候。

免费ARP可以有两个方面的作用:

  1. 一个主机可以通过它来确定另一个主机是否设置了相同的IP地址
  2. 如果发送免费ARP的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。

ARP命令

超级用户可以通过选项-d来删除ARP高速缓存中的某一项内容。

可以通过选项-s来增加高速缓存中的内容。

位于命令行末尾的关键字pub和-s一起,可以使系统起着主机ARP代理的作用。

小结

在大多数的TCP/IP实现中,ARP是一个基础协议,但是它的运行对于应用程序或系统管理员来说一般是透明的。ARP高速缓存在它的运行过程中非常关键,我们可以用arp命令对高速缓存进行检查和操作。高速缓存中的每一项内容都有一个定时器,根据它来删除不完整和完整的表项。arp命令可以显示和修改ARP高速缓存中的内容。