【Linux】ping命令刨析

目录

1.解释ping命令的回显结果

第1行

2~4行

剩下几行

网络状态分析

2.ping底层

应用层数据

网络层协议


ping是网络诊断中最常用的命令之一,用来测试本机到目标主机之间的网络是否连通,以及网络延迟(往返时间),ping后面跟上目标网址对应的域名或IP地址。

ping的原理是:向目标主机发送ICMP Echo Request(回显请求)数据包,目标主机收到后回一个ICMP Echo Reply(回显应答)。通过这个来回过程,判断网络质量。

ping命令默认不会结束,所以我们可以跟-c+数字的选项来决定ping的次数。

这里表示ping了5次。

1.解释ping命令的回显结果

第1行

首先ping会将百度的域名解析成真实域名www.a.shifen.com,随后根据真实域名解析出IP地址110.242.69.21,可见这是一个公网IP。我们的机器实际就是在ping这个IP。

发送的数据部分为56字节,加上ICMP头部8字节,加上IP头部20字节,总共84字节。

2~4行

每一行代表收到一个回包,64bytes代表收到的数据包大小(56数据+8ICMP头部=64)在解包时把20bytes的IP头部给去掉了。

from 220.181.111.1 代表回包的来源IP。

icmp_seq=1 代表ICMP序列号,当前是第1个包,序列号用来检测丢包和乱序。

ttl=251 Time To Live,报文生存时间,每经过一个路由器减1,减为0时报文被丢弃.。初始TTL通常是255或64,251说明经过了约5跳。

time=14.1ms 往返延迟,从发出到收到用了14.1毫秒.越小越好。

剩下几行

是ping命令执行结束的统计汇总信息。

第一行是统计报告的开头。

第二行汇报结果:发送了3个数据包,接收了3个数据包,丢包率0%,总耗时2002毫秒。

第三行:往返时间的最小值/平均值/最大值/平均偏差。

mdev表示每次延迟与平均值的平均偏差,数值越小,说明网络越稳定。

网络状态分析

当前的网络状态非常好,没有丢包,没有乱序,延迟很低(一般低于50ms都代表很好),网络非常稳定(mdev仅0.075ms,延迟波动极小)。

2.ping底层

应用层数据

ping命令是一个可执行程序,它会在应用层上产生一个56字节的数据,这些数据是一些填充字段,没有实际业务含义。

在默认情况下(Linux),56字节数据内容是:

struct timeval结构体+填充字段。前8字节用来存放用来发送时的时间戳,后48字节填充无意义的数据。

当然用户可以自定义发送数据包的大小,在AI大模型上一查就能出来。

让数据包达到指定大小方便测试不同MTU下的网络表现,也可以测试链路质量,更接近真实流量。

网络层协议

ICMP和IP同属网络层协议,在应用层产生完数据后会绕过传输层,直接加8字节的ICMP报头,形成ICMP报文,随后再加IP报头形成IP报文。

可见,ping命令的数据包是没有传输层的,也就是说数据包没有任何可靠性保证,数据包能否送达,是否乱序,网络延迟完全依赖网络环境。

那么为什么没有传输层参与呢?因为传输层是提供端口的,而我们的数据包是用来检测两台主机是否联通的,不需要将数据交付给特定的进程,只需要将数据包送达至目标主机即可。

相关推荐
玄芯散人19 分钟前
【元婴·106】I2C总线:地址冲突、Clock Stretching、总线死锁怎么破
网络
YH_Analytics21 分钟前
2026 年增亮膜(DBEF)行业市场格局深度解析
大数据·网络
Meta Luo1 小时前
页面改版后自动化用例大量失败,应该怎么维护?
运维·功能测试·测试工具·自动化
爱和冰阔落1 小时前
【Linux】线程安全进阶:单例模式、可重入函数与死锁排查
linux·运维·安全·单例模式
dk_tjy1 小时前
迪康网络运维故障自愈的自动化闭环技术路径分析
运维·网络·自动化
先知后行。1 小时前
pimpl
linux
吉普赛的歌1 小时前
如何设置服务器固定时间点自动重启一次
运维·服务器
Carol06302 小时前
上肢及肩肘关节
java·服务器·数据库
帷幕落秋2 小时前
SSH远程管理服务
运维·ssh
一世繁华行2 小时前
CAPL浏览器(翻译自官方文档)
运维·服务器·数据库