首页 > 其他分享 >ICMP协议

ICMP协议

时间:2023-06-25 13:12:31浏览次数:36  
标签:协议 主机 报文 110.242 发送 TTL ICMP

ICMP

先来看看ICMP协议的全程 : Internet Control Message Protocol ,用大中文翻译就是互联网控制信息协议,核心二字在于控制.

  • 因此ICMP协议在互联网整个架构中,发挥着处理网络各种信息的功能和作用,至于具体的功能和作用:

1.ICMP的认知

ICMP和IP协议一样,本身都工作在网络层,因此面对网络包的传输过程,尤为的重要,比如IP数据包是否成功到达主机,IP数据包是否丢失,网络相关问题,因此了解ICMP头部有助于理解ICMP协议是如何工作的:

ICMP头部

而ICMP包头的类型大致可分为两类:

  1. 查询报文类型
  2. 差错报文类型

1.1查询报文类型

回送消息: 0和8

回显请求(Echo Request)和回显回答(Echo Reply):用于测试主机的可达性和测量往返时间(RTT)。

回送回答 回送请求
TYPE: 0 TYPE : 8

当我们使用ping命令去测试两台主机之间是否互通时,往往还能看到序号和RTT,以及应用进程的PID号,因此,在发送回送消息时,还会添加额外的字段去用来标识这个通信过程的一些具体信息.

ICMP查询消息

  • 除此之外还有着例如:时间戳请求时间戳应答一类的查询报文,其目的就是为了查询目的主机的当时时间,前者type:13,后者type:14
  • 除此之外还有着例如:地址掩码请求地址掩码回答这一类的查询报文,其目的也很明了,是为了查询目的主机的地址掩码信息的,前者tpye:17,后者type:18.

1.2差错报文类型

差错报文类型的情况就比较错综复杂了.

  • 目标不可达:type:3

而目标不可达的原因则需要具体问题具体分析,而ICMP中的另一个字段code段则描述了不可达的具体信息,具体来说,目标不可达有以下几种:

  1. 代码0:网络不可达(Network Unreachable):指示目标网络无法到达,可能是由于路由表中缺少有效路径。
  2. 代码1:主机不可达(Host Unreachable):指示目标主机无法到达,可能是由于目标主机未连接到网络或关闭了。
  3. 代码2:协议不可达(Protocol Unreachable):指示目标主机上不支持所需协议,无法到达目标。
  4. 代码3:端口不可达(Port Unreachable):指示目标主机上指定的端口未打开或不可用。
  5. 代码4:需要进行分片但设置不允许(Fragmentation Needed but Don't Fragment Flag Set):指示数据包的大小超过了路径中的最大传输单元(MTU),需要进行分片,但数据包的"不分片"(DF)标志被设置。
  • 原点抑制:type:4

也叫源抑制,其实是因为网络拥塞的情况,ICMP选择回绝你的消息而选择的一种差错报文类型,一般情况下,不适用,现代网络中显得很鸡驻这个差错控制

  • 重定向:type:5

这个控制字段也..挺鸡驻的其实,因为重定向的字段的设计理念是为了以一种更优的路线去选择下一跳,通过发送重定向消息,路由器可以向发送方提供有关更好的路由选择的信息,从而改善网络的性能和效率。但是现在路由都具备更高级的路由协议,且时时刻刻动态变化,因此这种使用也比较少.

  • 超时:type:11

这个字段跟IP数据包中的TTL字段有关,也就是每经过一跳,其生存周期TTL就会减1,当减到0时,相应的路由就会发送差错报文去即时的反馈.

ICMP超时消息


2.ping原理的抓包过程

其实查询报文类型就是ping过程的基本原理,通过wireshark去抓包测试就能够直接明白:

  1. 使用ping命令去测试一个地址,这里我以百度为例

    Pinging www.baidu.com [110.242.68.3] with 32 bytes of data:
    Reply from 110.242.68.3: bytes=32 time=30ms TTL=51
    Reply from 110.242.68.3: bytes=32 time=32ms TTL=51
    Reply from 110.242.68.3: bytes=32 time=30ms TTL=51
    Reply from 110.242.68.3: bytes=32 time=31ms TTL=51
    
    Ping statistics for 110.242.68.3:
        Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
    Approximate round trip times in milli-seconds:
        Minimum = 30ms, Maximum = 32ms, Average = 30ms
    
  2. 通过wireshark可以清晰看到:

    ICMP1

    选取第一个请求报文展开查看:

    ICMP2

    可以很清楚德看到请求类型为8,而ICMP处了头部字段还有标识和序号字段,标识字段用来区分是哪个应用进程发送的ICMP包,而序号就很清楚了,为了确认网络包是否有丢失,每次增加1.

  • 由此可见发送ICMP包的时候仅仅只设计物理层数据链路层和网络层的IP协议,每一栏单独展开都是相应的层面所携带的信息

    以下是ICMP应答报文的内容

    ICMP3

  • 如果出现了超时的情况:

    ICMP4

    • TYPE:11,表示超时,且应答的ICMP报文没有respone内容

3.tracert/tracerout原理的抓包过程

  1. 使用命令:

    Tracing route to www.a.shifen.com [110.242.68.4]
    over a maximum of 30 hops:
    
      1     4 ms     1 ms    <1 ms  192.168.0.1
      2     4 ms     5 ms     2 ms  10.251.0.1
      3     2 ms     7 ms     2 ms  125.222.18.17
      4     5 ms     4 ms     4 ms  124.93.203.217
      5    30 ms    15 ms     5 ms  124.93.203.181
      6    17 ms     8 ms     9 ms  61.189.71.101
      7    46 ms    38 ms    39 ms  113.230.183.89
      8     *        *        *     Request timed out.
      9    26 ms    25 ms    24 ms  110.242.66.182
     10    27 ms    27 ms    26 ms  221.194.45.130
     11     *        *        *     Request timed out.
     12     *        *        *     Request timed out.
     13     *        *        *     Request timed out.
     14    25 ms    25 ms    24 ms  110.242.68.4
    
    Trace complete.
    

这个命令其实本质上也是通过ICMP去实现的,不过他是用来跟踪包的路径.其大致过程如下所示:

ICMP5

  • 可以看到其实有很多重复传送的ICMP请求报文,而传送的ttl是从1开始的,这也就是tracert命令实现的原理,这样在每经过一个路由器时就会返回一个超时的ICMP报文.

    但是为什么在TTL限制的情况下还要多次发送,这就是另一个不可达的问题,比如这几次传送请求报文的过程中,发送方如何知道自己发送的目的包到达主机?

ICMP6

其实原理就是通过一个不可能的端口发送个路由器,当目的主机,收到 UDP 包后,会返回 ICMP 差错报文消息,但这个差错报文消息的类型是端口不可达

同样,多次传送处了为了确定目标主机其实另一个原因可能是因为网络层需要参考MTU,即其实每一个路由器的MTU其实是不一样的,为了事先知道每个路由器的数据接受能力,可以多次发送来确定.

标签:协议,主机,报文,110.242,发送,TTL,ICMP
From: https://www.cnblogs.com/looktheworld/p/17502670.html

相关文章

  • Python全栈工程师(11:网络基础_网络协议篇)
    操作系统基础 操作系统:(OperatingSystem,简称OS)是管理和控制计算机硬件与软件资源的计算机程序,是直接运行在“裸机”上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。注:计算机(硬件)->os->应用软件二.网络通信原理2.1互联网的本质就是一系列的网络协议......
  • SMTP 和 POP3 协议的区别和联系
    SMTP(SimpleMailTransferProtocol)和POP3(PostOfficeProtocol3)是两种常用的电子邮件协议,用于发送和接收电子邮件。虽然它们都涉及到电子邮件的传输,但在功能和使用方式上有一些区别。下面将详细介绍SMTP和POP3协议的区别和联系。1.功能SMTP:SMTP是一种用于发送电子邮件的协议。它......
  • (1)基于TCP协议的简单套接字(打电话模型)
    基于TCP协议的简单套接字(打电话模型)【一】简单版1.0服务端#-*-coding:Utf-8-*-#@File:服务端.py#author:Chimengmeng#blog_url:https://www.cnblogs.com/dream-ze/#Time:2023/6/20importsocket#【1】.买手机#socket.SOCK_STREAM:流式协议---->TCP协......
  • (2)基于UDP协议的简单套接字
    基于UDP协议的简单套接字UDP协议----->数据报协议【一】简单版1.0【1】TCP协议所遇到的空数据问题是否存在?TCP协议是水流式协议:传入的数据不能为空,因为水是一直流的,在传输过程中不会对数据进行操作UDP协议是数据报协议:传入的数据可为空,在传输过程中UDP会对数据进行内......
  • (3)基于 TCP 协议实现服务端执行代码将结果反馈给客户端
    基于TCP协议实现服务端执行代码将结果反馈给客户端TCP协议是流式协议:在数据传输过程中大量数据的传入会造成数据的丢失和不完整解决数据传输过程中的问题:自定义协议应用:基于网络上传和下载文件socketserver:基于模块实现并发服务端满足的条件一直对外提供服务并......
  • 服务器UDP协议的优缺点,为什么要封UDP?
    网络业务高速发展,不同业务对于服务器使用的网络协议要求不同,有些业务需要使用UDP协议,有些则用不上,TCP协议也是一样,UDP和TCP都是属于一种网络协议。并且在市面上应用都是比较广泛的。那么UDP相对于TCP来说究竟有哪些优缺点呢?UDP的优点UDP要比TCP更快,UDP不容易被攻击,因为无需太多的机......
  • 协议分析之以太网协议
    工作原理以太网协议是一种局域网通信协议,它通过物理层和数据链路层的协同工作,使用媒体访问控制地址和载波监听/冲突检测协议来实现计算机之间的稳定数据传输。在数据传输过程中,以太网会将数据封装成数据帧,并根据目标MAC地址来识别需要接收数据的计算机。通过这种方式,以太网协议能......
  • graalvm 新的免费许可协议
    就在最近oracle发布了一个新的graalvm发行版(oraclegraalvm),同时也调整了许可模型,大致上是除非你收费基于graalvm开发的应用,基本上oraclegraalvm分发版本的可以免费使用,包含了不少新特性当前版本的特性profile指南优化,提供了更多的编译优化支持G1GC支持了压缩的对象头......
  • 让您的Nginx支持Http 3.0 协议
    Http3.0其实从最开设到正式的使用,已经过去了不少时间了,这块也是关系到我们现在数据安全一块很重要的发展,后续我们应该不在会有明文加密的协议的存在了吧,只是在加密的基础上,不断的升级现在的加密方法与技术升级,从而更高的保障我们的数据传输的高效与安全。并且我们也会在这路上......
  • 网络协议分析【ppp协议】
    1. PPP由哪几部分组成?各部分所具有的功能是什么?PPP由链路控制协议(LCP)和网络层控制协议(NCP)和PPP扩展协议族组成。链路控制协议(LCP)用于建立拆除和监控PPP数据链路,进行链路层特性的协商如MRU验证方式等。网络层控制协议(NCP)用于协商在该数据链路上所传输的数据包的格式与类型。PPP扩展......