1、第3讲 地址解析,为何需要地址解析? 在网络层上,主机和路由器用它们的逻辑地址(IP地址)来标识。 在网络接口层上,主机和路由器用它们的物理地址(MAC地址)来标识。 分组交付时,需要通过物理网络才能到达相应主机和路由器。 由此: 将分组交付到一个主机或路由器需要两级地址:逻辑地址和物理地址。我们需要他们之间的互相映射。 建立逻辑地址与物理地址之间映射的方法通常有两种:静态映射和动态映射,静态映射:主要采用地址映射表来实现逻辑地址与物理地址之间的映射。 由于地址映射表一般由人工方式建立和维护,所以不能适应物理地址和逻辑地址频繁变化的网络和规模庞大的网络。 动态映射:每当一个机器知道两个地址(逻
2、辑地址或物理地址)中的一个时,就可使用协议将另一个地址找出来。因特网采用了动态映射的方法进行地址映射。,地址解析(Address resolution):为逻辑地址与物理地址之间的映射。 地址解析包括两个方面的内容: 从IP地址到物理地址的映射; 从物理地址到IP地址的映射; TCP/IP用两个协议来实现这两种映射: ARP(地址解析协议):从IP地址到物理地址的映射 RARP(反向地址解析协议):从物理地址到IP地址的映射 ARP和RARP在TCP/IP协议族中的位置:,主要内容,3.1 地址解析协议(ARP) 3.2 反向地址解析协议(RARP) 3.3 地址解析报文 3.4 代理ARP,
3、3.1 地址解析协议(ARP),3.1.1 地址解析原理 地址解析协议ARP:使IP能够获得与某个给定IP地址相关的主机物理地址。ARP的功能分为两部分: 发送请求获得目的主机的物理地址(广播) 向请求物理地址的主机发送解析结果(单播),ARP工作过程:问题: 在同一物理网络中,当主机A需要向主机B发送IP数据报时,主机A的IP层要将IP数据报传给数据链路层进行帧封装,封装时要求给出主机B的物理地址ARP请求帧:包括如下信息:请求主机的物理地址PA请求主机的IP地址IA目的主机的IP地址IB 主机A在本地网络中广播ARP请求帧,请求帧的目的地址为广播地址(全“1”)。 ARP应答帧:直接发回给
4、发送ARP请求的主机A 。ARP应答帧包含以下信息:应答主机的物理地址PB;应答主机的IP地址IB ;请求主机的物理地址PA;请求主机的IP地址IA,利用从应答帧中得到的目的主机的物理地址PB完成IP数据报的帧封装,并将该帧发送给主机B。 需要注意两点: ARP请求帧在物理网络中是以广播方式发送的,ARP应答帧是以单播方式发送的。 目的主机必须与源主机位于同一物理网络(针对帧)。,3.1.2 ARP高速缓存 ARP工作中存在的问题 如果每次在发送IP数据报前都重复上面的过程,势必会带来较大的开销。 广播ARP请求不仅要耗费带宽,而且使得本地网络中的每台主机都要处理该广播帧,或忽略或给出响应帧。
5、 解决 为使地址解析时的广播尽可能少,每台主机都维护一个名为ARP高速缓存的本地列表。 ARP高速缓存中含有最近使用过的IP地址与物理地址的映射列表。 ARP请求和应答方都把对方的地址映射存储在ARP高速缓存中。,何时使用ARP高速缓存? 当发送IP数据报需要获取目的主机的物理地址时: 首先检查它的ARP高速缓存,如果ARP高速缓存中已经存在对应的映射表项,则目的主机的硬件地址可以从ARP高速缓存中获得,主机可以立即发送IP数据报。 只有当ARP高速缓存中不存在与该目的IP地址对应的映射表项时,才广播ARP请求。 ARP高速缓存的创建 由于ARP高速缓存位于内存中,因此每次计算机或路由器重新启
6、动时,都必须动态地创建地址映射表。 当主机收到一个ARP请求帧或响应帧时,检查它的ARP高速缓存,如果ARP高速缓存中不存在对应的映射表项,则将ARP请求帧或响应帧中的发送方的IP地址和物理地址加入到ARP高速缓存中。,ARP高速缓存中地址映射表项的超时 问题由于IP地址与物理地址的映射关系可能因网络接口或IP地址的变化而发生变化,对于ARP高速缓存中地址映射表项都存在一个过时的问题。 解决给ARP高速缓存中的每一个表项设置一个超时值,使得每个地址映射表项都有一个生命期。 不同的TCP/IP实现使用不同的超时值,短的仅有几十秒钟,而长的则长达几个小时。 超时值越短,系统中出现的ARP请求广播就
7、越多。 超时值过长,主机又不能及时地发现地址映射关系的改变,也可能会引起问题。,引入静态ARP表项 一种控制地址映射表项超时值的方法是在ARP高速缓存中创建一个静态表项。 静态表项是永不超时的地址映射表项。 静态表项主要用在一台主机经常向另一台主机发送ARP请求的情况下。 为了提高效率,减少不必要的开销,可以在ARP高速缓存中创建一个静态表项,使该地址映射表项始终存在于ARP高速缓存中,避免向某一主机发送ARP广播。,与静态表项有关的一些问题: 当主机接收到ARP广播,而且该广播所含的地址信息与当前ARP高速缓存中对应的静态表项不一致时,主机将用新收到的物理地址替代原有的物理地址,并为该表项设
8、置超时值,使其不再是静态表项。 使用arp实用程序可以人工删除静态表项。 重新启动主机也会使静态表项丢失。 静态表项的不足之处是不能很好地适应地址映射的变化。,3.1.3 地址解析实例,在主机通信时, 参与通信的源主机与目的主机可能位于同一个子网,也可能位于不同的子网源主机与目的主机位于同一子网例子:假设一台IP地址为196.168.27.20的主机,希望向位于同一子网中IP地址为 196.168.27.22的主机发送IP数据报。IP地址解析过程如图所示:,(1)检查本地ARP高速缓存当试图确定同一子网上目的主机的物理地址时,ARP工作过程如下: 首先检查本地的ARP高速缓存,确定它是否含有目
9、的主机的IP地址与物理地址的映射。 如果包含,则取出目的主机的物理地址,利用物理地址将IP数据报封装成帧。 不需要广播ARP请求,因为目的主机的物理地址已经在以前的通信中被存入了本地的ARP高速缓存。 如果ARP高速缓存中不包含相关的地址映射,则进行下一步操作。,(2)向目的主机发送ARP请求 若ARP高速缓存不包含所需的地址映射,主机就会形成一个ARP请求,以物理广播地址在本子网上广播,并等待目的主机的应答。 (3)将请求者的地址信息写入ARP高速缓存 由于ARP请求是子网上的广播,因而该子网上的每台主机都会收到广播,并将自己的IP地址和该ARP请求中的目的主机IP地址进行比较。 如果不匹配
10、,则ARP请求被忽略; 如果ARP请求中的目的主机IP地址与本机的IP地址相匹配,则目的主机就将发送者的IP地址与物理地址写入到本机的ARP高速缓存中。,(4)向请求者发送ARP响应 如果在ARP请求期间产生准确的匹配,则目的主机就向发送主机以单播方式发出一个ARP应答(因为此时应答主机已经知道了请求方的物理地址)。 (5)请求方更新ARP高速缓存 请求主机收到ARP应答后,取出应答中应答者的IP地址与物理地址,将其写入它的ARP高速缓存。 至此,双方都已知道了对方的地址映射,完成了地址解析,下面就可以进行两主机之间的通信了,2. 源主机与目的主机位于不同的子网目的主机与源主机不在同一子网中时
11、,源主机与目的主机之间有一台或多台路由器,ARP必须为IP数据报通过的每个路由器解析IP地址,如下图所示:其工作原理如下:,源主机根据源IP地址、目的IP地址以及子网掩码可以判断出本主机与目的主机位于不同的子网; 源主机根据其路由表(或默认网关设置)得到去往目的主机的下一跳路由器路由器1的IP地址; 源主机通过ARP解析得到路由器1端口1A的物理地址; 然后将要传送给目的主机的IP数据报用该物理地址封装成帧后发送给路由器1; 路由器1收到该IP数据报后,根据目的主机的IP地址和自己的路由表确定去往目的主机的下一跳路由器路由器2的IP地址,并通过ARP解析得到路由器2端口2A的物理地址; 然后将
12、要传送给目的主机的IP数据报用该物理地址封装成帧后发送给路由器2; 如此下去,以逐级跳的方式将IP数据报传至路由器n。 路由器n根据目的主机的IP地址解析得到目的主机的物理地址,用该物理地址将IP数据报封装成帧后发送给目的主机。,例子: 假设一台IP地址为172.16.1.9,子网掩码为255.255.255.0的客户机希望向IP地址为 172.16.2.5的主机发送IP数据报。 报文发送过程如下图所示:,响应,报文发送步骤说明: (1)检查本地高速缓存 当一台设备确认目的IP地址不属于本子网时,它会根据本身的路由表找到去往目的网络的路由器的IP地址(图中为172.16.1.1); 然后根据此
13、IP地址确定路由器该端口的硬件地址 ARP首先检查本地的ARP高速缓存,确定它是否含有路由器对应端口的IP地址与物理地址的映射。 如果包含,则ARP取出路由器端口的硬件地址,并以此物理地址为目的地址完成数据帧的封装和传输。 (2)向下一跳路由器发送ARP请求 如果在ARP高速缓存中没有发现路由器IP地址的映射,则主机A必须向该路由器发送ARP请求广播,并等待答复。 该ARP请求包含发送者的IP地址和硬件地址,以及路由器的IP地址。,(3)缓存ARP请求 由于ARP请求是子网上的广播,因而网络上的每台设备都能接收到该数据包,并将自己的IP地址和该ARP请求中所指定的IP地址相比较。 若不匹配,则
14、忽略; 若相匹配,则刷新本地ARP高速缓存。当路由器有多个网络接口时,每个接口都维护各自的高速缓存。 (4)路由器将ARP应答传给源主机 路由器向源主机发出一个ARP应答,应答给出了路由器与主机A所在网络的接口的IP地址解析。 (5)源主机刷新自己的ARP高速缓存源主机刷新自己的ARP高速缓存,使其包含从ARP应答中得到的路由器的IP地址-物理地址映射。,(6)源主机向路由器发送数据 完成路由器地址的解析后,将数据传给路由器。 (7)路由器进行转发前查询ARP高速缓存 数据被传送到路由器后,路由器根据IP数据报中目的主机的IP地址和路由表确定数据是否已到达最后一跳路由器。 若不是,则继续向下一
15、跳路由器转发; 否则,可以直接发往目的主机。 (8)向目的主机发送ARP请求 如果在路由器的ARP高速缓存中没有找到目的主机的地址映射,则路由器就必须向通往目的网络的接口广播一个ARP请求,并等待答复。 (9)刷新ARP高速缓存 目的子网上的所有主机均能接收到ARP广播,并将自己的IP地址与ARP请求中所指定的IP地址进行比较。 如果不相匹配,则抛弃该ARP请求; 如果匹配,则目的主机刷新它的ARP高速缓存表目。,(10)目的主机将ARP应答发送回路由器 目的主机向路由器发回一个ARP应答。 应答中包含对目的主机地址的解析结果。 (11)路由器刷新高速缓存 路由器收到应答后,刷新自己的高速缓存
16、,使其包含目的主机的地址映射。 (12)路由器向目的主机转发数据 完成目的主机地址的解析后,源主机根据目的主机的物理地址进行物理数据帧的封装,然后将数据传给目的主机。 至此,源主机和目的主机完成了一次单向通信。引入ARP高速缓存的好处在于:一次解析,多次使用。第一次通信时要完成ARP高速缓存的写入,而后面的通信就变得容易得多了,注意点: 数据包在从源到目的地的传输是通过逐级跳的方式完成的; 在转发过程中,数据包的IP地址不发生变化;而物理地址在每一跳都会发生变化,远程通信时的逐段地址解析正是为了满足这一要求,返回,3.2 反向地址解析协议(RARP),反向地址解析协议RARP可以实现从物理地址
17、到IP地址的转换。 反向地址解析协议被无盘计算机用来获取其IP地址。 由于无盘计算机没有外部存储器来记录其IP地址,一旦关机,就会丢掉它的IP地址。 无盘计算机为了在开机时获得它的IP地址,必须有一个唯一的且容易读取的标识符(物理地址),根据这一标识,无盘计算机可以从RARP服务器上获得其IP地址。 RARP服务器能够给出无盘计算机的地址映射,是因为RARP服务器上存有管理人员配置好的物理地址-IP地址映射表。,工作原理: 无盘计算机以广播方式发出携带本机物理地址的RARP请求。注意这里的广播是帧的广播,即目的MAC地址为全“1”。 网上所有的计算机均收到该请求,但只有提供RARP服务的RAR
18、P服务器处理请求并根据请求者的物理地址查物理地址-IP地址映射表,然后形成应答。应答以单播方式发送。,相关问题: 为了保证系统的可靠性,可以在网络上设置若干台RARP服务器,此时,请求者会收到多个RARP服务器的应答,而请求者只认可最先到达的一个应答。 为了防止多个RARP服务器同时给出应答造成冲突,可以将RARP服务器分为主RARP服务器和备份RARP服务器,主RARP服务器只有一个而备份RARP服务器可以有多个。正常情况下由主RARP服务器给出应答,只有当主RARP服务器不能给出应答时,备份RARP服务器才介入解析工作。 设备不仅可以对自己的地址进行反向解析,而且可以对其他机器的地址进行反
19、向解析。,ARP和RARP的不同之处: ARP假定每个主机都知道自己的物理地址和IP地址的映射,地址解析的目的是求取另一个设备的物理地址,而RARP则主要是由本机的物理地址求取本机的IP地址。 RARP需要有RARP服务器帮助完成解析,而ARP不需要专门的服务器。,返回,3.3 地址解析报文,3.3.1 地址解析报文格式 ARP和RARP都是通过一对请求和应答报文来完成解析的。TCP/IP协议为了保证一致性和处理上的方便,将ARP和RARP的请求和应答报文设计成相同的格式,通过操作字段来加以区别。这一设计思想在TCP/IP协议的设计中被反复使用。,0 8 16 31,ARP/RARP分组中字段
20、说明: HTYPE(硬件类型):这是一个16比特字段。用来定义运行ARP的网络的类型。例如,以太网类型是1。 PTYPE(协议类型):这是一个16比特字段。标识发送设备所使用的协议类型。例如,对IPv4协议,这个字段的值是080016。 HLEN(硬件地址长度):这是一个8比特字段。数据报中硬件地址以字节为单位的长度。例如,对以太网这个值是6。 PLEN(协议地址长度):这是一个8比特字段。数据报中所用协议地址以字节为单位的长度。例如,对IPv4这个值是4。 OPER(操作类型):这是一个16比特字段。定义报文类型(ARP请求:值为1;ARP应答:值为2; RARP请求:值为3;RARP应答:
21、值为4; ),SHA(发送站硬件地址):这是一个可变长度字段。用来定义发送方设备的硬件地址。例如,对以太网这个字段是6字节长。 SPA(发送站协议地址):这是一个可变长度字段。用来定义发送方设备的逻辑地址。对于I Pv4协议,这个字段是4字节长。 THA(目标硬件地址):这是一个可变长度字段。用来定义接收方设备的硬件地址。对以太网这个字段是6字节长。对于ARP请求报文,这个字段是全0,因为发送站不知道目标的物理地址。 TPA(目标协议地址):这是一个可变长度字段。用来定义接收方设备的逻辑地址。对于I Pv4协议,这个字段是4字节长。,3.3.2 地址解析报文处理 在ARP请求报文中: 发送方硬
22、件地址字段填入本机的物理地址; 发送方协议地址字段填入本机的协议地址(对于TCP/IP协议就是IP地址); 目的协议地址字段填入准备解析的目标主机的IP地址; 目的硬件地址不填(为0); 操作类型字段填入“1”表示是ARP请求; ARP请求以广播方式在物理网络中发送。 在ARP应答报文中: 目标机将收到的ARP请求报文中的发送方硬件地址和发送方协议地址放入目的硬件地址和目的协议地址; 目标机将自己的硬件地址和协议地址(IP地址)填入发送方硬件地址和发送方协议地址; 操作类型字段填入“2”表示是ARP应答; ARP应答以单播方式在物理网络中发送。,在RARP请求报文中: 本机一般既是发送方又是目
23、标机(需要获得其IP地址),因此,在发送方硬件地址字段和目的硬件地址字段都填本机的物理地址; 操作类型字段填入“3”表示是RARP请求; RARP请求以广播方式在物理网络中发送。 在RARP应答报文中: RARP应答报文由RARP服务器给出,即RARP服务器是发送方; 发送方硬件地址和发送方协议地址字段填的是给出应答的RARP服务器的物理地址和IP地址; 目的硬件地址和目的协议地址字段填的是被解析对象的IP地址和物理地址; 操作类型字段填入“4”表示是RARP应答; RARP应答以单播方式在物理网络中发送。,3.3.3 地址解析报文封装 ARP/RARP报文是作为一般数据直接封装在物理帧中进行
24、传输的,ARP/RARP报文封装在以太网物理帧中的格式如下图所示:,返回,3.4 代理ARP,代理ARP被用在路由器上,它可以代替隐藏在路由器后面的主机响应ARP请求,如下图所示:,例:当主机A请求对隐藏在路由器后面的子网中的某一主机IP地址(196.168.17.33196.168.17.46)进行解析时:(工作过程) 代理ARP路由器将用自己的物理地址0x45EF695A2712作为解析结果进行响应; 主机A将此物理地址作为隐藏子网上的主机的物理地址进行通信,实际上,主机A发出的信息被送到代理ARP路由器; 然后由代理ARP路由器将信息转发给真正拥有那一IP地址的主机。,代理ARP相关:
25、对于主机A,它将隐藏子网中的主机都作为本物理网络上的主机对待,但事实上却是位于不同的子网; 隐藏子网完全可以采用和主机A所在子网不同的物理网络技术; 代理RAP存在的问题: 代理ARP使得多个IP地址对应一个物理地址成为合法状况,因此难以应付地址欺骗,所以代理ARP要求参与的主机是可信赖的; 代理ARP路由器中的IP地址与物理地址的映射表需要人工维护; 代理ARP难以处理多路由器连接的复杂拓扑结构;,思考题:IP地址为130.23.43.20和物理地址为B2:34:55:10:22:10的主机,有分组要发送给另一个主机,其IP地址为130.23.43.25而物理地址为A4:6E:F4:59:83:AB(第一个主机不知道这个物理地址).这两个主机连接在同一个以太网上。试给出封装在以太网帧中的ARP请求和回答分组。,IP地址用十六进制表示,ARP请求包结构说明,ARP应答包结构说明,