ICMP介绍:
ICMP它传递差错报文以及其他需要注意的信息
ICMP报文是在IP数据报内部被传输的
所有报文的前4个字节(类型、代码、校验和)都是一样的,类型字段可以有15个值,描述特定类型的ICMP报文,某些ICMP报文还使用代码字段的值进一步描述不同的条件
校验和字段覆盖整个ICMP报文
不同类型由报文中的类型字段和代码字段来共同决定
TYPE | CODE | Description | Query | Error |
0 | 0 | Echo Reply——回显应答(Ping应答) | x | |
3 | 0 | Network Unreachable——网络不可达 | x | |
3 | 1 | Host Unreachable——主机不可达 | x | |
3 | 2 | Protocol Unreachable——协议不可达 | x | |
3 | 3 | Port Unreachable——端口不可达 | x | |
3 | 4 | Fragmentation needed but no frag. bit set——需要进行分片但设置不分片比特 | x | |
3 | 5 | Source routing failed——源站选路失败 | x | |
3 | 6 | Destination network unknown——目的网络未知 | x | |
3 | 7 | Destination host unknown——目的主机未知 | x | |
3 | 8 | Source host isolated (obsolete)——源主机被隔离(作废不用) | x | |
3 | 9 | Destination network administratively prohibited——目的网络被强制禁止 | x | |
3 | 10 | Destination host administratively prohibited——目的主机被强制禁止 | x | |
3 | 11 | Network unreachable for TOS——由于服务类型TOS,网络不可达 | x | |
3 | 12 | Host unreachable for TOS——由于服务类型TOS,主机不可达 | x | |
3 | 13 | Communication administratively prohibited by filtering——由于过滤,通信被强制禁止 | x | |
3 | 14 | Host precedence violation——主机越权 | x | |
3 | 15 | Precedence cutoff in effect——优先中止生效 | x | |
4 | 0 | Source quench——源端被关闭(基本流控制) | ||
5 | 0 | Redirect for network——对网络重定向 | ||
5 | 1 | Redirect for host——对主机重定向 | ||
5 | 2 | Redirect for TOS and network——对服务类型和网络重定向 | ||
5 | 3 | Redirect for TOS and host——对服务类型和主机重定向 | ||
8 | 0 | Echo request——回显请求(Ping请求) | x | |
9 | 0 | Router advertisement——路由器通告 | ||
10 | 0 | Route solicitation——路由器请求 | ||
11 | 0 | TTL equals 0 during transit——传输期间生存时间为0 | x | |
11 | 1 | TTL equals 0 during reassembly——在数据报组装期间生存时间为0 | x | |
12 | 0 | IP header bad (catchall error)——坏的IP首部(包括各种差错) | x | |
12 | 1 | Required options missing——缺少必需的选项 | x | |
13 | 0 | Timestamp request (obsolete)——时间戳请求(作废不用) | x | |
14 | Timestamp reply (obsolete)——时间戳应答(作废不用) | x | ||
15 | 0 | Information request (obsolete)——信息请求(作废不用) | x | |
16 | 0 | Information reply (obsolete)——信息应答(作废不用) | x | |
17 | 0 | Address mask request——地址掩码请求 | x | |
18 | 0 | Address mask reply——地址掩码应答 |
BSD系统对ICMP报文的处理:
ICMP差错报文格式:
当发送一份ICMP差错报文时,报文始终包含IP的首部和产生ICMP差错报文的IP数据报的前8个字节。这样,接收ICMP差错报文的模块就会把它与某个特定的协议(根据IP数据首部中的协议字段来判断)和用户进程(根据包含在IP数据报前8个字节中的TCP或UDP报文首部中的TCP或UDP端口号来判断)联系起来
IP首部:源IP地址为发送差错报文的接口IP,目的IP地址为原报文的源IP地址
ICMP首部:类型,代码,校验和。
产生差错的数据报IP首部:造成数据错误的IP头部
UDP首部:造成数据错误的端口号
ICMP差错报文
下面各种情况不会导致产生ICMP差错报文:
1. ICMP差错报文不会再产生ICMP差错报文
2. 目的地址是广播地址或多播地址的IP数据报
3. 作为链路层广播的数据报
4. 不是IP分片的第一片,只有第一片才会有四层信息,其它片里面没有端口号。
5. 源地址不是单个主机的数据报。源地址不能为零地址、环回地址、广播地址、多播地址
这些规则是为了防止过去允许ICMP差错报文对广播的响应所带来的广播风暴。
高能报警!!!
在现实生活中debug 命令不要随便使用,会占用大量CPU资源导致网络瘫痪,设备可能会直接挂掉。
debug ip icmp 查看icmp报错信息
debug ip packet detail 调试IP数据包,判断网络故障原因
ICMP差错报文方便了我们排错,但是也造成了安全隐患。建议在接入层的接口下配置关闭不可达信息no ip unreachables