zoukankan      html  css  js  c++  java
  • ICMP协议

     ICMP 是Internet控制报文协议,工作在网络层,用来在网络设备间传递各种差错和控制信息。它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。

    1、ICMP功能

    ICMP重定向:当数据发送的路径错误的时候,对方发送ICMP纠正协议以使发送端选择正确路径。

    ICMP差错检测:检测两台主机之间能否正常的进行收发,使用的命令就是PingICMP Echo Request和ICMP Echo Replay分别用来查询和响应某些信息,                             进行差错检测。

    ICMP错误报告

        当网络设备无法访问目标时,中间设备会自动发送ICMP目的不可达报文到发送端。ICMP定义了各种错误消息,用于诊断网络连接性问题;根据这些错误消息,源设备可以判断出数据传输失败的原因。比如,如果网络中发生了环路,导致报文在网络中循环,最终TTL超时,这种情况下网络设备会发送TTL超时消息给发送端设备。又比如如果目的不可达,则中间的网络设备会发送目的不可达消息给发送端设备。目的不可达的情况有多种,如果是网络设备无法找到目的网络,则发送目的网络不可达消息; 如果网络设备无法找到目的网络中的目的主机,则发送目的主机不可达消息。

    2、ICMP数据包格式

    ICMP消息封装在IP报文中。ICMP消息的格式取

          决于Type和Code字段, 其中Type字段为消息类型,Code字段包含该消息类型的具体参数。后面的校验和字段用于检查消息是否完整。在ICMP Redirect消息中,这个字段用来指定网关IP地址,主机根据这个地址将报文重定向到指定网关。 在Echo请求消息中,这个字段包含标识符和序号,源端根据这两个参数将收到的回复消息与本端发送的Echo请求消息进行关联。尤其是当源端 目的端发送了多个Echo请求消息时,需要根据标识符和序号将Echo 请求和回复进行一一对应。

     

           ICMP定义了多种消息类型,用于不同的场景。有些消息不需要Code字段来描述具体类型参数,仅用Type字段表示消息类型。比如,ICMP Echo回复消息的Type字段设置为0。 有些ICMP消息使用Type字段定义消息大类,用Code字段表示消息的具体类型。比如,类型为3的消息表示目的不可达,不同的Code值表示不可达的原因,包括目的网络不可达(Code=0)、目的主机不可达(Code=1) 、协议不可达(Code=2)、目的TCP/UDP端口不可达(Code=3) 等。 其中网络不可达指的是没有这个网段,主机不可达指的是有这个网段,但是网段里头没有这台主机,端口不可达指的是主机没有开放这个端口(最常用),协议不可达指的是不支持这个协议号。

    3、ICMP应用

    ping

            Ping是检测网络连通性的常用工具,同时也能够收集其他相关信息。用户可以在Ping命令中指定不同参数,如ICMP报文长度、发送的ICMP报文个数、等待回复响应的超时时间等, 设备根据配置的参数来构造并发送ICMP报文,进行Ping测试。
    Ping常用的配置参数说明如下:
    1. -a source-ip-address指定发送ICMP ECHO-REQUEST报文的源IP地址。如果不指定源IP地址,将采用出接口的IP地址作为ICMP ECHO- REQUEST报文发送的源地址。
    2. -c count指定发送ICMP ECHO-REQUEST报文次数。缺省情况下发送5个ICMP ECHO-REQUEST报文。
    3. -h ttl-value指定TTL的值。缺省值是255。
    4. -t timeout指定发送完ICMP ECHO-REQUEST后,等待ICMP ECHO- REPLY的超时时间。

     

    Ping每次会发5个包,ping通的情况下会回5个包,每个包显示字节数,序列号。TTL值和延迟

    如果丢包,会恢复丢包率,最小延迟平均延迟最大延迟

    --10.0.0.2 ping statistics---

    5 packet(s) tranamitte

    5 packet(s) received

    0.00% packet loss

    Round-trip min/avg/max=10/88/340  ms

     

    Tracert

    Tracert和Ping的区别是 Tracert是一种追踪的状态,可以追踪到数据走的哪个端口

    Tracert使用的端口号比较大,大到接受端无法识别

    Tracert使用的TTL值从1开始加

    Tracert每次发送3个一样的包,以防止丢失,只要回来一个包就可以

    主机A向第一个路由器发送TTL值,TTL值为1

    第一个路由器A收到TTL值减1,当TTL=0时 代表超时 便不能向前转发,此时返回给主机A 捎带路由器A的地址

    主机A下次发数据包 TTL=2 路由器B收到后 TTL减为0 超时返回 捎带路由器B的地址

    以此类推 直到主机B

    主机B收到一个超大端口 不能识别 回复一个目的不可达的信号 主机A收到这个信号 直到信息已达主机B

    如果建筑工人盖房子就像程序员写程序一样,那么只需要一只啄木鸟就可以摧毁人类文明
  • 相关阅读:
    c#反射动态创建窗体
    ImageSwitcher 图片切换器
    viewSwitcher 切换视图
    ratingBar 星级评分条
    seekBar拖动滑块
    pythonUDP发送结构体,对齐到C++结构体
    pyqt5界面
    progressbar
    SVN服务器搭建和使用(一)
    关于MBR、GPT以及BIOS引导模式区分
  • 原文地址:https://www.cnblogs.com/lipengfei159263/p/9752994.html
Copyright © 2011-2022 走看看