【网络基础】ICMP协议详解:背景功能、到报文及ping、traceroute命令的使用

本文主要是介绍【网络基础】ICMP协议详解:背景功能、到报文及ping、traceroute命令的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 1. 前言
  • 2. ICMP的功能
  • 3. ICMP 的报文
    • ① 报文格式:
    • ② ICMP报文类型与描述:
  • 4. ping 命令
    • ① 概念及功能
    • ② 示例输出
    • ③ 注意事项:
  • 5. traceroute命令
      • ① 概念 及 功能
      • ② 示例输出

1. 前言

ICMP协议(Internet Control Message Protocol),即互联网控制消息协议。 是一个网络层协议

  • 新搭建好的网络往往需要先测试验证网络是否畅通;但是IP协议并不提供可靠传输,如果发生丢包,IP协议并不会通知传输层是否丢包以及丢包的原因。

2. ICMP的功能

ICMP正是为了解决这一情况而存在的,其主要功能包括:

  • 确认 IP包是否成功到达目标地址
  • 通知 发送过程中IP包被丢弃的原因
  • ICMP也是基于IP协议工作的,但它并不是属于传输层的功能,依然把它归结为网络层协议;
  • ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6

在这里插入图片描述


3. ICMP 的报文

① 报文格式:

下面是ICMP的报文格式,做了解即可:
在这里插入图片描述

ICMP主要分为两种报文:

  1. 一类是通知出错原因
  2. 一类是用于诊断查询

② ICMP报文类型与描述:

类型编号类型名称描述
0回显应答 (Echo Reply)用于响应回显请求(Ping 命令)
3目标不可达 (Destination Unreachable)数据包无法到达目的地,子类型包括网络不可达、主机不可达等
4源抑制 (Source Quench)请求源主机减缓发送速度(已废弃)
5重定向 (Redirect)通知主机更改路由路径
8回显请求 (Echo Request)用于测试目标主机的可达性(Ping 命令)
11超时 (Time Exceeded)数据包在网络中处理超时
12参数问题 (Parameter Problem)数据包头部字段有问题
13时间戳请求 (Timestamp Request)请求目标主机的时间戳
14时间戳应答 (Timestamp Reply)响应时间戳请求,发送主机的时间戳
15信息请求 (Information Request)获取目标主机的信息(已废弃)
16信息应答 (Information Reply)响应信息请求(已废弃)
17地址掩码请求 (Address Mask Request)请求目标主机的地址掩码
18地址掩码应答 (Address Mask Reply)响应地址掩码请求,发送主机的地址掩码

4. ping 命令

① 概念及功能

我们知道:

ping 命令 是一种用于测试网络连接状态的工具。它通过发送 ICMP(Internet Control Message Protocol) 回显请求(Echo Request)消息到目标主机,并接收其响应(Echo Reply),以确定目标主机是否可达以及网络的延迟情况。以下是 ping 命令的主要功能和用法:

功能:

  1. 检查网络连接:确定目标主机是否在网络上可达。
  2. 测量延迟:计算从发送请求到接收到响应的时间(通常以毫秒为单位),以评估网络延迟。
  3. 诊断网络问题:帮助识别网络连接问题或故障位置。

基本用法

在命令行中输入 ping 命令,后跟目标主机的 IP 地址或域名:

ping <目标IP地址或域名>

例如,要检查 example.com 的连接状态,可以输入:

ping example.com

常见选项

  • -c <次数>:指定发送的请求数量。例如,ping -c 4 example.com 只发送 4 个请求。
  • -t <时间>:指定请求的超时时间。
  • -i <间隔>:指定发送请求的间隔时间(秒)。

② 示例输出

PING example.com (93.184.216.34): 56 data bytes
64 bytes from 93.184.216.34: icmp_seq=0 ttl=56 time=12.3 ms
64 bytes from 93.184.216.34: icmp_seq=1 ttl=56 time=12.1 ms
64 bytes from 93.184.216.34: icmp_seq=2 ttl=56 time=12.0 ms
64 bytes from 93.184.216.34: icmp_seq=3 ttl=56 time=12.2 ms--- example.com ping statistics ---
4 packets transmitted, 4 packets received, 0% packet loss
round-trip min/avg/max = 12.0/12.2/12.3 ms

解释

  • 64 bytes from 93.184.216.34:显示接收到的回应的字节数及来源 IP 地址。
  • icmp_seq=0:ICMP 请求的序列号。
  • ttl=56:时间生存值,表示数据包经过的路由器数量。
  • time=12.3 ms:往返时间,即从发送请求到收到响应的时间。
  • 0% packet loss:丢包率,显示丢失的数据包百分比。
  • round-trip min/avg/max:最小、平均和最大往返时间。

③ 注意事项:

  • 使用 ping命令时,ping 的是域名, 而不是url;一个域名可以通过DNS解析成IP地址。
  • ping命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期)。
  • ping命令会先发送一个 ICMP Echo Request给对端。
  • 对端接收到之后, 会返回一个ICMP Echo Reply;

在这里插入图片描述

那么如果有一个问题:telnet是23端口, ssh是22端口, 那么ping是什么端口?

  • 这个问题本身是有错误的,正如前面所说:ping命令基于ICMP(网络层)。而端口号是传输层的内容;ICMP不关注端口号这样的信息。

5. traceroute命令

traceroute 命令 基于ICMP协议实现, 能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器

traceroute 命令用于跟踪数据包从源主机到目标主机的路径,帮助识别网络路径上的每个路由节点。它可以显示数据包经过的各个网络设备及其延迟,便于定位网络问题。以下是 traceroute 的基本用法和功能:


① 概念 及 功能

  1. 显示路径:列出从源主机到目标主机的每一个跳点(路由器)。
  2. 测量延迟:显示每个跳点的响应时间,有助于发现延迟较大的节点。

基本用法

在命令行中输入 traceroute 命令,后跟目标主机的 IP 地址或域名:

traceroute <目标IP地址或域名>

例如,要跟踪到 example.com 的路径,可以输入:

traceroute example.com

常见选项

  • -m <最大跳数>:设置最大的跳数(即路由器数量)。例如,traceroute -m 20 example.com 设置最大跳数为 20。
  • -p <端口>:指定使用的端口号。默认使用 33434。
  • -q <查询数>:设置每个跳点发送的探测包数量。默认是 3。

② 示例输出

traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets1  router.local (192.168.1.1)  1.234 ms  1.456 ms  1.678 ms2  isp-gateway (10.0.0.1)  10.123 ms  10.345 ms  10.567 ms3  203.0.113.1 (203.0.113.1)  20.234 ms  20.456 ms  20.678 ms4  example.com (93.184.216.34)  30.123 ms  30.345 ms  30.567 ms

解释

  • 1 router.local (192.168.1.1) 1.234 ms:显示第一个跳点的信息,包括 IP 地址和延迟时间。
  • 30 hops max:最多 30 个跳点。
  • 60 byte packets:发送的数据包大小为 60 字节。

traceroute 帮助用户深入了解数据包传输的路径和延迟,以便优化网络性能和解决连接问题。

这篇关于【网络基础】ICMP协议详解:背景功能、到报文及ping、traceroute命令的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1112097

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

c# checked和unchecked关键字的使用

《c#checked和unchecked关键字的使用》C#中的checked关键字用于启用整数运算的溢出检查,可以捕获并抛出System.OverflowException异常,而unchecked... 目录在 C# 中,checked 关键字用于启用整数运算的溢出检查。默认情况下,C# 的整数运算不会自

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W