ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的低层协议,负责将某个IP地址解析成对应的MAC地址。ARP协议和ICMP协议是常用的TCP/IP底层协议。在对网络故障进行诊断的时候,它们也是最常用的协议。
ARP 协议功能是把IP 地址映射为MAC 地址,核心机制是ARP 缓存表,实现IP 地址和MAC 地址之间的一一对应关系。研究ARP 协议动态交互仿真实验系统的目的是便于大家在学习ARP 协议的时候更好地理解协议理论,能够体会到ARP 请求报文和响应报文封装和发送的整个过程,真实地演示交换机对于ARP 请求报文和响应报文转发的机制及PC 机上缓存表的修改过程,有助于增强学生的学习效果。
ARP 协议动态交互仿真实验系统是由三台计算机(PC-A,PC-B,PC-C)模拟的局域网,数据在其内部转发时的分布式仿真实验平台。三台机器分别模拟ARP 报文发送端、交换机、ARP 报文接收端,通过三台机器交互操作,在以太网环境中动态模拟出ARP 协议的整个工作流程,包括ARP 高速缓存表的查询和修改,ARP 报文封装,交换机端口转发报文。
ARP 协议动态交互仿真系统拓扑结构图如图1 所示。
图1 ARP 协议动态交互仿真实验平台拓扑结构
1.1 系统分析
该系统的目的是为了在学生学习ARP 协议时,通过动态、逼真的实验过程帮助学生深入理解ARP 协议,提高学习效果。为了能够快捷、顺利地完成实验,实验环境对该系统有如下要求:部署方便,使用简单,效果逼真,移植性和可扩展性强。
系统针对上述需求采取如下策略:该系统全部在Windows XP 下开发,采用部署较为简单的Mysql 数据库和Tomcat 服务器(PC-C),将整个ARP 协议工作过程抽象出来放在网页上直观地展现,学习者可以像浏览网页一样使用该系统。
客户端:要求简单、明了地展现相应信息;有动态效果,逐步封装;能与服务器进行数据交互。因此,系统用dreamweaver8 设计页面,采用表格布局封装相关信息;用javascript. 控制动态效果和实现逐步封装;采用Ajax 技术实现客户端与服务器的交互。
服务器:开发语言相对简单易学,业务逻辑集中控制,采用分层的思想,在基本不动现有代码的情况下实现功能的拓展。系统用java 完成服务器端的实现,以一个逻辑控制类控制整个业务逻辑;封装一个持久层框架byesql 操作mysql数据库,能在不写任何SQL 语句的情况下针对MySQL 数据库完成基本的增、删、改、查。
1.2 系统设计
1.2.1 系统用例图
实验时,学生甲操作PC-A,模拟数据发送端;学生乙操作PC-C,模拟交换机;学生丙操作PC-B,模拟数据接收端。
发送端(PC-A):获取本机真实IP 和MAC 地址后,用一个JSP 页面模拟ARP 报文的逐步封装过程,使用者可以看到ARP 请求报文逐步封装的效果。然后自动向“交换机”
发送ARP 请求报文,再自动跳转到“ARP 高速缓存表”模拟页面,等待“交换机”转发来ARP 响应报文,修改“ARP 高速缓存表”。
交换机(PC-C):用一个JSP 页面模拟“端口——MAC映射表”,负责转发ARP 报文。初始为等待状态,当发送端(PC-A)发送完ARP 请求报文之后,自动向除发送端外的所有端口转发该请求报文,完毕后自动跳到初始状态等待转发ARP 响应报文,当响应报文到达后就针对发送端(PC-A)单播该报文分组。
接收端(PC-B):获取本机真实IP 和MAC 地址后,自动跳到“ARP 高速缓存表”模拟页面,等待“交换机”将ARP请求报文转发过来后修改ARP 高速缓存表,再自己跳转到ARP 响应报文页面,逐步封装。封装完毕则自动向“交换机”发送ARP 响应报文。
图2 为ARP 协议仿真系统动态交互用例图。
图2 ARP 协议动态交互仿真系统用例
1.2.2 系统类图
ARP 协议动态交互仿真系统定义了四个类:
①ARP 报文类ArpMessage:定义ARP 报文属性和类型;②ARP 缓存表类ArpTable:定义ARP 表字段和属性;③端口MAC 映射表类MacTable:定义交换机端口和机器MAC 地址的映射关系;④计算机类PC:定义各机器的IP 地址、MAC 地址和计算机名。
计算机类PC 为ARP 报文类ArpMessage 和ARP 缓存表类ArpTable 提供本机的MAC 地址和IP 地址,分别用于帧封装和MAC 地址查询。端口MAC 映射表类MacTable 为计算机类PC 提供MAC 地址和端口的对应关系,用于数据转发。
图3 为ARP 协议动态交互仿真实验系统类图。
图3 ARP 协议动态交互仿真系统类
1.2.3 系统流程图
为了使用方便,ARP 协议动态交互仿真系统把三个角色功能集成在一个程序中。程序运行时,操作者需为机器选择规定的角色,再根据角色功能分配,按照定义的流程完成相应的操作。图4 为ARP 协议动态交互仿真系统流程图。
图4 ARP 协议动态交互仿真系统流程
当一个基于TCP/IP的应用程序需要从一台主机发送数据给另一台主机时,它把信息分割并封装成包,附上目的主机的IP地址。然后,寻找IP地址到实际MAC地址的映射,这需要发送ARP广播消息。当ARP找到了目的主机MAC地址后,就可以形成待发送帧的完整以太网帧头。,协议栈将IP包封装到以太网帧中进行传送。
如图所示,描述了ARP广播过程。
图 ARP广播
在图中,当主机A要和主机B通信(如主机A Ping主机B)时。主机A会先检查其ARP缓存内是否有主机B的MAC地址。如果没有,主机A会发送一个ARP请求广播包,此包内包含着其欲与之通信的主机的IP地址,也就是主机B的IP地址。当主机B收到此广播后,会将自己的MAC地址利用ARP响应包传给主机A,并更新自己的ARP缓存,也就是同时将主机A的IP地址/MAC地址对保存起来,以供后面使用。主机A在得到主机B的MAC地址后,就可以与主机B通信了。同时,主机A也将主机B的IP地址/MAC地址对保存在自己的ARP缓存内。
ARP报文被封装在以太网帧头部中传输,如图所示,是ARP请求协议报文头部格式。
图 ARP请求协议报文头部格式
图中黄色的部分是以太网(这里是EthernetII类型)的帧头部。其中,个字段是广播类型的MAC地址:0XFF-FF-FF-FF-FF-FF,其目标是网络上的所有主机。第二个字段是源MAC地址,即请求地址解析的主机MAC地址。第三个字段是协议类型,这里用0X0806代表封装的上层协议是ARP协议。
接下来是ARP协议报文部分。其中各个字段的含义如下:
硬件类型:表明ARP实现在何种类型的网络上。
协议类型:代表解析协议(上层协议)。这里,一般是0800,即IP。
硬件地址长度:MAC地址长度,此处为6个字节。
协议地址长度:IP地址长度,此处为4个字节。
操作类型:代表ARP数据包类型。0表示ARP请求数据包,1表示ARP应答数据包。
源MAC地址:发送端MAC地址。
源IP地址:代表发送端协议地址(IP地址)。
目标MAC地址:目的端MAC地址(待填充)。
目标IP地址:代表目的端协议地址(IP地址)。
ARP应答协议报文和ARP请求协议报文类似。不同的是,此时,以太网帧头部的目标MAC地址为发送ARP地址解析请求的主机的MAC地址,而源MAC地址为被解析的主机的MAC地址。同时,操作类型字段为1,表示ARP应答数据包,目标MAC地址字段被填充以目标MAC地址。