Go语言ICMP协议:向主机发送消息

  • 内容
  • 评论
  • 相关

ICMP 是用来对网络状况进行反馈的协议,可以用来侦测网络状态或检测网络错误。

ICMP 协议介绍

ICMP(Internet Control Message Protocol)因特网控制报文协议。它是 IPv4 协议族中的一个子协议,用于 IP 主机、路由器之间传递控制消息。控制消息是网络是否畅通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然不传输用户数据,但是对于用户数据的传递起着重要的作用。

ICMP 协议是一种面向无连接的协议,用于传输出错报告控制信息,它是一个非常重要的协议,对于网络安全具有极其重要的意义。ICMP 属于网络层协议,主要用于在主机与路由器之间传递控制信息,包括报告错误、交换受限控制和状态信息等。当遇到 IP 数据无法访问目标、IP 路由器无法按当前的传输速率转发数据包等情况时,会自动发送 ICMP 消息。

ICMP 是 TCP/IP 模型中网络层的重要成员,与 IP 协议、ARP 协议、RARP 协议及 IGMP 协议共同构成 TCP/IP 模型中的网络层。ping 和 tracert 是两个常用网络管理命令,ping 用来测试网络可达性,tracert 用来显示到达目的主机的路径。ping 和 tracert 都利用 ICMP 协议来实现网络功能,它们是把网络协议应用到日常网络管理的典型实例。

从技术角度来说,ICMP 就是一个“错误侦测与回报机制”,其目的就是让我们能够检测网络的连线状况﹐也能确保连线的准确性。当路由器在处理一个数据包的过程中发生了意外,可以通过 ICMP 向数据包的源端报告有关事件。

其功能主要有:侦测远端主机是否存在,建立及维护路由资料,重导资料传送路径(ICMP 重定向),资料流量控制。ICMP 在沟通之中,主要是透过不同的类别(Type)与代码(Code)让机器来识别不同的连线状况。

ICMP 协议大致可以分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

  • ping 查询;
  • 子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码);
  • 时间戳查询(可以用来同步时间)。

而差错报文则产生在数据传送发生错误的时候。

ICMP消息类型

ICMP 报告无法传送数据报的错误,且无法帮助对这些错误进行疑难解答。例如 IPv4 不能将数据报传送到目标主机,路由器或目标主机上的 ICMP 会向主机发送一条“无法到达目标”消息。

下表为最常见的 ICMP 消息。

ICMP 消息类型 用途说明
回显请求 Ping 工具通过发送 ICMP 回显消息检查特定节点的 IPv4 连接以排查网络问题,类型值为 0
回显应答 节点发送回显答复消息响应 ICMP 回显消息,类型值为 8
重定向 路由器发送“重定向”消息,告诉发送主机到目标 IPv4 地址更好的路由,类型值为 5
源抑制 路由器发送“源结束”消息,告诉发送主机它们的 IPv4 数据报将被丢弃,因为路由器上发生了拥塞,于是发送主机将以较低的频度发送数据报,类型值为 4
超时 这个消息有两种用途。当超过 IP 生存期时向发送系统发出错误信息;如果分段的 IP 数据报没有在某种期限内重新组合,这个消息将通知发送系统,类型值为 11
无法到达目标 路由器和目标主机发送“无法到达目标”消息,通知发送主机它们的数据无法传送,类型值为 3

其中无法到达目标消息中可以细分为一下几项

无法到达目标消息 说明
不能访问主机 路由器找不到目标的 IPv4 地址的路由时发送“不能访问主机”消息
无法访问协议 目标 IPv4 节点无法将 IPv4 报头中的“协议”字段与当前使用的 IPv4 客户端协议相匹配时会发送“无法访问协议”消息
无法访问端口 IPv4 节点在 UDP 报头中的“目标端口”字段与使用该 UDP 端口的应用程序相匹配时发送“无法访问端口”消息
需要分段但设置了 DF 当必须分段但发送节点在 IPv4 报头中设置了“不分段(DF)”标志时,IPv4 路由器会发送“需要分段但设置了 DF”消息

ICMP 协议只是试图报告错误,并对特定的情况提供反馈,但最终并没有使 IPv4 成为一个可靠的协议。ICMP 消息是以未确认的 IPv4 数据报传送的,它们自己也不可靠。

ICMP 的报文格式

ICMP 报文包含在 IP 数据报中,IP 报头在 ICMP 报文的最前面。一个 ICMP 报文包括 IP 报头(至少 20 字节)、ICMP 报头(至少八字节)和 ICMP 报文(属于 ICMP 报文的数据部分)。当 IP 报头中的协议字段值为 1 时,就说明这是一个 ICMP 报文。

ICMP 报头如下图所示:

ICMP 报头
图:ICMP 报头

本文标题:Go语言ICMP协议:向主机发送消息

本文地址:https://www.hosteonscn.com/5994.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注