ICMP协议简介(一)
1. ICMP介绍
- 架构IP网络时需要特别注意两点:
- 1.确认网络是否正常工作
- 2.遇到异常时进行问题诊断
- ICMP的主要功能:
- 1.确认IP包是否成功送达目标地址。
- 2.通知在发送过程当中IP包被废弃的具体原因。
- ==ICMP技术网络设备都配合。==
2. ICMP实例
eg:如果R1到达R2的包在R2发现没有到达R3的路由,则发送ICMP到R1,告知不可达。
3.ICMP头部
- ICMP头部有8个字节
- 前四个字节格式固定
- type类型 ==8bit==
- code代码 ==8bit==
- checksum校验和 ==16bit==
- 后四个字节不固定:可能有可能没有,和类型有关系。
4. ICMP报文的类型
- 不同类型由报文中的==类型字段==和==代码字段==共同决定
- ICMP分为两种类型
- 查询报文
- 差错报文
- 报文类型如下图所示:
其中最熟悉的两个报文都是 查询报文:++type0-code0++,++type8-code0++。- 0-Echo Reply 0。echo响应,被ping使用
- 8-请求回复 0。echo请求
- 差错报文占大多数
4.1 差错报文
4.1.1差错报文结构
- 当发送一份ICMP差错报文时,报文始终包含IP的==首部==和产生ICMP差错报文的IP数据包的==前8个字节==。
- 差错报文数据前8个字节意义:
tcp,udp,arp前8字节都含有==源端口号==反馈给源主机。 - 接收ICMP差错报文的模块就会把它与某个==协议==、和==用户进程==联系起来
- 协议(根据IP数据报首部中的协议字段来判断)
- 用户进程(根据包含在IP数据报前8字节中的TCP、UDP报文首部中的TCP、UDP端口号判断)
4.1.2 不可达差错
1.路由
- 回复收到==U.U.U==,则类型为3:目的不可达
-
==debug ip icmp== 进一步解析为哪种不可达。发现==host unreachable==(主机不可达)
- 思科路由器,Telnet一个IP地址,如果收到ICMP报错则会报错
2.过滤PING
- 同样 ==debug ip icmp==
- 出现==administratively prohibited unreachable==,表示用户强制过滤
- 另外可以抓包观察到++type:3,code:13++
- 思科路由器Telnet之后会报错。
- 当然也存在 ==TCP reset==的可能
- 但是微软计算机不会报错,只是坚持发送Telnet SYN包,直到超时,程序员不太关心网络。
3.MTU
- 调小MTU,一个包与出接口MTU有关。
- ICMP flag为df的包不可分片,一旦大于MTU就丢弃,并且发送不可达信息。
-
如果因为MTU问题回复ICMP,则ICMP首部后两个字节中会写入MTU大小
4.端口不可达
- ==TCP==访问一个未开放端口号立刻会失败,(可以利用这个特性进行 ==端口扫描== )
- 有失败反应,则端口未开放
- 无反应,反而有可能端口已打开
-
==UDP==访问未开放端口号,会反馈端口不可达信息
4.1.3 关闭不可达信息
- 面对未知的互联网,不必要提供不可达等重要信息。使用:==no ip unreachable==
-思科对ICMP 报错速率已经够进行了控制,避免发送大量的ICMP。
eg:==ip icmp rate-limit unreachable== 1000。默认1000毫秒=1秒,发送一个ICMP
4.1.4 ICMP TTL超时
- TTL不断减少,到0之后超时。
4.1.5 ICMP Redirect
-ICMP 重定向,选择更优化更应该走的路径。路由器不会理会重定向ICMP,无路由信息的二层设备会接收ICMP