计算机网络之---ICMP协议与Ping命令

ICMP 协议

ICMP (Internet Control Message Protocol) 是一种网络层协议,主要用于在 IP 网络中传递控制消息。ICMP 主要用于网络设备之间的故障报告和诊断,帮助设备检测网络连接问题。它是 IP 协议的核心部分之一,用于发送错误消息和操作信息。

ICMP 的主要功能
  1. 错误报告:当路由器或目标主机发现网络传输中的问题时,ICMP 会发送错误消息。例如,目标不可达、超时等。
  2. 诊断功能 :ICMP 提供了许多网络诊断功能,如 Ping 命令,用于检测网络连通性。
  3. 路由重定向:ICMP 也可以发送路由重定向消息,通知源主机更合适的路由。
  4. 网络拥塞通知:某些 ICMP 消息用于告知发送方网络存在拥塞问题。
ICMP 的局限性
  • ICMP 消息本身并不提供加密或身份验证,因此容易被滥用,例如进行 Ping of Death 攻击或 ICMP Flood 攻击。
  • 由于 ICMP 本身属于网络层,无法保证传输过程中的可靠性。
  • 某些网络设备或防火墙可能会阻止 ICMP 消息,以增加安全性。
ICMP 的常见消息类型

ICMP 消息通常由一个 报头数据部分 组成。常见的 ICMP 消息类型包括:

  1. Echo Request 和 Echo Reply(回显请求和回显应答):这些是 Ping 命令使用的类型,用于测试网络设备之间的连通性。

    • Echo Request (类型 8)
    • Echo Reply (类型 0)
  2. Destination Unreachable(目标不可达):当路由器无法转发数据包到达目标地址时发送。

    • 类型 3(目标不可达)有多个代码,表示不同的不可达原因,如网络不可达、主机不可达、协议不可达等。
  3. Time Exceeded(超时):当数据包在传输过程中经过的时间超过了设定的 TTL(生存时间)时发送,通常用来检测路由环路或路由延迟。

    • 类型 11(超时)
  4. Redirect(重定向):用于提示源主机更好的路由路径。

    • 类型 5(重定向)
  5. Source Quench(源抑制):用来通知发送方减少数据包发送速率(此功能现在已废弃,很多设备不再使用)。

    • 类型 4
ICMP 报文结构

ICMP 报文的基本结构包含:

  • 报文头:包括类型、代码和校验和。
  • 数据部分:根据不同类型,数据部分的结构有所不同,例如回显请求的消息部分包含了发送方的时间戳信息。

Ping 命令

Ping 是一种基于 ICMP 协议的网络诊断工具,广泛用于测试网络连接性。Ping 命令通过发送 Echo Request (回显请求)消息并等待目标主机返回 Echo Reply(回显应答)消息来检查网络是否畅通。

Ping 命令的工作原理
  1. 发送 Echo Request: Ping 命令向目标 IP 地址发送一个 ICMP Echo Request 数据包,包含发送的时间戳信息。

  2. 接收 Echo Reply: 如果目标设备在线并且能够接收 ICMP 请求,它会返回一个 Echo Reply 数据包,其中包含目标设备接收到请求时的时间戳。

  3. 计算往返时间: Ping 命令会根据回显应答的时间戳来计算往返时间(RTT,Round Trip Time),即从发送请求到接收到应答的时间。

  4. 报告结果: Ping 命令会显示每次请求的结果,包括往返时间、丢包率等信息。通常每次请求发送 4 个数据包,并显示每个数据包的 RTT。

Ping 命令的使用场景
  1. 测试网络连接性:最常见的用途是测试计算机或路由器是否能够通过网络到达另一台设备(如另一个主机、路由器、DNS 服务器等)。

  2. 网络故障排除:在网络出现问题时,使用 Ping 可以检查连接问题的原因,比如网络丢包、延迟过高等。

  3. 延迟检测:Ping 命令的 RTT 时间可以帮助判断网络的响应速度和延迟。

  4. 检查丢包情况:通过统计丢失的 Ping 数据包,可以检测网络的丢包情况,有助于定位故障。

Ping 命令的常用选项
  • -t :在 Windows 中,使用 ping -t 可以持续不断地 Ping 目标,直到手动停止。
  • -c :在 Linux/Mac 中,使用 ping -c 4 可以指定 Ping 的次数。
  • -l :在 Windows 中,ping -l 1000 可以设置数据包的大小。
  • -i:指定 Ping 数据包的间隔时间。
Ping 命令的常见输出
javascript 复制代码
PING www.baidu.com (110.242.70.57): 56 data bytes
64 bytes from 110.242.70.57: icmp_seq=0 ttl=50 time=24.960 ms
64 bytes from 110.242.70.57: icmp_seq=1 ttl=50 time=16.367 ms
64 bytes from 110.242.70.57: icmp_seq=2 ttl=50 time=24.184 ms
64 bytes from 110.242.70.57: icmp_seq=3 ttl=50 time=16.960 ms
64 bytes from 110.242.70.57: icmp_seq=4 ttl=50 time=17.882 ms
64 bytes from 110.242.70.57: icmp_seq=5 ttl=50 time=27.531 ms
64 bytes from 110.242.70.57: icmp_seq=6 ttl=50 time=18.157 ms
64 bytes from 110.242.70.57: icmp_seq=7 ttl=50 time=20.231 ms
64 bytes from 110.242.70.57: icmp_seq=8 ttl=50 time=16.918 ms
64 bytes from 110.242.70.57: icmp_seq=9 ttl=50 time=16.276 ms
64 bytes from 110.242.70.57: icmp_seq=10 ttl=50 time=18.593 ms
64 bytes from 110.242.70.57: icmp_seq=11 ttl=50 time=17.677 ms
  • Reply from:表示收到了目标设备的回应。
  • bytes:显示数据包的字节数,通常为 32 字节。
  • time:表示从发送请求到接收到应答的往返时间(以毫秒为单位)。
  • TTL:表示数据包生存时间,即数据包在路由过程中可以经过的最大跳数(时间戳)。
相关推荐
黑客Ela14 分钟前
网络安全营运周报
网络·安全·web安全
挣扎与觉醒中的技术人20 分钟前
网络安全入门持续学习与进阶路径(一)
网络·c++·学习·程序人生·安全·web安全
Java Fans44 分钟前
微信小程序——访问服务器媒体文件的实现步骤
服务器·微信小程序·小程序
技术小齐1 小时前
网络运维学习笔记 017HCIA-Datacom综合实验01
运维·网络·学习
yourkin6661 小时前
HTTPS(下)
服务器·网络协议·https
KingDol_MIni1 小时前
Spring Boot 集成 T-io 实现客户端服务器通信
java·服务器·spring boot
元气满满的热码式2 小时前
logstash中的input插件(http插件,graphite插件)
网络·网络协议·http·elasticsearch·云原生
xiaolin03332 小时前
【复习】计算机网络
计算机网络
神一样的老师2 小时前
超越云计算:计算连续体中的无服务器函数
服务器
ITPUB-微风2 小时前
美团MTSQL特性解析:技术深度与应用广度的完美结合
java·服务器·开发语言