|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
8 J# |; w( b/ h+ Y7 Y" { Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒 1 S2 @9 s' |: U$ G5 T8 x. ~
' x2 d5 ^. T2 w% b9 t 我们先来看看它有那些返回数据。
/ u' d" g$ x! E3 C. ^
& H5 H4 R) _' P9 z Pinging 202.105.136.105 with 32 bytes of data:
7 `6 }. }, w6 W: I* w% j+ C4 w
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 ' `! K/ \. w2 v( ?
' t% X8 Y) B( f1 V" a) e
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
- g/ X. C( n5 Q- p' J3 K5 u( K$ b n: `5 s- U1 Q1 r% Z0 h
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
7 u: M. K5 S& g1 z' [9 `/ m( ~+ p3 f" g D, N" w2 q: S
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 0 c [% g8 ]" w* h
6 l$ H/ ~+ m+ p c3 ] Ping statistics for 202.105.136.105: . h4 @' x& a9 J- Y( ^, I0 g4 q
& E1 s, @- q: ^2 v+ P( e+ x
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
5 A$ M% H" Y+ m+ {9 q$ i; v0 |1 X
# N* J" o, ?* t" g6 a% b. B+ R Approximate round trip times in milli-seconds: / g8 X) K+ E4 p9 Z
) ?& W( s* J0 n* u7 q/ t0 |% Y
Minimum = 590ms, Maximum = 601ms, Average = 593ms D5 L! {+ ]( d& L
* ~* l( U# \8 |0 I) R9 W& u* z, f 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 5 A3 f- B1 j- |. O: k# ~
5 ] f( ~: S1 C2 d3 w7 y
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 . @. |) T& s2 S0 G: B/ _" \- b s
" T* O V' y* A3 V1 v5 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是因为我们还要计算它的往返时间)。 5 A: M( K6 m3 m/ r9 u
$ n: n$ O o( b, c 我们来测试一下33600 b/s的链路: " ]. L/ L9 F% W8 X) |8 R- B% B# E
& ~& o, o0 p) F" R
Pinging 202.105.36.125 with 32 bytes of data:
% F) `1 m1 q1 X5 b: m' C' c' _1 c
: m; f: J. {1 I Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
$ R4 G8 V( V3 i" b
1 v' l/ e* y+ T' k. d: P2 \! v Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 ( T P% [$ `/ ~4 J/ C
/ ^) Q2 b- u) R) ^2 p" h Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 3 x4 q3 P* o% r" r
0 Z( p1 G' C$ y- u0 O
Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
8 i. u3 x1 V: l) S) h
- m# y4 l+ j( j4 }3 d Ping statistics for 202.105.36.125: 1 b/ {- J8 u4 g" T7 ^/ E
# K5 Z& T1 E" E# d1 x% Q Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), # E: i- F" m0 O4 _! P1 _- t$ {
, u& G4 b* D" x Approximate round trip times in milli-seconds: + T) B: |8 b+ k6 b- \
/ E8 s. k8 t( i( j% V
Minimum = 415ms, Maximum = 421ms, Average = 417ms ! x* y& }' y8 D2 [! b. I( S
; T/ Q: J( }% G V
看是不是差不多啊。
, |% C% M) p3 T5 p
1 V" G( W2 `3 u% U$ \5 I! X 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
, L6 f2 y% E* S3 K" A4 n5 K" V S
, j9 U. f" d: N+ R3 t 还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 : v* L; Y5 C' U! X
7 o y. ^- n& k7 y5 M8 x" @ 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|