为什么必须要ICMP

ICMP

为什么要有ICMP?

ICMP:internal control message protocol(互联网控制报文协议)

个人的理解是:面对陌生的网络环境,数据包随时都可能因为某些原因被丢失或者丢弃,为了让发送数据的一方了解数据包丢失或者丢弃的原因从而保证数据包能够正常到达,设置了ICMP。不是TCP协议能够保证数据包的可靠传输吗?我们想一想这样一种场景,服务器A发送一个数据包给服务器B,途中需要经过路由器C,当数据包流经路由器C的时候,因为数据包大小超过了路由器的MSS,但是数据包不允许分片,那么路由器就会将数据包丢弃。因为tcp的可靠传输,客户端超过RTO时间内还未收到数据包的ack信息的时候,会重发该数据,但是这个数据包经过路由器C的时候,还是会因为上述原因被丢弃。tcp的可靠传输是基于端到端协议,客户端保证如果服务端没有收到消息会进行重发,服务器保证如果未收到对应字段的数据包会通知客户端进行重发。但是客户端与服务器仅仅根据tcp协议是无法知道出现丢失的状况,从而不能弥补错误。打个比方,小明要给小红邮寄一块蛋糕,快递员途中要经过中转站,中转站不能接受蛋糕,tcp协议的作用是,假如一段时间内小明没有收到小红的感谢电话,或者小红没有收到小明的蛋糕的时候,会给彼此打电话,这个时候tcp协议的作用下。小明会继续邮寄一块蛋糕给小红,然后进入上面的循环,无论小明发多少个蛋糕,小红一直收不到小明的蛋糕,但因为tcp的可靠传输,小明会一直邮寄蛋糕给小红。如果加入了ICMP,那么中转站就会发送一个ICMP给小明,告知他中转站不接受蛋糕。因为路由器工作环境是网络层以下,同时TCP保证可靠传输,但不会进行错误反馈,需要用ICMP进行网络之间的反馈。ICMP是网络层协议,为ip服务,将有必要的反馈信息发送给相应发送端,保证tcp"真正有效"的可靠传输。(能够根据网络情况,进行调整来保证可靠传输)

猜你喜欢

转载自blog.csdn.net/qq_52696089/article/details/125395821