本文主要是介绍【网络基础】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主要分为两种报文:
- 一类是通知出错原因
- 一类是用于诊断查询
② 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 命令的主要功能和用法:
功能:
- 检查网络连接:确定目标主机是否在网络上可达。
- 测量延迟:计算从发送请求到接收到响应的时间(通常以毫秒为单位),以评估网络延迟。
- 诊断网络问题:帮助识别网络连接问题或故障位置。
基本用法
在命令行中输入 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
的基本用法和功能:
① 概念 及 功能
- 显示路径:列出从源主机到目标主机的每一个跳点(路由器)。
- 测量延迟:显示每个跳点的响应时间,有助于发现延迟较大的节点。
基本用法
在命令行中输入 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命令的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!