ICMP协议 消息列表
类型 | 编码 | 描述 |
0-Echo 响应 | 0 | Echo 响应(被程序ping使用) |
3-目的地不可到达 | 0 | 目标网络不可达 |
1 | 目标主机不可达 | |
2 | 目标协议不可达 | |
3 | 目标端口不可达 | |
6 | 未知的目标网络 | |
7 | 未知的目标主机 | |
9 | 禁止访问的网络 | |
10 | 禁止访问的主机 | |
13 | 网络流量被禁止 | |
8-Echo 请求 | 0 | Echo 请求 |
ICMP 经常被认为是 IP 层的一个组成部分,它传递差错报文以及其他需要注意的信息。ICMP 报文通常被 IP 层或更高层协议(TCP 或 UDP)使用。ICMP 报文是在 IP 数据报内部传输的。IP 协议是不可靠协议,不能保证 IP 数据报能够成功的到达目的主机,无法进行差错控制,而 ICMP 协议能够协助 IP 协议完成这些功能。下面是 ICMP 报文的数据结构:
类型( 8 位,表示 ICMP 数据包类型) 类型( 8 位,表示指定类型中的一个功能) 校验和(16位)
ICMP 差错报文
当发送一份差错报文时,报文始终包含 IP 的首部和产生 ICMP 差错报文的 IP 数据报的前 8 位字节。这样,接收 ICMP 差错报文的模块就会把它与某个特定的协议(根据 IP 数据报首部中的协议字段来判断)和用户进程(根据包含在 IP 数据报前 8 个字节中的 TCP 或 UDP 报文首部中的 TCP 或 UDP 端口号来判断)联系起来
Traceroute 程序
Traceroute 程序主要用来侦测源主机到目的主机之间所经过的路由的情况。
Traceroute 使用 ICMP 报文和 IP 首部中的 TTL 字段,它充分利用了 ICMP 超时消息。其原理很简单,开始时发送一个 TTL 字段为 1 的 UDP 数据报,而后每次收到 ICMP 超时以后,按顺序再发送一个 TTL 字段加 1 的 UDP 数据报,以确定路径中的每个路由器,而每个路由器在丢弃 UDP 数据报时都会返回一个 ICMP 超时报文,而最终到达目的主机后,由于 ICM P选择了一个不可能的值作为 UDP 端口(大于30000)。这样目的主机就会发送一个端口不可达的 ICMP 差错报文