ARP协议
思考:我们的电脑和另一个电脑通信,最终需要把数据发送到网卡转成物理信号发送到目的主机。但是网卡工作在OSI七层模型的第一二层,发送数据需要知道目的主机的MAC地址。网卡是如何获取到目的主机的MAC地址的?
此时就需要一种可以根据上层的IP地址获取到MAC地址的能力,把这种能力规范起来的协议就是ARP协议。
ARP(英语:Address Resolution Protocol,缩写:地址解析协议)是一个通过解析网络层地址来找寻数据链路层地址的网络传输协议。
ARP寻址过程:
一、先从简单的场景开始,同一个局域网内两台主机要通信。
关注寻址过程:
-
初始状态A\B主机内都没有对方的MAC地址:
A:
B: -
A利用telnet和B建立一个连接
虽然连接被拒绝了,但是通信过程依然是发送了。
通过抓包分析
- A拿到需要通信的地址后,检查IP对应的MAC地址不在MAC表内
- 于是A向整个子网ff:ff:ff:ff:ff:ff广播(Broadcast),谁有B(172.18.0.3)的地址
- 子网内所有机器,拿到广播后,通过ip分析是否是发给自己的。
- B对比IP发现是发给自己的,于是给A回复了自己的MAC地址(下面No.2,ARP回复)。
- A拿到B的MAC地址,建立TCP连接
二、若要通信的主机,不在同一局域网。
-
主机A想给外部机器C(47.92.12.52)通信
删除A的mac表内的数据,准备抓包看下如何获取C的mac地址
-
A利用telnet和C建立一个连接
对应的抓包数据
发现A并没有去询问C的mac地址,而是直接询问网关(172.18.0.1)的mac地址。
寻址过程:
- A通过IP发现,C不在相同的子网内
- A直接询问默认网关地址的MAC地址
- A通过得到网关MAC后,直接把建立连接的数据帧发送到网关,后续传输都交于网关去处理。
另外,当发送主机和目的主机不在同一个局域网中时,即便知道对方的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。
代理ARP
代理ARP: 当ARP请求目标跨网段时,网关设备收到此ARP请求,会用自己的MAC地址返回给请求者,这便是代理ARP(Proxy ARP)。
主要用于没有配置缺省网关的计算机要和其他网络中的计算机实现通信,网关收到源计算机的 ARP 请求会使用自己的 MAC 地址与目标计算机的 IP地址对源计算机进行应答。代理ARP就是将一个主机作为对另一个主机ARP进行应答。它能使得在不影响路由表的情况下添加一个新的Router,使得子网对该主机来说变得更透明化。同时也会带来巨大的风险,除了ARP欺骗,和某个网段内的ARP增加,最重要的就是无法对网络拓扑进行网络概括。代理ARP的使用一般是使用在没有配置默认网关和路由策略的网络上的。
代理ARP会"受限于沿途网络设备",真实网络里面一般都直接用ARP获取MAC地址。