美文网首页
Ping 本质( ICMP )

Ping 本质( ICMP )

作者: FutureEye | 来源:发表于2018-09-14 00:53 被阅读0次

    1、什么是 Ping

    ping是一种计算机网络工具,用来测试数据包能否透过IP协议到达特定主机。ping的运作原理是向目标主机传出一个ICMP echo@要求数据包,并等待接收echo回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。———— 维基百科

    我们在网络通信的过程中,常常使用 ping 某一个 IP 地址或者某个域名看下基本连接是否正常;是否有丢包;是否有网络延迟。ping 就是我们经常用来作为网络连接通信的测试“指令”。

    我记得我们以前调侃说只要会 Ping 就可以去当网吧网管了(其实网管的工作肯定比这个复杂的多)。

    Windows 10 下的 Ping
    C:\>ping www.baidu.com
    
    正在 Ping www.a.shifen.com [119.75.216.20] 具有 32 字节的数据:
    来自 119.75.216.20 的回复: 字节=32 时间=42ms TTL=53
    来自 119.75.216.20 的回复: 字节=32 时间=42ms TTL=53
    来自 119.75.216.20 的回复: 字节=32 时间=42ms TTL=53
    来自 119.75.216.20 的回复: 字节=32 时间=42ms TTL=53
    
    119.75.216.20 的 Ping 统计信息:
        数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
    往返行程的估计时间(以毫秒为单位):
        最短 = 42ms,最长 = 42ms,平均 = 42ms
    
    

    Ping 的工作原理

    在维基百科中解释有说明, Ping 的原理是 ICMP 协议.

    什么是 ICMP 协议

    ICMP 的全称是 Intent Control Message Protocol, 中文过来就是 互联网控制报文协议

    网络数据包在庞大的网络中会很多各种不同情况。如果一定需要举一个例子来比如的话,用相当于兵种的侦察兵。时刻给大部队探测前方的情况。以便后方的大部队能够根据不同情况做出不同的调整。所以 ICMP 经常用于网络环境的测试。

    互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。 —— 维基百科

    ICMP 协议的格式

    用图文表示:


    ICMP 协议格式.png

    ICMP 报文封装在 IP 包里面。ICMP 的报文类型根据类型和代码有很多,文章后面有来自维基百科的完整的表格。但是主要分为两类:
    A、查询报文
    B、差错报文

    查询报文 (Echo Request与 Echo Reply)

    定义:发送端主动发起请求,并且获取到应答。

    常见应用:Ping

    Ping 就是主动请求,获取到主动应答。但是 Ping 是在原生的 ICMP 中添加了自定义格式区域。例如 Ping 中放了发送的请求时间,以此计算出路程。所以,其实在 Ping 的报文中会加入序号,以用来区分数据包,从而提高计算时间或者路程的准确性。

    差错报文

    主要有以下几种:

    1. 源抑制

    发送端发送大量数据时,可能会导致网络( 路由器 )过载,此时过载处可以向发送端发送源抑制的消息,让他降低发送速度。

    2. 终点不可到达

    网络信息不能到达终点,就会给发送端发送一个目的不可到达的信息。告诉发送端可能是设备故障而引起关闭(情况之一)。然后这种又可以再次细分:
    A、网络不可达 — 代码为 0,
    B、主机不可达 — 代码为 1.
    C、协议不可达 — 代码为 2.
    D、端口不可达 — 代码为 3.
    E、需要分段 - 代码为 4.( 必须把数据分段才能去到终点 )

    3. 超时

    网络包超过设置的在网络中的生存时间,还没有达到。

    4. 路由重定向

    定义数据包的路由股则。因为大部分的时候,路由规则是通过相关协议算法生成的,有些时候重新定义过之后,会让这个数据包绕的更远。

    常见应用:Traceroute
    Traceoute 有点像是在不断试错的意思。是用来侦测主机到目的主机之间所经路由情况的重要工具。Ping 我们知道是可以知道这条大路通不通的,Traceoute 通过设置 TTL 知道到底是哪个路由器不通。
    TTL : 数据包在网络中生存时间,也就是通过数据被路由器转发的次数,没转发一次就减一。知道为 0 的时候就抛弃。
    Traceroute 的原理:它收到目的主机的 IP 后,首先给目的主机发送一个 TTL=1 的 UDP 数据包,而经过的第一个路由器收到这个数据包以后,就自动把 TTL 减 1,而 TTL 变为 0 以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的 ICMP 数据报给主机。如此循环就可以知道所有的路由 IP 了。( ICMP 出错了就会回错误包 )

    通常 Traceoute 的目的端口设置的是一个大于 30000 的值( 一般的应用端口号远小于这个数 )。所以如果回复的是 “端口不可达”,那就说明到达终点,否则这个信息就会超时。以此确保 消息是否到达终点

    Traceoute 还有一个有意思的功能,就是确定 MTU(数据最大传输单元),Traceoute 通常对数据不分段,就直接发送,如果如果遇到过程中某个路由转发,出现返回 ICMP 需要分段的错误,就把数据进行拆分,直到最后到达终点。就验证出 MTU。

    ICMP 其实还有很多意思的地方,这边就简单的介绍到这里。
    附表:


    ICMP 类型.png

    相关文章

      网友评论

          本文标题:Ping 本质( ICMP )

          本文链接:https://www.haomeiwen.com/subject/mlbpgftx.html