共计 2646 个字符,预计需要花费 7 分钟才能阅读完成。
导读 | tcpping 作为 shell 脚本实现,该脚本响应外部工具来执行和报告 RTT 测量。因此,为了安装 tcpping,你首先需要先安装这些先决条件。 |
测量到远程主机的网络延迟的一种常用方法是使用 ping 应用程序。该 ping 工具依赖 ICMP ECHO 请求和回复数据包来测量远程主机的往返延迟。但是,在某些情况下,ICMP 流量可能会被防火墙阻止,这使得该 ping 应用程序对于受限制的防火墙后面的主机毫无用处。在这种情况下,你将需要依赖使用 TCP/UDP 数据包的第 3 层测量工具,因为这些第 3 层数据包更有可能绕过常见的防火墙规则。
一种这样的第 3 层测量工具是 tcpping. 为了测量延迟,tcpping 利用所谓的半开放连接技术,基于 TCP 三路握手。也就是说,它通过端口号(默认为 80)向远程主机发送 TCP SYN 数据包。如果远程主机正在侦听该端口,它将以 TCP ACK 数据包响应。否则,它将以 TCP RST 数据包响应。无论哪种方式,tcpping 都可以通过定时传出 SYN 数据包和传入 ACK(或 RST)数据包来测量远程主机的往返时间 (RTT) 延迟。
tcpping 作为 shell 脚本实现,该脚本响应外部工具来执行和报告 RTT 测量。因此,为了安装 tcpping,你首先需要先安装这些先决条件。
要在 Ubuntu 或 Debian 上安装 tcptraceroute:
$ sudo apt-get install tcptraceroute
要在 CentOS 或 RHEL 上安装 tcptraceroute,首先在你的系统上设置 RepoForge,然后运行:
$ sudo yum install tcptraceroute
使用的另一个工具 tcpping 是 GNUbc,它预装在所有主要的 Linux 发行版上。但是,如果你 tcpping 在最小 Linux 运行时环境(例如 Docker 容器、AWS 最小映像 AMI)中运行,则 bc 可能不会预先安装。在这种情况下,你需要 bc 自己安装。
在 Debian 的 Linux 上安装:
$ sudo apt-get install bc
在 Red Hat 的 Linux 上安装:
$ sudo yum install bc
安装这些必备工具后,最后继续 tcpping 从官方源下载。
$ wget http://www.vdberg.org/~richard/tcpping
$ cp tcpping /usr/bin
$ chmod 755 tcpping
要使用 测量网络延迟 tcpping,你可以使用以下格式。
tcpping [-d] [-c] [-r sec] [-x count] ipaddress [端口]
-
-d: 在每个结果之前打印时间戳。
-c: 使用分列输出以便于解析。
-r:连续探测之间的间隔(以秒为单位)(默认为 1 秒)。
-x: 重复 n 次(默认无限制)。
[port]: 目标端口(默认为 80)。
请注意,你需要 root 权限才能运行,tcpping 因为它需要调用特权 tcptraceroute 命令。
对于任何开放 80 端口的目标 Web 服务器,你可以使用以下方法测量其 RTT 延迟 tcpping。
tcpping www.rumenz.com
seq 0: tcp response from 42.194.162.109 (42.194.162.109) 33.822 ms
traceroute to rumenz.com (42.194.162.109), 255 hops max, 60 byte packets
seq 1: tcp response from 42.194.162.109 (42.194.162.109) 33.975 ms
traceroute to rumenz.com (42.194.162.109), 255 hops max, 60 byte packets
seq 2: tcp response from 42.194.162.109 (42.194.162.109) 32.010 ms
traceroute to rumenz.com (42.194.162.109), 255 hops max, 60 byte packets
seq 3: tcp response from 42.194.162.109 (42.194.162.109) 32.209 ms
traceroute to rumenz.com (42.194.162.109), 255 hops max, 60 byte packets
seq 4: tcp response from 42.194.162.109 (42.194.162.109) 30.866 ms
traceroute to rumenz.com (42.194.162.109), 255 hops max, 60 byte packets
seq 5: tcp response from 42.194.162.109 (42.194.162.109) 34.866 ms
traceroute to rumenz.com (42.194.162.109), 255 hops max, 60 byte packets
seq 6: tcp response from 42.194.162.109 (42.194.162.109) 32.604 ms
traceroute to rumenz.com (42.194.162.109), 255 hops max, 60 byte packets
seq 7: tcp response from 42.194.162.109 (42.194.162.109) 30.495 ms
对于任意远程主机,在运行 tcpping. 要检查远程 TCP 端口是否打开,你可以使用 nc 如下命令。
$ nc -vn
-t: 连续 TCPing,直到使用 Ctrl+C 键停止
tcping -t 1.1.1.1 80
-w 0.5: 设置超时时间为 0.5 秒(1 秒 =1000 毫秒),单位 秒
tcping -w 0.5 1.1.1.1 80
-s: 当 TCPing 测试成功后(在超时时间以内返回 TCPing 延迟数据)自动停止 TCPing
tcping -s 1.1.1.1 80
-4: 优先 IPv4(如果一个域名有 IPv4 和 IPv6 解析,那么走 IPv4)
tcping -s 1.1.1.1 80
–file: TCPing 将逐行循环遍历文件内的 服务器 IP/ 域名 信息(一行一个,支持端口,例如:1.1.1.1 443)
tcping --file rumenz.txt