TCP/IP详解(四、五)ARP与RARP

       ARP:地址解析协议

       RARP:逆地址解析协议

       这两个协议都是链路层协议(图1-4)


        当一台主机把以太网数据帧发送到位于同一局域网上的另一台主机时,是根据 48 bit的以太网地址来确定目的接口的。设备驱动程序从不检查 IP数据报中的目的 IP地址。


一、ARP分组格式


        以太网报头中的前两个字段是以太网的源地址和目的地址目的地址为全 1的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
        两个字节长的以太网帧类型表示后面数据的类型。对于 A R P请求或应答来说,该字段的值为0x0806
        硬件类型字段表示硬件地址的类型。它的值为 1即表示以太网地址。

        协议类型字段表示要映射的协议地址类型。它的值为 0 x 0 8 0 0即表示 I P地址。它的值与包含 I P数据报的以太网数据帧中的类型字段的值相同,这是有意设计的(参见图 2-1)。
        硬件地址长度协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上 IP地址的ARP请求或应答来说,它们的值分别为 6和4。
        操作字段指出四种操作类型,它们是 ARP请求(值为1) ,ARP应答(值为 2), RARP请求(值为 3)和RARP应答(值为 4)。这个字段必需的,因为 A R P请求和ARP应答的帧类型字段值是相同的。
        接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(I P地址)、目的端的硬件地址和目的端的协议地址。注意,这里有一些重复信息:在以太网的数据帧报头中和 ARP请求数据帧中都有发送端的硬件地址。


二、ARP协议

       A R P 请求是广播的,而ARP应答却是直接送到请求端主机的。


三、ARP代理

      以太网与外网相连的主机会接收外网发送的且目的地址为本以太网的ARP请求,并发送回复,回复中mac地址为自己的mac。

      举个例子:主机A,IP地址是192.168.0.11/24。主机B,IP地址是192.168.1.22/24。主机A和主机B通过路由器R相连接,并且路由器R启用了Proxy ARP,并配置有路由。网络拓扑如下:

 
     eth0                eth0       eth1                        eth0
    A------------------Router R------------------B
192.168.0.11/24      192.168.0.0/24 eth0      192.168.1.22/24
                             192.168.1.0/24 eth1  
                    
  在主机A上执行:ping 192.168.1.22,主机A不知道主机B的MAC地址是多少,首先要发送ARP查询报文,路由器R接收到主机A发出的ARP查询报文,并代替主机B作出应答,应答ARP报文中填入的就是路由器R的MAC地址。这样,主机A就会认为路由器R的地址是192.168.1.22。以后所有发往192.168.1.22的报文都发到路由器R,路由器R再根据已配置好的路由表将报文转发给主机B。


四、免费 ARP (gratuitous ARP)

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

      免费ARP可以有两个方面的作用:
       1) 一个主机可以通过它来确定另一个主机是否设置了相同的 IP地址。主机b s d i并不希望对此请求有一个回答。但是,如果收到一个回答,那么就会在终端日志上产生一个错误消息“以太网地址: a : b : c : d : e : f发送来重复的 I P地址”。这样就可以警告系统管理员,某个系统有不正确的设置。
      2) 如果发送免费 A R P的主机正好改变了硬件地址(很可能是主机关机了,并换了一块接口卡,然后重新启动),那么这个分组就可以使其他主机高速缓存中旧的硬件地址进行相应的更新。一个比较著名的ARP协议事实[Plummer 1982]是,如果主机收到某个IP地址的ARP请求,而且它已经在接收者的高速缓存中,那么就要用 A R P请求中的发送端硬件地址(如以太网地址)对高速缓存中相应的内容进行更新。主机接收到任何 A R P请求都要完成这个操作( A R P请求是在网上广播的,因此每次发送 ARP请求时网络上的所有主机都要这样做)。


五、RARP

     具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取 I P地址。但是无盘机,如X终端或无盘工作站,则需要采用RARP来获得 IP地址。无盘系统的R A R P实现过程是从接口卡上读取唯一的硬件地址,然后发送一份 R A R P请求(一帧在网络上广播的数据),请求某个主机响应该无盘系统的 IP地址(在RARP应答中)


六、RARP 分组格式

      R A R P分组的格式与 A R P分组基本一致(见图 4 - 3)。它们之间主要的差别是 R A R P请求或应答的帧类型代码为 0x8035,而且RARP请求的操作代码为 3,应答操作代码为 4。
      对应于ARP,RARP请求以广播方式传送,而 RARP应答一般是单播 (unicast)传送的。


七、RARP服务器设计

     RARP服务器的复杂性在于,服务器一般要为多个主机(网络上所有的无盘系统)提供硬件地址到 I P地址的映射。该映射包含在一个磁盘文件中(在 U n i x系统中一般位于 / e t c / e t h e r s目录中)。由于内核一般不读取和分析磁盘文件,因此 RARP服务器的功能就由用户进程来提供,而不是作为内核的 TCP/IP实现的一部分。

     为了让无盘系统在 RARP服务器关机的状态下也能引导,通常在一个网络上(例如一根电缆)要提供多个 RARP服务器。发送RARP请求的无盘系统一般采用最先收到的RARP应答。另外,还有一种可能发生的情况是每个RARP服务器同时应答,这样会增加以太网发生冲突的概率。这时候,我们有两种方法来解决RARP 的回应问题。 
  第一种方法:为每一个做 RARP 请求的主机分配一主服务器,正常来说,只有主服务器才会做出 RARP 回应,其它主机只是记录下接收到 RARP 请求的时间。假如主服务器不能顺利做出回应,那么查询主机在等待逾时再次用广播方式发送 RARP 请求,其它非主服务器假如在接到第一个请求后很短时间内再收到相同请求的话,才会做出回应动作。 
  第二种方法:正常来说,当主服务器收到 RARP 请求之后,会直接做出回应;为避免所有非主服务器同时传回 RARP 回应,每台非主服务器都会随机等待一段时间再做出回应。如果主服务器未能做出回应的话,查询主机会延迟一段时间再进行第二次请求,以确保这段时间内获得非主服务器的回应。当然,设计者可以精心的设计延迟时间至一个合理的间隔。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值