ICMP

结论1: ICMP协议属于网络层(IP层)。ICMP封装在IP报文中。不经过TCP、UDP。ICMP与TCP、UDP都封装在IP报文中,不存在谁包含谁。

结论2:ping,tracert,traceroute,tracepath,trace工具都是通过利用ICMP协议来分析网络状况的。如果没有开启ICMP,他们最终都不会抵达对端。不过除了ping工具外,其他几个工具可以看到本端到对端中间经过的路由器信息,从而可以帮助判断是哪一段网络出了问题。

ping 使用的是 ICMP 的 echo request 和 echo reply 来完成检测。

traceroute 使用 ICMP 的 TTL 来完成检测。TTL (Time To Live),其值代表还有多少“生存时间”,其实就是还可以被转发处理多少次。

  • 每个路由器在转发 ICMP 封包时,会都把 IP header 中的 TTL 的值减1,如果 TTL 的值已经是 0 ,就代表 TTL 已经到期,就这就会传送错误信息给原本发送的路由设备。
  • traceroute 工具就是使用 TTL 的方式来完成网络检测。

具体参考:

https://www.netadmin.com.tw/netadmin/zh-tw/technology/111381F2995A4AB48672E965F63133AE?page=1

ICMP消息大体有两类:

1. 双向消息

比如 Ping 去向包是Echo Request (type 8), 回向的Echo Reply( type 0), 此为双向!

在比如 ICMP Timestamp Request 是去向,而Timestamp Reply是回向,也是双向交互!

这种双向消息,途径防火墙时,可以依据去向的Request来创建一个有状态条目,那么回包回来时,可以匹配已经创建的、有状态条目,可以允许进入。

2. 单向消息

单向消息一般为告警报错消息(type 3),或Redirect消息( type 5),由于单向的消息是通知源主机出错,那么这种单向消息途径防火墙时,防火墙必须知道这个单向消息属于哪个session? 如何知道呢?

以出错消息” Destination Unreachable” 为例,这个ICMP消息体里会包含原始的IP包 + 上层端口号的信息,那什么是原始IP包? 通俗地说,就是肇事者,哪个IP包触发这个出错消息的!

既然有了源目IP + 源目端口号,那么防火墙很容易检查有没有对应的session ID,如果有,放行;如果没有,丢弃!

  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2023 ligongzhao
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信