计算机网络 网络层 ARP :网络世界没有我,你哪也别想去

初识ARP


从网络分层上看,我们知道二层网络中,使用 MAC 地址进行传输MAC 地址做为数据链路层的设备标识符。

                               

三层网络中,使用 IP 地址进行传输IP 地址做为网络层的设备标识符。

我们还知道,容易记忆的域名,通过 DNS 解析成 IP 地址,有了 IP 地址就可以在网络上找到目的地。

IP 地址通过 ARP ,获得 MAC 地址,有了 MAC 地址才能在物理网络上传输数据。

                                                                ARP

ARP 是什么呢?

ARP ,是地址解析协议。根据设备的 IP 地址来查询对应 MAC 地址的协议。主机通过 ARP 查询到 MAC 地址后,将在 ARP 缓存表中增加映射表项,即 IP 地址和 MAC 地址的映射表项。

                                                          

  

ARP 原理


ARP 是如何知道 MAC 地址的呢?简单说,ARP 是通过 ARP 请求和 ARP 响应报文确定 MAC 地址的。

                                                              ARP报文

假如主机 A 向同一网段上的主机 B 发送数据。主机 A 的 IP 地址为 10.0.0.1 ,主机 B 的 IP 地址为 10.0.0.2 ,主机 C 的 IP 地址为 10.0.0.3 。它们都不知道对方的 MAC 地址。ARP 地址解析过程如下:

1.  主机 A 首先查看自己的 ARP 表(即 ARP 缓存表),确定是否有主机 B 的 IP 地址对应表项。如果有,则直接使用表项中的 MAC 地址进行封装,封装成帧后发送给主机 B 。

2.   如果主机 A 的 ARP 表没有对应的表项,就发送一个广播帧,源 IP 和源 MAC 地址是主机 A ,目的 IP 地址是主机 B ,目的 MAC 地址是广播 MAC 地址,即 FFFF-FFFF-FFFF 。这就是 ARP 请求报文

3.  ARP 请求是广播报文,同一个网段的所有主机都能收到只有主机 B 发现报文中的目的 IP 地址是自己,于是主机 B 发送响应报文给主机 A 源 MAC 地址和源 IP 地址是主机 B ,目的 MAC 地址和目的 IP 地址是主机 A ,这个报文就叫 ARP 响应报文。同时,主机 B 的 ARP 表记录主机 A 的映射关系,即主机 A 的 IP 地址和 MAC 地址的对应关系。

 4.  主机 C 也收到了 ARP 请求报文,但目的 IP 地址不是自己,所以不会进行响应。于是主机 C 添加主机 A 的映射关系到 ARP 表,并丢弃 ARP 请求报文。

                                                                        ARP表 

 5.  主机 A 收到 ARP 响应报文后,添加主机 B 的映射关系,同时用主机 B 的 MAC 地址做为目的地址封装成帧,并发送给主机 B 。

                                                            ARP获取MAC地址

如果每发送一个 IP 报文就要进行一次 ARP 请求,来确定 MAC 地址,那将会造成不必要的网络流量,通常的做法是用 ARP 表记录 IP 地址和 MAC 地址的映射关系。主机发送报文时,首先会查看它的 ARP 表,目的是为了确定是否是已知的设备 MAC 地址。如果有,就直接使用;如果没有,就发起 ARP 请求获取。不过,缓存是有一定期限的。ARP 表项在老化时间( aging time )内是有效的,如果老化时间内未被使用,表项就会被删除。

                                                                       ARP缓存

ARP 表项分为动态 ARP 表项静态 ARP 表项: 

  • 动态 ARP 表项由 ARP 动态获取,因此在网络通信中,无需事先知道 MAC 地址,只要有 IP 地址即可。如果老化时间内未被使用,表项就会被自动删除。

  • 静态 ARP 表项是手工配置,不会老化。静态 ARP 表项的优先级高于动态 ARP 表项,可以将相应的动态 ARP 表项覆盖。

                                                               ARP表项类型

代理 ARP


ARP 广播报文会被路由器隔离,没有默认网关、网段不同的主机相互通信时,连接这两个网络的路由器可以响应这个 ARP 请求,这个过程叫做代理 ARP( Proxy ARP )。

                                                                     代理ARP

主机 A 与另一个网段的主机 B 通信,主机 A 直接发送 ARP 请求,解析主机 B 的 MAC 地址。运行了代理 ARP 的路由器收到 ARP 请求后,代替主机 A 在 20.0.0.0 网段发出 ARP 请求,解析主机 B 的地址。

                                                                    代理ARP请求

主机 B 收到路由器发出的 ARP 请求,发出 ARP 响应报文,告知自己的 MAC 地址是 2222-2222-2222 。路由器收到 ARP 响应后,也向主机 A 发送 ARP 响应,但目的 MAC 地址是与 10.0.0.0 网段连接的端口 MAC 地址是 1010-1010-1010 。主机 A 收到报文后,在 ARP 表中添加 IP 地址是 20.0.0.1 和 MAC 地址是 1010-1010-1010 的映射表项。

                                                                  代理ARP响应

因此主机 A 会将所有要发送给主机 B 的数据发送给路由器,路由器再将其转发给主机 B 。反之亦然。

代理 ARP 功能屏蔽了分离的网络,主机不用修改 IP地址和子网掩码就可以和现有的网络互通。让用户使用起来,跟在同一个网络上一样。代理 ARP 使用在主机没有默认网络,或没有任何路由的网络上,通常是那些不支持设定子网掩码的老设备。但代理 ARP 会转发 ARP 广播报文,造成网络效率低,不适合用于大规模网络。

                                                             代理ARP

猜你喜欢

转载自blog.csdn.net/qq_34556414/article/details/123413334
今日推荐