一、前言
有很多新手朋友在买来服务器之后不知道自己的服务器到底好不好,有时候快有时候又慢得令人发指;或者刚买来的时候速度不错,用久了却越用越卡;又或者总是间歇性的抽风。
那么到底如何去判断自己的服务器网络好不好呢?怎么去选购网络好的服务器呢?接下来我就教大家一些简单易操作的方式来判断,希望可以让你少踩点坑。
二、基础网络知识
网络数据是如何传输的
有些人可能会认为网络数据是跟水一样,一直在进行流动传输,从网线的角度上来讲,可以这么理解。要从更高的层次来理解网络传输,那么网络数据就是以数据包的形式一个一个进行发送接收的。
例如,你要发送 100 KB 的数据至另一台电脑,你的电脑首先会将这 100 KB 的数据拆分成很多个数据包,一个一个发送过去,那边的电脑陆续收到这些数据包后,再将这些数据包合并成一个完整的数据,这样,一次数据传输就完成了。
这是一个非常简单的一次数据传输的描述,实际上里面的细节处理是非常繁多的,例如:如何确定对方的电脑在哪;如何确定这是谁传来的数据包;数据包传输过程中出错了怎么办,如何进行校验和修正;如何确定数据包的顺序;数据包丢失了怎么办,又要全部重新传输吗……可见,你能够在电脑上、在手机上顺畅的浏览着我的博客,这其中是有着非常多的奥妙的……
当然,这有点扯远了,我们作为一个使用网络的普通人,不需要了解那么多细节,了解一些基础的知识就好了。
网络延迟
指的是数据包从你当前位置到目标位置来回所需要使用的时间,注意是来回所需要的时间。通常使用 ping 命令来测量网络延迟。
网络延迟的大小受距离影响最大,从理论上来说,距离越短,延迟就越低。但是实际上的延迟并不可能会完美的按照距离的大小来划分,网络延迟跟网络线路、网络拥堵情况等也有很大关联。网络线路差,例如某些极端情况下你的数据包甚至可以绕着地球转一圈才到目标位置,这种情况下的延迟就非常可怕了。网络拥堵严重也会导致延迟突然或者持续增高,甚至数据包丢失。
网络丢包
在上面说过,你的数据是以数据包的形式进行传输的,那么在传输的过程中,可能就会出现数据包丢失的情况,这个就叫做网络丢包。
如果丢失了一个数据包,那么收到的数据将不再完整,对于很多软件来说,这是无法容忍的,假设别人发给你一个文件,发过来之后却少了一个字节的数据,那么这个文件就已经损坏了,无法打开。
网络丢包是不可避免的,特别是当网络线路差、网络拥堵的情况下,丢包的几率会直线增长,丢包率是衡量网络丢包的一个依据,例如你发送了 100 个数据包,其中 20 个数据包丢失了,那么此时的丢包率可以认为是 20%。
丢包了之后怎么办呢,首先必须要保证的自然是数据的完整性,所以当发生丢包后,系统会进行重传,重新发送丢失的数据包,若重新发送的数据包又丢失,则再次进行发送,直至数据包正确传送完为止,这样就能保证数据的完整性,但是会牺牲大量的时间进行重传。丢包率越高,重传的次数就越多,传输数据花费的时间也就越长。
就以我主观经验而言,日常看视频、浏览网页等情况,丢包率在 5% 以内几乎感觉不到丢包,10% 以内尚可,再往上就能明显感觉慢了。20% 以上会变得很慢,甚至难以接受。所以选择一个丢包率低且稳定的线路是很重要的,延迟并没有那么重要。
什么是网络线路
首先回想一下你家里的网线,你的电脑插着网线,网线另一端连着路由器,路由器的网线又连着房间外的设备,房间外的设备又连着……
由此可见,你发送的数据包并不是一条线直达目标位置的,中间需要经过很多设备一步一步的转发才能到达目标位置,同样,目标位置发回来的数据包也需要经过一系列的转发才能到达你这里。这条转发链可以理解为线路。
线路自然是由运营商架设起来的,并且各个运营商的线路也是不一样的,线路自然也会分三六九等,以满足不同用户群体的需要,具体就不在此讨论了,因为内容很多。很多时候,你的境外服务器的网络体验很大程度是由线路决定的,所以,选择一个好的线路的服务器很重要。
三、常用网络工具
ping 命令
ping 命令是最常用的检测网络连通性的工具,当你拿到一个 IP 的时候可以第一时间使用 ping 命令来检测网络是否可达,并初步查看你与服务器之间的延迟与丢包率如何。
要知道的是,ping 命令使用的是 ICMP 协议,然而当我们实际最常使用的是 tcp 协议,玩游戏最常用 udp 协议。有些时候,商家会针对 ICMP 协议做优化,ping 出来的延迟和丢包率看起来很不错,但是实际用起来却不是那么回事。所以 ping 命令只具有一定的参考意义,并不能代表实际使用起来就是那样的延迟和丢包率。
使用 ping 命令
现在大部分常见的操作系统都会预装 ping 命令工具,所以只要打开控制台就能使用了,Windows 系统打开 cmd。
提示
若你的服务器一直 ping 不通,则有可能是防火墙的缘故。如果服务器设置了禁止被 ping,那么也是 ping 不通的。
如图所示,ping 命令发送了四个数据包,其中第一个数据包未能得到正常响应,剩余的三个数据包正常传送,延迟为 188ms-189ms 左右,此时的丢包率估算为 25%。当然实际上并不能这样来估算延迟和丢包率,因为样本太少,只有四个,准确性很低
在命令的末尾加上 -t,会一直不停的发送数据包,只有你按下 ctrl + c 时才会停止,发送的数据包越多,测得的结果就会略为准确一些。
可以看到,发送了 79 个数据包,丢失 27 个,丢包率为 34%,延迟约为 188ms-201ms,这个丢包率可以说是很差了。
小知识
延迟和丢包率并不是一成不变的,即使是同一条线路,在不同的时间段,延迟和丢包率很有可能是截然不同的。有可能前一分钟还很正常,后一分钟就变得很卡,再过一会又恢复正常,这种情况在差线路下较为常见。
tcping
前面说过,我们最常使用的是 tcp 协议,所以基于 ICMP 协议的 ping 命令只具有一定的参考意义,接下来要使用的一款工具叫做 tcping,它使用 tcp 协议来模拟 ping 的功能,所以相对于 ping 命令来说,它测算出来的结果可能会比 ping 命令更有参考意义一些。
tcping 是一个第三方工具,只能在 Windows 下使用,Linux 下也有一个 tcping 工具,但是并不能测延迟,所以并没有用。
tcping.exe 下载:https://www.elifulkerson.com/projects/tcping.php
打开此页面,下载 tcping.exe 文件,将该文件放入 C:WindowsSystem32 目录中,重新打开 cmd 即可使用。
tcping 的使用除了 IP 地址以外,还需要一个端口号,且服务器必须有一个程序监听该 tcp 端口,否则会不通。
这次我们来 tcping microsoft.com,测试本地和微软官网的 tcp 数据包延迟,因为这是一个 https 网站,所以这台服务器一定监听了 443 端口,那么就填入 443。
可以看到,在第四个数据包的时候,网络线路波动了一下,导致第四个数据包的延迟为 1211 ms,这种情况在线路不稳定的时候是很常见的。
提示
首先要确定你要 tcping 服务器的哪个端口,此端口要满足以下条件:有程序正在监听此端口;服务器没有被 tcp 阻断;防火墙已放行此端口。如果不知道要 tcping 哪个端口的话,也可以 tcping 你的 ssh 端口,常见的是 22 端口。
tcping 也可以作为检测某个端口是否连通的依据,很多时候遇到了问题要第一时间看端口通不通。
BestTrace
BestTrace 是 ipip.net 提供的一个网络工具,包含了一些实用的功能,我个人常用这个软件的路由跟踪功能,以此来查看我和某个 IP 的网络走哪条线路。
软件下载地址:https://www.ipip.net/product/client.html
BestTrace 也提供了 Linux 版,使用以下命令就能在你的 Linux 服务器上安装了。
yum install wget unzip -y apt install wget unzip -y wget https://cdn.ipip.net/17mon/besttrace4linux.zip unzip besttrace4linux.zip rm besttrace4linux.* -f chmod +x besttrace* mv besttrace* /usr/bin/
使用 besttrace 命令,在后面加上你的本地 IP 或者就可以测试从服务器到你本地的线路了。
小提示
从你本地到服务器和从服务器到你本地的线路不一定是一样的,从你本地路由跟踪到服务器,测试的只是从你本地到服务器的线路。很多情况下,服务器到你本地的线路要比你到服务器的线路更重要。
解读路由跟踪的结果
如下图所示,这是我在国外的一台服务器上对广州移动的某个 IP 进行路由跟踪的结果。
先看左边的数字,总共有 7 跳,这个跳数是不错的,比较低。每一跳都发送了三次数据包,所以你可以看到每一跳都有三行几乎一样的数据,延迟不太一样,IP 可能也会有所不同。
其中第 5 跳的三个数据包都丢失,出现这种情况有可能是这台设备根本没有打算回应,第 7 跳到达目标位置,可以看到丢失了两个数据包,延迟大约是 260 ms,比较高,如果你要看延迟的话,最后一跳的延迟才最有参考意义。
看右边画框的位置,可以清楚的看到每一跳大概经过了什么运营商的线路,分别是东京移动->香港移动->广州移动。
当然,仅凭以上的信息并不能判断这条线路好不好(虽然这个延迟和丢包率已经说明了这条线路很差了,但我还是要说),如果想要更进一步的了解这条线路,试着搜索一下这张图片里其它的信息吧,例如 IP 信息,ASxxxx。
如果出现了很多 * 的情况,一直到最后都没有出现结果,那么可能的原因是这个 IP 设置了不允许被 ping。
IPIP.NET
地址:https://tools.ipip.net/traceroute.php
ipip.net 网站也提供了很多实用的工具,比如,你可以利用网站提供的服务器进行路由跟踪,以此来查看不同地区不同运营商的线路情况。
四、总结
实际上,无论如何,测试工具都只是一个辅助性的测试,具有一定的参考意义,测出来的结果意义如何,主要取决于测试工具用得对不对,和你自己的知识水平。所以,不能过分依赖测试出来的数据,因为那不一定就是真实的使用情况,真实的情况还是得自己去用一用才能知道。