ARP协议简介:
协议功能:地址解析协议(ARP),目3—>目2。
当我们想访问一个主机的时候,通常是用它的IP地址,但是IP的数据包不能直接在物理的网络上进行发送,比如我在一个网内我知道对方的IP地址192.168.0.1,但是我并不能用这个IP地址去做物理网络的寻址,物理网络实际上是一个以太网,物理网是有自己的一套实现机制,并不认IP地址,那么现在在发送一个数据包的时候,遇到的问题是怎么样从一个IP地址查询变换成为一个以太网的地址,这就是ARP协议的功能,它把三层的目标地址解析成2层的目标地址,便于数据包封装成帧在物理网络上传输。
ARP的实现:
在IP->Ethernet的典型环境中:3层是一个IP网络,2层是一个以太网络,在典型的这种情况下,ARP的实现方法叫做广播+cache。首先说的是广播,我们有一个IP地址192.168.0.1,我们没有它的物理地址(以太地址),通过ARP协议在网上广播一下:哪一台机器是192.168.0.1,所有的机器都听到了这个广播,但是只有192.168.0.1这台机器给出回应,并且给出其网卡地址是什么。这样源主机就可以通过广播获得了一个绑定关系,获得了目标主机的IP地址和网卡地址的绑定关系,这个绑定地址并不是用一次就完,而是放在了Cache里面,缓存下来,那么下次再找192.168.0.1就不需要广播了,只要去内存里查表即可得。通过广播+Cache这种方法实现了三层地址到二层地址的变换。
1.检查ARP缓存;
2.发出ARP广播请求;
3.将A的MAC加入到ARP缓存中
4.回应ARP消息
5.将C的MAC加入ARP缓存中
6.使用MAC地址封帧发送数据。
Cache的问题
Cache分为静/动两种
动态的Cache有寿命的问题
不同系统的动态Cache寿命不同
Cache问题影响系统调试
ARP命令:
显示和修改地址解析协议(ARP)使用的“IP 到物理”地址转换表。
ARP -s inet_addr eth_addr [if_addr]
ARP -d inet_addr [if_addr]
ARP -a [inet_addr] [-N if_addr] [-v]
-a 通过询问当前协议数据,显示当前 ARP 项。
如果指定 inet_addr,则只显示指定计算机
的 IP 地址和物理地址。如果不止一个网络
接口使用 ARP,则显示每个 ARP 表的项。
-g 与 -a 相同。
-v 在详细模式下显示当前 ARP 项。所有无效项
和环回接口上的项都将显示。
inet_addr 指定 Internet 地址。
-N if_addr 显示 if_addr 指定的网络接口的 ARP 项。
-d 删除 inet_addr 指定的主机。inet_addr 可
以是通配符 *,以删除所有主机。
-s 添加主机并且将 Internet 地址 inet_addr
与物理地址 eth_addr 相关联。物理地址是用
连字符分隔的 6 个十六进制字节。该项是永久的。
eth_addr 指定物理地址。
if_addr 如果存在,此项指定地址转换表应修改的接口
的 Internet 地址。如果不存在,则使用第一
个适用的接口。
示例:
> arp -s 157.55.85.212 00-aa-00-62-c6-09.... 添加静态项。
> arp -a .... 显示 ARP 表。
RARP
RARP的R是reverse,和ARP的协议功能是相反的。源2->源3,系统启动时查找自己的IP地址,启动时自己没有IP地址,需要动态的获得一个IP,把自己的MAC地址发到网上,网上有ARPserver,查到自己的IP地址并且反馈IP,以便初始化协议栈,由于存在BOOTP(除了提供IP地址还能提供启动映像文件的比如说操作系统文件网上的路径)、DHCP(dynamic host configuration protocol不仅能给出IP地址还能动态的分配IP地址,上网的时候ISP使用DHCP动态的分配一个IP地址)等协议,RARP使用较少。
IARP inverse address resolution protocol
目3->源2,这种变换只在Frame Relay网络中使用,因为在帧中继网络中没有全局MAC地址的概念,它的二层的(数据链路层)的地址都是本地的,也就是说Frame Relay的DLCI号码是本地地址,所以解析的结果不能解析到对端的二层地址,只能解析到源端的二层地址。Frame Relay的IARP是一个比较复杂的操作。在帧中继中有详细的IARP。