【网络基础】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

相关文章

MySQL 8 中的一个强大功能 JSON_TABLE示例详解

《MySQL8中的一个强大功能JSON_TABLE示例详解》JSON_TABLE是MySQL8中引入的一个强大功能,它允许用户将JSON数据转换为关系表格式,从而可以更方便地在SQL查询中处理J... 目录基本语法示例示例查询解释应用场景不适用场景1. ‌jsON 数据结构过于复杂或动态变化‌2. ‌性能要

postgresql使用UUID函数的方法

《postgresql使用UUID函数的方法》本文给大家介绍postgresql使用UUID函数的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录PostgreSQL有两种生成uuid的方法。可以先通过sql查看是否已安装扩展函数,和可以安装的扩展函数

Python实现终端清屏的几种方式详解

《Python实现终端清屏的几种方式详解》在使用Python进行终端交互式编程时,我们经常需要清空当前终端屏幕的内容,本文为大家整理了几种常见的实现方法,有需要的小伙伴可以参考下... 目录方法一:使用 `os` 模块调用系统命令方法二:使用 `subprocess` 模块执行命令方法三:打印多个换行符模拟

MySQL字符串常用函数详解

《MySQL字符串常用函数详解》本文给大家介绍MySQL字符串常用函数,本文结合实例代码给大家介绍的非常详细,对大家学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql字符串常用函数一、获取二、大小写转换三、拼接四、截取五、比较、反转、替换六、去空白、填充MySQL字符串常用函数一、

Java中Arrays类和Collections类常用方法示例详解

《Java中Arrays类和Collections类常用方法示例详解》本文总结了Java中Arrays和Collections类的常用方法,涵盖数组填充、排序、搜索、复制、列表转换等操作,帮助开发者高... 目录Arrays.fill()相关用法Arrays.toString()Arrays.sort()A

如何使用Lombok进行spring 注入

《如何使用Lombok进行spring注入》本文介绍如何用Lombok简化Spring注入,推荐优先使用setter注入,通过注解自动生成getter/setter及构造器,减少冗余代码,提升开发效... Lombok为了开发环境简化代码,好处不用多说。spring 注入方式为2种,构造器注入和setter

MySQL中比较运算符的具体使用

《MySQL中比较运算符的具体使用》本文介绍了SQL中常用的符号类型和非符号类型运算符,符号类型运算符包括等于(=)、安全等于(=)、不等于(/!=)、大小比较(,=,,=)等,感兴趣的可以了解一下... 目录符号类型运算符1. 等于运算符=2. 安全等于运算符<=>3. 不等于运算符<>或!=4. 小于运

使用zip4j实现Java中的ZIP文件加密压缩的操作方法

《使用zip4j实现Java中的ZIP文件加密压缩的操作方法》本文介绍如何通过Maven集成zip4j1.3.2库创建带密码保护的ZIP文件,涵盖依赖配置、代码示例及加密原理,确保数据安全性,感兴趣的... 目录1. zip4j库介绍和版本1.1 zip4j库概述1.2 zip4j的版本演变1.3 zip4

Python 字典 (Dictionary)使用详解

《Python字典(Dictionary)使用详解》字典是python中最重要,最常用的数据结构之一,它提供了高效的键值对存储和查找能力,:本文主要介绍Python字典(Dictionary)... 目录字典1.基本特性2.创建字典3.访问元素4.修改字典5.删除元素6.字典遍历7.字典的高级特性默认字典

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处