ICMP协议,ping和traceroute

本文介绍了ICMP协议的功能,包括差错报告与网络诊断工具Ping和Traceroute的工作原理。探讨了IP选路过程及路由表维护机制,还对比了静态与动态路由协议的特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ICMP:

       IP协议并不是一个可靠的协议,不能保证数据到达,保证数据送达的任务有其他模块完成,其中一个重要的模块就是ICMP(网络控制报文协议)。通常传输差错报文及其他注意的信息,报错告诉应用程序网络上有什么错。


当传送IP数据报出现错误,比如:路由不可达,主机不可达,端口不可达等等,ICMP会把错误封装成包,然后传回主机,给主机一个处理错误的机会,使IP层以上的协议做到安全,所有ICMP报文前面4个字节完全一样,8bit的错误类型,8bit的错误代码和16bit的检验和组成,类型为0,代码为0(回显应答Ping应答),代码为8,类型为0(请求回显Ping请求)。

下面各种情况不会导致产生ICMP差错报文:

1:ICMP差错报文(ICMP查询报文可能会产生ICMP差错报文)。

2:目的地址是广播或多播地址的IP数据报。3:链路层广播数据报  。4:不是 IP分片的第一片(只有第一片才有四层信息,出错不清楚是哪个应用程序的)。5:源地址不是单个主机的数据包,这就是说,源地址不能为零地址,环回地址,多播地址,广播地址。主要都是为了防止ICMP报文的无限传播而定义的。

ICMP分为两类,查询报文和差错报文,查询报文用途:

1:ping查询,2:子网掩码查询,3:时间戳查询(同步时间)。差错报文出现在数据传送出现错误的时候。

Ping:

       利用ICMP协议包确定另一主机是否可达,还能检测到这台主机的往返时间,以表明该主机离我们多远。原理是用类型码为0的ICMP发请求,受到请求的主机则用类型码为8的ICMP回应,用户就可以判断网络的大致情况,ping会给出传送时间和TTL数据。

       Ping出现为我们提供查看IP记录路由选项的机会, -r选项,提供记录路由功能,ICMP的Ping请求数据报在每经过一个路由器的时候,路由器会把自己IP(出接口IP地址)放到该数据报中,最终目的地放(入接口IP) ,而目的主机则会把这个ip列表复制到回应icmp数据报中返回给主机,但是ping所能记录的列表非常有限只能存放9个IP地址,如果要观察路由,就要用到Traceroute。

Traceroute:

       可以让我们看到IP数据报从一台主机到另一台主机所经过的路由,虽然ping也可以侦测,但是由于ip头部的限制,ping不能完全记录下所经的路由器。

       工作原理:traceroute发的是UDP的包,目的端口是高端口(无应用程序使用),第一个包TTL=1,第一跳后TTL减1,而TTL变为0后,路由器把这个包丢弃,并同时返回一个I主机不可达的ICMP数据报给主机,打印第一跳入接口IP地址,接收时间。第一个包TTL=2,第二跳后返回打印第二跳入接口IP地址,接收时间,依次类推如此往复,直到到达目的主机。

当到达目的后,目的主机没有UDP高端口应用程序,回送ICMP端口不可达报错,发送端收到端口不可达后明白已经到达目的地,逐跳TTL加一,每一跳都会发送icmp TTL超时信息,打印每一跳IP地址。

       注意事项:1:源端口(42804)也很大,是进程号与32768之间的逻辑值,一台主机多次运行traceroute,每个进程会查看ICMP返回UDP首部的端口号,只处理对自己发送应答的报文。

2:不能保证ICMP报文的路由与traceroute发送数据报采用同一路由。

3:返回ICMP报文中的信源IP地址是UDP数据报到达路由接口的IP地址。

IP选路:

       选路是IP最重要的功能之一。图9-1描述了一个路由守护程序(daemon),IP层上有路由守护程序:动态路由协议(OSPF),根据相邻路由器更新路由表(IP层),route命令也是往路由表中写,netstat命令-r选项查询路由表。输出:UDP和TCP的包送到IP层根据路由表计算下一路由器,然后出IP层到物理层解析arp发包。输入的包:进来后处理IP选项,1:从源站路由中拿到目的IP,继续判断下一站然后出接口:2:看包是否为本地分组本地IP或广播地址,如果是就上交TCP,UDP,如果不是,继续交给IP输出计算下一站,另外比较特殊的就是ICMP重定向,可以往路由表写路由。

       IP搜索路由表的几个步骤:

1)搜索匹配的主机地址

2)搜索匹配的网络地址

3)搜索默认表项(默认表项一般在路由表中被指定为一个网络表项)


U:该路由可用:

G:该路由是到一个网关,如果没设置该标志,说明目的地是直接相连的。

H:该路由是到一个主机,也就是说,目的地址是一个完整的主机地址,如果没有设置该标志就说明路由是到一个网络,而目的地址是一个网络地址,一个网络号,或者网络号与子网的组合。

D:表明该路由为重定向报文创建。

M:表明该路由已被重定向报文修改。

路由表知识:

       配置好一个网络接口,一个路由就直接配置好了,也可通过route –add 添加路由,而当一个IP包在某路由器发现无路径可走,该路由器就会向源主机发送“主机不可达”或“网络不可达”的ICMP包来报错。

转发与不转发

       正常情况下XP、交换机不转发,路由器是转发的,二层交换价不能设为网关。

ICMP重定向差错

       当IP数据报在某个地方转向的时候,都会给发送IP包的源主机一个ICMP重定向报文,源主机可以利用这个信息更新路由表,注意:重定向报文只能由路由器发出,重定向报文只能由主机所用。

       主机把包发给R1,R1收到数据报并检查路由表,发现R2是发送数据报的下一站,R1即把包转发给R2,也会做一个重定向给原始主机,告诉它以后把数据发给R2而不是R1。


动态路由协议

       静态路由协议:在配置接口的时候,以默认的方式生成路由表项,通过route –add增加表项,或通过ICMP更新表项。

       动态路由协议:动态学习路由,并根据某种规则建立路由转发表协议,根据网络变化做相应调整,协议有一大类常用的叫做内部网关协议(IGP),其中RIP是其中最重要的协议,一种新的协议叫做开放最短路径优先(OSPF)协议,将取代RIP。

RIP选路信息协议:

       使用UDP作为载体,有一个重要的段叫做度量段,以hop作为计数器(以走过多少路由为计数器),这个度量段将影响路由表的建立。20个字节格式的rip报文可以通告25条路由,上限25用来保证rip报文总长度25*20+4 =504,小于512字节,因此为了发送一个路由表需要发送多个报文。


工作流程:

       给每一个已知路由器发送rip协议报文,要求其他路由器给出完整的路由表,这种报文的命令字段为1,地址字段为0,度量字段为16。

       接受请求,如果接收到刚才那个请求就把自己完整路由表交给请求者,如果没有,就处理IP请求表项,把表项中自己有的部分添加上跳数,没有的部分添加上16,然后交给请求者。

       接收回应,更新自己的路由表,使用跳数较小的规则。

定期更新路由表,一般是30s(真频繁)给相邻的路有启发一次自己的路由表。这种形式可以使广播形式的。

这个协议看起来工作很好,但这里面有很多隐藏的忧患,比如:Rip没有子网的概念,环路危险,而且跳数的上限也限制网络大小,因此出现OSPF(开放最短路径优先)替代rip。。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值