平时,我们想要知道,自己的机器到目的机器之间,网络通不通,一般会执行ping命令。
一般对于状况良好的网络来说,你能看到它对应的loss
丢包率为0%
,也就是所谓的能ping通。如果看到丢包率100%
,也就是ping不通。
ping正常
ping不通
那么问题来了,假设我能ping通某台机器,那这时候如果我改用TCP协议去发数据到目的机器,也一定能通吗?
或者换个问法,ping和tcp协议走的网络路径是一样的吗?
这时候第一反应就是不一定,因为ping完之后中间链路里的某个路由器可能会挂了(断电了),再用TCP去连就会走别的路径。
也没错。但假设,中间链路没发生任何变化呢?
我先直接说答案。
不一定,走的网络路径还是有可能是不同的。
今天就来聊聊为什么。
我之前写过一篇《断网了,还能ping通 127.0.0.1 吗?》,里面提到过ping数据包和tcp数据包的区别。
ping和TCP发消息的区别
我们知道网络是分层的,每一层都有对应协议。
五层网络协议对应的消息体变化分析
而这网络层就像搭积木一样,上层协议都是基于下层协议搭出来的。
不管是ping(用了ICMP协议)还是tcp本质上都是基于网络层IP协议的数据包,而到了物理层,都是二进制01串,都走网卡发出去了。
如果网络环境没发生变化,目的地又一样,那按道理说他们走的网络路径应该是一样的,什么情况下会不同呢?
我们就从路由这个话题聊起吧。
网络路径
在我们的想象中,当我们想在两台机器之间传输数据。本机和目的机器之间会建立一条连接,像一条管道一样,数据从这头到那头。这条管道其实是我们为了方便理解而抽象出来的概念。
实际上,我们将数据包从本地网卡发出之后,会经过各种路由器(或者交换机),才能到达目的机器。
这些路由器数量众多,相互之间可以互连,连起来之后就像是一张大网,所以叫"网络"可以说是非常的形象。
路由器构成的网络
考虑到交换机有的功能,路由