|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度? 8 [# i0 s, w, q
Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
: d% Y( j7 F( q. @( t
6 d5 ^% |' m* e9 r; O 我们先来看看它有那些返回数据。
; N+ S2 t1 U4 B& F% `8 M0 ^. i4 w1 l
Pinging 202.105.136.105 with 32 bytes of data: m8 X+ T) ?' B" O# a; P
$ I0 s% L. O$ V) R
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 + ~1 @" t' |% ^+ y- H3 Q W( @
2 i4 n( T5 }+ A# k" u
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 % F# L! `; a# I
# J) C1 i8 \/ \# P! J; N) R2 a
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 * e$ e& E8 I4 ^, e G
' S: k4 `* y0 M( ^3 e3 ]8 \' ^( _6 s9 E Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 * R% _2 J M( ]1 N3 X) A% B% C- T% B
* S9 Q. s) M: d' w1 J2 p4 V Ping statistics for 202.105.136.105: 1 x+ ]: U* }, _4 i- _% Z
z+ }- G* s$ u% {8 I2 B: ~) i0 F Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
& p' h9 m5 e6 c$ b3 G4 F" |2 {
5 F6 K! V, p( X& u6 L Approximate round trip times in milli-seconds:
$ T ~1 Z5 ^$ A0 @, T' t3 f$ r8 k4 p: \
Minimum = 590ms, Maximum = 601ms, Average = 593ms , a8 A5 X Q8 C* l% ~" r: s
6 ]4 _" p( d- S8 g# t+ h$ h 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。
& u) t" Y+ Q; z, b- \, ` k7 }& a# z
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 # p- c' ^$ K3 |; j8 l( }+ D
/ h4 a* j: A5 j$ a0 y, l8 {1 b
从上面的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是因为我们还要计算它的往返时间)。
; d B. S; V/ C/ I- s8 w% n* a* s" ~+ ~6 m
我们来测试一下33600 b/s的链路:
" G$ P# d5 U( R9 I& I, P
$ E" r. Y3 U) Y Pinging 202.105.36.125 with 32 bytes of data:
* K) d, Y; b' L6 ?8 E$ f- u( Y
! r, k& g- Z9 t( m' ^/ { Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 ' K# n2 J" ?! P, D) B+ \
, ^9 Z( w3 g+ _1 C3 P" a7 f
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
3 A3 S5 u8 g* i# U+ d3 I" j0 T* g
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 - f, W* i. P. F! Q6 r. C6 ]5 H( g' d
4 ^! i7 V/ z" ^2 k c) p' y% L Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
# i; ^4 I" g% v2 K
) Z+ ]7 R6 e/ B% {* K3 \* `* e; }1 u Ping statistics for 202.105.36.125: , D8 w, c+ [7 G+ P1 N, q
2 A8 w0 Y- m' ^6 o9 ^ Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 3 Q# ]2 L; S( `- W+ V5 l
! j0 `7 q4 E( K) `! h( C Approximate round trip times in milli-seconds:
. q, ~9 u: e) F+ u7 c( L! W
% U# Z: W* [) P& `/ A( P: `5 q8 A3 S Minimum = 415ms, Maximum = 421ms, Average = 417ms ! m" G3 n- X) `0 o3 v' ]. D! ^
( ^. K" a! Q& R) N 看是不是差不多啊。 0 I4 t2 L$ C2 n T) G" i
( w* K2 w9 O3 Z; [+ }- M
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 5 E; `1 q. ~! z/ z: |/ T
. ]% D0 y7 M( u% `% n( Z' A 还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 ; D9 }" F6 z, F4 ~
1 k( \4 P' |5 q$ E4 v9 A 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|