ICMP协议

因为一个琐事三星期左右没有写了,今天起继续开整!

原文传送门:http://www.study-area.org/network/networkfr2.htm


1.请问为什么要有ICMP?ICMP的功能是什么?

答:ICMP的全称是Internet Control Message Protocol。从技术角度来说,ICMP就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网络的连接状况,也能确保连接的准确性,其功能主要有:

侦测远端主机是否存在

建立及维护路由资料

重导资料传输路径

资料流量控制

为什么要有ICMP呢?在整个TCP/IP协议家族中,对“使用者”来说,ICMP恐怕是最容易被忽略的协议了。关于前面所讨论的协议,真要能发挥工作的前提条件是:“假设一切都没有问题”。然而,在当今如此复杂的网络环境中,前述条件恐怕是没办法保证的:设定可能有误、线路有可能会断、设备可能挂掉、router可能负载过高。。。等等都是我们没法确保的。这个时候就需要一套机制来侦测或通知各种各样可能发生的状况,这就是ICMP协议的目的。

2.请列举常见的ICMP TYPE有哪些?

ICMP在沟通之中,主要通过不同的类别(TYPE)和代码(CODE)来让机器识别不同的连线状况。常用的类别如下:

3.请列举Distination Unreachable的ICMP CODE有哪些?

在ICMP使用中,不同的类别回以不同的代码来描述具体的状况。Distination Unreachable中:


4.请描述ping是如何运用ICMP机制的?

在win系统命令窗中输入


后面的参数可以是域名,也可以是ip。

从上面的结果可以得出是否连线成功,还可以根据他的time来判断当前连线的速度,数值越低连线越快;在命令结束的两行,还有一个总结,如果发现您的丢包率(packet loss)很严重的话,哪就要检查您的线路品质,或是上游的服务品质了。可以通过ping对方的主机、路由或者己方的路由等来判断故障出现的位置。比如ping 自己的router,如果ping不到就说明是自己及其与路由之间的问题,我们可以ping一下自己的ip。如果自己的ip可以ping得到,那么,可能是连线的问题,我们可以检查一下网线、hub、等设备。

从上面的过程中,我们不难看出ping是很有用的。然后,我们能ping一台及其的时候,我们就可以确定连线时成功的;但是不能ping的话,未必是连不上的。因为:使用ping命令的时候,事实上是送出一个echo-request(type 8)的ICMP封包(回应请求),如果对方及其能收到这个请求,而且愿意做出回应,则送回一个echo-reply(type 0)的ICMP封包,当这个回应能顺利抵达的时候,就完成了一个ping动作。

很显然,如果这个echo-request不能到达对方的及其,或是对方回应的echo-reply不能顺利送回来,那ping就失败。这情形在许多有防火墙的环境中都会碰到,如果防火墙随便将request和reply挡下来就会导致ping失败,但并不代表其他连线不能建立。另外,就算没有防火墙作怪,对方也可以讲及其设定为不回应任何echo-request封包。

5.请描述tracert命令式如何运用ICMP机制的(linux是tracerouter)


通过tracert命令,我们可以找出通往目的地的所有经过的路由节点,并以数字将路由顺序标示出来。

tracert是怎样确定整个连线路由中,确定所有路由的节点呢?

您是否有留意到ping命令的结果又一个TTL值?通常来说,Time To Live都是以时间为单位的,但是在路由上面却是以跳站数目为单位的。为了防止一个封包无限期呆在网路上路由,每一个封包都会被赋予一个TTL值,告诉它最多能经过多少个跳站。当封包被一个路由节点处理之后,它原来的TTL值就会被扣掉1,这样,如果封包的TTL降到0的时候,路由器就会丢弃这个封包,并且同时向来源地送出一个time_exceeded(type 11)的ICMP封包,以告知其封包的命运。

聪明的tracert程序设计者正是利用了ICMP这个特殊功能,来找出每一个路由节点的:

1.首先,tracert命令会向目标位地址送出UDP侦测封包,但讲第一个送出的封包之TTL设为1.这样,第一个路由节点在处理这个封包的时候,减掉1,并发现TTL为0,于是就不处理这个封包,并同时送回一个ICMP封包。这样,发送端就知道第一个路由节点在哪里了。

2.当收到第一个ICMP封包,程序会检查返回主机是否就是目标主机,如果不是,则再送出第二个封包,但TTL比上次增加1.

3.这样,第一路由节点街道封包时的TTL就不是0,那么处理完后送给下一个节点,同时将TTL扣除1。这样,当下一个站收到这个封包,再扣掉TTL为0,也会送回ICMP封包,这样,程序就知道第二路由节点在哪里了。

4.然后重置上一个动作,直到找到目标主机为止,或是封包的最大TTL(通常为30)都用光为止,但您可以用-m参数来制定最大的TTL值。

6. 请绘制一种ICMP的封包结构:

由于ICMP的类别繁多,且各自又有各自的代码,因为,ICMP并没有一个统一的封包格式以供全部ICMP讯息使用,不同的ICMP类别分别有不同的封包头。以echo-request和echo-reply为例,他们的ICMP封包内容如下:


7.ICMP与IP协议的关系

在OSI模型中,ICMP协议虽然与IP协议同为第三层协议,但ICMP本身不具备传送能力。事实上,它跟TCP/UDP一样,也是靠IP帮忙进行传送。其封包结构如下:


因此,只要网路之间支持IP,就可通过ICMP进行错误侦测与回应。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值