搜索文章:

首页  |  Java技术  |  Asp.net  |  Asp编程  |  VC/C++  |  Delphi  |  VB编程
上一篇:网上隐身衣 >>

如何提高ADSL速度

dsl的设计思路就是上下行互不影响的,也就是说上下行可以同时达到满负荷。
  但是我们平时使用的时候可能经常会有这样的感觉:当自己满负荷上传的时候,下载达不到满负荷,反之也一样。这种现象的出现就是因为ack没有优先权。
  我们先回顾一下tcp的传输原理:
  假设a要和b建立tcp的连接,过程如下:
  a首先向b发送syn信号,请求建立连接
  b答复a的syn请求,这种答复信号就是ack
  a收到b的ack信号,开始建立连接,传输数据
  如果a和b之间要建立双向的tcp连接,过程如下:
  a首先向b发送syn信号,请求建立连接
  b答复a的syn请求,这是b发送的ack信号;同时b向a发送syn请求,并等待a的ack信号
  a收到b的ack信号,建立a到b的连接;同时答复a发过来的syn信号,也就是a发送了ack给b
  b接受到a的ack信号,建立b到a的连接
  这样就经过了一个三次握手过程,经过两两确认,建立了双向的tcp连接。
  不管是单向还是双向的tcp连接,数据传输开始后,每次传输的数据都带有一个syn值,这个syn值是在建立连接的syn值上递增的,在传输下一个数据之前,必须要接收到对方的ack值,这个ack值是自己刚才发送的(syn值+1)。因为只有接收到对方的ack值,才意味着对方已经收到了我发送的syn值的数据,才能接下来发送值为(syn+1)的数据,这样就保证了tcp传输的可靠性。
通过上面的回顾,我们来分析单向传输的情况:
  假设b是ftp server,a是ftp client,a从b上面下载数据。连接建立以后,b向a每次发送数据之前都需要接收a给b的ack信号,因为这时候绝大部分数据都是b到a的,a到b基本没有数据在传输,所以a到b的ack信号没有受到任何影响,可以顺利发送,这种情况下,传输可以达到a和b之间的较小带宽的满负荷值。
  接下来我们看看a和b之间双向传输的情况:
  仍然假设b是ftp server,a是ftp client,但是a从b上面下载数据的同时还上传数据到b或其他的ftp server。这种情况下,b向a发送数据时需要等待a发送给b的ack信号,a向b(或其他机器)发送数据时需要等待b(或其他机器)的ack信号。不幸的是,a的发送和接收两个方向的信道都有数据在传输,如果ack同时也传输,那就必然会受到正常传输的数据的影响,需要排队,而发送方因为tcp的设计是必须要收到ack后才发送下一数据段,这样就导致了双向传输时跑不到理论值的最大带宽。
  要解决这个问题很简单,只要采取某种机制保证数据和ack信号同时传输的时候ack信号可以优先传输就行了,这种做法就是qos(质量服务)的一个方面。
  接下来再分析pppoe的dsl的情况:
  qos建立在pppoe的节点。pppoe的节点有哪些呢?首先是操作系统拨号。在windows系统中,windows xp以前的系统并自带pppoe支持,需要安装第三方的拨号软件,我试过的软件中raspppoe0.98是支持qos,0.98以前的版本不支持。
  在windows xp和windows 2003中系统自带了pppoe的支持,通过系统自带的pppoe拨号建立的dsl连接,默认的时候是支持qos的。(这个选项一度被人误导说要占用额外的带宽,建议大家不要勾选,真是害人不浅)
  在linux和类linux系统中,可以通过ipfw+dummynet或者pf+altq来实现qos
  可是对于现在的很多dsl用户,并不是采用操作系统来拨号的,比如用宽带路由器。遗憾的是目前市面上各种各样的几百块钱的dsl router,各种wifi+router的产品,都不支持ack优先,当然,如果使用cisco的路由器(比如1700,2600)+dsl模块,是毫无疑问可以配置qos保证ack优先的。

()

相关文章:
© 2006   www.java-asp.net