ARP详解
实验拓扑
动作:在PC1上pingPC2
封装
分析报文的封装与解封装过程
1、首先,在PC1上要封装一个报文,此报文为ICMP,且是一个Type为8的Echo (ping)request
2、接下来,继续封装到IP层(加三层头),Sou IP为10.1.1.1 Des IP为10.1.1.2 Protocol为1 的ICMP报文(这里IP层说明了上层使用的是什么协议,本质上只做一个标明,并不关心上层是干什么的)
3、来到二层(Ethernet II 加二层头),进行MAC地址的封装,Type是0x0800(标明上层用的是IP协议),Sou MAC为本机的MAC地址,而Des MAC并不知道是多少,此时这个数据包就不能正常的完成封装,即丢弃
测试验证:
验证前,先查一下ARP表项(后面会解释)
可见,此时与分析一致,查看此时的ARP表项,可见多了一个PC2的IP与一个MAC地址的绑定,且类型为动态
继续说刚才报文丢弃后的动作,当封装到Ethernet II层时,发现无法得知Des MAC,那么就会触发一个动作,这个动作就是广播发送ARP报文
触发ARP
详解:
广播发送ARP报文是另一个封装的过程,下面边分析边抓包查看报文
1、PC1封装ARP报文,其中的内容如下;
Protocol Type:IPv4(0x0800) 表示发送方要映射的协议地址类型
Hardware Type:1表示硬件地址的类型,对于以太网,值为1
Opcode:1
1 ARP request
2 ARP reply
3 RARP request
4 RARP reply
Sender MAC :PC1的MAC
Sender IP :PC1的IP
Target MAC:Broadcast (ff:ff:ff:ff:ff:ff)
Target IP : PC2的IP
2、封装Ethernet II Sou MAC:本机的MAC Des MAC:全f(因为要二层广播) Type:0x0806(ARP)
3、封装到1层(进行串行化)
什么是串行化?
- 二层的数据帧转换成一层的比特流(弱电信号),这个过程就叫做串行化;接口带宽越大,每秒就可以将更多的数据帧串行化比特流
- 比如,10Mbit/s 表示每秒可以把10M的数据转换成数据流
解封装
此时这个报文会在二层广播发送给所有的设备,收到这个ARP请求的设备,开始解封装
比如此时,PC2收到这个报文开始进行解封装
1、将比特流转换成二层的数据帧,这一步叫做格式化
2、查看二层的目的MAC(注意:解封装只关注Destination),是否为自己,不是丢弃了;是,继续解封装;很明显,这个数据报文是一个广播报文,所以PC2是可以继续向上解封装的
3、撕掉二层的封装,打开ARP报文,看到其中Target IP是自己的IP,且是一个ARP requsest;很明显PC1是想要PC2的MAC地址的
此时,PC2就会在本地继续封装一个单播回应的ARP包,用于回应PC1自己的MAC地址,让PC1在本地的ARP表项中添加PC2的MAC与IP的映射关系
见下图