第三讲ICMP、ARP、RARP协议Internet技术与应用第三讲ICMP、ARP和RARP协议2ICMP协议概况概况:Internet标准协议,STD为5。相关RFC文档:RFC792:有关ICMPRFC950:对RFC792的更新RFC1191:路径的MTU发现RFC1256:ICMP路由器发现Internet技术与应用第三讲ICMP、ARP和RARP协议3ICMP功能和特点功能:用于路由器或目的主机向源主机通知有关IP数据报处理中的错误。特点:ICMP使用IP进行报文传输ICMP用来报告错误而不是提供可靠性ICMP不能用来报告ICMP消息的错误ICMP只报告偏移量为0的IP数据报错误ICMP不报告特殊源地址的IP数据报错误ICMP并非是必须的Internet技术与应用第三讲ICMP、ARP和RARP协议4ICMP消息格式Internet技术与应用第三讲ICMP、ARP和RARP协议5回应(type=8)和回应应答(type=0)功能:用来检测网络上的另一台主机是否活动Internet技术与应用第三讲ICMP、ARP和RARP协议6目的不可达(type=3)功能:路由器:报告目的IP地址不可达目的主机:报告协议或端口未激活code字段:说明不可达的原因Internet技术与应用第三讲ICMP、ARP和RARP协议7源抑制(type=4)功能:路由器:报告本路由器无数据报缓存目的主机:报告数据报到达太快无法处理Internet技术与应用第三讲ICMP、ARP和RARP协议8重定向(type=5)功能:中间路由器用来报告给源主机一个与目的主机在同一个子网的路由器,源主机以后应该将发送给相应目的主机的数据报通过该路由器发送。code字段:导致重定向的原因Internet技术与应用第三讲ICMP、ARP和RARP协议9路由器通告(type=9)功能:向主机通告路由器信息以便更新路由表路由器地址个数每个表项的大小(=2)本通告有效时间(单位:秒)优先级,值越大优先级越高=0x80000000:不能用作默认路由器Internet技术与应用第三讲ICMP、ARP和RARP协议10路由器请求(type=10)当主机初始化路由表或者需要主动更新路由表时,发送此请求。Internet技术与应用第三讲ICMP、ARP和RARP协议11时间戳请求/应答(type=13/14)功能:用于调试和性能度量Internet技术与应用第三讲ICMP、ARP和RARP协议12地址掩码请求/应答(type=17/18)功能:主机用来确定其所在子网的子网掩码Internet技术与应用第三讲ICMP、ARP和RARP协议13ICMP应用ping:确定目的主机的可达性和往返时间使用ICMP回应/回应应答报文traceroute:发送TTL从1开始逐步加1的连续IP数据报,路由器回送ICMP超时报文,确定到目的主机所经过的路由器。发送端口号在标准范围外的UDP报文,如果接收到ICMP端口不可达报文,则表明目的主机可达。Internet技术与应用第三讲ICMP、ARP和RARP协议14ARP/RARP协议概况功能:ARP将高层协议地址(如IP地址)转换为物理网络地址RARP由物理网络地址获取到对应的高层协议地址(如IP地址)相关RFC文档RFC826:有关ARPRFC903:有关RARPInternet技术与应用第三讲ICMP、ARP和RARP协议15ARP/RARP报文格式1:以太网地址6:IEEE802地址0x0800:IPv4地址1:ARP请求2:ARP应答3:RARP请求4:RARP应答Internet技术与应用第三讲ICMP、ARP和RARP协议16ARP报文生成源主机或转发IP数据报的网关(路由器):由IP路由模块按路由算法确定下一跳的IP地址(路由器或目的主机的IP地址)将IP报文提交给设备驱动程序设备驱动程序调用ARP模块获取下一跳的硬件地址,ARP模块查找ARP缓存:如果找到,则进行封装和发送如果未找到,则丢弃IP报文,生成ARP报文并进行封装和发送Internet技术与应用第三讲ICMP、ARP和RARP协议17ARP报文接收当一台主机(包括路由器)的设备驱动程序接收到一个ARP报文(一个广播请求报文或者一个点对点应答报文)后,将其提交给ARP模块进行处理。请求主机的设备驱动程序接收到ARP应答报文后,同样提交给ARP模块进行处理,从而获得目的主机的如下三元组表示的地址映射信息并被加入到ARP缓存中:协议类型,协议地址,硬件地址Internet技术与应用第三讲ICMP、ARP和RARP协议18ARP报文接收后的处理过程(1)Internet技术与应用第三讲ICMP、ARP和RARP协议19ARP报文接收后的处理过程(2)Internet技术与应用第三讲ICMP、ARP和RARP协议20代理ARP和透明子网划分存在子网时ARP协议不变。跨越子网的A和B如何通信?Internet技术与应用第三讲ICMP、ARP和RARP协议21代理ARP实现透明子网代理ARP实现透明子网:常规主机不知道子网,因而使用不支持子网的“旧的”IP路由算法。为了互联,子网间的路由器必须:使用子网IP路由算法使用修改后的ARP模块,能够代表其他主机作出ARP应答Internet技术与应用第三讲ICMP、ARP和RARP协议22免费ARP(GratuitousARP)免费ARP:主机发送ARP请求报文查找自己的IP地址所对应的硬件地址,即ARP请求报文中源端协议地址和目的端协议地址是一样的。主要在系统引导期间使用。免费ARP有两个方面的作用:1.判断是否有其他主机使用同一IP地址2.主动向其他主机通告自己的硬件地址Internet技术与应用第三讲ICMP、ARP和RARP协议23使用免费ARP实现双机主备系统A、B两台服务器互为备份,主、备机内部使用串口通信,实现心跳监听。当前A为主机、B监听A,如果B监听不到A的心跳则认为A发生故障。B通过发送含有自己的硬件地址和故障服务器A的IP地址的免费ARP请求,使得所有目的IP地址为故障服务器A的IP地址的报文都将被送到备机B。备机B顺利接管故障服务器A的工作,而客户程序不用关心原来的服务器是否出现了故障。Internet技术与应用第三讲ICMP、ARP和RARP协议24使用ARP报文配置和更新ARP缓存(1)以太网内A、B两台主机,使用相同协议:协议类型=ET(IP)A机:硬件地址=EA(A)、协议地址=IPA(A)B机(B先启动):硬件地址=EA(B)、协议地址=IPA(B)A启动后,要发送数据给B,A知道B的协议地址IPA(B),A调用其支持协议类型为ET(IP)的设备驱动程序,查找ARP缓存,试图由ET(IP),IPA(B)映射得到48位的B机硬件地址EA(B)。Internet技术与应用第三讲ICMP、ARP和RARP协议25使用ARP报文配置和更新ARP缓存(2)但A没有关于B的地址映射关系,无法完成由ET(IP),IPA(B)到EA(B)的映射,故丢弃要发送的数据报,产生一个ARP请求并通过物理网络进行广播发送。B收到这个ARP请求后,知道协议类型是它所使用的协议类型ET(IP)、目的协议地址是其自身的协议地址IPA(B)。B处理该ARP请求报文,获得A的地址映射关系ET(IP),IPA(A),EA(A),将此映射关系写入B的ARP缓存。Internet技术与应用第三讲ICMP、ARP和RARP协议26使用ARP报文配置和更新ARP缓存(3)此时B机设备驱动程序已经知道如何发送数据报给A了,但A机还不知道如何发送数据报给B。B知道这是ARP请求,于是交换源和目的地址字段,将EA(B)填入源硬件地址字段,改变ARP的操作字段为ARP应答,将该应答报文单播发送给A。A接收到该应答报文后,得到B的地址映射ET(IP),IPA(B),EA(B),将此映射关系写入A的ARP缓存中。至此,A也知道如何发送数据报给B了。Internet技术与应用第三讲ICMP、ARP和RARP协议27RARP的主要特点RARP具有如下特点:RARP协议是许多无盘系统在引导时用来获取IP地址的,报文格式同ARP。一个RARP请求在网络上进行广播,报文中标明源端硬件地址,以请求相应IP地址,而应答通常采用单播传送。需要有专门的RARP服务器,为RARP请求提供应答。由于使用物理网络在DDL层广播RARP请求,故一般不能通过路由器转发。Internet技术与应用第三讲ICMP、ARP和RARP协议28RARP服务器(1)实现RARP有一定的复杂性:RARP服务器一般要为网络上所有无盘系统提供硬件地址到IP地址的映射。该映射包含在磁盘文件中,而内核一般不处理磁盘文件,故RARP服务须由用户进程提供,而不是作为内核TCP/IP实现的一部分。为保证客户引导的可靠性,一般需要多个RARP服务器,这时每个服务器对每个RARP请求都要发送RARP应答。Internet技术与应用第三讲ICMP、ARP和RARP协议29RARP服务器(2)发送RARP请求的无盘系统一般采用最先收到的RARP应答,而丢弃随后收到的所有其他RARP应答。多个RARP服务器应答,使网络流量也随之增加。多个RARP服务器可能同时应答,增加以太网发生冲突的概率。Internet技术与应用第三讲ICMP、ARP和RARP协议30思考题1.地址掩码请求报文通常应该由谁来应答?2.给出路由器通告报文格式并对各字段加以说明。3.路由器或主机无法及时处理接收到的IP报文时,将采用什么手段告知源端主机?4.路由器在处理一个普通IP数据报时和处理一个ICMP报文时有何不同?5.描述主机处理ARP请求报文的过程。6.ARP是否只支持IP网络地址映射?7.何谓免费ARP?它有哪些特殊用途?8.ARP和RARP存在哪些不同?9.如果每台主机在引导过程中都广播一个免费ARP,对性能是否会有所改善?为什么?