网络拥塞控制(七)BIC-TCP
转自:http://www.cnblogs.com/fll/archive/2009/02/24/1397592.html
上面我们已经提到了HSTCP,它通过简单的修改标准TCP的增长方式,从而达到了高吞吐。方法很简单,但是缺点在于,它存在严重的RTT不公平性,RTT不公平性在标准TCP中也是存在的,但是HSTCP显然扩大了这个不公平性。RTT的不公平性指的是当有多条连接在同一个瓶颈带宽上跑时,如果这些连接的RTT不相等,那么这些TCP连接在该链路上分得的带宽也是不一样的。作为一个公平性的协议,是应该达到这一点的。从HSTCP可以很明显的看出,如果当前连接的cwnd比较大的话,那么它的增长速度也是越快。具体的理论计算下次继续,我们先看BIC-TCP的思想。
BIC-TCP由North Carolina State University的网络研究实验室提出,该算法在提出不久后就成为了当时Linux内核中的TCP默认拥塞算法,使用非常广泛,由此可见,该算法是有一定功底的,从长久的使用来看,确实不错,当然问题也有一些。
BIC-TCP的提出者们发现了TCP拥塞窗口调整的一个本质:那就是找到最适合当前网络的一个发送窗口,为了找到这个窗口值,TCP采取的方式是(拥塞避免阶段)每RTT加1,缓慢上升,丢包时下降一半,接着再来慢慢上升。BIC-TCP的提出者们看穿了事情的本质,其实这就是一个搜索的过程,而TCP的搜索方式类似于逐个遍历搜索方法,可以认为这个值是在1和一个比较大的数(large_window)之间,既然在这个区间内需要搜索一个最佳值,那么显然最好的方式就是二分搜索思想。
BIC-TCP就是基于这样一个二分思想的:当出现丢包的时候,说明最佳窗口值应该比这个值小,那么BIC就把此时的cwnd设置为max_win,把乘法减小后的值设置为min_win,然后BIC就开始在这两者之间执行二分思想--每次跳到max_win和min_win的中点。
总的思想就是这么简单,当然实现起来还有一定的细节需要考虑。如果max_win比较大的时候,那么把窗口调整到其乘法降低后的min_win和max_win的中点,其增长量可能比大,也就是说在一个RTT里面增长过多,这会造成传输上的抖动,因而BIC-TCP选取了另外取了两个参考值,称为Smax和Smin,如果中点和当前cwnd值的差大于Smax的话,那么cwnd就只增长Smax,如果没有发生丢包,那么就重新设置min_win为当前的cwnd值,如果丢包,那么设置max_win为当前的cwnd值。该过程一直如此下去,直到窗口增长值小于Smin,也就是说在这个时候max_win和min_win非常接近了,达到这种情况下,可以说明现在的网络环境变好,那么把cwnd设置为max_win。
如果窗口值超过了max_win,那么可以说明稳定状态下的窗口值应该比当前的窗口值要大,此时就需要搜索出新的max_win值,BIC-TCP进入一个称为“max probing”的阶段。在这个阶段,首先把max_win设置为一个非常大的值,然后BIC采取了一个类似慢启动策略,每个RTT后窗口值变为cwnd+1,cwnd+2,cwnd+4......cwnd+Smax,直到增长为Smax的时候再次进入二分阶段。
另外由于该增长方式在小带宽下显然不怎么奏效,BIC规定了如果当前窗口值小于low_window(该值在实现里面为14),那么就采用标准TCP的拥塞方式进行处理。
BIC-TCP的具体实现可以参考内核代码/net/ipv4/tcp_bictcp.c,上面的一些常量值在里面均有定义,在论文里面有伪码实现,逻辑都非常清晰,同时如果想看BIC的公平性理论证明和测试结果的也可以参考论文。
网络拥塞控制(七)BIC-TCP的更多相关文章
- 网络OSI七层架构与TCP四层架构的应用与区别
1.OSI七层网络模型介绍 OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型 ,是一个逻辑上的定义,一个规范,它把网络从逻辑上分为了 ...
- 网络基础七层模型与TCP/IP协议
1.网络基础 1.1 什么是网络 网络就是计算机网络是一组计算机或网络设备通过有形 的线缆或无形的媒介如无线,连接起来,按照一定的 规则,进行通信的集合. 网络通信就是指终端设备之间通过计算机网络进行 ...
- Android网络编程系列 一 TCP/IP协议族
在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必 ...
- 网络OSI七层模型以及数据传输过程
网络OSI七层模型 模型图 国际标准化组织(ISO)制定了osi七层模型,iso规定了各种各样的协议,并且分了7层 每一层的详细信息 具体7层 数据格式 功能与连接方式 典型设备 应用层 Applic ...
- java网络编程socket\server\TCP笔记(转)
java网络编程socket\server\TCP笔记(转) 2012-12-14 08:30:04| 分类: Socket | 标签:java |举报|字号 订阅 1 TCP的开销 a ...
- 网络协议HTTP、TCP/IP、Socket
网络协议HTTP.TCP/IP.Socket 网络七层由下往上分别为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 其中物理层.数据链路层和网络层通常被称作媒体层,是网络工程师所研究的 ...
- 网络协议OSI模型-TCP/IP-三次握手
OSI模型 在制定计算机网络标准方面,起着重大作用的两大国际组织是:国际电信联盟电信标准化部门,与国际 标准组织(ISO),虽然它们工作领域不同,但随着科学技术的发展,通信与信息处理之间的界限开始 变 ...
- 39 网络相关函数(七)——live555源码阅读(四)网络
39 网络相关函数(七)——live555源码阅读(四)网络 39 网络相关函数(七)——live555源码阅读(四)网络 简介 14)readSocket从套接口读取数据 recv/recvfrom ...
- [转]linux下iftop工具的安装与使用详解(图文)——实时的网络流量,监控TCP/IP连接(单机)
原文链接:http://www.jbxue.com/LINUXjishu/10735.html 在linux中监控系统资源.进程.内存占用等信息,可以使用top命令.查看网络状态可以使用netstat ...
随机推荐
- 测试开发之Django——No2.Django的安装以及项目创建
开发平台:Mac Python版本:3.7 Django版本:2.0.5 一.Django的安装 1.pip安装 输入命令pip install Django==2.0.5 说明:不指定版本,则安装的 ...
- Nginx基本配置文件
Nginx基本配置文件 1. 基本配置文件 /etc/nginx/nginx.conf # nginx运行的用户 user nginx; # nginx进程数,建议设置为等于CPU总核心数. work ...
- Linux学习笔记:常用命令grep、iconv、cp、mv、rm
本篇记录一些近期常用的命令. 一.grep过滤 grep过滤 不包含某些字符串 cat test.txt | grep -v '.jpg' 过滤jpg结尾的图片 cat test.txt | grep ...
- 【BZOJ2059】Buying Feed 购买饲料
题面 约翰开车来到镇上,他要带V吨饲料回家.如果他的车上有X吨饲料,每公里就要花费X^2元,开车D公里就需要D* X^2元.约翰可以从N家商店购买饲料,所有商店都在一个坐标轴上,第i家店的位置是Xi, ...
- ReentrantLock和AQS
AQS(AbstractQueuedSynchronizer)是JDK1.5提供的一个用来构建锁和同步工具的框架,子类包括常用的ReentrantLock.CountDownLatch.Semapho ...
- synchronized和lock
Synchronized 同步代码块 使用 monitorenter 和 moniterexit 指令实现, monitorenter指令插入到同步代码块的开始位置, moniterexit 指令插 ...
- 判断js数组/对象是否为空
/** * 判断js数组/对象是否为空 * isPrototypeOf() 验证一个对象是否存在于另一个对象的原型链上.即判断 Object 是否存在于 $obj 的原型链上.js中一切皆对象,也就是 ...
- BeautifulSoup使用总结
一.介绍 BeautifulSoup为一个python库,它可以接收一个HTML或XML的字符串或文件,并返回一个BeautifulSoup对象,之后我们可以使用BeautifulSoup提供的众多方 ...
- 跟厂长学PHP7内核(七):常见变量类型的基本结构
上篇文章讲述了变量的存储结构zval,今天我们就来学习一下几个常见变量类型的基本结构. 一.类型一览 zval中的u1.v.type用来存储变量的类型,而zval.value存储的是不同类型对应的值, ...
- 数据库简单练习 建表+select
create table student ( sno int primary key, sname char(20), sex char(2), birthday datetime, class i ...