新实验地址解析协议

上传人:今*** 文档编号:105947995 上传时间:2019-10-14 格式:DOCX 页数:19 大小:81.77KB
返回 下载 相关 举报
新实验地址解析协议_第1页
第1页 / 共19页
新实验地址解析协议_第2页
第2页 / 共19页
新实验地址解析协议_第3页
第3页 / 共19页
新实验地址解析协议_第4页
第4页 / 共19页
新实验地址解析协议_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《新实验地址解析协议》由会员分享,可在线阅读,更多相关《新实验地址解析协议(19页珍藏版)》请在金锄头文库上搜索。

1、实验2 地址解析协议(ARP)实验2 地址解析协议(ARP)【实验目的】1. 掌握ARP协议的报文格式2. 掌握ARP协议的工作原理3. 理解ARP高速缓存的作用4. 掌握ARP请求和应答的实现方法5. 掌握ARP缓存表的维护过程【学时分配】2学时【实验环境】该实验采用网络结构二【实验原理】一. 物理地址与逻辑地址1. 物理地址物理地址是节点的地址,由它所在的局域网或广域网定义。物理地址包含在数据链路层的帧中。物理地址是最低一级的地址。物理地址的长度和格式是可变的,取决于具体的网络。以太网使用写在网络接口卡(NIC)上的6字节的标识作为物理地址。物理地址可以是单播地址(一个接收者)、多播地址(

2、一组接收者)或广播地址(由网络中的所有主机接收)。有些网络不支持多播或广播地址,当需要把帧发送给一组主机或所有主机时,多播地址或广播地址就需要用单播地址来模拟。2. 逻辑地址在互联网的环境中仅使用物理地址是不合适的,因为不同网络可以使用不同的地址格式。因此,需要一种通用的编址系统,用来惟一地标识每一台主机,而不管底层使用什么样的物理网络。逻辑地址就是为此目的而设计的。目前Internet上的逻辑地址是32位地址,通常称为IP地址,可以用来标识连接在Internet上的每一台主机。在Internet上没有两个主机具有同样的IP地址。逻辑地址可以是单播地址、多播地址和广播地址。其中广播地址有一些局

3、限性。在实验三中将详细介绍这三种类型的地址。二. ARP协议简介Internet是由各种各样的物理网络通过使用诸如路由器之类的设备连接在一起组成的。主机发送一个数据包到另一台主机时可能要经过多种不同的物理网络。主机和路由器都是在网络层通过逻辑地址来识别的,这个地址是在全世界范围内是惟一的。然而,数据包是通过物理网络传递的。在物理网络中,主机和路由器通过其物理地址来识别的,其范围限于本地网络中。物理地址和逻辑地址是两种不同的标识符。这就意味着将一个数据包传递到一个主机或路由器需要进行两级寻址:逻辑地址和物理地址。需要能将一个逻辑地址映射到相应的物理地址。ARP协议(地址解析协议)是“Addres

4、s Resolution Protocol”的缩写。所谓“地址解析”就是主机在发送帧前将目的逻辑地址转换成目的物理地址的过程。在使用TCP/IP协议的以太网中,ARP协议完成将IP地址映射到MAC地址的过程。三. ARP报文格式下图为ARP数据报的报文格式:硬件类型(16位)协议类型(16位)硬件地址长度(8位)协议地址长度(8位)操作码(16位)发送端硬件地址(例如,对以太网是6字节)发送端逻辑地址(例如,对IP是4字节)目的端硬件地址(例如,对以太网是6字节)(在请求帧中不填入)目的端逻辑地址(例如,对IP是4字节)图2-1 ARP报文格式ARP报文格式具有如下的一些字段: 硬件类型:这是

5、16位字段,用来定义运行ARP的网络的类型。每一个局域网基于其类型被指派给一个整数。例如,以太网的硬件类型是1。ARP可用在任何网络上。 协议类型:这是16位字段。用来定义协议的类型。例如,对IPv4协议,这个字段的值是0x0800。ARP可用于任何高层协议。 硬件地址长度:这是一个8位字段,用来定义以字节为单位的物理地址长度。例如,以太网物理地址为6字节,所对应的硬件地址长度值为6。 协议地址长度:标识用于该数据包的逻辑地址的长度,用十进制标识,单位为一个字节,例如,IPv4为4个字节,所对应的协议地址长度值为4。 操作码:这是16位字段,用来定义数据包的类型。已定义了两种类型:为1时表示A

6、RP请求,为2时表示ARP应答。 发送端硬件地址:这是可变长度字段,用来定义发送端的物理地址。对于以太网这个字段是6字节长。 发送端逻辑地址:这是可变长度字段,用来定义发送端的逻辑地址。对于逻辑地址为IP地址的网络,该字段长度为4字节。 目的端硬件地址:这是可变长度字段,用来定义目标的物理地址。对于ARP请求,字段是全0,因为发送端不知道目标的物理地址(该字段长度为可变,如以太网硬件地址为6个字节)。 目的端逻辑地址:这是可变长度字段,用来定义目标的逻辑地址(该字段长度为可变,如IPv4协议的逻辑地址为4个字节)。四. ARP封装ARP数据报直接封装在数据链路帧中。例如,在下图中,ARP数据包

7、封装在以太网的帧中。类型字段值为0x0806指出了此帧所携带的数据是ARP数据包。图2-2 ARP数据包的封装五. ARP的运行过程数据包传输过程可分为如下步骤:1. 发送端知道目的端的IP地址。2. IP要求ARP创建一个ARP请求报文,其中包含了发送方的物理地址、发送方的IP地址和目的端的IP地址。目的端的物理地址用0填充。3. 将报文传递到数据链路层,并在该层中用发送方的物理地址作为源地址,用物理广播地址作为目的地址,将其封装在一个帧中。4. 因为该帧中包含了一个广播目的地址,所以同一链路中的每个主机或路由器都接收到这个帧。所有接收到该帧的主机都将其传递到ARP层进行处理。除了目的端主机

8、以外的所有主机都丢弃该报文。5. 目的端主机用一个包含其物理地址的ARP应答报文做出响应,并对该报文进行单播。6. 发送方接收到这个应答报文,这样它就知道了目标主机的物理地址。ARP地址解析过程如下图所示。图2-3 ARP地址解析过程六. ARP高速缓存在真正的协议实现中,并不是每次发送IP报文前都需要发送ARP请求报文来获取目的MAC地址。在大多数的系统中都存在着一个ARP缓存表。记录着一段时间内曾经获取过的MAC地址和IP地址的映射关系,如下图所示:IP地址MAC地址202.98.13.1202.98.13.2202.98.13.300-E0-4C-3D-89-7600-E0-4C-3D-

9、C5-0300-E0-4C-4D-BA-92图2-4 ARP高速缓存发送IP数据报前先对ARP缓存表进行查找,查看目的MAC地址是否存在于缓存表中,如果存在,则不需要发送ARP请求报文而直接使用此地址进行IP数据包的发送。如果不存在,则发送ARP请求报文,在收到ARP应答报文之后,使用应答报文中的目的MAC地址发送IP数据包,并将目的MAC地址存于ARP缓存表中供以后使用。另外,ARP缓存表采用老化机制,在一段时间内如果表中的某一项没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。下图描述了ARP高速缓存的使用与更新过程:图2-5 ARP高速缓存的使用与更新过程七. 代理

10、ARP代理ARP可用来产生划分子网的效应。如果ARP请求是从一个网络中的主机发往另一个网络中的主机,那么连接这两个网络的路由器就可以回答该请求,当这个路由器收到真正的IP数据包时,它就把该数据包发送给相应的主机或路由器。例如,在下图所示的网络中,安装在右边主机上的代理ARP应答对目标IP地址为141.23.56.23的ARP请求。图2-6 代理ARP八. 协议栈实现代码解析本实验将通过对安装目录JLCSSExpCNCWorkNPLExpNPL_studentnetproto_arp_studentnetproto_arp_student下的netproto_arp_student.h和netp

11、roto_arp_student.c两个文件进行编码,完成协议栈中arp协议的实现。netproto_arp_student.h文件中定义了arp协议实现相关数值,关键代码如下所示: #define MAC_PROTO_ARP0x0806#define ARP_HWTYPE_ETH0x0001#define ARP_PROTOTYPE_IP0x0800#define ARP_HWADDR_LEN_ETH0x06#define ARP_PROTOADDR_LEN_IP0x04#define ARP_OPCODE_REQUEST0x0001#define ARP_OPCODE_RESPONSE0x

12、0002#define ARP_DEST_IP0.0.0.0这段代码定义了8个宏,他们代表的含义如下表所示:表2-1 netproto_arp_student.h中定义的宏宏值描述MAC_PROTO_ARP0x0806定义以太网帧中的“协议类型或数据长度”字段的值ARP_HWTYPE_ETH0x0001定义arp包头中“硬件类型”字段值ARP_PROTOTYPE_IP0x0800定义arp包头中“协议类型”字段值ARP_HWADDR_LEN_ETH0x06定义arp包头中“硬件地址长度”字段值ARP_PROTOADDR_LEN_IP0x04定义arp包头中“协议地址长度”字段值ARP_OPCO

13、DE_REQUEST0x0001定义arp请求数据包头中“操作码”字段值ARP_OPCODE_RESPONSE0x0002定义arp应答数据包头中“操作码”字段值ARP_DEST_IP0.0.0.0用点分十进制表示的IP地址,定义arp包头中“目的端逻辑地址”字段值在实验的编码过程中,应该使用这些宏对相应的变量进行赋值。netproto_arp_student.c文件是协议栈中arp协议的实现部分,其中定义了1个全局数组以及3个函数。下面分别介绍这些协议栈的实现部分。全局数组netp_arp_table是arp协议的缓存表,拥有NETP_ARP_TABLE_SIZE个netp_arp_tabl

14、e_item元素。其中NETP_ARP_TABLE_SIZE是arp缓存表的条目数,默认值为10,同学们不需要修改。netp_arp_table_item是一个结构体,代表了arp缓存表中的一个条目,包括一个物理地址hardware_addr和一个IP地址ip_address,其定义如下: struct netp_arp_table_item u8_t hardware_addrETH_ADDRESS_LEN; struct ip_addr ip_address; 需要根据arp协议的实现原理编写代码来维护arp缓存表。函数display_arp_table的功能是显示arp缓存表中的条目,在

15、实验中可以直接调用该函数,便于查看arp缓存表中的内容。函数netp_arp_output_student的功能是构造并发送一个arp请求数据包。这个函数的编码工作需要由学生完成。当有数据到达本机网络接口时,函数netp_arp_input_student将被调用,并传递给这个函数原始数据。在本实验中该函数需要完成两个功能,一是处理针对本机的arp请求数据包,二是处理针对本机的arp应答数据包。处理针对本机的arp请求数据包时,应该发送相应的arp应答数据包。处理针对本机的arp应答数据包时,应该更新arp缓存表。这个函数的编码工作需要由学生完成。该函数的返回值为push_to_lwip的枚举类型值,push_to_lwip的定义如下:enum push_to_lwip NETP_PUSH_TO_LWIP, / 数据处理完成后,交给lwIP继续处理 NETP_NO_PUSH_LIWP / 数据处理完成后,不交给lwIP继续处理

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号