《linux高性能服务器编程》学习笔记(二)之拥塞控制
来源:互联网 发布:电脑怎样编程软件 编辑:程序博客网 时间:2024/06/06 01:20
上一篇写着写着电脑就崩了,估计嫌我太罗嗦了啦哈哈哈
换个地方继续罗嗦,可可,我就是这么一个罗嗦的人~~~~啦啦啦
今天让我们接着上篇开始唠叨.
拥塞控制:
由于接收方缓存的限制,发送窗口不能大于接收方接收窗口。在报文段首部有一个字段就叫做窗口(rwnd),这便是用于告诉对方自己的接收窗口,可见窗口的大小是可以变化的。
那么窗口的大小是如何变化的呢?TCP 对于拥塞的控制总结为“慢启动、加性增、乘性减”,如图所示:
慢启动 :初始的窗口值很小,但是按指数规律渐渐增长,直到达到慢开始门限(ssthresh)。
CWND +=min(N,SMSS);
慢启动算法的理由是,TCP模块刚开始发送数据时并不知道网络的实际情况,需要用一种试探的方式平滑地增加CWND的大小.
拥塞避免:
使得CWND按照线性方式增加,从而减缓其扩大
两种实现方式:
每个RTT时间内按照上式计算新的CWND,而不论该RTT时间内发送端收到多少个确认.
每收到一个对新数据的确认报文段,就按照下式来更新CWND .CWND +=SMSS*SMSS/CWND.
发送端判断拥塞发生的依据有:
传输超时,或者说TCP重传定时器溢出
接受到重复的确认报文段.
快速重传和快速恢复:
发送端如果连续收到3个重复的确认报文段,就认为是拥塞完成了,然后它启用快速重传和快速恢复算法来处理拥塞.
过程如下:
1. 当 收到三个重复的确认报文段时,按照CWND=ssthresh+3*SMSS;
2. 每次收到一个重复的确认时,设置CWND = CWND+SMSS.此时发送端可以发送新的TCP报文段(如果新的CWND允许的话).
3. 当收到新数据的确认时,设置CWND = ssthresh(ssthresh是新的慢启动门限值).
快速冲传和快速回复完成之后,拥塞控制将恢复到拥塞避免阶段.
- 《linux高性能服务器编程》学习笔记(二)之拥塞控制
- 《linux高性能服务器编程》学习笔记(一)
- 《linux高性能服务器编程》学习笔记(三)之I/O复用,信号,定时器
- linux高性能服务器编程学习笔记二:IP协议详解
- linux高性能服务器编程学习笔记九:信号
- 《Linux高性能服务器编程》学习笔记——第八章 高性能服务器程序框架
- linux高性能服务器编程学习笔记七:高性能服务器程序框架
- Linux高性能服务器编程(笔记1)
- Linux高性能服务器编程(笔记2)
- Linux高性能服务器编程(笔记3)
- Linux高性能服务器编程(笔记4)
- Linux高性能服务器编程笔记1
- 《Linux高性能服务器编程》学习笔记——第七章 Linux服务器程序规范
- linux高性能服务器编程学习笔记六:linux服务器程序规范
- 学习笔记之TCP拥塞控制
- 《GPU高性能编程CUDA实战》学习笔记(二)
- linux高性能服务器编程(1)
- Linux高性能服务器编程(一)
- Python你必须知道的十个库
- AS插件-Android Parcelable code generator.
- python 爬虫cookie的简单使用
- 面试题83:运动员打靶
- 神经网络算法
- 《linux高性能服务器编程》学习笔记(二)之拥塞控制
- 欢迎使用CSDN-markdown编辑器
- COM编程入门
- 二分查找:联合中位数
- Windows客户端 SSH 远程连接Windows服务器(PowerShell Server)
- JAVA中的空指针异常(转载)
- [SSH]一个Hibernate错误--IllegalArgumentException calling setter
- Java 面向对象的语言
- Iwfu-GitHub客户端使用