|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度? % h4 D' @8 W3 n* \
Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒 3 T4 O% _) ]4 l) S# g( V
2 I$ ]" V) O1 q4 E. _5 p2 |+ u0 A
我们先来看看它有那些返回数据。
4 i& S& m% @- |4 }% S0 x" E) q" p& g
8 w) p; x" {# x* t: g$ D' w+ j- V Pinging 202.105.136.105 with 32 bytes of data: 2 q( ]2 z% J3 b; G ~% F! c) o
' z7 q7 |; k0 d9 c# b4 e Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 ' v' q- d, M" I: F- c4 }, F1 M
) Y B3 F) h$ ~( ?, l Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 . z" j G- [4 k) X/ c
, R; l( d0 C& ~+ F7 E7 {( v Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
0 z& N7 Y( r- n* N9 {+ {' H
1 ~. q/ {4 I. O1 ]8 S Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 N5 g( ], D6 a8 ]6 d+ R
8 |4 N" d6 [: z7 q$ Q/ [4 B- K. T p
Ping statistics for 202.105.136.105: $ ?: C6 b' A1 i, w
/ S2 Q6 w7 w0 W Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
" h8 q. x8 A+ }" Y4 `2 c% s, N- i, e& K N# O5 E
Approximate round trip times in milli-seconds: ; W7 o: V6 [7 B
; Y6 m9 i% ~" k5 j1 R; s3 j
Minimum = 590ms, Maximum = 601ms, Average = 593ms
& l+ t# x- y8 R, y' K! A. q+ u' I: k+ B
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 , i( S" t% A6 ]
- P5 M# K! D$ T: y2 n5 |; U
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
$ n# e5 d, {* B1 N1 D
' P: F- ]; d; l3 A4 E 从上面的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是因为我们还要计算它的往返时间)。
( }( @6 R# D6 ~" `+ j
) t4 w+ t% a! a# l 我们来测试一下33600 b/s的链路:
1 w6 c* ?: R8 N. B# G+ P
, J6 A/ s# W# q8 m) i+ n Pinging 202.105.36.125 with 32 bytes of data:
( s" `8 [7 |' m1 B u e+ Q
; |- b0 S5 u. h) A, T" T! D Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 $ e) E; ~- F$ ~8 U( A& R
1 I( E$ X' V! Z1 a" m+ h Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 0 H V) Z# C1 K( Q
. V" Z. ^; ?& o) ~( t
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
4 A% S) j+ z( I3 f. I' G: `
+ K8 K: Q! H2 j* b4 a& L3 z: f4 v Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 ) M8 m& K9 G2 u/ p6 V. `9 U
1 q7 Q5 x/ g+ j6 ]' j Ping statistics for 202.105.36.125:
7 X3 O W3 t! h& ^8 }9 x+ \7 H+ W$ e) ?% X0 B4 ^+ }' L
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), # K3 b" }6 s! ?' {- u% X
! y8 m1 K3 A' y& S$ w: j& b Approximate round trip times in milli-seconds: ; E/ i1 g2 W. G" ]9 x( T! @6 ^" Q5 p
3 G% M; `8 s* L' r- g
Minimum = 415ms, Maximum = 421ms, Average = 417ms
4 n1 z: s2 E/ d$ e
' A' Z0 n4 K- i! K2 p% [( h 看是不是差不多啊。
* w& q5 |* v* y+ z
( u/ k2 Y+ V7 f l 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
. A: B% _% a1 M+ N. c* @, u% F6 ^3 u
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 2 E! \, `% o, Z. I! z5 H
9 T; Y k5 z$ G! f4 H; e
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|