图解ARP协议,首先要知道ARP是什么。
但上来就说是什么,往往又不容易说清楚,因为每一个协议都有他的背景知识。
背景知识
-
TCP/IP 协议分为5层,从下往上依次为:物理层、链路层、网络层、传输层、应用层。本文重点关注第2、3层,第2层链路层,基于MAC地址转发数据帧,第3层网络层,基于IP地址转发报文;
-
MAC(Media Access Control)地址是网卡决定的,烧录在网卡或者接口上的物理地址,具有二层意义和全球唯一性,是固定的,一般不能被改变。IP地址是网络中的主机或者三层接口在网络中的逻辑地址,在同一个网络内具有唯一性。
动脑思考
我们先想一个问题,我们都知道,通过IP地址能定位唯一一台机器,但它是怎么定位的呢?
进一步说,因为我们发报文的时候只知道对方的IP地址,不知道对方的MAC地址。但是我们在物理层传输的时候又需要MAC地址才能找到那台机器。所以,它是怎么通过IP地址进而获取对方MAC地址的呢?
所以我们猜测:它一定是通过什么东西,能够将对方的IP地址转化成对应的MAC地址。
动手证明
百度定义:
有了上面的思考,我们去看看定义:
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。
主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。
也就是说,虽然数据包发送时包含了完整的TCP/IP四层信息,但是IP地址只在网络间寻址才起作用,在同一个网络内,IP地址在发送端被转化为MAC地址进行寻址,而这种转化和交换的对应关系,依赖于ARP协议和MAC地址表。
再换句话说,
网络层协议是IP,底层协议是以太网,在局域网的范围内,通过ARP来将IP和MAC地址对应起来
当当当,是不是与我们的思考对应起来了呢?
WirkShark试验:
只是一句定义还不够,因为细节性的东西我们还不了解。比如,它是如何通过ARP协议将IP地址转换成MAC地址的呢?
因此我们需要做个小试验,如何试验呢?
我在B机器上ping了一下A机器的IP地址,同时使用WireShark截收了报文,通过截获的Wireshark报文来图解ARP协议。
AB机器的基本信息如下:
#B机器:
IP地址:10.15.2.37
默认网关:10.15.2.1
子网掩码:225.225.225.0
#A机器:
IP地址:10.104.0.226
默认网关:10.104.0.254
子网掩码:225.225.225.0
OK,信息展示完毕,我们来看我们的朋友WireShark截获了什么吧。
1号包:NBNS协议包,见WireShark图解NBNS协议,此处略
2号包:ARP协议包
你看,它好可爱哦,它问默认网关Who has 10.15.2.1?
B通过ARP广播(看到标识区内Broadcast了吗,广播的意思),查询默认网关10.15.2.1的MAC地址。
还记得刚刚我们列出的信息吗?10.15.2.1是B机器的默认网关。
那么,问题出现了,为什么我们在B机器上ping的A的IP,B却去查询默认网关的MAC地址呢?
默认网关小知识:
网关是一个网络到另一个网络的关口,一个网络一个网关,所以它的作用就是把网络A和网络B连接起来,使之A网络中的机器能够和B网络中的机器进行通信。不仅如此,还能够转换协议,使不同协议的网络段中的机器进行通信。默认网关,顾名思义,就是默认的网关设置。这个可以手动,也可以由DHCP服务器自动设置。
这是因为B根据自己的子网掩码,计算出A属于不同子网,跨子网通信需要默认网关的转发。而要和默认网关通信,就需要获得其MAC地址。
2号包:图的内容是默认网关10.15.2.1回应了我们的B机器,告知自己的MAC地址。(忽略Source信息)
26号包:
B发出ping包,指定Destination IP是10.104.0.226,即A。
27号包:
A回复Bping包,指定Destination IP是10.15,2.37,即B。
分析完这几个包,想必流程也就清楚了。B先把ping包交给默认网关,默认网关转发给A,A收到请求后直接回复给B,形成三角环路。
网友评论