TCP/IP详解04-链路层:ARP和RARP

TCP/IP详解04-链路层:ARP和RARP

1. ARP

还记得数据链路层的以太网的协议中,每一个数据包都有一个MAC地址头么?我们知道每一块以太网卡都有一个MAC地址,这个地址是唯一的,那么IP包是如何知道这个MAC地址的?这就是ARP协议的工作。

数据链路如以太网或令牌环网是根据 48 bit的以太网地址来确定目的接口的,网络层中使用 32 bit的 IP 地址,ARP 为 IP 地址到对应的硬件地址之间提供动态映射。

ARP(地址解析)协议是一种解析协议,本来主机是完全不知道这个IP对应的是哪个主机的哪个接口,当主机要发送一个IP包的时候,会首先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向网络发送一个ARP协议广播包,这个广播包里面就有待查询的IP地址,而直接收到这份广播的包的所有主机都会查询自己的IP地址,如果收到广播包的某一个主机发现自己符合条件,那么就准备好一个包含自己的MAC地址的ARP包传送给发送ARP广播的主机,而广播主机拿到ARP包后会更新自己的ARP缓存(就是存放IP-MAC对应表的地方)。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的的数据包发送工作。

1.1 ARP的分组格式

在以太网上解析 IP 地址时,ARP 请求和应答分组的格式如下图所示(ARP可以用于其他类型的网络,可以解析 IP 地址以外的地址。)
这里写图片描述

  • 以太网的源地址和目的地址:目的地址为全 1 的特殊地址是广播地址。电缆上的所有以太网接口都要接收广播的数据帧。
  • 以太网帧类型:表示后面数据的类型。对于 ARP 请求或应答来说,该字段的值为0x0806。
  • 硬件类型字段表示硬件地址的类型。它的值为 1即表示以太网地址。
  • 协议类型字段表示要映射的协议地址类型。它的值为 0x0800 即表示 IP 地址。它的值与包含 IP 数据报的以太网数据帧中的类型字段的值相同,这是有意设计的。
  • 硬件地址长度协议地址长度分别指出硬件地址和协议地址的长度,以字节为单位。对于以太网上 IP 地址的 ARP 请求或应答来说,它们的值分别为 6 和 4。
  • 操作字段指出四种操作类型,它们是 ARP请求(值为1)、ARP应答(值为2)、RARP请求(值为3)和 RARP 应答(值为4)。
  • 接下来的四个字段是发送端的硬件地址(在本例中是以太网地址)、发送端的协议地址(IP地址)、目的端的硬件地址目的端的协议地址

1.2 ARP高速缓存

ARP 高效运行的关键是由于每个主机上都有一个 ARP 高速缓存。这个高速缓存存放了最近 Internet 地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为 20分钟,起始时间从被创建时开始算起。

可以用arp(8)命令来检查ARP高速缓存:

root@10.3.1.11:/data/lincoln# arp
Address                  HWtype  HWaddress           Flags Mask            Iface
10.3.1.16                ether   00:00:5e:00:01:84   C                     bond1
10.3.1.15                ether   00:00:5e:00:01:84   C                     bond1
10.3.1.13                ether   00:00:5e:00:01:84   C                     bond1
10.3.1.22                ether   00:00:5e:00:01:84   C                     bond1
10.3.1.19                ether   00:00:5e:00:01:84   C                     bond1
10.3.1.12                ether   00:00:5e:00:01:84   C                     bond1
gateway                  ether   00:00:5e:00:01:84   C                     bond1
10.3.1.10                ether   00:00:5e:00:01:84   C                     bond1
10.3.1.23                ether   00:00:5e:00:01:84   C                     bond1

1.3 特殊的功能

ARP代理

如果 ARP 请求是从一个网络的主机发往另一个网络上的主机,那么连接这两个网络的路由器就可以回答该请求,这个过程称作委托 ARP 或 ARP代理(Proxy ARP)。这样可以欺骗发起 ARP 请求的发送端,使它误以为路由器就是目的主机,而事实上目的主机是在路由器的“另一边”。路由器的功能相当于目的主机的代理,把分组从其他主机转发给它。

免费ARP

另一个 ARP 特性称作免费ARP (gratuitous ARP)。它是指主机发送 ARP 查找自己的IP地址。通常,它发生在系统引导期间进行接口配置的时候。

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

  • 1) 一个主机可以通过它来确定另一个主机是否设置了相同的 IP 地址。
  • 2)更新同一网段内其他们主机保存的该请求IP的ARP缓存(当我们的主机正好改变了硬件地址的时候可以这样做)。

2. RARP

具有本地磁盘的系统引导时,一般是从磁盘上的配置文件中读取IP地址,而对于无盘机,则需要用RARP来获取IP地址。

无盘系统的RARP的实现为从接口卡上读取硬件地址,然后发送RARP请求,最后RARP服务器在应答中返回该地址对应的IP.

2.1 RARP的分组格式

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

2.2 RARP服务器的设计

虽然R A R P在概念上很简单,但是一个 R A R P服务器的设计与系统相关而且比较复杂。总要带来以下来个问题:

作为用户进程的RARP服务器

RARP 服务器提供硬件地址到 IP 地址的映射,该映射包含在磁盘文件中。内核一般不读取磁盘文件,因此 RARP 服务器由用户进程来实现,而不能作为内核的TCP/IP来实现。

RARP请求是作为一个特殊类型的以太网数据帧来传送的(帧类型字段值 为0x8035)。这说明RARP服务器必须能够发送和接收这种类型的以太网数据帧。 由于发送和接收这些数据帧与系统有关,因此 RARP服务器的实现是与系统捆绑在一起的。

每个网络有多个RARP服务器

RARP 请求是在硬件层上进行广播的(使用链路层广播)。这意味着它们不经过路由器进行转发。为了让无盘系统在RARP服务器关机的状态下也能引导,通常在一个网络上(例如一根电缆)要提供多个 RARP服务器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值