|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
$ c" w' y, y# l3 V; N: A: A3 f* e' } Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒 8 G5 R- G: c4 c; O/ S( s% S
. @7 |$ ~' C* O% \" K+ T
我们先来看看它有那些返回数据。
. W; a- C! ]* K r" l4 E/ _8 F. M- @$ s C
Pinging 202.105.136.105 with 32 bytes of data:
8 _& i* b. o) o
' k L# a, l% ~+ h9 I Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 % }! ^, S* A$ @3 V* d) A: z* x* U
; Y9 J9 O$ |7 i H Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
9 _- w& o9 C8 @& S9 W8 J9 C9 l9 a! L3 {) Z; Y7 J5 j6 h5 {# h
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
+ l1 r$ v7 N, e% W# b a: q+ u% B. @$ a# ~8 Y
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 * N6 g h8 n# D( W, P
! L, N5 h7 P, S+ a+ B5 F+ M
Ping statistics for 202.105.136.105: ) n. ]( `# a; T
5 X$ U8 o7 T% L5 W8 }, K2 ?
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), , M V7 c+ b) Y* G. M' o S' C
$ L" a: l, U0 e9 s# N Approximate round trip times in milli-seconds:
3 w3 q) n+ r! `3 p
0 s, o. s' ~2 [ Minimum = 590ms, Maximum = 601ms, Average = 593ms + X+ g Z- N/ {7 r) D2 _, l% I
. s8 X6 T5 d" l- X9 } H) U
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 : h) [$ B7 W7 {1 `1 ?# M5 m# {
|0 Y7 R4 X3 B( B$ u
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
* v1 e- l7 |+ { c& W/ }7 N( O0 v5 ]( K9 O' e' B) k. v/ }' g _
从上面的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是因为我们还要计算它的往返时间)。 2 J4 t K* T3 j) A0 a. Q; ~
- M- |: \& [" l& _; K1 ^% V: @0 d
我们来测试一下33600 b/s的链路:
9 |$ a% a+ W& m% }& {2 R2 |8 G. d9 y; d+ }
Pinging 202.105.36.125 with 32 bytes of data: 0 }$ ]2 c1 l% n5 W8 t
; ~8 s: N- z5 V. Z0 L
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 & V& \( x7 w$ m. a4 I ^
x- M0 r$ \/ A3 w0 ?4 S# ? Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 1 V( ]. M. Q9 {
9 ?# B5 a+ Q' T; y# x* w; n4 B
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
( g# u0 t2 i# x \5 Z* T* G$ A6 v& Y# Y- t2 I1 F: y" t
Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 " {) M4 A4 P, ^8 d& X0 c2 n$ y2 K
. [9 Y; D. f0 r) @) }. o
Ping statistics for 202.105.36.125:
( c, c0 f0 ?( f S k$ O0 Z& m, s$ z) v2 x6 ?
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 5 Q4 y' `3 D4 Q+ c- ~2 F
( v0 F) j$ R1 F1 g7 q Approximate round trip times in milli-seconds:
3 D0 M( f4 U8 Q6 _: `2 A
- g% j- o. } p+ l Minimum = 415ms, Maximum = 421ms, Average = 417ms
: x, S! k2 x( s) }* l# \
5 P& g& b* h6 O" H: n9 S 看是不是差不多啊。 2 d1 b1 P3 y; L- r
3 t6 G: n7 [+ z 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 6 b1 {6 d5 b. {# Y' q8 f
( L1 H% z6 M6 w, Z% J7 ]+ {2 d9 p
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。
9 p' C+ v& b; I' t# c! |
0 _! r( o7 R7 ? 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|