检查网络“质量”是一项常见任务 - 延迟、丢弃数据包的数量等。但是“ping”有许多缺点: - 它使用 ICMP。许多 ISP 对 ICMP 和 TCP 流量有不同的整形器,因此“ping”将显示 10 毫秒延迟,但 TCP 连接将经历 1000 毫秒以上。- 它发送非常少量的数据包。默认情况下,每秒一个数据包。由于 TCP 协议可以容忍数据包丢失(它可以很好地运行一半数据包丢失 - 这是正常的),因此绝对不清楚 ping 的“30% 数据包丢失”是否会终止连接,或者它是否绝对正常。
那么,使用 TCP 连接而不是 ICMP 并检查互联网连接质量的 ping 是否有任何替代方案?
不管 TCP 可以容忍数据包丢失/数据包排序问题这一事实,如果“人口”足够大 - 即超过 100 个 ping,则 30% 的 ping 丢失仍然非常重要。
但是要回答这个问题,您可以查看 nmap。我相信很快就会有很多例子涌现:)
更重要的是,您不希望只是往返时间,您真的希望看到从您的机器到服务器并在每个(可能的)跃点返回的性能。
您可以使用
traceroute
- 但是最常见的版本是使用 ICMP 或 UDP 完成的,但要搜索tcp traceroute
- 并从那里开始。这里有一些有趣的工具可以在您使用时尝试...
这是一个例子
lft
......Netcat Power Tools描述了如何使用 netcat 进行TCP Ping。具体来说,每个未经请求的 ACK 数据包都应返回 RST。
我个人是 mtr ( http://www.bitwizard.nl/mtr/ )的忠实粉丝,mtr 是一个基于 ncurses 的 traceroute 克隆,它可以使用 icmp 和 udp 工作。它向您显示了与某个主机的链接中的弱点,并且以这种方式非侵入性。
当涉及到一些负载测试时,我会使用 iperf(即客户端/服务器)。
对于 Windows,您可以使用 tcping 之类的东西:
http ://www.elifulkerson.com/projects/tcping.php
对于 Linux,最好的实用程序是已经提到的
hping
.ICMP 数据包通常传输速度较慢(如果有差异的话),因为大多数网络会降低它们的优先级,尤其是 ping 数据包。通常,如果您从 ICMP 和 TCP 响应中看到如此不同的结果,则问题要么是服务器过载,要么是沿途防火墙处的特定 TCP 整形。
你应该调查
traceroute -P tcp
,,tcptraceroute
当然lft
。telnet
您可以使用一些 QoS 应用程序来测量这种网络参数。例如:
NetPerf (www.netperf.org/netperf/):Netperf 是一个基准,可用于衡量许多不同类型网络的性能。它为单向吞吐量和端到端延迟提供测试。netperf 目前可测量的环境包括:
或者
Iperf (sourceforge.net/projects/iperf) Iperf 由 NLNR/DAST 开发,作为测量最大 TCP 和 UDP 带宽性能的现代替代方案。Iperf 允许调整各种参数和 UDP 特性。Iperf 报告带宽、延迟抖动、数据报丢失。
检查hping然后看看bing
TCP 不能“容忍”50% 的数据包丢失。它会简单地停止,原因很简单:它会根据数据包的丢失来调整其传输速度。当数据包丢失时,它们被理解为表示拥塞。如果您丢弃 50% 的数据包(例如,使用随机丢弃防火墙规则)而不考虑流量,它将看到带宽可用性不断下降。
此外,我怀疑 ISP 塑造了 ICMP 与 TCP。有些人可能会这样做,因为那里有一些非常愚蠢的人,但这样做没有多大意义。大多数会塑造整个连接,或者会因为拥塞而“塑造自己”。在任何一种情况下,数据包通常都是随机丢弃的。
话虽如此,您可以使用 TCP ping,但有几个警告。第一种是仅在 TCP 连接中发送初始数据包,这将引发来自具有开放端口的服务器的响应,但将被视为连接尝试。理想情况下,您可以使用“echo”服务(TCP 端口 7)……但实际上您不能,因为它现在在所有地方都默认禁用。无论如何,如果您可以让某人在您要测试的机器上为您启用它,那么程序可以使用它来检查 TCP 连接中数据包的循环时间。
话虽如此,您的机器上可能已经安装了“tracepath”命令;它类似于 traceroute,但既不使用 TCP 也不使用 ICMP,而是使用 UDP。对于 TCP,有各种实用程序,您可以尝试hping。
ping 的替代方法,您可以使用“netstat”
选项:1.netstat -antp 2.netstat -anup
-a = all, -n = 套接字本地端的地址和端口号, -t = tcp, -p = 程序
-u = udp。