什么是ICMP?
ICMP(Internet控制消息协议)是一种协议,当网络问题阻止IP数据包通过时,网络设备(例如路由器)会使用该协议生成错误消息.
Internet控制消息协议是使Internet工作的基本系统之一。尽管您可能没有听说过ICMP,但您可能已经听说过它的功能之一:Ping。在本指南中,您将了解有关此基本协议的更多信息.
ICMP的历史
ICMP是 TCP / IP协议栈. 它驻扎在 互联网层 它是支持核心Internet协议的错误消息标准。 ICMP的原始定义是由 乔恩·波斯特尔, 互联网的创始人之一。第一个标准于1981年4月在RFC 777中发布。此标准已被多次更新。协议的稳定定义包含在RFC 792中,RFC 792也由Postel编写,并由 互联网工程任务组 1981年9月.
ICMP的目的
尽管较低级别的Internet层不应与连接保证有关, 出现问题时,ICMP会提供一些有关通信的反馈. 因此,即使您使用的是UDP, 无连接 在通信模型中,仍然有可能找出传输失败的原因。所有与网络连接的设备都可以处理ICMP消息,因此包括路由器以及端点设备. 修改了ICMP,使其可以与IPv6一起使用 就像它为IPv4服务一样彻底.
由于此协议位于Internet层, 它的消息由IP数据包携带 因此存在于比交换机的操作结构更高的层次上。尽管ICMP承载在IP数据包中,但它不存在于数据承载数据包中。仅当该入站消息的传输失败时才响应输入数据包生成ICMP数据包. 引发ICMP数据包的错误条件通常是失败数据包的IP标头中包含的数据的结果.
ICMP数据包结构
路由器跳跳回ICMP数据包以报告错误时,它会在要报告的数据包的原始IP标头中重新创建所有字段。因此,原始发送计算机上的错误收集程序可以分析标头并准确计算出发送的哪个IP数据包失败.
在IP标头之后 三个字段ICMP标头. 它们包含对错误进行分类的代码,子代码字段(用于改进错误代码描述)以及校验和。 ICMP字段之后是有效载荷的前八个字节,实际上是 传输层标头 (TCP或UDP).
ICMP消息代码
ICMP块中的第一个代码字段包含一些非常有用的信息。代码是数字,下面是该字段可以具有的一些更有趣的值:
0:回声回复–用于ping
3:无法到达目的地
4:源淬火–路由器过载
5:重定向–使用其他路由器
8:回显请求–用于ping
9:路由器广告回复
10:路由器请求
11:超出时间–用于traceroute
生存时间
引发ICMP产生错误的IP标头字段之一是 生存时间 栏位(TTL)。该字段包含一个数字,表示 数据包可以通过的最大路由器数量. 每个处理该数据包的路由器都会将此数目减一. 如果路由器收到的TTL为零的数据包,它将丢弃该数据包 并将ICMP消息发送回该传输失败的发起者.
在TTL耗尽的情况下,数据包未能到达其目的地的原因与路由器问题或数据包头中的数据格式错误无关。 TTL是为了防止流氓数据包阻塞互联网而创建的结构 路由器表错误导致循环路径时. 但是,该领域的副产品是非常有用的网络管理工具: 跟踪路由.
也可以看看: SolarWinds Traceroute工具评论
使用ICMP的Traceroute
Traceroute是一个著名的网络管理工具,它显示从启动计算机到给定目标IP地址的典型路径。该实用程序会发出一系列空IP数据包。每个传输的重要特征是IP标头中的TTL值.
Traceroute程序从发送数据包开始 TTL为0. 这将由接收它的第一个路由器(通常是网络网关)删除。该路由器发回ICMP数据包。 Traceroute希望从该响应中获得的唯一信息是 返回所需的时间和数据包的源地址. 这就告诉Traceroute到达目的地的路径上的第一个路由器的地址。该程序然后发送一个数据包与 TTL为1. 这通过网关,使TTL减少1。接下来获取数据包的路由器会看到TTL为零,丢弃数据包,然后 发回ICMP数据包. 因此,将显示路径中的第二个路由器,并且Traceroute记录该响应到达所花费的时间。通过每次传输将TTL增加1, Traceroute最终建立了互联网上到给定地址的所有链接的地图.
Traceroute问题
Traceroute是一个非常简单的工具,它可以利用预先存在的管理功能并 高效而有用的工具 出来。 Traceroute有两个弱点.
网络管理员可能会使用该实用工具来查看为什么最近的连接变得如此糟糕–缓慢或失败。然而, Traceroute无法告诉您过去发生了什么. 它只能为您提供有关当前路线进度的反馈.
路由器各自决定自己的邻居中哪一个提供到数据包上目标IP地址的最短路径。但是,该决定可能并不总是每次都完全相同。如果路由器拥塞或关闭,相邻路由器很快就会发现问题所在,并 调整其路由表以解决此问题. 更改后的路由信息会波及到Internet上的所有路由器,但是 该问题可能在所有路由器都找到之前就已经解决了. 然后,重新调整的路线在世界范围内激增.
带有命令“-Ĵ”,您可以指定您希望Traceroute作为路径使用的路由器的地址。但是,要使用此功能,您必须 已经知道错误传输的路径 而且您只能通过完全相同路径的Traceroute执行来获取该信息.
因此,如果您遇到缓慢的连接, 您随后发出的Traceroute命令可能不会揭示发生了什么 因为那个时候导致延迟的问题可能已经解决,并且您的Traceroute路径可能与慢速连接所使用的路径不同.
Traceroute的另一个问题是,它会在您的传输可能会带到给定目的地的路径上给出有趣的显示。然而, 它没有给您任何工具来处理收到的信息. 无法指定路径,因此,如果您看到互联网上的一台路由器响应时间很慢,那么您所能做的就是知道哪台路由器正在减慢您的连接速度。由于该路由器不属于您的公司,因此您无法加快速度, 您已经通过Traceroute获得了知识,但无法采取行动.
也可以看看: Traceroute的最佳工具
ICMP Ping
Ping使用两个ICMP代码:8(回声请求)和0(回声回复)。当您在提示符下发出Ping命令时,Ping程序会发出一个ICMP数据包,其中包含代码8。 类型 领域。回复将有一个 类型 值乘以0。程序乘以发送回显请求包和答复到达之间的间隔。因此,您可以获取“往返时间到达指定目的地并返回的数据包”.
回声请求数据包之所以与众不同,是因为它是唯一发出而不会引起错误的ICMP数据包。因此,Ping不必模拟错误条件即可获取ICMP消息。 Ping有两个选项,可让您指定传输应采用的路径的地址列表。这些是 ”-Ĵ”,这表示一条路线,“-ķ”,这决定了路线.
ICMP Ping端口
你可能想知道 平使用哪个端口. 答案是: 没有. 如果某个实用程序允许您“ ping”端口,那么它实际上不是Ping命令。而是,该实用程序使用TCP或UDP数据包来测试端口。实际上,这种功能被称为“端口扫描程序”或“端口检查器.”
Ping无法使用端口,因为它是一种协议,其级别比 传输层, 端口是主要特征.
与可用的ICMP Ping端口报告最接近的方法是 将UDP数据包发送到特定端口. 如果该端口未处于活动状态,则传输将从类型3的主机发出ICMP消息(目的地无法到达)子类型3(目的端口不可达)。因此,尽管可能引发关于端口的ICMP消息,但不可能使用Ping机制首先将ICMP数据包作为回显请求发送到该端口。如果您在Ping命令中将端口号附加到IP地址上(即ping :),该命令将不会启动,但会返回语法错误.
路径
路径是一个实用程序 Windows操作系统内置 从Windows NT开始,它在所有版本中都可用。该程序是 平 和 跟踪路由, 所以它利用 三种ICMP消息类型. 这些是回显请求和回显回复消息类型(8和0)以及超出时间的消息类型(11).
与Traceroute和Ping一样, 可以给出建议路径的地址列表作为命令的参数 该实用程序将尝试通过这些地址将数据包发送到目的地.
路径生成格式化的结果报告,该报告显示 路线和往返时间 到每个路由器。它会向路径中的每个路由器发送重复的ping请求,而不仅仅是重复与目的地联系。这就是Ping的作用,或者只是将路径中的每个路由器记录一次,这就是Traceroute的作用.
路径不像Ping或Traceroute那样具有弹性. 尽管互联网上的每个设备都能够发送ICMP消息, 并非每个设备都激活了其ICMP功能. 一些路由器和服务器所有者有意关闭ICMP功能以防御黑客攻击.
如果中间路由器将不使用ICMP,则Ping仍会通过该路由器来测试目标。如果Traceroute遇到将不发送ICMP数据包的路由器,则它仅前进到下一个路由器,并为非通信路由器显示一行星号。在相同情况下, 路径在已禁用ICMP的路由器处结束其查询.
蓝精灵攻击
一些设备所有者关闭其设备的ICMP功能的主要原因是,黑客可以将系统用作攻击的渠道。蓝精灵攻击就是这样一种情况.
蓝精灵攻击使用反射器策略. 它不会直接攻击目标,而是会调用其他计算机和路由器向受害者发送邮件。攻击者计算出受害者网络上使用的广播地址,然后发出ICMP回显请求(平)。网络上的每个设备都将向主机发送广播IP地址的路由器发送回声回复.
此攻击仅适用于大型网络. 它有效地从网络内部引发了分布式拒绝服务(DDoS)攻击,而大多数攻击是通过Internet上的远程计算机发起的. 可以通过关闭网关路由器上的ICMP功能来防止攻击类型 或通过过滤接受从远程位置进入网络的数据包中携带网络广播IP地址的请求.
平洪
Ping泛滥是一种DDoS策略,会使目标计算机不堪重负 ICMP回显请求. Ping的某些实现比其他实现更好。例如,如果使用“洪水“ 选项。但是,此选项不适用于所有版本的Ping – 在嵌入到Windows的版本上,它不是有效的选项, 例如。泛洪选项不是通用的事实为希望引导感染了恶意软件的远程计算机的黑客带来了问题。 僵尸网络 控制程序发出Ping请求。由于洪水选项很少,因此很可能 僵尸网络中的大多数设备将无法发起攻击.
如果黑客确保所有受感染的计算机都使用了尝试在其Ping实现中使用泛洪选项的方法来发起攻击,则该攻击策略将获得更大的成功。一种确保做到这一点的方法是在进行任何攻击和分类之前先对计算机进行测试 具有正确Ping形式的组, 或在受僵尸网络病毒感染的所有计算机上安装启用了Flooding功能的Ping.
抵御Ping洪水最简单的方法是 关闭ICMP功能 在路由器上。如果您正在运行Web服务器,则Web应用程序防火墙应该可以防止Ping洪水.
死亡之屏
Ping of Death涉及发送超长的ping请求数据包. 该请求在有效负载的末尾将有大量填充符. 由于数据报太长而无法传输,因此Internet协议处理器会将字符串分解成块,大小与发送方的最大传输单位(MTU)大小相同。接收者会注意到这是一个超长的数据包,已被分解并尝试 重新组装原始的长包装 在将其发送到其目标应用程序之前。如果数据包的长度大于接收计算机中可用内存的大小,则尝试重新组装数据包将阻塞计算机.
Ping of Death现在是一种著名的攻击类型 因此状态防火墙和入侵检测系统可以发现并阻止它。与任何已知的黑客技巧一样,其有效性不再受到威胁。因此,黑客在很大程度上放弃了Ping of Death策略,转而采用 平洪.
ICMP隧道
路由器仅查看ICMP数据包的标头,包括可能在ICMP数据后面的TCP / UDP标头。所以 只要包含ICMP部分的普通数据包都将通过. 这可能 后门 访客可以绕过公共网络的身份验证和收费程序. 这称为ICMP隧道或Ping隧道.
仅仅使用大多数人在计算机上使用的标准网络Ping实用程序,就不可能通过网关和防火墙进行隧道传输. 必须对ICMP隧道进行编程. 这也是黑客进入网络的可能途径。不幸的是,对于网络管理员, 有许多免费的ICMP隧道软件包可从Internet下载.
与前两种类型的ICMP攻击一样, 可以通过Web应用程序防火墙,入侵检测系统或仅阻止所有ICMP活动来阻止Ping隧道 在网络网关.
孪生攻击
Twinge是一个黑客攻击程序。它启动 ICMP洪水 使目标计算机不堪重负。尽管目标收到的所有Ping请求似乎都来自许多不同的来源,但实际上它们都是来自同一来源, 每个标头中都有一个伪造的源IP地址. Twinge可能只是重命名的Ping实用程序,并且已实现“泛洪”选项。这将是一个非常有用的工具 僵尸网络 所有者加载到他们的僵尸计算机上以便启动 平洪攻击.
实质上, Twinge洪水与Ping洪水相同 以及保护网络免受网络攻击的解决方案与通过ICMP进行DDoS攻击的主要类别相同: 关闭ICMP,安装Web应用程序防火墙或有状态防火墙或安装入侵检测系统.
路径MTU发现
最大传输单位(MTU)是网络兼容设备上的一项设置,用于指示 设备应处理的最长IP数据包长度. 它表示为 八位位组, 这是一个八位字节。 MTU对于Internet协议的最初建议是576个八位位组。但是,以太网标准建议 1,500个八位位组 这已成为所有网络和Internet设备的标准.
可以在任何路由器上调整MTU设置。所以, 如果您的数据包通过MTU较低的路由器,则每个数据包都会分为两个IP数据包. 这会减慢传输的速度,因为原始数据包必须先由接收方重新组合,然后才能进行 到传输层处理 然后传递到目标应用程序.
也可以在IP标头中指定拆分,这称为“碎片化”不应在数据包上执行。在这种情况下,MTU小于数据包长度的路由器将丢弃该数据包,然后通过ICMP错误通知进行报告。此错误消息将是ICMP类型3(目的地无法到达)子类型4(需要分段,但设置了“不分段”标志).
路径MTU发现尝试解决了数据包碎片或丢失的问题。如果您可以找到传输路径上最低的MTU,则只需将自己的MTU设置为该大小.
发现机制是通过上面概述的故障过程实现的。 IP封包传到目的地,并填充了有效负载,以达到发送方的MTU大小,并且“不要碎片”标志设置。如果一切顺利,那么您与测试包发送到的目的地的连接就不会有任何问题。如果传输引发ICMP错误,则只需反复尝试测试, 每次减少包长度. 这样,您最终将发送通过的数据包,并且该数据包的长度将告诉您到达目标路径的最低MTU.
Ping可以选择将“不要碎片”标志。但是,这仅在Ping数据包的长度大于其路径中路由器的MTU时才有效。. Ping无法填充您的MTU大小, 因此怀疑是否会丢弃短的Ping数据包.
的 基于Linux的 IPutils软件包包含tracepath,它将为您执行路径MTU发现。上 视窗 电脑,您可以签出免费的mturoute实用程序.
ICMP世界
ICMP系统是报告传输故障的非常简单的机制。但是,它也是 网络管理员可用的最强大的工具之一. 好消息是 ICMP是免费的 并在任何联网设备上自动可用。坏消息是 黑客可以使用ICMP 形成攻击甚至通过防火墙潜行连接.
可以恶意使用ICMP的事实鼓励许多规避风险的网络管理员关闭邮件系统。很遗憾,因为它禁用了本指南中描述的许多非常有用的实用程序.
如果您运行网络,尤其是拥有通过互联网流量的路由器, 考虑使用状态防火墙和入侵检测系统来阻止ICMP滥用 而不是完全关闭消息传递协议。研究路由器的设置和固件功能,以查看其是否具有ICMP滥用解决程序,以使您可以继续在设备上运行ICMP.
您是否使用ICMP方法检查连接?您是否具有经常使用的基于ICMP的GUI实用程序,并可以推荐给其他人?您是否已关闭路由器上的ICMP以保护您的网络?在留言 注释 下面的部分并分享您的经验.
攻击,它利用了ICMP协议中的漏洞。攻击者可以发送大量的ICMP数据包,使目标设备过载并崩溃。这种攻击可以对网络造成严重的影响,因此关闭ICMP功能可以有效地防御蓝精灵攻击。然而,关闭ICMP功能也会影响网络管理工具的功能,因此需要在安全性和功能性之间做出权衡。