互联网发展至今,网络可以说是基础,所有的数据、内容都跑在网络上,今天和同事在沟通工作的过程中,发现很多人对公网的网络延迟是没有概念的。
我们知道网络延迟是指数据在传输介质中传输所用的时间,即从报文开始进入网络到它开始离开网络之间的时间。针对这个延迟我们可以使用 Ping 命令基于 ICMP 协议来进行测试。比如我们 Ping 百度的域名。
Erdong@Erdong-Test # ping baidu.com
PING baidu.com (220.181.38.251): 56 data bytes
64 bytes from 220.181.38.251: icmp\_seq=0 ttl=50 time=12.563 ms
64 bytes from 220.181.38.251: icmp\_seq=1 ttl=50 time=9.514 ms
64 bytes from 220.181.38.251: icmp\_seq=2 ttl=50 time=9.023 ms
64 bytes from 220.181.38.251: icmp\_seq=3 ttl=50 time=9.192 ms
64 bytes from 220.181.38.251: icmp\_seq=4 ttl=50 time=17.045 ms
64 bytes from 220.181.38.251: icmp\_seq=5 ttl=50 time=11.408 ms
64 bytes from 220.181.38.251: icmp\_seq=6 ttl=50 time=13.894 ms
64 bytes from 220.181.38.251: icmp\_seq=7 ttl=50 time=10.504 ms
64 bytes from 220.181.38.251: icmp\_seq=8 ttl=50 time=10.980 ms
64 bytes from 220.181.38.251: icmp\_seq=9 ttl=50 time=15.370 ms
64 bytes from 220.181.38.251: icmp\_seq=10 ttl=50 time=10.628 ms
^C
\--- baidu.com ping statistics ---
11 packets transmitted, 11 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 9.023/11.829/17.045/2.501 ms
上边显示整个过程发送了 11 个数据包,平均延迟是 11.829ms ,这个就是我当前电脑本地到百度最近的服务的延迟,这个延迟相对来说是很好的了。
对于公网来说,网络延迟是和地理位置强相关的一个指标。假设我们在北京部署了一个站点,从深圳访问的时候,这个延迟大概要 40ms ,基本不会低于 30ms。那么这延迟是怎么来的,为什么是这个数值,能不能减少呢?
我们都知道,网络传输是通过传输介质来进行的,常见的传输介质就是双绞网线和光纤,另外还有其他类型的线材。短距离一般是双绞网线,普通场景下的网络延迟基本可以忽略不计,长距离和超长距离一般是光纤光缆,这个时候迟延就非常明显。
我们已知光在真空中传播,折射率为 1,其光速约为 c=30 万公里/秒,当光在其他介质里来面传播,其介质折射自率为 n,光在其中的速度就降为 v=c/n,光纤的材料是二氧化硅,其折射率 n 为 1.44 左右,计算延迟的时候,可以近似认为 1.5,我们通过计算可以得出光纤中的光传输速度近似为 v=c/1.5= 20 万公里/秒。
以北京和深圳为例,直线距离 1920 公里,接近 2000 公里,传输介质如果使用光纤光缆,那么延迟时间 t=L/v = 0.2 万公里/20 万公里/秒=10ms ,也就是说从北京到深圳拉一根 2000 公里的光缆,单纯的距离延迟就要 10ms ,实际上是没有这么长的光缆的,中间是需要通过基站来进行中继,并且当光功率损耗到一定值以后,需要通过转换器加强功率以后继续传输,这个中转也是要消耗时间的。另外数据包在网络中长距离传输的时候是会经过多次的封包和拆包,这个也会消耗时间。
综合考虑各种情况以后,以北京到深圳为例,总的公网延迟大约在 40ms 左右,北京到上海的公网延迟大约在 30ms ,同城的情况下,公网延迟大约在 10ms ~ 15ms ,基本维持在 20ms 以内。如果数据出国的话,延迟会更大,比如中国到美国,延迟一般在 150ms ~ 200ms 左右,因为要经过太平洋的海底光缆过去的。
现在我们对于公网的延迟有了一个基本的概念,也理解了为什么自己附近的网站打开会快一些,越远的网站打开会越慢。那么回到开头 Ping 百度域名的例子里,有没有人想过为什么 Ping 百度的域名总是很快,好像全国各地差别并不大?
这个其实是百度在全国很多城市都有放置服务器,我们每个人访问的百度都是离自己最近的服务器,并不会出现,人在北京,访问了一台深圳的服务器的情况。所以访问会快很多。
好了,今天就聊这么多。