|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
如何用Ping命令来判断一条链路的速度?
7 Q7 j$ _+ q3 M4 e7 U0 C Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
5 o$ A: d$ O" X! ?4 R3 H" {; e: h3 R9 M& G& H) V) ]* w* B0 M
我们先来看看它有那些返回数据。 3 y* A+ q2 h) a: g4 ]; e. K
5 x8 x& [9 o1 g" y7 q
Pinging 202.105.136.105 with 32 bytes of data:
8 f) }% d, m' W: X. A; ?1 p% O3 N0 M& {$ s& ? w7 g
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 * F" N" `$ u) q2 g4 g6 K7 {
, A$ x( ?8 C; r1 a( J/ ]
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 0 I1 D3 C, \( y" L0 e6 ^5 Q
, S3 Z% f+ o* a& f$ G( [/ V6 ?% M4 W
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 # s4 e# F7 g" P `: k$ c) P) b s9 p7 J
7 j. t( V# y5 W9 g) {) V Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 ) x/ `. g& m# g4 Z7 |
9 X5 d# z1 `1 Y0 H, N Ping statistics for 202.105.136.105:
/ l1 V. B }( j! K: P ?% n5 [+ d* q! d
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), j% d% l* [) C- J4 X
( W y- h9 p3 M8 _' O E
Approximate round trip times in milli-seconds:
9 q* b3 C! a$ \8 @4 G( W5 S
' t: B& H( [) N) O( I5 l% t Minimum = 590ms, Maximum = 601ms, Average = 593ms
a) j# P+ }: h# b* q6 C0 X& j) P6 I2 C% c1 @/ K z
在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 3 D1 s1 }0 n) N' W
2 L% V% M5 G0 L5 k- g
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
" v" D7 s* z* |5 F- R- }4 l2 w7 A
从上面的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是因为我们还要计算它的往返时间)。
1 w; _+ ~' J, q l8 ^" c- R4 Z2 j% T7 m% I) x, D7 Q
我们来测试一下33600 b/s的链路:
1 e6 {" h5 h3 c- n" Q
' q3 r1 P5 X+ r, {9 V: o Pinging 202.105.36.125 with 32 bytes of data: 6 \0 W" ]) B3 I7 A
2 a& ^0 o* j7 A* q' E' h& x
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 / X {. W! D5 N" n; I
6 O" }! q- V" R: w; S. f$ r7 { Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 1 v& ^% l: M* T5 P
8 i7 L2 y1 u+ ~8 F$ x5 _9 p
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
0 ~- o$ \& w6 C% y, p* @5 ?8 F/ J5 Z/ s6 S
Reply from 202.105.36.125: bytes=32 time=421ms TTL=114 : ~ X9 Q/ ^. A8 P( O
( P6 ~% Y" {8 `! \; { Ping statistics for 202.105.36.125:
. d0 e' d7 V3 K1 L1 s
" W6 h8 L, Y. K Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), ) W# ]) ~/ A7 b2 s
1 }( q) r# O' D: C; f Approximate round trip times in milli-seconds: * ^ c, v* t j- ^# G% C
l( A6 t+ _( D: b+ [1 {% k$ ?& O
Minimum = 415ms, Maximum = 421ms, Average = 417ms & V9 {8 u$ g, u+ S6 F5 h) ]7 O% ~
?! g/ ~% D$ R2 M" {* f: F, U
看是不是差不多啊。 ' Y& _5 _. P7 g6 T! F) j4 F- ~- m
' O% h5 y2 y: Y 这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
- k9 u- Q3 a2 O8 T/ B' F; q# R' ?" p$ B& p3 p, x8 e
还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 4 `: \$ }8 n ^5 r+ j% Z7 Z
5 N$ r. b: s& d8 j @+ h6 Y
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|