检查networking质量是一个常见的任务 – 延迟,丢弃的数据包的数量等。但是'ping'有一些缺点:它使用ICMP。 许多ISP对ICMP和TCPstream量有不同的整形器,所以'ping'将显示10ms的延迟,但TCP连接将经历1000ms +。 – 它发送非常less量的数据包。 默认情况下,每秒一个数据包。 由于TCP协议容忍数据包丢失(它可以运行得非常好,只有一半的数据包丢失 – 这是正常的),如果ping的“30%数据包丢失”导致连接中断或绝对正常的话,这是完全不清楚的。
那么,ping是使用TCP连接而不是ICMP来检查Internet连接质量吗?
不pipeTCP可以容忍丢包/分组sorting的问题,如果“总体”足够大 – 即超过100个ping,ping丢失率仍然相当高。
但要回答这个问题,你可以看看nmap。 我敢肯定,例子会在短期内洪水:)
更重要的是,你不需要一个往返时间,你真的希望看到从你的机器到服务器的性能,并在每一个(可能)的跳跃。
你可以使用traceroute
来做到这一点 – 然而最常见的版本是使用ICMP或UDP完成的,但是searchtcp traceroute
并从那里开始。
这里有一些有趣的工具,当你在这里尝试…
这里是一个例子…
% lft -S 4.2.2.2 Hop LFT trace to vnsc-bak.sys.gtei.net (4.2.2.2):80/tcp 1 ln-gateway.centergate.com (206.117.161.1) 0.5ms 2 isi-acg.ln.net (130.152.136.1) 2.3ms 3 isi-1-lngw2-atm.ln.net (130.152.180.21) 2.5ms 4 gigabitethernet5-0.lsanca1-cr3.bbnplanet.net (4.24.4.249) 3.0ms 5 p6-0.lsanca1-cr6.bbnplanet.net (4.24.4.2) 3.4ms 6 p6-0.lsanca2-br1.bbnplanet.net (4.24.5.49) 3.3ms 7 p15-0.snjpca1-br1.bbnplanet.net (4.24.5.58) 10.9ms 8 so-3-0-0.mtvwca1-br1.bbnplanet.net (4.24.7.33) 11.1ms 9 p7-0.mtvwca1-dc-dbe1.bbnplanet.net (4.24.9.166) 11.0ms 10 vlan40.mtvwca1-dc1-dfa1-rc1.bbnplanet.net (128.11.193.67) 11.1ms ** [neglected] no reply packets received from TTLs 11 through 20 ** [4.2-3 BSD bug] the next gateway may errantly reply with reused TTLs 21 [target] vnsc-bak.sys.gtei.net (4.2.2.2) 11.2ms
Netcat Power Tools介绍了如何使用netcat进行TCP Ping 。 具体而言,每个未经请求的ACK数据包都应返回RST。
我个人是mtr( http://www.bitwizard.nl/mtr/ )的粉丝,mtr是一个基于ncurses的traceroute克隆,它可以同时使用icmp和udp。 它向您展示了您与某个主机的链接中的弱点,并且以这种方式非侵入性的。
当它真的涉及到一些负载testing,我会去与iperf(这是客户端/服务器)。
对于Windows,你可以使用类似tcping的东西:
http://www.elifulkerson.com/projects/tcping.php
而对于Linux来说,最好的工具就是已经提到的hping
。
# hping -S -p 80 www.sunet.se HPING www.sunet.se (eth0 192.36.171.155): S set, 40 headers + 0 data bytes len=46 ip=192.36.171.155 ttl=59 DF id=0 sport=80 flags=SA seq=0 win=5840 rtt=0.7 ms len=46 ip=192.36.171.155 ttl=59 DF id=0 sport=80 flags=SA seq=1 win=5840 rtt=0.7 ms len=46 ip=192.36.171.155 ttl=59 DF id=0 sport=80 flags=SA seq=2 win=5840 rtt=0.6 ms ^C --- www.sunet.se hping statistic --- 3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.6/0.7/0.7 ms
通常,ICMP数据包传输速度较慢(如果完全不同的话),因为大多数networking都会对它们进行优先sorting,尤其是ping数据包。 一般来说,如果你看到ICMP和TCP响应的结果不同,那么问题是服务器负载过重或在防火墙上的特定TCP整形。
您应该调查traceroute -P tcp
, tcptraceroute
, lft
和当然telnet
。
您可以使用一些QoS应用程序来测量这种networking参数。 例如:
NetPerf (www.netperf.org/netperf/):Netperf是一个基准,可以用来衡量许多不同types的networking的性能。 它提供了单向吞吐量和端到端延迟的testing。 目前netperf可以测量的环境包括:
* TCP and UDP via BSD Sockets for both IPv4 and IPv6 * DLPI * Unix Domain Sockets * SCTP for both IPv4 and IPv6
要么
IPerf (sourceforge.net/projects/iperf)Iperf由NLANR / DAST开发,作为测量最大TCP和UDP带宽性能的一种现代替代方法。 Iperf允许调整各种参数和UDP特性。 Iperf报告带宽,延迟抖动,数据报丢失。
看看hping ,然后看看bing
TCP不能“容忍”50%的数据包丢失。 它会简单地停下来,原因很简单:它根据数据包的丢失来调整传输速度。 当数据包丢失时,它们被理解为表示拥塞。 如果丢弃50%的数据包(比如随机丢弃防火墙规则),则无论stream量如何,都会看到带宽可用性不断下降。
此外,我怀疑互联网服务提供商塑造ICMP与TCP。 有些人可能会这样做,因为在那里有一些非常愚蠢的人,但这样做没有多大意义。 大多数人会塑造整个联系,或者由于拥挤而“塑造自己”。 在任何情况下,数据包通常是随机丢弃的
这就是说,你可以ping TCP,但有几个警告。 首先是在TCP连接中发送初始数据包,这将引发来自具有开放端口的服务器的响应,但将被视为连接尝试。 理想情况下,你可以使用“回声”服务(TCP端口7)…但实际上你不能,因为它现在默认情况下被禁用。 无论如何,如果你可以让你的人在你想testing的机器上启用它,程序可以使用它来检查TCP连接内的数据包的周转时间。
这就是说,你可能在你的机器上安装了“tracepath”命令。 它类似于traceroute,但不使用TCP或ICMP,而使用UDP。 对于TCP有各种实用工具,你可以尝试hping 。
ping的替代方法,可以使用'netstat'
选项:1.netstat -antp 2.netstat -anup
-a = all,-n =套接字本地端的地址和端口号,-t = tcp,-p =程序
-u = udp。