ICMP协议分析
1.关于ICMP:
ICMP是(Internet Control Message Protocol)Internet控制报文协议。 ICMP协议是一种面向无连接的协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递和网络安全具有极其重要的意义。
2.为什么需要ICMP?
IP分组传送不可靠,可能会遭遇各种问题,如丢包,发生堵塞,产生很大的延迟,抖动等。ICMP用来向源报告这些问题或者状况。也可以用来测试网络。
3.ICMP消息格式:
类型:占8位 代码:占8位 检验和:占16位
说明:ICMP所有报文的前4个字节都是一样的,但剩下的其他字节则互不相同。
ICMP报文的前4个字节是统一的格式,共有三个字段:即类型,代码和检验和。
8位类型和8位代码字段一起决定了ICMP报文的类型。
类型8,代码0:表示回显请求(ping请求)。
类型0,代码0:表示回显应答(ping应答)
类型11,代码0:超时
ICMP报文具体分为查询报文和差错报文(对ICMP差错报文有时需要做特殊处理,因此要对其进行区分。如:对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文,否则会出现死循环)
4.IP协议全貌:
5.ICMP差错报文(56字节)
ICMP差错报告报文共有5种
终点不可达:终点不可达分为:网络不可达,主机不可达,协议不可达,端口不可达,需要分片但DF比特已置为1,以及源路由失败等六种情况,其代码字段分别置为0至5。当出现以上六种情况时就向源站发送终点不可达报文。
说明:
端口不可达:UDP的规则之一是:如果收到UDP数据报而且目的端口与某个正在使用的进程不相符,那么UDP返回一个ICMP不可达报文。
源站抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源站发送源站抑制报文,使源站知道应当将数据报的发送速率放慢。
时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源站发送时间超过报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超过报文。
参数问题:当路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。
改变路由(重定向)路由器将改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器。
6.ICMP差错报文特点
(1) ICMP差错报文都是由路由器发送到源主机的,因为IP数据报中含有源主机的IP地址,报告给源主机是最可行的方案,另外,发出IP数据报的源主机最需要知道数据是否到达目标主机。
(2) ICMP差错报文只提供IP数据报在传输过程中的差错报告,并不规定对各类差错应采取什么样的处理措施。具体对差错的处理,由收到ICMP差错报文的源主机将相应的差错与应用程序联系起来才能进行相应的差错处理。
(3) ICMP差错报文不享受任何优先权,也没有特别的可靠性保证措施,与普通的IP数据报一样进行传输,传输过程中可能被丢失、损坏,甚至被抛弃。
(4) ICMP差错报文是伴随着抛弃出错的IP数据报而产生的。
(5) 当路由器发送一份参数错误等的ICMP差错报文时,ICMP报文数据区始终包含产生ICMP差错报文的IP数据报的头部和其数据区的前8个字节(64位)。
(6) 在有些情况下,为了防止在网络中产生大量的ICMP差错报文(广播风暴),影响网络的正常工作,即使发生差错,也不会产生ICMP差错报文,这些情况包括:
● ICMP报文发生差错。这是为了避免差错报文无休止产生而规定的(但ICMP查询报文可能会产生ICMP差错报文)。
● 目的地址是广播地址或多播地址(D类地址)的IP数据报。
● 作为链路层广播的数据报。
● 不是IP分片的第一片。
● 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、回送地址、广播地址或多播地址。
7.差错报文报告
网关在以下情况下发出信息不可到达报告
1) 信宿机硬件出现故障或关机;
2) 发送者指定的地址不存在;
3) 网关不知道去往信宿的路径;
码域值: 0 ~ 12,进一步说明信宿不可到达的具体原因
|
码值 |
意义 |
|
0 |
网络不可到达 |
|
1 |
主机不可到达 |
|
2 |
协议不可到达 |
|
3 |
端口不可到达 |
|
4 |
需分片,但DF置位 |
|
5 |
源路由失败 |
|
6 |
信宿网络未知 |
|
7 |
信宿主机未知 |
|
8 |
源主机被隔离 |
|
9 |
与信宿网络的通信被隔离 |
|
10 |
与信宿主机的通信被隔离 |
|
11 |
对请求的服务类型,网络不可到达 |
|
12 |
对请求的服务类型,主机不可到达 |
8.ICMP控制报文
1.拥塞控制与源站抑制报文
当一个路由器接收IP数据报的速度比其处理IP数据报的速度快,或一个路由器传入数据报的速率大于传出数据报的速率时,就会产生拥塞(Congestion)现象。
这时路由器可以通过发送源站抑制(Source Quench)报文来抑制源主机发送IP数据报的速率,避免可能产生的差错。
源站抑制报文的类型字段为4,代码字段只能为0。源站抑制技术进行拥塞控制的方法如下:
(1) 当路由器发生拥塞时,便发出ICMP源站抑制报文。拥塞的判别可以用三种方法:一是检查路由器缓存区是否已满;二是给缓存区输出队列设置一个阈值,判断队列中数据报的个数是否超过阈值;三是检测某输入线路的传输率是否过高。
(2) 源主机收到抑制报文后,按一定的速率降低发往目标主机的数据报传输率。
(3) 如果在一定的时间间隔内源主机没有收到抑制报文,便认为拥塞已解除,源主机可以逐渐恢复到原来数据报的流量。
2. 路由控制与重定向报文
假如源主机要向目标主机发送IP数据报,源主机的默认路由是路由器1,则源主机先把IP数据报送到路由器1,再由路由器1进行路由选择。路由器1经过选路后,把IP数据报送到路由器2。
同时路由器1也发现源主机要发送到目标主机的IP数据报以后可以直接发送到路由器2(因为路由器1和路由器2同在一个网络中),则路由器1向源主机发送一个ICMP重定向报文,告诉它可以直接把IP数据报送到路由器2。这样,就使源主机始终保持着一个动态的、既小且优的路径表。
9.ICMP应用
(1)ping
工作原理:
▶使用ping命令(即调用ping过程)时,将向目的站点发送一个
ICMP回声请求报文(包括一些任选的数据),
▶如目的站点接收到该报文,必须向源站点发回一个ICMP回声
应答报文,源站点收到应答报文(且其中的任选数据与所发
送的相同),则认为目的站点是可达的,否则为不可达。
(2)tracert命令
▶tracert过程是通过ICMP数据报超时报文来得到一张途经的路
由器列表
▶源主机向目的主机发一个IP报文,并置TTL为1,到达第一个
路由器时,TTL减1,为0,则该路由器回发一个ICMP数据报
超时报文,源主机取出路由器的IP地址即为途经的第一个路
由端口地址
▶接着源主机再向目的主机发第二个IP报文,并置TTL为2,然
后再发第三个、第四个IP数据报,……直至到达目的主机
▶但互联网的运行环境状态是动态的,每次路径的选择有可能
不一致,所以,只有在相对较稳定(相对变化缓慢)的网络
中,tracert才有意义