IP地址只是主机在网络层中的地址,如果要将网络层中数据包传送给目的主机,必须知道目的主机的数据链路层地址(比如以太网络MAC地址)。因此必须将IP地址解析为数据链路层地址。
ARP报文分为ARP请求和ARP应答报文,ARP请求和应答报文的格式:
当一个ARP请求发出时,除了接收方硬件地址(即,请求方想要获取的地址)字段为空外,其他所有的字段都被使用。 ARP应答报文使用了所有的字段。
报文字段 | 字段含义 |
硬件类型 | 表示硬件接口的类型, |
协议类型 | 表示要映射的协议地址类型,它的值为0x0800即表示IP地址 |
硬件地址长度 | 数据报文中硬件地址以字节为单位的长度 |
协议地址长度 | 数据报文中协议地址以字节为单位的长度 |
操作码 | 指明数据报是ARP请求报文还是ARP应答报文 取值为1——数据报是ARP请求报文 取值为2——数据报是ARP应答报文 取值为3——数据报是RARP请求报文 取值为4——数据报是RARP应答报文 |
发送方硬件地址 | 发送方设备的硬件地址 |
发送方IP地址 | 发送方设备的IP地址 |
接收方硬件地址 | 接收方设备的硬件地址 ARP请求报文中——这个字段为空 ARP应答报文中——这个字段为应答报文返回的接收方硬件地址 |
接收方IP地址 | 接收方设备的IP地址 |
硬件接口类型列表
类型 | 描述 |
1 | 以太网 |
2 | 实验以太网 |
3 | X.25 |
4 | Proteon ProNET(令牌环) |
5 | 混沌网(chaos) |
6 | IEEE802.X |
7 | ARC网络 |
假设主机A和B在同一个网段,主机A要向主机B发送信息。地址解析过程如下:
(1) 主机A首先查看自己的ARP表,确定其中是否包含有与主机B对应的ARP表项。如果找到了对应的MAC地址,则主机A直接利用ARP表中的MAC地址,对IP数据包进行帧封装,并将数据包发送给主机B。
(2) 如果主机A在ARP表中找不到对应的MAC地址,则将缓存该数据报文,然后以广播方式发送一个ARP请求报文。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。由于ARP请求报文以广播方式发送,该网段上的所有主机都可以接收到该请求,但只有被请求的主机(即主机B)会对该请求进行处理。
(3) 主机B比较自己的IP地址和ARP请求报文中的目标IP地址,当两者相同时进行如下处理:将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后以单播方式发送ARP响应报文给主机A,其中包含了自己的MAC地址。
(4) 主机A收到ARP响应报文后,将主机B的MAC地址加入到自己的ARP表中用于后续报文的转发,同时将IP数据包进行封装后发送出去。
一般情况下,ARP动态执行并自动寻求IP地址到以太网MAC地址的解析,无需管理员的介入。
那么跨网段的数据包转发是怎么样的呢?
如图所示:
根据上图:PC1要与PC2通信。分以下几种情况来论述:
-
PC上没有配置默认网关,路由器上没有配置路由策略的。这种情况下,不能通信。
-
PC上配置默认网关,路由器上没有路由策略的。这种情况下,路由器上必须起代理arp,否则不能通信。
-
PC上配置默认网关,路由器上有路由策略的。这种情况下,路由器上可以不配置代理arp。
具体讲解一下:
首先要理解代理arp,所谓代理arp:即对于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。代理ARP就是将一个主机作为对另一个主机ARP进行应答。它能使得在不影响路由表的情况下添加一个新的Router,使得子网对该主机来说变得更透明化。同时也会带来巨大的风险,除了ARP欺骗,和某个网段内的ARP增加,最重要的就是无法对网络拓扑进行网络概括。代理ARP的使用一般是使用在没有配置默认网关和路由策略的网络上的。
注意:代理ARP只响应路由表中有的IP地址。如上图所示,在1那种情况下,PC1和PC2是不能通信的。因为PC1所连接的R1上没有192.168.2.0这个网段的路由。(1情况是没有配置路由策略)R1只有直连路由。
在2的情况下,PC1没有配置默认网关。它会发送ARP广播。在R1的e0/0口,接收到arp请求广播后,代理arp会查找路由表,发现去往PC2的路由从e0/1口出去,到达R2上。
在3的情况下,根据PC1的默认网关,把去往PC2的数据包发到R1上,然后,R1根据路由表去往PC2.