|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
如何用Ping命令来判断一条链路的速度?
! S0 |9 x" `# ]8 N Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
" R* M6 S/ ~ D) ]2 t
* e5 i% t1 T/ X! K; A" f 我们先来看看它有那些返回数据。 4 @: s w: @7 b3 A( h C3 G9 Y
. S1 D, K: o" D& m- y Pinging 202.105.136.105 with 32 bytes of data: 6 o3 R1 T3 Z/ E" j: `; g1 J( |. @! A
, ~# j$ l" p5 K4 I Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 $ P8 }5 J# r) J; \# b
9 A+ m$ y6 m- d+ c6 @8 D. H1 C3 k- w" F8 [ Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 # V% r0 h. y% |6 ~+ d& {
U1 c# V/ x# z3 W
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 ! F! T+ b# Z) _8 P0 I
0 v( ]) e- r& L) d& L
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 9 W6 Q! r' l0 @8 Z) V& I5 r
. J9 v: B; s1 J/ M6 V4 d8 }4 A Ping statistics for 202.105.136.105:
* V x' p P* q- N5 j
& p/ P9 M# ~& _7 ?( Q6 C Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
. K' a" _# W2 G$ C
. z% p5 R1 M/ I/ u Approximate round trip times in milli-seconds: 3 M9 Y3 h; D. g6 F
, \& F4 w! w8 V( b" G) ?* j+ e
Minimum = 590ms, Maximum = 601ms, Average = 593ms 1 O0 @- D+ }1 E" P: A) q* h
, ^4 Y# ?1 J z+ x
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。
9 D* a( u* c" @7 z
/ B$ Q# e! `# p$ h 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 ! Z5 p/ q4 L; h) ^ m! h
3 i$ m; v) o) D/ o( i, ~/ w N
从上面的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 ^/ F* o' |) J3 V& J: ~, l
/ M/ f- \3 O+ f5 C* X, { a 我们来测试一下33600 b/s的链路: , r, g( G) _: N' X& Y' v g4 S8 U
9 V. ?' P! ]6 K) G6 _
Pinging 202.105.36.125 with 32 bytes of data: % z% q2 r1 v$ U5 R7 w
& p! a2 } {! r; [2 U Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
4 O5 B+ X2 q5 w+ |8 T- T4 S, q7 `+ g% ?! J8 G# P, m* M b
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 6 m. w, i5 V7 U2 @8 B
$ g+ g# K7 F/ @
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 4 d; u) E) l4 S
% A! s( X2 @" X9 d
Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
9 `1 C1 W N. Y$ ~" G* K% y8 e1 O. `& W) A- s4 q" V2 ^7 R9 R' I: E
Ping statistics for 202.105.36.125:
/ s1 i% P' X9 E- v) J2 g& M+ ]/ C8 S1 K: i+ N
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
& R- i) n1 `( g
/ j; U$ Y+ s7 l0 D* g1 L Approximate round trip times in milli-seconds:
* a/ \2 W/ D/ v; @- H, W$ p% ~1 g; W! x" d* g3 `/ }+ ?
Minimum = 415ms, Maximum = 421ms, Average = 417ms
% F5 e+ r' L5 ? ]6 |6 Q# s2 Q" C! B9 P$ @5 V/ a
看是不是差不多啊。
: I3 s4 @7 j& c9 }+ {" x! ^3 D/ i2 {7 q
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 " O1 B) R7 Q R0 T B
' U3 r8 O( `( n0 _6 X( { 还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。
( I; j+ A! C! `3 S" z
( E; Q/ j7 [8 z8 H3 l0 @ 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|