TCPIP详解Protocol 读书笔记(六) ICMP协议

TCP/IP详解:Protocol 读书笔记(六)

Chapter6 ICMP协议

ICMP数据包

ICMP(Internet Control Message Protocol)互联网控制消息协议,属于网络层。ICMP报文是包裹在IP数据报内部传输的。它的主要功能是传输网络诊断信息与做一些同步工作。

在这里插入图片描述

每个ICMP数据包前4个字节是相同的,剩余字段会根据数据包类型的变化而变化。ICMP数据包格式如下:

在这里插入图片描述
ICMP包会有Type,Code和CheckSum三部分。

  • Type(类型字段):指明该数据包属于什么类型(大类),长度1字节。
  • Code(代码字段):指明数据包属于大类里面的哪小类,长度1字节。类型字段与代码字段共同决定ICMP数据包类型,以及后续字段含义。
  • Checksum(校验和):这里与IP协议中checksum中单纯地校验头部信息不同,这里的Checksum校验整个ICMP包,包括头部和数据信息。Checksum长度2字节,该校验和覆盖整个ICMP数据包。

ICMP作用

ICMP传输的信息分为两类:

  1. 一类是错误信息,这一类信息可用来诊断网络故障。前面讲过,IP协议的工作方式是尽力而为,“Best Effort”。如果IP包因为某种错误没有传输到目的地,IP协议本身不会做进一步的尝试。但是上游发送IP包的主机和负责转发的路由器不知道下游发生了错误和故障,因此可能继续发送IP数据包。因此通过ICMP包,下游的路由器和主机可以将错误信息汇报给上游,从而让上游的路由器和主机进行调整。但是,ICMP只是提供特定类型的错误汇报,它不能帮助IP协议成为“可靠”的协议。
  2. 另一类信息是咨询性质的。比如某台计算机询问路径上的每个路由器都是谁,然后各个路由器通过ICMP包进行应答。

ICMP基于IP协议。一个ICMP包需要封装在IP包中,然后在互联网中传输。ICMP是IP数据包所必须的部分。因此任何一个支持IP协议的计算机,都要同时实现ICMP协议。

ICMP协议是实现ping命令和traceroute命令的基础。这两个工具常用于网络排错。

常见的ICMP包类型

回音(Echo)

回音属于咨询信息。ping命令就是利用了该类型的ICMP包。当使用ping命令时,将向目标主机发送Echo-询问类型的ICMP包。目标主机在接收到该ICMP包之后,会回复Echo-应答类型的ICMP包,并将询问ICMP包包含在数据部分。ping命令是我们进行网络排查的一个重要工具。如果一个IP地址可以通过ping命令收到回复,那么其他网络协议通信方式也很有可能成功。

源头冷却

源头冷却(source quench)属于错误信息。如果某个主机快速地向目标主机传输数据,而目标主机没有匹配的处理能力,目标主机可以向源端主机发出该类型的ICMP包,提醒源端主机减缓传输速度。

目的地无法到达

Destination Unreachable属于错误信息。如果一个路由器接收到一个没有办法转发的IP包,它会向源端主机发送该类型的ICMP包。比如当IP包达到最后一个路由器,路由器发现目标主机宕机,就会向源端主机发送目的地无法达到类型的ICMP包。目的地无法到达还可能有其他原因,比如不存在转发路径(在路由表中找不到对应项),或不被接受的端口号等。

超时

Time Exceeded属于错误信息。IPv4中的Time to Live(TTL)和IPv6中的Hop Limit会随着经过的路由器而递减,当这个区域减为0时,就认为该IP包超时。超时错误信息就是TTL减为0时的路由器发送该源端主机的ICMP包,通知它发生了超时错误。

traceroute就是利用了这种类型的ICMP包。traceroute用来发现IP接力路径上的各个路由器。它向目的地发送IP包,第一次的时候,将TTL设置为1,引发第一个路由器的Time Exceeded错误。这样,第一个路由器回复ICMP包,从而让源端主机知道途径的第一个路由器的信息。然后TTL依次被设置为2、3、4,…,直到到达目的主机。这样,IP路径中的每个路由器都会向源端主机发送ICMP来汇报Time Exceeded错误。traceroute将ICMP包的信息打印在屏幕上,就是接力路径的信息。

重定向

redirect属于错误信息,当一个路由器收到一个IP包,搜寻其路由表,发现自己不应该收到该IP包,它会向源端主机发送重新定向类型的ICMP,提醒源端主机修改自己的routing table。如下图的网络:

在这里插入图片描述
假如145.1发送到145.15的IP包,结果被中间的路由器145.17收到。那么路由器会发现,根据自己的routing table,这个IP包需要原路返回。那么router就可以判断145.1的routing table可能有问题。所以路由器会向145.1发送redirect类型的ICMP包。

总结

ICMP协议能够帮助我们发现IP通信中出现的故障。ping和traceroute的重要性也无需赘述。但是由于ICMP特性,却经常被黑客借用进行网络攻击。比如利用伪造的IP包引发大量的ICMP回复,并将这些ICMP包导向受害主机,从而形成Dos攻击。而redirect类型的ICMP包可以引起某个主机更改自己的routing table,所以也被用作攻击工具。因此需要网络站点选择忽视某些类型的ICMP包来提高自身的安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值