|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度? $ B! ^# m7 h) @6 {* G' z n- A
Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
2 m& X* ?' P0 z( |
* G+ ?1 M1 f2 G6 g. m/ A 我们先来看看它有那些返回数据。 . g+ E9 g) e# n7 T; M
6 u' L. S, \& l
Pinging 202.105.136.105 with 32 bytes of data: ! c, l2 ^. p/ V {; A
5 C. o5 w7 }% S9 H& N
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 ' ^8 P6 d' [' f( K8 u
) R v( k. I( F2 \3 e Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
! \$ w: p4 B: `" C) |" D, S+ X' I- s; i
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
9 P) K+ B* P: o2 `/ I. O' c3 I2 }5 N1 C+ e, U- b. b
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 ! I+ C6 J" w/ G F) L
6 \ k% h g, K# \1 D
Ping statistics for 202.105.136.105:
- w: ~1 i& L6 x" R, b" D5 p
5 s' e8 ^7 l+ _' c( O Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
. A3 h7 o2 q( j1 i. R/ h6 H3 q) h/ i2 x, F" U" V+ I6 {. P7 H
Approximate round trip times in milli-seconds:
- e7 `% }+ J' b5 j* `
4 b( d3 M* N3 t6 k- k Minimum = 590ms, Maximum = 601ms, Average = 593ms
- I- {5 `2 {% ~5 O- W% ^9 S0 d$ Y8 k
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 9 I2 A- V5 Q8 p, f M K) K, W3 A+ x
, ?1 k: f; x* z8 T# ^' x
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
2 n, S9 d# R+ }! f6 J) d0 R
6 m' K# v6 i! R. P. s8 L7 b1 ` 从上面的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是因为我们还要计算它的往返时间)。 * K; t! _8 T6 f' f6 _2 r, W
! B+ j9 {! x8 g3 }5 m$ X+ c* Y7 o
我们来测试一下33600 b/s的链路:
3 I4 i0 D# E& ~* r0 t$ @8 [3 r1 V. \/ Y4 a
Pinging 202.105.36.125 with 32 bytes of data: ; f2 T; X- @/ Q% _+ T) R
/ ~1 V" n# d/ u7 g Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
. ^1 n: Y/ i2 f8 x; O* w
4 z {1 y7 ]6 j6 @8 M* W0 v+ g Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 2 ~# D, H1 J% v
% ^' n( U" y; M/ q4 U+ x# {
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
( B- [2 O+ _, Q; d! O3 }/ Z+ m
- }5 [& y* R) ^% k0 ~- e: v Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 `/ {* b. _% F" {; B6 q
9 A# J* [6 Q' r! n6 c/ }, z Ping statistics for 202.105.36.125:
5 J* T8 l, ^/ g2 W$ J1 ?* g' a
% x+ n: t& g2 A8 K% t8 f) P Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 5 n' D+ }, O9 l
8 [# C) t. v# x& o
Approximate round trip times in milli-seconds:
3 f3 }4 I! G# B3 R' I% I q- N4 n% f4 j! W8 ]3 C0 U
Minimum = 415ms, Maximum = 421ms, Average = 417ms & U+ y# l7 b/ t/ w) u# F- f
1 y0 [8 `. Y1 o. d' D5 f/ e
看是不是差不多啊。
8 m/ ^3 g9 H$ @0 d
( U$ Z2 }3 I' z- A4 L- T2 e/ y 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
% l$ y$ O8 N( h4 Z: P7 _" l( {! n( }1 h, a: d1 S
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。
4 e Z4 V8 u" b
0 J; T2 y/ c. r 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|