ICMP协议
需求背景
在IP通信中,经常有数据包到达不了对方的情况,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。
ICMP协议是为了辅助IP协议,交换各种各样的控制信息而被制造出来的
概述
ICMP(Internet Control Message Protocol)是Internet控制报文协议
ICMP协议是一种面向无连接的协议,它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制信息
控制信息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息,这些控制消息虽然并不传输用户数据,但是对于用户数据的传递和网络安全具有极其重要的意义
报文封装
ICMP报文是使用IP数据包来封装和发送的,携带ICMP报文的IP数据报完全像其他类型数据的数据报那样在网络中被转发,没有额外的可靠性和优先级,由于IP数据报本身被放在底层物理数据帧中进行发送, 故ICMP报文本身也可能丢失或者出现传输错误
报文类型
差错报文
报告IP数据报在传输中的差错是ICMP报文最基础的功能
ICMP的差错报文有如下特点:
1、ICMP差错报文都是由路由器发送给源主机
2、ICMP差错报文只提供IP数据报在传输过程中的差错报告,但并不规定对各类差错应采取什么样的处理措施(具体的处理,由收到ICMP差错报文的源主机将相应的差错与应用程序联系起来才能进行相应的差错处理)
3、ICMP差错报文不享受任何优先权,也没有特别的可靠性保证措施,与普通的IP数据报一样进行传输,传输过程中可能被丢弃、损坏甚至被抛弃
4、ICMP差错报文是伴随着抛弃出错的IP数据报而产生的
5、当路由器发送一份参数错误等的ICMP差错报文时,ICMP报文数据区始终包含产生ICMP差错报文的IP数据报的头部和其数据区的前8个字节(64位)
6、一些情况下,为了防止在网络中产生大量的ICMP差错报文(广播风暴),影响网络的正常工作,即使发送差错,也不会产生ICMP差错报文
一些情况如下:
- ICMP报文发送差错
- 目的地址是广播地址或多播地址(D类地址)的IP数据
- 作为链路层广播的数据报
- 不是IP分片的第一片
- 源地址不是单个主机的数据报(源地址不能为零地址、回送地址、广播地址或多播地址)
目的站不可达
当路由器不能给数据报找到合适的路由路径,或者主机不能将数据报递交给上层协议时,相应的IP数据报就会被丢弃,然后一个目的站不可达差错控制报文将会被返回给源主机
数据报超时
数据报超时可以用来防止数据报在网络中被循环的路由,在IP首部中都有一个生存时间(TTL)字段,数据报每被转发一次,TTL的值便会减1,当TTL的值被减为0时,数据报会被网络丢弃,同时一个ICMP数据报超时报文会被返回给源主机
源站抑制
ICMP源站抑制报文就是为了给IP协议增加一种流量控制而设计的,当路由器或主机因拥塞而丢弃数据报时,它可以向源站发送ICMP源站抑制报文
这个报文将告诉源站两个信息:
- 第一,你的数据报发得太快,我已经丢弃了;
- 第二,路径中出现了拥塞,请放慢你的数据报发送频率;
重定向(路由)
当路由器要将数据报转发到另一个网络时,它必须知道下一个路由器的IP地址,源主机也是这样,当一台主机刚开始运行时,它会将所有数据报发送给网络中的一个默认路由器,因为它只知道默认路由器这一个IP地址
数据报参数错误
数据报在网络中传输时,其首部中出现的任何二义性都可能会产生严重的问题,如果路由器或主机发现了这种二义性,或者数据报中的某个字段丢失,路由器会直接丢弃数据报,并向源主机返回一个数据报参数错误报文
查询报文
概述
常见的ICMP查询报文有以下几种:回送请求或回答、时间戳请求或回答、路由器询问和通告、信息请求或回答、地址掩码请求或回答
回送请求或回答
回送请求和回送回答报文是为诊断网络而设计的,我们使用这对报文来发现网络的问题,回送请求和回送回答报文组合起来就可以确定两个网络设备之间彼此是否能够通信
回收请求和回送回答报文可以直接确定两台主机的IP协议是否能够正常通信,这是因为ICMP报文是被封装在IP数据报中发送的,发送请求的主机能收到回答报文,证明两台主机之间能够使用IP协议进行通信,同时也能证明源主机与目的主机之间的所有路由器的接收、处理、转发功能正常
应用
Ping
Ping主要原来检测网络的连通性,同时也要收集其他相关信息
原理
ping通过调用echo来发送请求,通过是否收到echo-reply来查询网络层的连通性
ping的结果会给出传送的时间和TTL的数据,还可以查看主机到目的主机的路由
这是因为ICMP的Ping请求数据报在每经过一个路由器的时候,路由器就会把自己的IP地址放到该数据包中,而目的主机则会把这个IP列表复制到ICMP数据包中发回给主机
tracert
tracert主要用来侦测主机到目的主机所经路由情况的工具,可以获取到所经路由器的IP地址
原理
它收到目的主机的IP后,首先给目的主机发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动将TTL减1.而TTL变为0以后,路由器就把这个包给抛弃了,并同时产生一个主机不可达的ICMP数据包给主机。
主机收到这个数据包以后就发送一个TTL=2的数据包给主机,然后刺激第二个路由器给主机发送ICMP数据包,如此反复直到到达目的主机
本文系作者 @小白学安全 原创发布在 xbxaq.com 站点,未经许可,禁止转载!
评论