|
|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
|
如何用Ping命令来判断一条链路的速度?
) [: i+ @, Y- t Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒 & U! k( p1 ~( a
, q- ?9 V0 E% B7 [
我们先来看看它有那些返回数据。 8 t) p; Y7 D* @1 N) u, W
8 ]6 d* M+ w% y% q
Pinging 202.105.136.105 with 32 bytes of data:
# C* J# s2 R6 `( E- h4 ?0 u. O) B" l d0 \& x+ i
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
" k" k% h! H% x7 @1 T
1 o6 [* A% S; [4 j Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 4 T& T- M/ A4 g- j% E( X+ C
S* E% o3 k5 W$ F2 |( m Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 . Z' s6 D [. w z
Y) u: ~% j- U! w- @8 M' @% z
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114 ( g) O6 t; b+ _! f$ C. y3 k* N5 M
. Q% m) x% ]) {7 _0 h% _
Ping statistics for 202.105.136.105:
$ V2 T- N3 {% ?2 Y( j/ y' o. t: f& C; }4 Q% v
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
. }8 n, J: s, u' V) C- Q$ {
' O* B* L1 `2 _& ~8 h+ ^ Approximate round trip times in milli-seconds:
5 G0 g8 M; V5 r. E9 ?1 j, S+ D5 I# Q- E
Minimum = 590ms, Maximum = 601ms, Average = 593ms
2 s& I) n, C' b& W' _
- }5 z6 c o, ~: M& T# q3 v 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。
: A; U1 ?, ~ p$ a: P b2 ~1 ^' [1 m9 h' p
怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
( r' ?6 o* P# {: \3 \
! i f1 z. O8 |% \! @ 从上面的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是因为我们还要计算它的往返时间)。
( X$ @# N. ~: X) E
3 C4 r5 J9 y' W$ v1 g" H: { 我们来测试一下33600 b/s的链路:
. {5 y" v2 m& i4 p, [4 p$ K, a* Y8 o$ v8 x) C' x; A2 ^& P
Pinging 202.105.36.125 with 32 bytes of data:
8 a. u! S" y# Z% X+ b3 @7 I7 F1 H' L6 G
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
' K( a ~5 x& K5 Z5 a, n
- v/ p7 f9 n, u# v3 w2 P0 ^3 i Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 ( y. u: K" x+ i6 n. t3 J
; v6 n4 z) T* p' V3 s
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 ( O% |3 i0 U; R+ M/ f7 [* c; Z
& h L; \2 f% g, k4 F Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
- ^6 a2 I: o/ @- Z
$ _, b) E3 O( y* u, D Ping statistics for 202.105.36.125:
# ~& N8 Y2 Q; Y3 D1 {" q' Q, ^% x& V! x: k. i! f: u1 ~4 X1 S' A! Y
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 1 }7 [0 P& A; U) H# g3 A1 E
9 B) {' a% i, \# A- G1 n3 U0 A) S Approximate round trip times in milli-seconds:
& h2 g- N; m6 J* F4 A' Q& U! @7 g. d% v( d1 e
Minimum = 415ms, Maximum = 421ms, Average = 417ms ; I# g7 ?( C" R- ^) e5 c
- n3 M& _; a& h# U7 ^7 S# | 看是不是差不多啊。 1 Y$ b: p" ^: @( W9 |; Y; E( f
; Q' V- L" ?9 j5 r! t5 V7 J
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
" b- j/ K2 l) w: M; u+ y1 R
7 d" {; Z j' |% b) `$ u 还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 7 f* _7 O" K; x, ~& O
# p2 F# y& w1 P$ b
总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|