ICMP基础traceroute工作原理

ICMP基础traceroute⼯作原理风险投资退出机制
原⽂:
**
基本概念:
**
ICMP(Internet Control MessageProtocol)Internet控制报⽂协议。
它是TCP/IP协议簇的⼀个⼦协议,⽤于在IP主机、路由器之间传递控制消息。控制消息是指⽹络通不通、主机是否可达、路由是否可⽤等⽹络本⾝的消息。这些控制消息虽然并不传输⽤户数据,但是对于⽤户数据的传递起着重要的作⽤。
ICMP使⽤IP的基本⽀持,就像它是⼀个更⾼级别的协议,但是,ICMP实际上是IP的⼀个组成部分,必须由每个IP模块实现。
ICMP出现的原因
八三版射雕在IP通信中,经常有数据包到达不了对⽅的情况。原因是,在通信途中的某处的⼀个路由器由于不能处理所有的数据包,就将数据包⼀个⼀个丢弃了。或者,虽然到达了对⽅,但是由于搞错了端⼝号,服务器软件可能不能接受它。这时,在错误发⽣的现场,为了联络⽽飞过来的信鸽就是ICMP 报⽂。在IP ⽹络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信⽅。ICMP 协议是为了辅助IP 协议,交换各种各样的控制信息⽽被制造出来的。
制定万维⽹规格的IETF 在1981 年将RFC7922作为ICMP 的基本规格整理出来了。那个RFC792 的开头部分⾥写着“ICMP 是IP 的不可缺少的部分,所有的IP 软件必须实现ICMP协议。也是,ICMP 是为了分担IP ⼀部分功能⽽被制定出来的。
ICMP的⽤途
在RFC,将ICMP ⼤致分成两种功能:差错通知和信息查询。
[1]给送信者的错误通知;[2]送信者的信息查询。
[1]是到IP 数据包被对⽅的计算机处理的过程中,发⽣了什么错误时被使⽤。不仅传送发⽣了错误这个事实,也传送错误原因等消息。
[2]的信息询问是在送信⽅的计算机向对⽅计算机询问信息时被使⽤。被询问内容的种类⾮常丰富,他们有⽬标IP 地址的机器是否存在这种基本确认,调查⾃⼰⽹络的⼦⽹掩码,取得对⽅机器的时间信息等。
热传导率
ICMP作为IP的上层协议在⼯作
ICMP 的内容是放在IP 数据包的数据部分⾥来互相交流的。也就是,从ICMP的报⽂格式来说,ICMP 是IP 的上层协议。但是,正如RFC 所记载的,ICMP 是分担了IP 的⼀部分功能。所以,被认为是与IP 同层的协议。看⼀下RFC 规定的数据包格式和报⽂内容吧。
更加详细地看⼀下数据包的格式吧。⽤来传送ICMP 报⽂的IP 数据包上实际上有不少字段。但是实际上与ICMP 协议相关的只有7 个⼦段。
1)协议;2)源IP 地址;3)⽬的IP 地址;4)⽣存时间;这四个包含在IP ⾸部的字段。
5)类型;6)代码;7)选项数据;这三个包含在ICMP数据部分的字段。
这⾥⾯,1)协议字段值是1。2)和3)是⽤来交流ICMP 报⽂的地址信息,没有特殊意义。对于理解ICMP 本⾝,重要的是5),6),7)三个字段。这⾥⾯的可以称为核⼼的重要字段是5)类型,6)代码这两个字段。所有ICMP ⽤来交流错误通知和信息询问的报⽂,都是由类型和代码的组合来表⽰的。RFC 定义了15种类型。“报⽂不可到达”这样的错误通知和“回送请求”这样的信息查询是由类型字段来区分的。ICMP报⽂由类型来表达它的⼤概意义,需要传递细⼩的信息时由代码来分类。进⼀步,需要向对⽅传送数据的时候,⽤7)选项数据字段来放置。
可能的消息列表:
ICMP实现之ping命令
ping 命令⽤来在IP 层次上调查与指定机器是否连通,调查数据包往复需要多少时间。为了实现这个功能,ping 命令使⽤了两个ICMP 报⽂。
1.向⽬标服务器发送回送请求。
⾸先,向⽬标服务器发出回送请求(类型是8,代码是0)报⽂(同2)。在这个回送请求报⽂⾥,除了类型和代码字段,还被追加了标识符和序号字段。标识符和序号字段分别是16 位的字段。ping 命令在发送回送请求报⽂时,在这两个字段⾥填⼊任意的值。对于标识符,应⽤程序执⾏期间送出的所有报⽂⾥填⼊相同的值。对于序号,每送出⼀个报⽂数值就增加1。⽽且,回送请求的选项数据部分⽤来装任意数据。这个任意数据⽤来调整ping 的交流数据包的⼤⼩。
2.鹦鹉学⾆⼀样返回回送回答。
计算机送出的回送请求到达⽬标服务器后,服务器回答这⼀请求,向送信⽅发送回送请求(类型是0,代码是0)(同3)。这个ICMP 回送回答报⽂在IP 层来看,与被送来的回送请求报⽂基本上⼀样。不同的只是,源和⽬标IP 地址字段被交换了,类型字段⾥填⼊了表⽰回送回答的0。也就是,从送信⽅来看,⾃⼰送出的ICMP 报⽂从⽬标服务器那⾥象鹦鹉学⾆那样原样返回了。
暖通空调系统送信⽅的计算机可以通过收到回送回答报⽂,来确认⽬标服务器在⼯作着。进⼀步,记住发送回送请求报⽂的时间,与接收到回送回答报⽂的时间⼀⽐较,就能计算出报⽂⼀去⼀回往复所需要的时间(同4)。但是,收到的回送回答报⽂⾥写的只是类型和代码的话,发送⽅计算机将⽆法判断它是否是⾃⼰发出去请求的回答。因此,前⾯说到的标识符和序号字段就有它的意义了。将这两个值与回送
回答报⽂中的相同字段值⼀⽐较,送⾏⽅计算机就能够简单地检测回送回答是否正确了。执⾏ping 命令⽽调查的结果没什么问题的话,就将⽬标服务器的IP 地址,数据⼤⼩,往复花费的时间打印到屏幕上。
3.⽤ping 命令不能确定与对⽅连通的原因⼤致有三个。
1)⽬标服务器不存在;2)花在数据包交流上的时间太长ping 命令认为超时;3)⽬标服务器不回答ping 命令。如果是原因2),通过ping 命令的选项来延长到超时的等待时间,就能正确显⽰结果了。如果原因是1)或3)的话,仅凭ping 命令的结果就不能判断是哪⽅了。正如这样,ping 命令不⼀定⼀定能判断对⽅是否存在。
ICMP实现之traceroute命令
为了调查到通信对⽅的路径现在是怎么样了,使⽤的是traceroute 命令。它与ping 并列,是代表⽹络命令。这个traceroute 也是ICMP 的典型实现之⼀。
1.执⾏tracert命令。
在Windows 上执⾏tracert 命令后,⾸先计算机向⽬的服务器发送IP 数据包。Windows 上使⽤的是与ping 同样的ICMP 回送请求报⽂。但是,有⼀点和通常的回送请求不⼀样。那是,最初将IP ⾸部的TTL(⽣存时间)字段设为1 这⼀点。
路由器每转送⼀次数据包就将TTL 的值减1。当TTL 变为0 的时候,按规定将丢弃这个数据包。正如这样,与其说TTL 是时间,还不如说TTL 是经过路由器的个数。对于计算机发送出去的数据包,只要它与⽬标服务器不在同⼀局域⽹内,⼀定会被哪⼉的路由器中继。这时如果TTL 的值是1,由于路由器的处理会变为0,则该数据包将会被丢弃(同2)。山火
变身宝贝2.⽤超时报⽂来通知送信⽅。
路由器丢弃数据包的同时,⽤ICMP 报⽂来通知错误。这时使⽤的ICMP 报⽂是,类型为11,代码为0 的ICMP 超时报⽂。⽽且在选项数据字段⾥,将填⼊原先数据包的IP ⾸部和ICMP 的开始8 字节。正如ping 命令的时候看到的,ICMP 回送请求的先头8 字节⾥包含了标识符和序号字段。因此,送信⽅的计算机看了超时报⽂后,就知道是针对⾃⼰发出的回送请求的错误通知。
计算机接到针对第⼀个数据包的ICMP 超时报⽂后,接下来将TTL 加1(TTL=2)并同样地送出(同3)。这次通过第⼀个路由器,TTL 变为1,到达第⼆个路由器。但是第⼆个路由器象前⾯⼀样,由于TTL变为0,将不能转发该包。因此,同第⼀个路由器⼀样,将该包丢弃,并返回ICMP 超时报⽂。以后,收到错误的发送⽅计算机将TTL 加1,重复同样的⼯作(同4)。
3.只有⽬标服务器的反应不同。
如此⼀个⼀个增加TTL,某个时候ICMP 回送请求报⽂将到达最终的⽬标服务器。这时,只有⽬标服务器与途中的路由器不同,不返回ICMP 超时报⽂。为什么呢?因为即使⽬标服务器收到TTL 为1 的数据包也不会发⽣错误。
作为代替处理,服务器针对送信⽅计算机发出的ICMP 回送请求报⽂,返回ICMP 回送回答报⽂。也就是,送信⽅计算机与服务器之间,与ping 命令的执⾏⼀样了(同5)。得到了ICMP 回送回答报⽂的送信⽅知道了路经调查已经到了⽬标服务器,就结束了tracert 命令的执⾏(同6)。像这样,通过列出中途路由器返回的错误,就能知道构成到⽬标服务器路径的所有路由器的信息了。
4.操作系统不同则实现⽅法略微不同。
到这⾥,以Windows 上的tracert 命令为例看了原理,有些别的操作系统的traceroute 命令的原理略微不同。
具体来说,也有⽤向⽬标发送UDP 数据包代替ICMP 回送请求报⽂来实现的。虽说是⽤UDP,但途中的路由器的处理与図 8完全相同。只是UDP 数据包到达⽬标后的处理不同。⽬标计算机突然收到与通信⽆关的数据包,就返回ICMP 错误,因此根据返回数据包的内容来判断命令的中⽌。
traceroute (Windows系统下是tracert) 命令利⽤ICMP 协议定位您的计算机和⽬标计算机之间的所有路由器。TTL值可以反映数据包经过的路由器或⽹关的数量,通过操纵独⽴ICMP呼叫报⽂的TTL值和观察该报⽂被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器。traceroute是⼀条缓慢的命令,因为每经过⼀台路由器都要花去⼤约10到15秒。
2. traceroute⼯作原理及详细过程

本文发布于:2024-09-21 22:14:30,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/14391.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:回送   数据包   请求   命令   计算机   信息   错误   服务器
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议