引言
我们网上购物后,商家将包裹寄出。一般的,商家的发货地很遥远,快递小哥也无法一天送达,因此需要不停的转运。如果我们想要了解快递现在的情况,我们可以通过手机查询到快递的现状。网络通信也是一样,我怎么知道我的数据是否成功发送了呢?我的网络是否有问题呢?至此,ICMP为我们解决了这个问题。
什么是ICMP
ICMP(Internet控制报文协议):它属于IP协议簇中的一员,这个协议是基于IP协议诞生,却又服务于IP协议。因为这个协议自己并不传输用户数据,他像一个监测者,监测这路由器以及网络层的数据发送情况,所以你可以把它理解成现实社会的督查,当传送数据过程中出现了错误,它会及时发现问题并向我们汇报。
ICMP特点
它的作用是查看网络是否连通;数据发送过程中有什么问题;网络中的设备是否可以正常使用等。它对于网络安全十分重要!
IP协议是面向无连接的协议,因此基于它的ICMP也是无连接协议。
ping和tracert是两个常用网络管理命令,ping和tracert都利用ICMP协议来实现网络功能,它们是把网络协议应用到日常网络管理的典型实例
ping用来测试网络可达性。我们在测试两个设备是否连通的时候呢,我们会ping一下,这个ping的指令就来源于ICMP协议。ping在这个协议里面称之为因特网探测器。 就像我们拨打电话的动作,ping+IP地址,就可以检测对方的电话是否能打通,如果打不通,就证明网络或者设备有问题
tracert用来显示到达目的主机的路径。当我们无法访问目的设备时,ICMP会将错误的信息(不可达信息)反馈给发送者。ICMP通过Tracert这个功能来判断是否可到达目的设备。 就像是监控,你给谁发送了什么数据信息,这些信息到过哪里,产生了什么变化,我们通过Tracert就能得知数据信息的流通路径(就好比你等快递时,查看快递到哪里了。)
关于Tracert
Tracert(跟踪路由):基于报头的TTL的跳跃来对报文转发的路径进行跟踪。它是可以帮助我们及时的检测网络丢包和时延的有效工具,还可以让我们及时发现路由环路。
Tracert在ICMP的使用中,为了到达某一个路径。首先源端会先将报文的TTL设置为1,该报文到达第一个节点后,TTL会被减少1,当TTL超时了,该节点向源端发送超时的icmp信息,信息中带有时间戳,源端收到了这个消息以后得知了第一个路由器的位置已经到达了。然后源端将TTL的值设置为2,报文到达第二个节点后超时,该节点同样向源端发送TTL超时信息,这样就得知了第二个路由器位置已经到达啦,重复以往,直到报文到达目的地址。
但是到达了目标地址后不会再像之前一样返回ICMP报文了,到达主机后会返还一个ICMP数据报文,这个报文表示已经到达了目的地址,也通知端口不需要再次发送TTL进行后续定位了。这样根据每个节点返回给源端的时间戳,就可以计算出源目地址传输时的往返时间。
ICMP的四个字段
ICMP报文的消息封装在ip报文中,当ip报文的头部Protocol值为1的时候,表示ICMP协议。
ICMP协议有四个字段,每个字段表示不一样的状态指令,分别是:
TYPE(消息类型) | CODE(该类型具体参数) | Checksum(描述) | 报文内容 |
---|---|---|---|
0 | 0 | 可以应答 | |
3 | 0 | 网络不可达 | |
3 | 1 | 主机不可达 | |
3 | 2 | 协议不可达 | |
3 | 3 | 端口不可达 | |
5 | 0 | 重定向 | |
8 | 0 | 可以请求 |
就是说,在你对网络检测后,只会答复给你上面的描述,这样你就可以判断网络中哪个部分出现了问题。
ICMP重定向
上面最重要的是重定向,稍微讲一讲。
ICMP可以进行重定向。当路由器发现现路径并非是传输的最优路径时,会立刻向主机进行ICMP重定向的报文请求,请求更改路径。
例如:假设有如下场景
服务器A-----路由器RA------主机-------路由器RB--------服务器B
主机想要访问服务器A,但是根据配置好的默认路径将报文给了RB,RB检测报文信息时发现和主机同一条路径下的RA可以到达服务器A,因此RA是更好的的路径。随后RB会向主机发送一个Redirect消息,通知主机向RA发送报文。主机收到Redirect消息以后,会向RA发送报文,随后RA再检查报文,最后到达服务器A。
如果你看懂了上述的描述的话,是不是发现很有问题,如果黑客发送了一个重定向报文,一旦路由器接受了黑客的重定向申请,主机发送的数据流量就会跑到不知名的地方了!这个就是网络安全经典的攻击之一,重定向攻击。
上图能够清晰反映出黑客通过重定向进行入侵
后续
ICMP最重要的也就是Ping和Tracert了,身为IP协议簇的一部分,使用方面可谓是最多的了,毕竟没事儿就要ping一下。IP协议簇也基本上快告一段落了,网络层越后续的内容越重头。