ICMP原理描述
ICMP(Internet Control Message Protocol)是一个差错报告机制,通常被IP层或更高层协议(TCP或UDP)使用。ICMP报文被封装在IP数据报内部,作为IP数据报的数据部分通过互联网传递。
IP数据报中的字段仅包含源端和最终的目的站,并没记录报文在网络传递中的全部路径(除非IP数据报中设置了路由记录选项)。因此当设备检测到差错时,它无法通知中间的网络设备,只能向源端发送差错报告。
当数据报产生差错时,ICMP只向数据报的源端报告这个差错,既不会去纠正这个差错也不会通知中间的网络设备。网络中多数差错产生于最初的源端,当差错产生于中间的设备时,即使源端收到了差错报告,它也无法判断出这个差错是由中间的哪个网络设备所引起的。
TTL超时报文
当报文在转发或组装过程中,发现报文中TLL字段为0,则向源端发送TTL差错报文。
端口不可达报文
如果主机/路由设备收到一个UDP/TCP的本机报文,根据报文的目的端口,无法找到对应的进程,则向报文源端发送一个端口不可达报文。
目的不可达报文
网络不可达意味着选路失败,主机不可达意味着交付失败。通过报文中的IP首部和原始数据报的前64比特(Internet Header + 64 bits of Original Data Datagram)字段,源端可以得知是哪个地址不可达。
- 报文的目的地址没有对应的路由
- 该报文也不是到本机的报文
那么路由设备将丢弃该报文,同时向源地址返回一个ICMP网络不可达报文,以通知源主机停止发送到该目的地的报文。