|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
$ a* ~ ]9 h$ d6 R. k( w& w Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒 # b! ?; C6 e1 A
/ x3 l. }% I- f/ @7 y
我们先来看看它有那些返回数据。
; u+ [4 ~3 s, a% _% I8 B6 h. G
& \9 ]7 \$ L! A Pinging 202.105.136.105 with 32 bytes of data: * s3 I1 s& j2 a D
3 Z: H' u$ W2 N! J
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 7 m% ?" F8 p p# Q9 D
* Y# E4 P8 r6 O l9 I4 c
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 $ ]% j$ j, b7 V. J3 j! i
2 Q( X3 {5 f& b5 |/ z. y Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 5 A, q$ [$ x+ d# |3 X* Q, \ m- g8 }
& _" w$ y. `; b9 ]
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 ' T. [( S: S7 f
6 M! Y2 l$ L4 r1 Y) g0 F# N& T Ping statistics for 202.105.136.105:
( b2 C" `2 L: X+ I
8 H& p" {: v8 _7 { Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
* T9 K/ j$ W9 z. `6 S
1 f' T) @0 t9 O Approximate round trip times in milli-seconds:
9 _% B( G% {* |- h: m5 f# I- i
3 n8 d1 l( z( g Minimum = 590ms, Maximum = 601ms, Average = 593ms
& `/ U+ V0 x! c v, u' B; z" |, L- P2 |% `: i+ n' w
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。
" D- t+ b4 `. ]+ J7 I( q7 @
0 @3 o3 O# {- q1 H! N 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。 3 ^" q9 u- \8 P
/ D& U- a _. r; a' P 从上面的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 P. K, b) Y4 `7 W/ D
# I- N& @( v ^) S2 H9 W+ @$ a+ ?; _ 我们来测试一下33600 b/s的链路:
+ L1 K: }3 i7 ?- j) G% z! M1 c1 U% J
& v' q! V& }* o% \3 ^8 Y% R1 [7 T Pinging 202.105.36.125 with 32 bytes of data:
5 S& R$ d7 X6 Z7 X+ x; e7 R( B* Y5 x; ?; g, D2 p: B
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
1 o0 C. N. w) q O0 ~ y" c0 Q" P1 E; _, {, X
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
. D9 P" {5 s# _7 G1 s6 B, D6 ?) H Y1 A2 A0 L* q$ B
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 * s) ]" x. m1 c# q0 i
2 }. q. z! x7 F! E Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
u4 G/ k/ x/ \2 q5 Y( `: M6 x' i) D5 `, ~2 G
Ping statistics for 202.105.36.125: 3 u1 p# c9 N4 `. x' X c. d
% R. v2 k& b0 k. k- Q7 S7 q2 T' N3 W
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
6 }& P2 T3 r" ?/ w. r0 K0 w0 { @- N, C' C/ h2 t% b/ k
Approximate round trip times in milli-seconds: 2 }3 T# E4 e5 S. [0 [: s: K
1 p% y; s/ E6 N3 L2 I$ a. H9 a
Minimum = 415ms, Maximum = 421ms, Average = 417ms 8 |, @4 ?! e+ y8 r7 q" x! f4 x
6 K' O0 q5 F: | i* c5 u, k* c 看是不是差不多啊。
3 G& |# o/ D) q9 F: X0 E! `0 w
8 U, r# `" N3 X' n2 N+ h; B5 b 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。 0 k0 ~$ {7 V2 K ~
& y0 H2 c$ X K
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 * n7 O; N' F- x
/ @8 ~/ F$ i4 a# o: V9 s
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|