|
楼主 |
发表于 2009-1-30 02:49:39
|
显示全部楼层
如何用Ping命令来判断一条链路的速度?
2 q5 C& z( S% f' C: z4 b) Q3 t! F Ping这个命令除了可以检查网络的连通和检测故障以外,还有一个比较有趣的用途,那就是可以利用它的一些返回数据,来估算你跟某台主机之间的速度是多少字节每秒
* V7 r% ^2 R& J4 V2 \8 o
. d4 d# [$ y7 b5 N 我们先来看看它有那些返回数据。
; }; P+ O$ p, i- O4 V' h
* b3 j) s; x% f! r9 d" `& n Pinging 202.105.136.105 with 32 bytes of data:
" u" `9 `, O$ _
8 t9 m R8 E- U$ [/ L/ d Reply from 202.105.136.105: bytes=32 time=590ms TTL=114
1 [3 K# V- `/ h! h u. ^# b0 @! J$ [/ [5 i( ]( t
Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 9 F: d: p0 |. R/ h$ H0 E8 g' i0 u* s
' }( g0 Y4 g9 E) R1 n Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 ) C- [4 K) n2 i
6 `1 R- D% c7 q- M6 c: p4 l1 L
Reply from 202.105.136.105: bytes=32 time=601ms TTL=114
' h% G- @6 \+ B9 M
4 Y( x7 n) w0 [3 T4 n) s Ping statistics for 202.105.136.105:
, f: n3 A- o: e- n9 o4 `4 C+ \+ Z- m% h K5 }4 U* l5 Z+ a4 v- l( ^
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
K- G% ?* }: S; T; { p$ \# a/ n, |
Approximate round trip times in milli-seconds:
" Y3 r: t" Y9 _) Q; E. ^% M4 V4 H9 n* e9 t h. m
Minimum = 590ms, Maximum = 601ms, Average = 593ms
6 l# q t4 g9 w8 t" a. J& O
6 @ g' \* h. ~% i 在例子中"bytes=32"表示ICMP报文中有32个字节的测试数据(这是估算速度的关键数据),"time=590ms"是往返时间。 5 V0 U7 S* i* M2 A" O
2 V% C5 c$ M3 }( i. r8 `9 B 怎样估算链路的速度呢?举个例子吧。我们把A和B之间设置为PPP链路。
" n$ ~5 C7 M' A i1 w/ L
9 G1 Q. E1 i$ Y d2 W% X+ o. I 从上面的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是因为我们还要计算它的往返时间)。
/ I) s0 U( g0 P! z
; @+ T4 j' M6 d A* n+ V 我们来测试一下33600 b/s的链路: : d1 ?, R+ _& `! P
, @; J) F S2 Q7 i' X+ }' F
Pinging 202.105.36.125 with 32 bytes of data: ) e# b) r5 @8 v: v! w, s- p1 m! i
9 |8 d! n9 e9 C$ C6 E
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
* `1 ]& j/ Y$ d* ]+ \9 E1 F7 |9 c8 |7 E# K# X8 j
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 " `) _/ X5 \ w. q) D
2 |* E! Q; t( |* V3 m8 _
Reply from 202.105.36.125: bytes=32 time=415ms TTL=114
: s$ v& h! h+ G% e0 f# O. Z
7 r* x( g8 r8 Z! z Reply from 202.105.36.125: bytes=32 time=421ms TTL=114
; }8 T$ ~0 {0 V2 T' g/ F0 \3 i+ w2 h5 s* x& @; z9 t- F P# C* e8 ?3 Z
Ping statistics for 202.105.36.125: : C' c' M3 f0 }* L! Z# O3 s
# ^' S8 M! k9 d
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
4 d* h0 ?6 O! i, \/ L
" [, }: c5 I" i/ F$ f# @ Approximate round trip times in milli-seconds: * O* J* y9 Y `+ d2 V* i5 l7 @
8 m: Q( L8 [% i2 b1 s
Minimum = 415ms, Maximum = 421ms, Average = 417ms ; i E$ p2 B+ n7 {+ f6 _% E
. r b9 _3 p8 b) _8 Q6 G9 P 看是不是差不多啊。 ' }* q; N" q+ X) @7 y7 p
% [( S, n: x. ^, T
这里大家可能要注意到,这估算值跟实际值是有误差的,为什么呢?因为我们现在估算的是一个理论值,还有一些东西我们没有考虑。比如在网络中的其它干扰,这些干扰主要来之别的计算机。因为在你测试时不可能全部计算机停止使用网络给你做测试,这是不实际的。另外就是传输设备,因为有某些设备如MODEM它在传输时会把数据压缩后再发送,这大大减少了传输时间。这些东西产生的误差我们是不能避免的,但其数值大约在5%以内我们都可以接受(利用MODEM传输例外),但是可以减少误差的产生。比如把MODEM的压缩功能关闭和在网络没有那么繁忙时进行测试。有时候误差是无须消除的。因为我们需要这些误差跟所求得的理论值进行比较分析,从而找出网络的缺陷而进行优化。这时测试网络的所有数据包括误差都会成为我们优化的依据。
5 R; l1 V$ H6 }" Z
8 ^; Q/ K8 Q w! h 还要注意,这种算法在局域网并不适用,因为在局域网中速度非常的快几乎少于1ms,而Ping的最小时间分辨率是1ms,所以根本无法用Ping命令来检测速度。如果想测试速度那就要用专门仪器来检测。 : g; m7 z& W& m' C: r
8 m. {' G/ h1 I! u, {" ? 总的来说,Ping命令是一个在故障检查方面很有用而且很便利的工具,你不应该忽视它的存在。 |
|