5.2ICMP协议
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是个非常有用的协议﹐尤其是当需要对网路连接状况进行判断的时候。
5.2.1认识ICMP
- 不同类型由报文中的类型字段和代码字段共同控制。
- 最后两列表明 ICMP 报文是一份查询报文还是差错报文。
- 当发送一份ICMP差错报文时,报文始终包含IP首部和产生ICMP差错报文的IP数据报的前8个字节。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据报首部中的协议字段来判断)和用户进程(根据版旱灾IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来。
1.查询报文
- 回送请求或回答
- 时间戳请求或回答
- 地址码请求或回答
- 路由器查询通告
2.差错报告报文
ICMP总是把差错报文报告给原始的数据源
- 终点不可达
- 源点抑制
- 超时
- 参数问题
- 改变路由(路由重定向)
5.2.2ICMP数据包格式
ICMP数据包格式包括以下主要部分:
- Type字段:表示ICMP消息的类型。
- Code字段:表示ICMP消息类型的细分子类型。
- Checksum字段:表示ICMP报文的校验和。
常见的ICMP类型
- Echo Reply——回显应答(Ping应答)
- Network Unreachable——网络不可达
- Host Unreachable——主机不可达
- Protocol Unreachable——协议不可达
- Port Unreachable——端口不可达
- Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特
- Source routing failed——源站选路失败
- Destination network unknown——目的网络未知
- Destination host unknown——目的主机未知
- Source host isolated (obsolete)——源主机被隔离(作废不用)
- Destination network administratively prohibited——目的网络被强制禁止
- Destination host administratively prohibited——目的主机被强制禁止
- Network unreachable for TOS——由于服务类型TOS,网络不可达
- Host unreachable for TOS——由于服务类型TOS,主机不可达
常见ICMP类型解释
Echo Request与Echo Reply
ICMP Echo Request(类型为8,代码为0)和ICMP Echo Reply(类型为0,代码为0):
ICMP Echo Request和ICMP Echo Reply用于进行网络连通性测试,通常被称为Ping操作。发送主机(通常是客户端)向目标主机发送Echo Request报文,目标主机收到后会回复Echo Reply报文。这可以用于检测主机之间的可达性和延迟。
Destination Unreachable
当一个主机无法到达目标主机或目标端口时,会发送ICMP Destination Unreachable报文。代码字段指示了具体的不可达原因,例如网络不可达、主机不可达、端口不可达等。这可以帮助诊断网络连接问题,并提供相应的错误信息。
Redirect
当一个路由器接收到一个数据包,发现有更优的路径可以转发时,会发送ICMP Redirect报文,告知发送主机使用新的路由。这可以优化网络流量的传输路径。
Source Quench
源抑制(SourceQuench): 如果一台高速计算机向远程计算机发送大量数据,可能会使路由器产生过载。这时路由器可以利用ICMP 向源IP 发送Source Quench 消息,让它降低发送数据的速度。根据需要还可以向源IP 发送额外的源抑制消息 [1],让它降低发送数据的速度。
源抑制报文(sourcequenchmessage)一般被接收设备用于帮助防止它们的缓存溢出。接收设备通过发送源抑制报文来请求源设备降低当前的数据发送速度。
源抑制报文:ICMP差错报告报文种类之一,类型值为。
- 其具体过程为:首先,接收设备由于缓存溢出而开始丢弃数据,然后接收设备开始向源设备发送源抑制报文,其发送速度是每丢弃一个数据包就发送一个源抑制报文。源设备接收到源抑制报文就开始降低它的数据发送速度,直到不再接收源抑制请求为止。最后只要不再接收到作为接收方目的设备的源抑制请求,源设备就会又逐渐开始增加其发送速度。
Time Exceeded
ICMP Time Exceeded是一个网络错误消息,表示网络中的数据包由于某种原因(如路由器配置不当、网络拥塞、数据包在传输过程中超过了最大生存时间(TTL))而无法被传送到目的地。
Parameter Problem
参数问题( Parameter Problem ):路由器发现 IP 包头出现错误或非法值后,向源设备发送一个 Parameter Problem 消息。这个消息包含有问题的 IP 头,或错误字段的提示信息。
5.2.3ping工具程序
ping用于确定本地主机是否能与另一台主机成功交换(发送与接收)数据包,再根据返回的信息,就可以推断TCP/IP参数是否设置正确,以及运行是否正常、网络是否通畅等。
Ping命令可以进行以下操作 :
- 通过将ICMP(Internet控制消息协议)回显(Echo)数据包发送到计算机并侦听回显回复数据包来验证与一台或多台远程计算机的连接。
- 每个发送的数据包最多等待一秒。
- 打印已传输和接收的数据包数。
需要注意的是,Ping成功并不一定就代表TCP/IP配置正确,有可能还要执行大量的本地主机与远程主机的数据包交换,才能确信TCP/IP配置的正确性。如果执行ping成功而网络仍无法使用,那么问题很可能出在网络系统的软件配置方面,ping成功只保证当前主机与目的主机间存在一条连通的物理路径 。