ARP 协议
众所周知,当我们在浏览器里输入某个站点的域名(网址)回车后,我们就能够进入相应的网站,其实当网站的首页加载到我们的电脑上之前,DNS服务器将域名转换成了IP地址,我们找到我们要访问的站点,真正靠得是转换之后的这个IP地址。
而在局域网里面,任意两个节点之间通信,必须知道对方的MAC地址,才能给对方发送帧,但如果在发送之前,不知道对方的MAC地址,那该怎么办呢,这就是我们要讨论的ARP协议。这个时候,其实它是通过ARP(地址解析)协议来将IP地址翻译成MAC地址的。下面我们围绕下图来说明。
我将ARP的应用分为两种情况来讨论:同一个网段、不同的网段。
(一)同一个网段
这种情况比较简单,图中A和B属于同一个网段,假设此时A要给B发送四个ICMP数据包。
(1)在SW上查看一下MAC表,结果如下:
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
这表明A在封装发给B的数据帧时候,还不知道B的MAC地址,所以这个时候A就要发送ARP包,进行地址解析。
(2)ARP解析包,如下图
由此图可以看出,ARP解析包,在数据链路层封装成帧的时候,目的地址采用FFFF.FFFF.FFFF的广播地址,所以此包,在此网段上的所有节点都能够接受到,但只有目的IP地址是192.168.1.3的主机(B主机)回应。
(3)回应包格式
由上图可以看出,在回应包里面SRC MAC:0002.1742.1171,就是B主机的MAC地址,这个包得目的地址是192.168.1.2(A主机)所以当这个包到达A主机的时候,A主机就知道了B主机的MAC地址,那么第一个ICMP包的格式是:
可见,A主机在数据链路层封装帧的时候,DEST MAC 已经就是刚才ARP解析获得的B的MAC地址了,这时候A和B之间就能够顺利的通信了。
(4)此时你在查一下SW的MAC表,如下:
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
1 0002.1742.1171 DYNAMIC Fa0/3
1 00e0.f7dc.9d01 DYNAMIC Fa0/1
1 00e0.f9dc.342b DYNAMIC Fa0/2
(二)不同的网段
假设A和C要通信,因为通信之前A不知道C的MAC地址,所以要进行ARP解析,但不同网段的解析要比同一个网段的解析复杂。此解析可以分为两个阶段.
第一个阶段:
由上图可知,此阶段ARP的主要任务是获知源节点所在网段的网关所对应的MAC地址,而在上图中网管就是router的F0/0。所以当F0/0收到此ARP广播包的时候,会有一个回应包,如下图:
由上图可知,网关给A主机的包中SRC MAC:00E0.F7DC.9D01这就是网关F0/0端口的MAC地址,那么这个时候,A将会放松一个ICMP包给此网关,此包的格式如下图:
当这个包到达路由器的时候,它会从F0/1端口进行转发,但转发前它要进行第二个阶段的ARP解析,因为最终根A通信的是C主机,而此时C主机的MAC地址还不知道。
第二个阶段:
由图可知,此时SRC MAC:00E0.F7DC.9D02(f0/1的MAC地址),而目的地址是广播地址,所以此广播ARP包,C主机肯定能够收到,收到后它将会有一个回应包,此包如下:
由图可知,SRC MAC:00E0.A3CE.C268,就使我们所需要的C主机的MAC地址,这个时候,第二个阶段的解析完成。
最后,A就利用C的MAC地址封装城帧,发数据包给C。如下图:
当四个包发完以后(因为ping命令默认的就是发送四个数据包),主机A上显示的结果是。
Request timed out.
Reply from 192.168.2.2: bytes=32 time=6ms TTL=127
Reply from 192.168.2.2: bytes=32 time=94ms TTL=127
Reply from 192.168.2.2: bytes=32 time=94ms TTL=127
第一个包,超时了。可以这么说,只要是跨网段的,那么第一个包肯定超时,这个就需要大家一起来思考为什么了。