zoukankan      html  css  js  c++  java
  • ping的工作原理&ICMP协议

      ping命令用于判断与对方网络是否畅通,ping 是基于ICMP协议工作的。

    ICMP协议(互联网控制报文协议):

    ICMP报文:

      ICMP主要的功能:确认 IP 包是否成功送达目标地址;报告发送过程中 IP 包被废弃的原因;改善网络设置等。

      ICMP 的通知消息会使用IP进行发送,收到该 ICMP 包的主机分解 ICMP 的首部和数据,得知发生问题的原因。

    ICMP报文类型:

    查询报文类型:

      回送消息(回送应答和回送请求)用于进行通信的主机或路由器之间,判断所发送的数据包是否已经成功到达对端ping 命令就是利用回送消息实现的。

    差错报文类型:

      目标不可达消息:

        网络不可达:IP 地址分为网络号和主机号,当路由器中的路由器表匹配不到接收方 IP 的网络号,通过 ICMP 协议以网络不可达(Network Unreachable)的原因告知主机。

        主机不可达:当路由表中没有该主机的信息,或者该主机没有连接到网络,那么会通过 ICMP 协议以主机不可达(Host Unreachable)的原因告知主机。

        协议不可达:当主机使用 TCP 协议访问对端主机时,能找到对端的主机了,可是对端主机的防火墙已经禁止 TCP 协议访问,那么会通过 ICMP 协议以协议不可达的原因告知主机。

        端口不可达:当主机访问对端主机 8080 端口时,这次能找到对端主机了,防火墙也没有限制,可是发现对端主机没有进程监听 8080 端口,那么会通过 ICMP 协议以端口不可达的原因告知主机。

        需要进行分片但是设置了不可分片:发送端主机发送 IP 数据报时,将 IP 首部的分片禁止标志位设置为1。根据这个标志位,途中的路由器遇到超过 MTU 大小的数据包时,不会进行分片,而是直接抛弃。通过 ICMP 协议以需要进行分片但是设置了不可分片告知发送端主机。

      原点抑制消息:   

        当路由器向低速线路发送数据时,其发送队列的缓存变为零而无法发送出去时,可以向 IP 包的源地址发送一个 ICMP 原点抑制消息,收到这个消息的主机知道了在整个线路的某一处发生了拥堵的情况,从而增大 IP 包的传输间隔,减少网络拥堵的情况。

        ICMP原点抑制消息的目的就是为了缓和这种拥堵情况

      重定向消息:

        如果路由器发现发送端主机使用了「不是最优」的路径发送数据,那么它会返回一个 ICMP 重定向消息给这个主机,在这个消息中包含了最合适的路由信息和源数据。这主要发生在路由器持有更好的路由信息的情况下。路由器会通过这样的 ICMP 消息告知发送端,让它下次发给另外一个路由器。

      超时消息:

        IP 包中有一个字段叫做 TTL (Time To Live,生存周期),它的值随着每经过一次路由器就会减 1,直到减到 0 时该 IP 包会被丢弃,此时,IP 路由器将会发送一个 ICMP 超时消息给发送端主机,并通知该包已被丢弃。设置 IP 包生存周期的主要目的,是为了在路由控制遇到问题发生循环状况时,避免 IP 包无休止地在网络上被转发

    ping的工作过程(同网段):

      ping 命令执行的时候,源主机首先会构建一个 ICMP 回送请求数据包发送给目的主机。ICMP 数据包内包含多个字段,最重要的是两个:

    • 第一个是类型,对于回送请求消息而言该字段为 8

    • 另外一个是序号,主要用于区分连续 ping 的时候发出的多个数据包。每发出一个请求数据包,序号会自动加 1

      此外,为了能够计算往返时间 RTT,它会在报文的数据部分插入发送时间。由 ICMP 协议将这个数据包连同IP地址一起交给 IP 层。

      目的主机收到IP数据包以后,将有用的信息提取后交给 ICMP 协议。同时,构建一个 ICMP 回送应答数据包发送出去给主源机 。

      在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 回送响应消息,则说明目标主机可达。此时,源主机会检查,用当前时刻减去该数据包从源主机上发出的时刻,就是 ICMP 数据包的时间延迟。

    原文链接 https://mp.weixin.qq.com/s/leE2DgDOl5z90hG2gG1Urw

      

  • 相关阅读:
    css backgroud属性与雪碧技术
    css margin 外边距塌陷问题
    css 浮动元素与清除浮动
    css 盒模型的概念与使用
    七年iOS架构师教你如何一举拿下35K的Offer,(附面试技巧)
    iOS开发者月薪想要突破30K,需要经历+提升些什么?
    月薪 8K 与30K的程序员 区别到底在哪里?
    那些月薪35K以上的iOS开发者 都掌握了什么技能?
    从事 iOS 开发8年的面经——送给准备跳槽的你!
    想进BAT大厂的 iOS程序员,看完这个你还觉得Offer难拿吗???
  • 原文地址:https://www.cnblogs.com/yongjin-hou/p/14523533.html
Copyright © 2011-2022 走看看