|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
+ t! ?& d% [& r Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒 R; H; @5 M# j2 i' w! c
5 Z6 O8 d" b2 _# Y: u/ s5 q
我们先来看看它有那些返回数据。
9 A: s& @+ O; j) b( F8 ~
w' ~7 M* Z) a J& C4 F Pinging 202.105.136.105 with 32 bytes of data: : W3 O o3 Z4 ^+ E
8 Q% C& u. B" L) G9 {
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 * o0 k& a/ Y9 O) X* Z! D+ N7 Z
) y0 [' i6 \) d/ \1 }% P7 d' L+ I
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 5 N8 e1 X' L! F1 t: f
r+ W5 V% O0 k2 J3 n: K) w9 W0 O8 i Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 : l# ?: m9 ~5 U& x& ?0 ^/ D
% ~0 o& z- L3 w/ w" e3 _* {7 u Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 ' L9 V$ s3 l* Y* {1 E
. C; M9 T6 \7 j' W* G Ping statistics for 202.105.136.105:
/ h4 V+ f$ b* \
5 g" n- R4 `0 y* L/ N Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), ; r( O$ y! J7 p" J2 o
; f- H+ J% l! q+ c- e Approximate round trip times in milli-seconds:
3 p) B3 u( ]4 s' b, }0 A: j) a/ @; T4 h
Minimum = 590ms, Maximum = 601ms, Average = 593ms 5 h1 ~! d7 V0 } W/ V9 C- B
; W/ V+ m; l+ U
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 4 B7 a' C# R) N9 H3 r' N4 e1 I
0 N; H3 g; e) R8 \' y2 W) P& {2 s
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 % u4 X1 C S! s- T7 q
# C4 ~" D2 C$ N7 U4 I( m7 P 从上面的PING例子可以注意到,默认情况下发送的ICMP报文有32个字节。除了这32个字节外再加上20个字节的IP首部和8个字节的ICMP首部,整个IP数据报文的总长度就是60个字节(因为IP和ICMP是Ping命令的主要使用协议,所以整个数据报文要加上它们)。另外在使用Ping命令时还使用了另一个协议进行传输,那就是PPP协议(点对点协议),所以在数据的开始和结尾再加上8个字节。在传输过程中,由于每个字节含有8bit数据、1bit起始位和1bit结束位,因此传输速率是每个字节2.98ms。由此我们可以估计需要405ms。即68*2.98*2(乘2是因为我们还要计算它的往返时间)。 - b1 w, i, l! Y, p, ]) h
+ @/ b+ \' l- L* q+ d# T
我们来测试一下33600 b/s的链路: $ g( x4 N$ F, C7 B3 n$ f& i
) d& v! b9 U2 U4 N8 ^, W" u8 n Pinging 202.105.36.125 with 32 bytes of data:
. s& [2 h+ q, k* ^
4 B- H- I6 T$ g7 k, G# A- e. i Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 7 w6 v$ C& p- ] e0 Q1 X
% e# K- Q- b6 H8 n; @ ?. w Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 9 D. i# w! h: v7 G2 o
, Y5 M( }0 b8 j; L$ [
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 ' R) A/ c% ~1 z; u
" z+ z. B) k( I8 V# G Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 * P/ b# s8 W$ y: |' Q0 t
) B( i7 ?8 n# ~4 n+ I Ping statistics for 202.105.36.125: 2 ^' p6 O" Y, {5 }1 @+ Z, p1 S4 ~
; M' |7 A: p2 |) H Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), % |* c: r% c! Y
+ n3 B+ ?5 y B2 e7 m& v" p+ d Approximate round trip times in milli-seconds: $ O( ?# \6 m" m1 s
. @2 S! T. s- i7 r8 b" {# r
Minimum = 415ms, Maximum = 421ms, Average = 417ms * u4 v8 n7 R2 N" Y r4 m
o" ]- Z0 R# T3 M1 A 看是不是差不多啊。 1 |" N* i$ j) d1 [4 C2 Z0 C( M
2 F: m; W" g1 U U. t$ `
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 ' W, [$ ?+ Q9 h5 F+ `
2 z3 [6 a+ ?* V" e# r
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 & ^7 j( W$ I0 l1 f% }1 H3 N; t, ~, q
: n- I8 n; S# O) @
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|