文章内容概述ICMP协议详解Internet控制消息协议(InternetControlMessageProtocol)该协议主要用于辅助IP协议进行数据传输。ICMP协议可以将用于报告错误信息或异常情况的ICMP报文数据封装在IP数据报中进行数据传输。ICMP报文分为两部分:ICMP报文头和ICMP报文数据ICMP报文头类型:主要是指ICMP报文的类型(主要有两大类,后面会解释)代码:主要是指具体是什么不同ICMP报文类型的errorchecksums:主要检查报文整个传输过程中是否存在错误。在前面介绍的IP协议头中,有一个8位的协议,表示IP数据具体携带的数据是什么协议。ICMP字段值为1,如果IP协议传输的数据是ICMP数据,那么协议中会写入ICMP协议报文的两种错误报告报文。网络不可达:IP地址可以代表一个网络,当主机号全为0时,代表某个网络。如果整个网络不可达,会上报一个类型为3,具体代码为0的ICMP协议报文。.网络重定向:传输到某个网络的数据可能无法通过该网络,需要重定向。主机重定向:如果发送的消息,主机通知无法处理,请发送给另一台主机查询消息返回请求或响应:主要是验证网络是否连通。假设计算机A要与计算机B通信,A会发送一个空数据给B,如果B收到,会响应一个时间戳请求或响应:当需要时间同步时,会应用这个ICMP协议使用Ping应用在上一篇文章中使用ping命令查看网络的响应时间和TTL。这部分主要介绍ping的原理。ping应用程序主要使用ICMP查询消息,它会发回请求或响应类型的消息。在使用ping命令时,它首先组装一个IP协议报文,然后在IP数据报中组装一个ICMP查询报文,然后通过数据链路层发送出去。这就是ping应用的原理。通常我们会使用ping命令来检查本地网络是否连通,或者网络质量如何。平时在家里,如果出现网络故障,我们也会使用ping命令进行排查。第一步是ping本地环回地址127.0.0.1。重新安装协议栈)如果上一步正常返回,则ping网关地址(即路由器地址)。如果电脑在内网,一般是ping192.168.0.1或者ping192.168.1.1。如果上一步ping网关也通了,说明本机连上了路由器。如果没有,则说明网线或wifi有问题。如果能ping通网关,则ping远程地址(如百度)。如果失败,说明你家和ISP之间的网络有问题。这时候就需要联系中国电信或者中国移动或者中国联通了。Traceroute可以检测IP数据报在网络中的路径。在这篇文章中,详细解释了IP协议,介绍的是计算机连接到虚拟互联网,我们不关心数据报通过网络经过了哪些路径。但是,如果您需要对网络进行故障排除,Traceroute应用程序可以提供更高级的功能,以便我们更好地了解网络状况。Traceroute应用原理在引入IP报头时,报头中有一个TTL,表示IP数据报在网络中的生存期,每有一个设备通过,TTL就减1。当TTL为0时,网络设备必须丢弃数据包。当TTL为0时,网络设备必须丢弃数据包。但是,它并没有说明丢弃时要做什么。了解ICMP报文后,我们可以知道,如果网络设备要丢弃该报文,就会发送ICMP目的地不可达错误报文。也就是说,它会报告一个错误,告诉源主机在消息的传输过程中发生了错误,这样源主机就会意识到这个问题。下面是借助前面用到的一张图的例子,表示网络的方向是从计算机A到计算机B。在上一篇文章中提到,数据包是逐跳传输的,所以会依次跳转。ToMediumNetwork="LargeNetwork="MediumNetwork="SmallNetwork="ComputerB.Traceroute应用巧妙地使用了ICMP错误不可达消息。为了检测数据报所经过的路径,它首先封装了一条TTL为1的IP报文。上图中,计算机A发送一条TTL为1的报文后,到达后会发现TTL为0中型网络,然后它会向源机器(即A)发送ICMP错误不可达消息。.此时A电脑会记录中型网络的IP。这时候Traceroute会封装一个TTL为2的请求报文,当数据到达大网络时,TTL为0,大网络会丢弃该报文,向源机发送ICMPErrorUnreachable报文。这时A电脑又会记录大网的IP。TTL会依次递增,直到收到正常响应,说明计算机A发送的报文已经被B接收到,此时计算机A已经收到路径机器的所有信息,可以输出数据报的路径曾在网络中游历。因此,Traceroute应用巧妙地利用了ICMP错误不可达消息的功能。TTL加1,直到到达目标机器,记录下经过的每一台机器的IP,从而得到路径。这就是Traceroute应用程序的原理。看实际操作。Windows下可以使用tracert+域名/IP命令查看输出结果。Mac中有内置工具可以使用。首先可以看到百度的地址:182.61.200.7。然后数据包下面的第一跳是我的内网路由器地址192.168.0.1。第二跳来到113.45.64.1,应该是小区的内网IP。每一跳经过的IP,直接在百度上搜索即可。如果想看更详细的跨省路径,可以跟踪访问github.com,因为这个服务器在美国,所以会比较慢。在瞬息万变的技术中寻找相同点,是一个技术人的核心竞争力。知行合一,理论与实践相结合
