【网络协议】ARP协议

为什么网络需要同时借助MAC地址这种物理地址和IP地址这种逻辑地址进行通信?

尽管目前MAC地址可以通过逻辑的方式进行修改,但它最初是被设计为不可人为更改的硬件地址。虽然MAC地址也可以满足唯一性的要求,但由于它不可由管理员根据需求通过逻辑方式进行管理,因此它只能进行局部寻址,无法实现全局范围内的寻址。而IP地址则不是硬件本身自带的地址,它是一种由管理员按需为设备分配的逻辑地址。通过子网划分展示了IP地址的可管理性,因此逻辑地址更适合执行全局范围内的寻址。

然而,因为IPV4协议定义的IP地址最多只能有2^32个,并不能为网络中所有设备都设置一个唯一的IP地址。再加之NAT协议的缘故,所以选择了IP地址+MAC地址结合的寻址方式。结果就是一个局域网中的通信都是用MAC地址,与局域网外进行通信则需要通过网关(NAT路由器)。因为交换机的出现,从开始的总线型局域网变成了现在的星型局域网络结构,即所有主机都与交换机的某个端口相连,交换机内部自学习并维护一个MAC地址表,将端口与MAC地址映射起来。所以在局域网中的通信就变得高效且便捷。

这时候通信就需要有一种协议能够根据目的设备的IP地址查询它的MAC地址,这就是ARP(地址解析协议)。

交换机中存在MAC地址表,主机中则存有ARP高速缓存。ARP高速缓存是IP地址与MAC地址的映射,也可以通过学习获得,它存在某种生命周期。

ARP的工作方式是,当一台设备由于不知道目的设备的MAC地址,而无法封装以目的设备的MAC地址为以太网数据帧的目的MAC时,他会先以广播MAC地址(FF-FF-FF-FF-FF-FF)作为目的MAC地址封装广播数据帧,向整个局域网请求目的IP(私网IP)对应的MAC地址。当目的设备通过目的IP地址识别出这是请求自己的MAC地址的ARP请求包时,就会以自己的MAC地址作为源MAC地址,向ARP请求包的始发设备发送单播的ARP响应包。在接收到ARP响应包后,请求设备就获得了目的设备的MAC地址。

所以两个不同局域网中的主机进行网络通信,只需要知道对方的IP地址(这里的IP地址指网关IP地址,即公网IP)、端口号(这里的端口号指NAT路由器的端口号,因为NAT路由器把私网IP替换成自己的公网IP,并且把局域网中需要通信的主机端口替换成自己的),MAC地址也是双方网关的MAC地址(所以源MAC是一路被替换的,只有目的MAC不变)。

ARP欺骗原理

设备将ARP响应中的地址对应关系保存到自己的ARP高速缓存中,并不考虑这是否是自己请求的ARP响应,也不会验证响应方的真实身份。这就让攻击者可以在网络中散布错误的IP-MAC对应关系。攻击者主动向网络中发送包含错误IP-MAC对应关系的ARP响应,这种做法称为ARP欺骗。

所以一个局域网中主机A可以响应网关的ARP请求(想要得到主机BMAC地址)冒充主机B,并响应主机B的ARP请求(想要得到网关MAC地址),这种攻击者将自己插入受害者的通信路径中盗取通信数据的方式,称为中间人攻击。

你可能感兴趣的:(Linux网络编程,网络)