zoukankan      html  css  js  c++  java
  • ICMP:Internet控制报文协议

    一.ICMP协议介绍

     ICMP经常被认为是 IP层的一个组成部分。它传递差错报文以及其他需要注意的信息。ICMP报文通常被IP层或更高层协议( TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。

     ICMP报文是在IP数据报内部被传输的。

    二.ICMP协议报文的主要功能

     ICMP报文的主要功能:

    1.确认IP包是否成功达到目标地址

    2.通知在发送过程中IP包丢失的原因

    我们需要注意几点: 

    1.ICMP是基于IP协议工作的,但是它并不是传输层的功能,因此仍然把它归结为网络层协议 

    2. ICMP只能搭配IPv4使用,如果是IPv6的情况下, 需要是用ICMPv6

    三.ICMP协议报文格式

    ICMP报文的格式如下:

     8位类型字段/8位代码:类型字段可以有15个不同的值,配合特定的8位代码字段以描述特定的ICMP报文。如下:

     这里注意80和00,分别代表请求回显和请求应答,ping的两个ICMP的报文。

    下面一些情况不会导致产生ICMP差错报文:

    1) ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文) 。

    2) 目的地址是广播地址或多播地址IP数据报。

    3) 作为链路层广播的数据报。

    4) 不是IP分片的第一片。

    5) 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址。 

    16位检验和:检验和字段覆盖整个ICMP报文。使用的算法与其他协议相同。 

    ICMP报文的三种类型

    1) 目标不可达

    2)源抑制

    3)超时报文

    这三种报文的格式是一样的。 

    目标不可到达报文(类型值为3)在路由器或者主机不能传递数据时使用。 
    例如:我们要连接对方一个不存在的系统端口(端口号小于1024)时,将返回类型字段值3、代码字段值为3的ICMP报文。 

    常见的不可到达类型还有网络不可到达(代码字段值为0)、主机不可达到(代码字段值为1)、协议不可到达(代码字段值为2)等等。 

    源抑制报文(类型字段值为4,代码字段值为0)则充当一个控制流量的角色,通知主机减少数据报流量。由于ICMP没有回复传输的报文,所以只要停止该报文,主机就会逐渐恢复传输速率。 无连接方式网络的问题就是数据报会丢失,或者长时间在网络游荡而找不到目标,或者拥塞导致主机在规定的时间内无法重组数据报分段,这时就要触发ICMP超时报文的产生。 

    超时报文(类型字段值为11)的代码域有两种取值:代码字段值为0表示传输超时,代码字段值为1表示分段重组超时。

    四.ICMP协议报文命令

    ICMP报文命令分别为ping命令traceroute命令

    ping命令用法

    ping命令的功能
    (1)能验证网络的连通性
    (2)会统计响应时间和TTL(IP包中的Time To Live,生存周期)
    那么如何验证的呢?
    (1)ping命令会先发送一个 ICMP Echo Request给对端
    (2)对端接收到之后, 会返回一个ICMP Echo Reply
    (3)若没有返回,就是超时了,会认为指定的网络地址不存在。

     traceroute命令用法(打印出可执行程序主机,一直到目标主机之前经历多少路由器。)

    traceroute的工作原理 是利用ICMP差错控制报文中的TTL超时会回向源点发送一个时间超时报文。例如A 主机 traceroute B主机,A会封装一些分组,这些分组很特殊,例如第一个分组的TTL设置为1 ,第二个分组的TTL设置为2 以此类推.......当第一个分组到达第一个路由器时,发现TTL变成了0就会给源主机发送一个时间超时报文,这也就知道了这个分组所经过的一个路由器,同理可得。 当最后一个分组到达B主机时。收集每个时间超时的报文中的IP 就获得了A主机到B主机的路径。 

    可以从wireshark中抓取一个简单的ICMP报文看一下结构:

    ————————————————
    版权声明:本文为CSDN博主「honeyRJ」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/baidu_37964071/article/details/80514340

     

     

     

     

  • 相关阅读:
    windows 7 系统下,用户每次登录都是以临时配置文件的形式存在于users文件夹下
    string按行读取以及按空格分隔
    socket.io技术学习记录
    node.js实现js连接mysql数据库
    ajax在j2ee和js服务器上数据基本交换
    layui与jquery冲突导致下拉框无法显示的解决方法
    nativefier——将本地网页转化为桌面应用
    jquery——移动端touch事件
    Hibernate中使用HQL语句进行增,删,改,查
    一言不合敲代码(2)——八数码问题游戏
  • 原文地址:https://www.cnblogs.com/longlyseul/p/12941652.html
Copyright © 2011-2022 走看看