ping and ICMP

1、什么是 Ping

ping是一种计算机网络工具,用来测试数据包能否透过IP协议到达特定主机。ping的运作原理是向目标主机传出一个ICMP echo@要求数据包,并等待接收echo回应数据包。程序会按时间和成功响应的次数估算丢失数据包率(丢包率)和数据包往返时间(网络时延,Round-trip delay time)。———— 维基百科
我们在网络通信的过程中,常常使用 ping 某一个 IP 地址或者某个域名看下基本连接是否正常;是否有丢包;是否有网络延迟。ping 就是我们经常用来作为网络连接通信的测试“指令”。

我记得我们以前调侃说只要会 Ping 就可以去当网吧网管了(其实网管的工作肯定比这个复杂的多)。

Windows 10 下的 Ping

C:>ping www.baidu.com

正在 Ping www.a.shifen.com [119.75.216.20] 具有 32 字节的数据:
来自 119.75.216.20 的回复: 字节=32 时间=42ms TTL=53
来自 119.75.216.20 的回复: 字节=32 时间=42ms TTL=53
来自 119.75.216.20 的回复: 字节=32 时间=42ms TTL=53
来自 119.75.216.20 的回复: 字节=32 时间=42ms TTL=53

119.75.216.20 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 42ms,最长 = 42ms,平均 = 42ms

Ping 的工作原理

在维基百科中解释有说明, Ping 的原理是 ICMP 协议.

什么是 ICMP 协议

ICMP 的全称是 Intent Control Message Protocol, 中文过来就是 互联网控制报文协议

网络数据包在庞大的网络中会很多各种不同情况。如果一定需要举一个例子来比如的话,用相当于兵种的侦察兵。时刻给大部队探测前方的情况。以便后方的大部队能够根据不同情况做出不同的调整。所以 ICMP 经常用于网络环境的测试。

互联网控制消息协议(英语:Internet Control Message Protocol,缩写:ICMP)是互联网协议族的核心协议之一。它用于TCP/IP网络中发送控制消息,提供可能发生在通信环境中的各种问题反馈,通过这些信息,使管理者可以对所发生的问题作出诊断,然后采取适当的措施解决。 —— 维基百科
ICMP 协议的格式

用图文表示:

ICMP 协议格式.png
ICMP 报文封装在 IP 包里面。ICMP 的报文类型根据类型和代码有很多,文章后面有来自维基百科的完整的表格。但是主要分为两类:
A、查询报文
B、差错报文

查询报文 (Echo Request与 Echo Reply)

定义:发送端主动发起请求,并且获取到应答。

常见应用:Ping

Ping 就是主动请求,获取到主动应答。但是 Ping 是在原生的 ICMP 中添加了自定义格式区域。例如 Ping 中放了发送的请求时间,以此计算出路程。所以,其实在 Ping 的报文中会加入序号,以用来区分数据包,从而提高计算时间或者路程的准确性。

差错报文

主要有以下几种:

  1. 源抑制

发送端发送大量数据时,可能会导致网络( 路由器 )过载,此时过载处可以向发送端发送源抑制的消息,让他降低发送速度。

  1. 终点不可到达

网络信息不能到达终点,就会给发送端发送一个目的不可到达的信息。告诉发送端可能是设备故障而引起关闭(情况之一)。然后这种又可以再次细分:
A、网络不可达 — 代码为 0,
B、主机不可达 — 代码为 1.
C、协议不可达 — 代码为 2.
D、端口不可达 — 代码为 3.
E、需要分段 - 代码为 4.( 必须把数据分段才能去到终点 )

  1. 超时

网络包超过设置的在网络中的生存时间,还没有达到。

  1. 路由重定向

定义数据包的路由股则。因为大部分的时候,路由规则是通过相关协议算法生成的,有些时候重新定义过之后,会让这个数据包绕的更远。

常见应用:Traceroute
Traceoute 有点像是在不断试错的意思。是用来侦测主机到目的主机之间所经路由情况的重要工具。Ping 我们知道是可以知道这条大路通不通的,Traceoute 通过设置 TTL 知道到底是哪个路由器不通。
TTL : 数据包在网络中生存时间,也就是通过数据被路由器转发的次数,没转发一次就减一。知道为 0 的时候就抛弃。
Traceroute 的原理:它收到目的主机的 IP 后,首先给目的主机发送一个 TTL=1 的 UDP 数据包,而经过的第一个路由器收到这个数据包以后,就自动把 TTL 减 1,而 TTL 变为 0 以后,路由器就把这个包给抛弃了,并同时产生 一个主机不可达的 ICMP 数据报给主机。如此循环就可以知道所有的路由 IP 了。( ICMP 出错了就会回错误包 )

通常 Traceoute 的目的端口设置的是一个大于 30000 的值( 一般的应用端口号远小于这个数 )。所以如果回复的是 “端口不可达”,那就说明到达终点,否则这个信息就会超时。以此确保 消息是否到达终点。

Traceoute 还有一个有意思的功能,就是确定 MTU(数据最大传输单元),Traceoute 通常对数据不分段,就直接发送,如果如果遇到过程中某个路由转发,出现返回 ICMP 需要分段的错误,就把数据进行拆分,直到最后到达终点。就验证出 MTU。

ICMP 其实还有很多意思的地方,这边就简单的介绍到这里。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值