|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度? ; l9 r( Y8 U# N
Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
2 A* w- N/ q2 ]5 h5 ~, `5 k7 g
: Z# U4 L9 u2 p9 ?! M" ^! N' N 我们先来看看它有那些返回数据。 . O" W) e# z* V9 \/ I! _( Z
; t( `, o% b8 l, G( T8 M Pinging 202.105.136.105 with 32 bytes of data:
- c& b( C4 q' ~8 m: q) t( T
' B5 }6 s' f7 K3 G Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 3 Q5 [7 K+ C5 b3 q
3 V- H6 r9 I6 O& l- o& q2 v+ ? Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 , _; ~: r3 F& d: _* @: g* v
. v7 J4 V. i3 I) O6 n( ^" ? Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
/ K0 r7 s$ z6 |' S7 @8 H( a. z* Y# T: f6 p' j: F) y( b
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114
0 D) m: ]6 c% r, y4 o1 [; o$ q9 o1 W" H% Q! i# G3 ~/ q
Ping statistics for 202.105.136.105: ^5 _' t* z+ c) m! X& N
1 P% T7 B. I+ V% S. I Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
, |9 c0 D. \. q9 ?% {1 D. z ?0 x4 [
, w& _. v4 _+ t4 x Approximate round trip times in milli-seconds: 2 ]. e; A( O: v" @2 N d
9 }& q) [5 D; _1 b2 Y- u/ I
Minimum = 590ms, Maximum = 601ms, Average = 593ms * K1 D3 h3 Q: @2 X! G
. Y$ u: @( c. h+ v; u5 H
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 + ?# L% C( `2 |$ W
! u% S% P( Y6 o w8 e) O& r& C 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
$ _8 S# j) h% i. H W# {+ j; k- M; ] B3 D2 J
从上面的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是因为我们还要计算它的往返时间)。
0 \; o. X: q v4 M3 j$ c+ h* J- X+ A
我们来测试一下33600 b/s的链路: 0 @9 Q( z4 ]. g
' K- I6 `: a A3 W: j
Pinging 202.105.36.125 with 32 bytes of data: . }% i& A$ s, m
& i! I" E8 R& V6 f& N0 S% E: ^ Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 ' g) y& h+ ]: U2 a
: W' h+ k4 z8 [& H
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
' O6 L0 s8 S3 g
( o c9 \- R% G, a9 m! r+ k Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 . x$ M) `7 X9 B, g3 t
$ l5 s, L% I* e1 L
Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 ! A; ?) _1 t) A" f& B1 G
! @% @# l8 \3 a1 T1 r8 q! F) I4 V
Ping statistics for 202.105.36.125:
6 i. D4 C; y! c& m9 M' t, b7 K' C& n9 M9 P
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
& L* q: s L+ T( X V p# s" b
0 E, a% v* ?$ Q5 D1 u- E Approximate round trip times in milli-seconds: : ?0 l% G6 y5 Z
/ t0 R* \& l- X3 Y) H Minimum = 415ms, Maximum = 421ms, Average = 417ms
E8 k! ]$ c8 C2 w
1 k- J% ^+ s/ }2 z 看是不是差不多啊。
3 m7 s! C% H) i7 O1 B; f5 x) k4 Q8 T" o }! I
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
' R M0 z7 S% \! F5 _. d# e! [" |7 P3 A; E; j
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。
* e! {2 ?) x1 ^4 @; X: V4 M1 ?4 ]/ E' W% w
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|