|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
如何用Ping命令来判断一条链路的速度? }7 G$ W1 w- a% {: g$ ~3 T* F8 F: o7 b
Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒 ; }9 M0 e! Q/ \6 ?2 U' B1 `! C
, M- h2 G: H e5 a+ [7 W
我们先来看看它有那些返回数据。
6 X% X; @; e, P5 |
4 A( g, p' ]/ Q" L8 v7 t3 I Pinging 202.105.136.105 with 32 bytes of data:
7 ?2 ]. g8 w% w, W2 t6 m
3 Q# q! M+ A0 t$ P8 H# ~ Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
: B: p$ _* l. e8 x9 G4 |
; H: Y+ B0 @6 b6 T) T" j: R. N Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 2 G" ^% E6 I3 }' d# q) D! J
2 e; ?: A/ \8 K) P) K- V Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
1 v) k1 K- i( v& I" h* C2 K! k- i4 g. ?. ~; o
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 6 ?1 I" E1 ]3 N' C$ C
( u3 J) j1 x7 S9 d Ping statistics for 202.105.136.105: " Q; y" B; ?' B; `
8 \5 X. n% y& z5 M, \7 Y Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 4 S5 H- K0 e- k
) F' G6 V3 j9 ?) S# C- n7 G
Approximate round trip times in milli-seconds: ( F# Y! R6 C/ B+ Q4 l5 z& D7 T
1 @7 Q9 B9 Z. }# m$ a
Minimum = 590ms, Maximum = 601ms, Average = 593ms
2 ]8 {" H/ z5 y; H* k0 u) ?$ Y0 \
* d9 \7 L2 U: D: [7 X9 G 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 . `8 p3 @) m- r
( w! W1 O* K" d6 B* z* Q 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 $ r7 B2 Z; m; ~ |
+ H2 l9 R+ X* D" X* \
从上面的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是因为我们还要计算它的往返时间)。 8 H6 N( r3 P! i1 u
& Y' r* b3 ^- d& E) U, o
我们来测试一下33600 b/s的链路:
2 j3 K* D, X) p$ R& E) u. e
) x8 M! q y, L* _ Pinging 202.105.36.125 with 32 bytes of data: ; M0 h+ J9 v0 p& u
& H, Y9 B& _6 q, `) G' E- p- n Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 ' R. _- X3 g3 y4 {" T- o9 x
$ n! J; c$ s* M+ G' G2 I8 x
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
& h5 S8 l* S( c( _
2 G. E6 U3 c* o! ?% y+ J8 \' z Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
+ B2 ~+ I0 N; A! z9 z* a
! F$ j% A9 W$ m# p8 J8 U* V, ^( Y Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
& m) Z& J/ ?* [
& \3 D; c. S D# x+ m+ H Ping statistics for 202.105.36.125:
# G' K( |! a, K* v3 S6 l9 P! s
" e) L7 v' B2 d- G Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
! C+ t7 v& H0 o& s5 y& {
6 l# g7 J2 \5 E& I$ Y$ ?9 f Approximate round trip times in milli-seconds: # P# y# ?( A3 D; e" j* ?
- q# v H. r$ p, B$ \ Minimum = 415ms, Maximum = 421ms, Average = 417ms 8 b' p& \1 {! z( M& k2 F# P" f2 V
* c# h# K3 L, i( v 看是不是差不多啊。
1 c+ y; {2 n, O. A3 q+ h7 m
5 i9 M/ Y+ X$ F1 ]8 t" E 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
8 g& w+ `% v- U8 d" P3 D& D' G* x3 G) s3 i9 o8 A" s2 Y
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 & X. `1 M. {- z% l7 q+ w
8 N- v Y4 _( ]$ S* q1 C 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|