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

相关文章

C语言函数递归实际应用举例详解

《C语言函数递归实际应用举例详解》程序调用自身的编程技巧称为递归,递归做为一种算法在程序设计语言中广泛应用,:本文主要介绍C语言函数递归实际应用举例的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录前言一、递归的概念与思想二、递归的限制条件 三、递归的实际应用举例(一)求 n 的阶乘(二)顺序打印

Java String字符串的常用使用方法

《JavaString字符串的常用使用方法》String是JDK提供的一个类,是引用类型,并不是基本的数据类型,String用于字符串操作,在之前学习c语言的时候,对于一些字符串,会初始化字符数组表... 目录一、什么是String二、如何定义一个String1. 用双引号定义2. 通过构造函数定义三、St

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

Pydantic中Optional 和Union类型的使用

《Pydantic中Optional和Union类型的使用》本文主要介绍了Pydantic中Optional和Union类型的使用,这两者在处理可选字段和多类型字段时尤为重要,文中通过示例代码介绍的... 目录简介Optional 类型Union 类型Optional 和 Union 的组合总结简介Pyd

Java Predicate接口定义详解

《JavaPredicate接口定义详解》Predicate是Java中的一个函数式接口,它代表一个判断逻辑,接收一个输入参数,返回一个布尔值,:本文主要介绍JavaPredicate接口的定义... 目录Java Predicate接口Java lamda表达式 Predicate<T>、BiFuncti

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Vue3使用router,params传参为空问题

《Vue3使用router,params传参为空问题》:本文主要介绍Vue3使用router,params传参为空问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录vue3使用China编程router,params传参为空1.使用query方式传参2.使用 Histo

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

使用Python自建轻量级的HTTP调试工具

《使用Python自建轻量级的HTTP调试工具》这篇文章主要为大家详细介绍了如何使用Python自建一个轻量级的HTTP调试工具,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录一、为什么需要自建工具二、核心功能设计三、技术选型四、分步实现五、进阶优化技巧六、使用示例七、性能对比八、扩展方向建

一文详解JavaScript中的fetch方法

《一文详解JavaScript中的fetch方法》fetch函数是一个用于在JavaScript中执行HTTP请求的现代API,它提供了一种更简洁、更强大的方式来处理网络请求,:本文主要介绍Jav... 目录前言什么是 fetch 方法基本语法简单的 GET 请求示例代码解释发送 POST 请求示例代码解释