预览加载中,请您耐心等待几秒...
1/6
2/6
3/6
4/6
5/6
6/6

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第四章ARP:地址解析协议虽然数据链路层的第一道关卡是MAC地址,但基于TCP/IP的网络主要使用IP地址来标识主机而不使用MAC地址。比如要连接到别人的电脑或拷贝共享文件,一般会说:“告诉我你电脑的IP”,而不是“告诉我你电脑的MAC”。从以太网帧结构知道,不知道对方网卡的MAC地址是无法正常通讯的,那主机是怎样从IP地址上自动获取到MAC地址呢?这就是这章要讲的“地址解析协议”,以下简称其英文缩写“ARP”。4.1ARP工作原理从对方的IP地址获取MAC地址最简单的方法是静态映射,即手工建立IP地址和MAC地址的映射表。这种方法必须预先知道每个IP对应的网卡的MAC地址,并写到程序里,发送数据时先搜索这张表,找到IP地址对应的MAC地址。静态映射表内容如下:表4-1静态映射表IP地址MAC地址192.168.1.1500-0B-6A-8E-3F-C2192.168.6.8200-1C-35-27-59-A8静态映射表有一定的局限性,如:一台电脑换过网卡后,查找得出的MAC地址就不正确,会导致通讯不上;当对方电脑的IP地址改变后,虽然MAC地址没有变,但映射关系变了,静态映射表也必须手工改变。这样,维护一张静态映射表就很费劲。为了避免手工维护映射表,设计人员使用ARP协议来实现地址的映射,由主机自己智能地维护一张动态映射表。具体是怎样实现地呢?通过图4-1可以形象的说明。假如MCU主机需要与IP为192.168.1.15的主机建立连接,但不知道其MAC地址,于是先在整个网络广播,查询内“192.168.1.15“对应的MAC地址,由于是广播(目的MAC地址是FF-FF-FF-FF-FF-FF),同一网络上的所有主机都收到了这个请求。但只有电脑A应答,因为它的IP就是192.168.1.15。MCU收到电脑A的应答后,将IP和MAC地址存放在动态映射表中,下次连接的时候就能直接查找动态表。当然,动态映射表中,IP和MAC的映射关系并不是一成不变的,ARP还启动一个定时器,当映射关系存在一定的时间(如1分钟)后,会被清除掉,下次发送数据时还是需要通过ARP请求获取它们的对应关系。这个过程称为ARP表老化。图4-1ARP工作原理4.2ARP分组结构ARP分组是封装在以太网帧中的数据段中,当以太网帧首部的TYPE段为0806H时,表示后边的数据是ARP分组。如图4-2。图4-2ARP分组的封装ARP分组的具体结构如图4-3。08162431硬件类型协议类型硬件长度协议长度操作发送方MAC地址(6字节中的0-3字节)发送方MAC地址(4-5字节)发送方IP地址(0-1字节)发送方IP地址(2-3字节)接收方MAC地址(0-1字节)接收方MAC地址(2-5字节)接收方IP地址(0-3字节)图4-3ARP分组的格式硬件类型:16位,定义运行ARP的物理网络。对以太网来说固定为0001H。还有0002H为实验以太网,0003H为业余无线电,0004H为令牌网等等。协议类型:16位,定义发送方提供的高层协议类型。对IPV4来说,固定为0800H。硬件长度:8位,定义物理地址(MAC地址)的长度,以字节为单位,对以太网来说,固定为06H。协议长度:8位,定义逻辑地址(IP地址)的长度,以字节为单位,对应以太网的IPV4,长度固定为04H。操作:16位,定义ARP分组是请求还是应答。请求则为01H,应答为02H。发送方/接收方MAC地址:48位(针对以太网)。发送方/接收方IP地址:32位(针对以太网)。了解ARP的分组的格式后,就可以将图4-1中ARP的工作原理用具体数据来表示,如图4-4。图4-4ARP分组的图例4.2ARP的实现uIP协议栈实现ARP的文件是Uip_arp.c,包含uip_arp_init(),uip_arp_timer(),uip_arp_update(),uip_arp_arpin(),uip_arp_out()5个函数。4.2.1ARP初始化根据ARP分组的格式,uip头部结构定义如下,为了便于管理,它包含了以太网帧的头部uip_eth_hdr。structarp_hdr{structuip_eth_hdrethhdr;/*以太网首部,14字节*/u16_thwtype;/*硬件类型,0x0001*/u16_tprotocol;/*协议类型,0x0800*/u