网络层其他配套协议
TCP/IP中网络层最重要的协议是IP协议,为了完成网络层的功能,在网络层还有一些其他配套协议,最著名的有:ARP(Address Resolution Protocol,地址解析协议)、RARP(Reverse Address Resolution Protocol,反向地址解析协议)、ICMP(Internet Control Messages Protocol,Internet控制消息协议)、IGMP(Internet Group Management Protocol,Internet 组管理协议)。其中RARP是反向地址解析协议,是在已知本接口MAC地址的情况下,解析本接口IP地址的协议,常用于无盘工作站等情况,现在已经基本不再使用不用了。IGMP是在局域网内部确定组播成员的协议。以下重点介绍配合IP协议工作的最重要的ARP协议和ICMP协议。
4.4.1 地址解析协议ARP
ARP是地址解析协议,其功能是将目的IP地址解析为目的MAC地址(MAC地址是链路层地址,在以太网中就是网卡地址)。为什么知道了IP地址还要知道其对应的MAC地址呢?这是因为IP包要转发,还要下传到数据链路层,数据链路层要封装IP包着就要知道该目的MAC地址。
当IP协议知道IP包的下一跳(或目的地址)IP地址,但不知道其MAC地址时,就调用ARP协议。
IP协议调用ARP协议后,ARP协议通过ARP请求和ARP应答实现地址解析。ARP协议首先在本广播域(即同一子网)中广播ARP请求,ARP请求将到达本网段的所有主机的ARP协议,意思是问本网段中的谁是需要解析的IP地址。不是需要被解析IP地址的接口的ARP协议将丢弃该ARP请求包。需要被解析IP地址的接口收到该ARP请求后,首先从ARP请求数据包中取出该ARP请求包中的源IP地址和源MAC地址,并将该IP地址和MAC地址的对应关系存到本机的ARP缓存中,以便在有相反方向的IP数据包要转发时不需要再做ARP地址解析。然后以单播的ARP响应来通告自己的MAC地址。收到ARP应答后,转发IP包的接口从ARP应答中取出IP地址和MAC地址对应关系,并存到自己的ARP缓存中。这样,转发IP包的接口就知道该IP地址所对应的MAC地址了。
特别要说明的一点是,这里要解析的IP地址不一定就是IP包中的目的IP地址,因为源主机和目的主机不一定在同一个子网中,IP包可能经过多个以太网转发,每次转发需要解析的只是下一跳的路由器或三层交换机的MAC地址,只有最后一跳即到达目的主机所在网络后的解析才是将目的主机的IP地址解析为目的主机MAC地址。
- 1 -
4.4.2 因特网控制报文协议ICMP
IP协议是尽力(而不可靠)的数据传输协议,但在网络层中也有一定的机制对IP包的传输做适当的管理,这就是ICMP的功能。当然ICMP并不能使IP协议变得可靠,它只是一定程度提高了IP包传输成功的概率。
ICMP是网络层协议,但它并不是封装到链路层中,而是封装在IP包中(协议号是1)。
ICMP报文有5个字段,其中类型字段占8位,代码字段8位,检验和16位,首部其他字段32位,数据字段长度不定,与类型有关。表4.2列出了ICMP的各种类型、代码及其功能。其中许多类型现在已很少使用,以下介绍几种常用的类型。
表4.2 常用ICMP报文类型
- 2 -
1. 与IP包差错报告相关的报文:
类型3:目标不可达。当路由器因为某种原因不能转发IP包到下一跳或目的主机不能向其上层提交IP包时,可能向源主机发该类型的ICMP包。具体原因有16种,常用的有:
代码0:网络不可达
代码1:主机不可达
代码2:协议不可达
代码3:端口不可达
类型4:源站点抑制。当路由器或目的主机因为拥塞而丢弃IP包时,向源主机发该类型的ICMP 包,通知源主机降低IP包的发送速度。
类型5:重定向。在局域网中路由器若发现源主机指向本路由器的路由不是最佳的路由时,将用本类型的ICMP包通知源主机。
类型11:时间(TTL)超时。路由器收到TTL为0的IP包后将丢弃该IP包,并且发ICMP报文通知源主机。另外,若目的主机收到被分片的IP包,在一定时间内若不能收到该IP包的全部分片,也将通过类型11的ICMP包通知源主机。最常用的测试网络路径的工具tracert就是利用ICMP 的时间(TTL)超时完成的。
类型12:参数问题。路由器或目的主机收到首部检验有问题的IP包,将丢弃该IP包,并且发
- 3 -
ICMP报文通知源主机。
与IP包差错报告相关的报文时有几个原则:
●对ICMP差错报文不会再发与IP包差错报告相关的报文。
●对组播IP包不发与IP包差错报告相关的报文。
●对本地环回地址127.x.x.x不发与IP包差错报告相关的报文。
2. 查询类ICMP报文:
类型8:Echo请求。主机或路由器向某特定IP地址发出该类型ICMP包,以测试该IP地址是否可达。
类型0:Echo回答。收到Echo请求的主机或路由器必须做出应答,即返回类型0的ICMP包给源IP地址。最常用的测试网络是否连通的工具ping就是利用ICMP的Echo请求和回答完成的。
类型13:时间戳请求。该类型的ICMP包请求其目的路由器或主机的日期和时间。
类型14:时间戳应答。该类型的ICMP包应答请求时间戳的源IP地址,在该ICMP包中带有从1990年1月1日到当前时间所经过的秒数。
- 4 -