一、在开始实验前,我们得先深刻剖析理解ARP协议的含义。
1.1 ARP
1.1.1 ARP的定义
- ARP是“Address Resolution Protocol”(地址解析协议)的缩写。
1.1.2 ARP的作用及运行流程分析
- 泛谈:在同一子网中,数据包的传输都是依据MAC地址进行的(分组交换设备仅设置交换机),在跨子网通信时,需要先使用路由器(即所谓的“网关”)依据目的主机IP地址将数据包传输到目的主机IP地址所属的子网,在目的IP所属子网内部,再利用MAC地址进行数据包传输。MAC地址不具有层级结构,随着互联网中设备的指数级增加,为了使传输数据更加高效,人们因此发明了IP地址这种具有层级性的逻辑地址用于数据的传输。
- 同一子网内(假设该子网没有网关),考虑源主机向另一台在同一子网中(通过IP地址和子网掩码的“与”运算得知)的主机发送ping报文。
- 源主机将数据向下传递到网络层进行封装时,通过本机IP地址、目的主机IP地址和子网掩码的“与”运算得知目的主机IP地址与本机IP地址处于同一子网。
- 源主机继续将数据包向下传递至链路层,由于源主机与目的主机处于同一子网,ARP进程在ARP缓存表中查询该目的主机IP地址对应的MAC地址。
- 如果在ARP缓存中查到目的主机IP地址对应的目的主机MAC地址,则将该目的主机MAC地址写入链路层帧头中,封装好后发送到网络,经由交换机根据目的主机MAC地址及交换机内部MAC地址与端口缓存表,将数据包发送到对应端口,最终使数据包到达目的主机。
- 如果在ARP缓存中没有查到目的主机IP地址对应的目的主机MAC地址,为了完成数据发送任务,源主机将待发送数据先行放入缓存,由ARP进程调用ARP协议,将目的主机IP地址、目的主机MAC地址(此时未知,设置为广播MAC地址)封装到ARP报文中并发送到网络。
- 交换机在接收到数据包后,发现目的主机MAC地址为广播地址,因此向除源主机所在端口的其余端口广播该ARP报文。
- 目的主机接收到此ARP请求后,首先判断源主机IP地址是否与自身IP地址处于同一子网下,如果处于同一子网则向源主机返回其MAC地址,方式近似与源主机发送ARP报文相同。源主机得到目的主机MAC地址后,顺利封装缓存中的待发送报文,并经由交换机顺利发送到目的主机。
- 如果不在同一子网且因为假设该子网不设置网关(路由器),则目的主机丢弃接收到的ARP报文。造成不在同一子网的原因如配置子网掩码错误等。
- 不在同一子网下,考虑源主机向另一台不在同一子网中(通过IP地址和子网掩码的“与”运算得知)的主机发送ping报文。
- 源主机将数据向下传递到网络层进行封装时,通过本机IP地址、目的主机IP地址和子网掩码的“与”运算得知目的主机IP地址与本机IP地址不处于同一子网。
- 因此源主机的任务变成只需将ping数据包封装发送给网关,由网关负责跨子网传输(网关是路由器,具有IP地址)。
- 源主机将目的主机IP地址(即另一个子网的主机)封装到IP头中,将ping数据包向下传递至链路层。
- ARP进程在ARP缓存表中查询网关IP地址(已设置存储在源主机内)对应的MAC地址,如果查到网关IP地址对应的MAC地址,则将该MAC地址作为目的主机MAC地址写入链路层帧头中,封装好后发送到网络,经由交换机根据目的主机MAC地址及交换机内部MAC地址与端口缓存表,将ping数据包发送到交换机对应端口,使ping数据包到达网关(交换机对IP层来说是透明的,即交换机只有两层协议层)。
- 如果没查到网关的MAC地址,又由于网关与源主机处于同一子网下,故可通过上文ARP方式查询到网关的MAC地址,再将网关MAC地址放入链路帧头进行数据封装并将ping数据包发送到源主机所在子网网关即可。
- 源主机所在子网网关接收到ping报文后,根据网关内部路由表等信息定位到目的主机IP地址所在子网,将目的主机IP地址写入IP报文头,将网关自身的MAC地址封装到链路层帧头一并打包发送到目的主机所在子网。
- 目的主机所在子网的网关接收到源主机所在子网的网关发来的ping数据包,利用网关内部ARP缓存,得到目的主机IP地址对应的目的主机MAC地址,将其写进链路层帧头后封装ping数据包并发送到子网内部交换机中。
- 经过目的主机所在子网内的交换机依据ping报文内MAC地址及交换机内的MAC地址端口缓存信息转发ping数据包,目的主机得以接收到ping报文。
- 目的主机查看ping报文后开始准备回复,此时目的主机身份转变成源主机,按照上文分析过一模一样的方式回传ping相关报文。
- 综上所述,ARP的作用正如其名:将IP地址解析为对应的MAC地址。现假设源主机ARP缓存中已有目的主机和网关的MAC地址(注意:只会有同一子网的主机MAC地址,不可能有不同子网目的主机的MAC地址,不同子网目的主机的MAC地址在经过该子网网关时都被该子网网关的MAC地址取代了):
- 源主机将目的主机IP地址封装到IP头中,将数据包向下传递至链路层。
- 当源主机通过子网掩码的“与”运算得知目的主机和自身处在同一子网时,本机ARP进程利用目的主机IP地址与ARP缓存查询得到目的主机MAC地址,封装并向目的主机发送ping数据包。
- 当源主机通过子网掩码的“与”运算得知目的主机和自身不处在同一子网时,本机ARP进程利用子网网关IP地址与ARP缓存查询得到该子网网关MAC地址,封装并向网关发送ping数据包。
- 如果源主机ARP进程在ARP缓存中未查到MAC地址时,依据IP地址(同一子网目的主机的或同一子网网关的)在子网中发送广播报文获取MAC地址,更新ARP缓存并将MAC地址封装进数据包并向网络中发送。
- 源主机将目的主机IP地址封装到IP头中,将数据包向下传递至链路层。
二、开始实验
2.1 构建网络拓扑及配置各子网主机IP、子网掩码、网关IP、配置路由器端口IP及子网掩码
如图所示:
2.2 由主机PC0向主机PC1发送ping报文,Packet Tracker开启模拟模式,捕获网络中报文
- Packet Tracker开启模拟模式
- 由主机PC0向主机PC1发送ping报文:
- 开始自动捕获:
- 等到模拟面板出现STP类型报文后停止自动捕获。
- 大家捕获好以后就从头开始,单击每个包的信息字段,弹出左侧页面后可点击各协议层查看每层中的具体设备操作,尝试自己从头分析每个包,这样学习的收获一定会非常之大!