zoukankan      html  css  js  c++  java
  • 国际控制报文协议ICMP

    国际控制报文协议ICMP

    ICMP简介

    • ICMP 用于主机或路由器报告差错情况和提供有关异常情况的报告(检测网络错误)。
    • ICMP 不是高层协议,而是 IP 层的协议。

    **ICMP 报文的格式 **

    image-20200123084514046

    ICMP 报文的类型

    • ICMP 报文的前 4 个字节是统一的格式,共有三个字段:即类型代码检验和。接着的 4 个字节的内容与 ICMP 的类型有关。

    • ICMP报文可分为两大类:一、有关信息采集和配置的ICMP报文(称为查询报文(query)或者信息类报文(information message)),二、有关IP数据报传递的ICMP报文(称为差错报文(error message)).

    • ICMP 差错报告报文有许多种比如 :

      • 终点不可达;比如传输数据过程中,中间某一路由器不知道到目标地址怎么走,该路由器就会发回该报文。
      • 源点抑制(Source quench); 即反馈发包速度过快;
      • 时间超过 ;
      • 参数问题 ;
      • 改变路由(重定向)(Redirect) ;

      image-20200123085723392

      如图三个网段:1,2,3,可以把网段1的网关设置在A处,那么PC0访问PC2时,PC0把数据发送到网关A,经Router0转发到达PC2;如果是PC0访问PC1那么PC0同样也会先把数据发送到网关A,Router再中转到Router1再到PC1,而重定向就是,当PC0发数据给网关A时,Router0给PC0返回一个ICMP差错报告报文,告诉PC0直接发到Router1处更快到达PC1。

    • 报文类型字段(Type)及代码字段(Code)含义对照:

    类型TYPE 代码CODE 用途|描述 Description 查询类Query 差错类Error
    0 0 Echo Reply——回显应答(Ping应答)
    3 0 Network Unreachable——网络不可达
    3 1 Host Unreachable——主机不可达
    3 2 Protocol Unreachable——协议不可达
    3 3 Port Unreachable——端口不可达
    3 4 Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特
    3 5 Source routing failed——源站选路失败
    3 6 Destination network unknown——目的网络未知
    3 7 Destination host unknown——目的主机未知
    3 8 Source host isolated (obsolete)——源主机被隔离(作废不用)
    3 9 Destination network administratively prohibited——目的网络被强制禁止
    3 10 Destination host administratively prohibited——目的主机被强制禁止
    3 11 Network unreachable for TOS——由于服务类型TOS,网络不可达
    3 12 Host unreachable for TOS——由于服务类型TOS,主机不可达
    3 13 Communication administratively prohibited by filtering——由于过滤,通信被强制禁止
    3 14 Host precedence violation——主机越权
    3 15 Precedence cutoff in effect——优先中止生效
    4 0 Source quench——源端被关闭(基本流控制)
    5 0 Redirect for network——对网络重定向
    5 1 Redirect for host——对主机重定向
    5 2 Redirect for TOS and network——对服务类型和网络重定向
    5 3 Redirect for TOS and host——对服务类型和主机重定向
    8 0 Echo request——回显请求(Ping请求)
    9 0 Router advertisement——路由器通告
    10 0 Route solicitation——路由器请求
    11 0 TTL equals 0 during transit——传输期间生存时间为0
    11 1 TTL equals 0 during reassembly——在数据报组装期间生存时间为0
    12 0 IP header bad (catchall error)——坏的IP首部(包括各种差错)
    12 1 Required options missing——缺少必需的选项
    13 0 Timestamp request (obsolete)——时间戳请求(作废不用)
    14 Timestamp reply (obsolete)——时间戳应答(作废不用)
    15 0 Information request (obsolete)——信息请求(作废不用)
    16 0 Information reply (obsolete)——信息应答(作废不用)
    17 0 Address mask request——地址掩码请求
    18 0 Address mask reply——地址掩码应答

    **ICMP 差错报告报文的数据字段的内容 **

    image-20200123090716797

    如果网络设备1与网络设备2通信,图中A表示网络设备2收到的来自网络设备1的数据报,该数据报并无有用数据,仅起询问是否能通信作用;B表示该设备返回的数据报,图中演示的是A-->B的过程。首先保留A的首部和数据字段中的前8字节,在IP数据报前面添加ICMP的前8字节形成ICMP差错报告报文,再在ICMP差错报告报文前面添加网络层地址形成B数据报;

    抓包演示

    image-20200123093048459

    我们尝试与两个地址建立通信并抓取通信过程中的数据报,其中一个不能通信的地址:207.226.141.205;另一个为能够通信的地址:202.99.160.68 。抓包总览如下图所示:

    image-20200123095329276

    不能通信:

    • 172.26.105.78(本计算机IP地址)——>207.226.141.205时:

    image-20200123100104739

    Internet Control Message Protocol即表示网际控制报文协议ICMP

    可以看到该ICMP报文的类型(Type)为8,对应代码(Code)为0,表示Echo request——回显请求(Ping请求),属于查询报文。

    可以以看到后面还有检验和等字段,检验了上面讨论的ICMP报文字段结构。

    • 207.226.141.205 ——> 172.26.105.78时:

    image-20200123100713588

    可以看到该ICMP报文的类型(Type)为11,对应代码(Code)为0,表示Time-to-live exceeded——传输期间生存时间TTL为0,属于差错报告报文。

    能够通信:

    • 172.26.105.78(本计算机IP地址)——>202.99.160.68时:

    image-20200123101151435

    可以看到该ICMP报文的类型(Type)为8,对应代码(Code)为0,表示Echo request——回显请求(Ping请求),属于查询报文。

    • 202.99.160.68 ——> 172.26.105.78时:

    image-20200123101327796

    可以看到该ICMP报文的类型(Type)为0,对应代码(Code)为0,表示Echo Reply——回显应答(Ping应答),属于查询报文。

    ping命令诊断网络故障

    • PING(Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。

    • ping指的是端对端连通,通常用来作为可用性的检查,但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致系统变慢,网速变慢。严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。

    • 如果你打开IE浏览器访问网站失败,你可以通过ping命令测试到Internet的网络连通,可以为你排除网络故障提供线索,下面展示ping命令返回的信息以及分析其原因。

      • 目标主机不可到达

        image-20200123103812303

      • 目标网络不可到达

        image-20200123104545575

      • 请求超时

        image-20200123104121166

        说明丢包了。

      • 通过延迟评估网络带宽

        image-20200123103759734

        可以看到最小延迟为54ms,最大延迟57ms,平均延迟55ms。

        当 ping 本计算机网关的时候延迟小,速度快:

        image-20200123104426513

      • 总结:ping命令只能检测两端口通或不通。

    pathping命令跟踪数据包路径

    image-20200123105829902

    当PC0 ping PC1时不通,可能是1~4处某一处或多处断了,也可能是PC1没有开机。而使用PC0 pathping PC1时,从PC0到PC1,每经过一个路由器都会通过该路由器给PC0发回一个数据包说明PC0到该路由器的路径是通的。即Router1给PC0发回一个数据包则表示1、 2通;Router2给PC0发回一个数据包表示1、 2、 3通。在网络排错中具有很强的实用意义。

    • 另一种情况

    image-20200123110842189

    PC0 pathping PC1时,数据包可以通过Router0,但是Router0设置了进入的数据包无法追踪该路由器,则Router0不会给PC0返回一个数据包。

    • 演示

      输入命令:

      pathping www.bilibili.com
      

      表示从本计算机访问“www.bilibili.com”该网站的服务器,并追踪途经的各个中转路由器。

    image-20200123111530338

    同时pathping命令还会统计通信方到每个中转路由器的丢包率,由此可以看出从哪到哪丢包严重,网络延迟大,据此可以优化网络。

    相同类型的有trace route命令,该命令较为简略不会统计丢包率,这里不做讨论。

  • 相关阅读:
    关于vue 自定义组件的写法与用法
    常用的几种监控服务器性能的Linux命令
    Web自动化测试入门
    接口测试入门
    Selenium+IDEA(java+maven+testNG)+Jenkins环境搭建
    Jmeter+ant+Jenkins环境搭建
    iframe在移动端的缩放
    CSS3的颜色渐变效果
    Hexo建博小结
    Ajax基本概念和原理
  • 原文地址:https://www.cnblogs.com/AhuntSun-blog/p/12230712.html
Copyright © 2011-2022 走看看