对于许多任务,客户端和服务器之间的延迟至关重要,例如在线游戏、视频/语音会议、IP 电话、VPN 等。 如果服务器在 IP 网络层面距离客户端太远,那么延迟(通常称为“ping”、“lag”)就会干扰工作。
服务器的地理邻近性并不总是等于 IP 路由级别的邻近性。 因此,例如,另一个国家/地区的服务器可能比您所在城市的服务器距离您“更近”。 这一切都是由于路由和网络构建的特殊性造成的。
如何选择尽可能靠近所有潜在客户的服务器? 什么是IP网络连接? 如何将客户端定向到最近的服务器? 让我们在文章中了解一下吧。
测量延迟
首先,让我们学习如何测量延迟。 这项任务并不像看起来那么简单,因为不同的协议和数据包大小的延迟可能会有所不同。 您还可能会错过短期事件,例如持续几毫秒的下降。
ICMP-- 常规 ping
我们将使用 Unix ping 实用程序;它允许您手动设置发送数据包之间的间隔,这是 Windows 的 ping 版本无法做到的。 这很重要,因为如果数据包之间有很长的暂停,您可能根本看不到它们之间发生了什么。
包装尺寸 (选项 -s)- 默认情况下,ping 实用程序发送大小为 64 字节的数据包。 对于如此小的数据包,较大数据包出现的现象可能不会被注意到,因此我们将数据包大小设置为 1300 字节。
数据包之间的间隔 (选项 -i)— 数据发送之间的时间。 默认情况下,数据包每秒发送一次,这是很长的,实际程序每秒发送成百上千个数据包,所以我们将间隔设置为0.1秒。 该计划根本不允许少。
结果,该命令如下所示:
ping -s 1300 -i 0.1 yandex.ru
这种设计可以让您看到更真实的延迟情况。
通过 UDP 和 TCP 进行 Ping
在某些情况下,TCP 连接的处理方式与 ICMP 数据包的处理方式不同,因此,测量结果可能会因协议而异。 主机根本不响应 ICMP,并且常规 ping 不起作用的情况也经常发生。 例如,这就是主人一生所做的事情。 microsoft.com.
效用 来自著名扫描仪 nmap 的开发人员可以生成任何数据包。 它还可以用来测量延迟。
由于 UDP 和 TCP 在特定端口上运行,因此我们需要“ping”特定端口。 让我们尝试 ping TCP 80,即 Web 服务器端口:
$ sudo nping --tcp -p 80 --delay 0.1 -c 0 microsoft.com
Starting Nping 0.7.80 ( https://nmap.org/nping ) at 2020-04-30 13:07 MSK
SENT (0.0078s) TCP 10.0.0.1:63236 > 13.77.161.179:80 S ttl=64 id=49156 iplen=40 seq=3401731188 win=1480
SENT (0.1099s) TCP 10.0.0.1:63236 > 13.77.161.179:80 S ttl=64 id=49156 iplen=40 seq=3401731188 win=1480
RCVD (0.2068s) TCP 13.77.161.179:80 > 10.0.0.1:63236 SA ttl=43 id=0 iplen=44 seq=1480267007 win=64240 <mss 1440>
SENT (0.2107s) TCP 10.0.0.1:63236 > 13.77.161.179:80 S ttl=64 id=49156 iplen=40 seq=3401731188 win=1480
RCVD (0.3046s) TCP 13.77.161.179:80 > 10.0.0.1:63236 SA ttl=43 id=0 iplen=44 seq=1480267007 win=64240 <mss 1440>
SENT (0.3122s) TCP 10.0.0.1:63236 > 13.77.161.179:80 S ttl=64 id=49156 iplen=40 seq=3401731188 win=1480
RCVD (0.4247s) TCP 13.77.161.179:80 > 10.0.0.1:63236 SA ttl=42 id=0 iplen=44 seq=2876862274 win=64240 <mss 1398>
Max rtt: 112.572ms | Min rtt: 93.866ms | Avg rtt: 101.093ms
Raw packets sent: 4 (160B) | Rcvd: 3 (132B) | Lost: 1 (25.00%)
Nping done: 1 IP address pinged in 0.43 seconds
默认情况下,nping 发送 4 个数据包并停止。 选项 -c 0 可以无限发送数据包;要停止程序,需要按 Ctrl+C。 统计数据将在最后显示。 我们看到平均 rtt(往返时间)值为 101ms。
MTR - 类固醇追踪路线
程序 My Traceroute 是一个高级实用程序,用于跟踪到远程主机的路由。 与通常的系统实用程序traceroute(在Windows中这是tracert实用程序)不同,它可以显示数据包链中每个主机的延迟。 它不仅可以通过 ICMP 跟踪路由,还可以通过 UDP 和 TCP 跟踪路由。
$ sudo mtr microsoft.com
(可点击)MTR程序界面。 已开始对 microsoft.com 进行路由跟踪
MTR立即显示对链中每个主机的ping,并且数据在程序运行时不断更新,并且可以看到短期变化。
截图显示节点#6有丢包,但事实上这并不完全正确,因为有些路由器可以简单地丢弃TTL过期的数据包而不返回错误响应,因此这里可以忽略丢包数据。
WiFi 与电缆

这个主题与本文并不完全相关,但在我看来,在延误的情况下它非常重要。 我真的很喜欢 WiFi,但如果我有哪怕一丁点机会用电缆连接到互联网,我都会使用它。 我也总是劝阻人们不要使用 WiFi 摄像头。
如果您玩严肃的在线射击游戏、流媒体视频或在证券交易所进行交易:请通过电缆使用互联网。
这是比较 WiFi 和电缆连接的视觉测试。 这是对 WiFi 路由器的 ping,也就是说,还没有连接到互联网。
(可点击)通过电缆和 WiFi 对 WiFi 路由器执行 ping 操作的比较
可以看到,通过WiFi,延迟多了1ms,有时有数据包的延迟长十倍! 而这只是很短的一段时间。 同时,同一路由器产生<1ms的稳定延迟。
在上面的示例中,使用 802.11GHz 的 WiFi 2.4n,仅笔记本电脑和手机连接到 WiFi 接入点。 如果接入点上有更多客户端,结果会更糟。 这就是为什么我非常反对将所有办公室计算机切换到 WiFi(如果可以通过电缆连接)。
IP连接
所以,我们已经学会了测量服务器的延迟,让我们尝试找到离我们最近的服务器。 为此,我们可以看看提供商的路由是如何工作的。 使用此服务很方便

当我们访问该站点时,我们看到我们的IP地址属于自治系统 .
通过查看自治系统的连接图,我们可以看到我们的提供商通过哪些更高级别的提供商连接到世界其他地方。 每个点都是可点击的,您可以进去查看它是什么类型的提供商。

提供商自治系统的连接图
使用此工具,您可以研究任何提供商的渠道(包括托管)的结构。 查看它直接连接到哪些提供商。 为此,您需要在搜索 bgp.he.net 中输入服务器的 IP 地址,并查看其自治系统的图表。 您还可以了解一个数据中心或托管提供商如何连接到另一个数据中心或托管提供商。
大多数流量交换点都提供一种称为“Looking Glass”的特殊工具,它允许您从交换点的特定路由器进行 ping 和跟踪路由。
在这里,例如, 来自 MGTS
所以,在选择服务器的时候,我们可以提前看看从不同的流量交换点来看它会是什么样子。 如果我们的潜在客户位于某个地理区域,我们可以找到服务器的最佳位置。
选择最近的服务器
我们决定简化为客户寻找最佳服务器的过程,并创建了一个自动测试附近位置的页面: .
当您访问页面时,脚本会测量从浏览器到每个服务器的延迟并将其显示在交互式地图上。 当您单击数据中心时,将显示带有测试结果的信息。

该按钮会将您带到我们所有数据中心的延迟测试页面。 要查看测试结果,请单击地图上的数据中心点
来源: habr.com
