TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
来源:互联网 发布:长春知远画室 编辑:程序博客网 时间:2024/06/05 18:43
1、流量控制是管理两端的流量,以免会产生发送过块导致收端溢出,或者因收端处理太快而浪费时间的状态。用的是:滑动窗口,以字节为单位
2、窗口有3种动作:展开(右边向右),合拢(左边向右),收缩(右边向左)这三种动作受接收端的控制。
合拢:表示已经收到相应字节的确认了
展开:表示允许缓存发送更多的字节
收缩(非常不希望出现的,某些实现是禁止的):表示本来可以发送的,现在不能发送;但是如果收缩的是那些已经发出的,就会有问题;为了避免,收端会等待到缓存中有更多缓存空间时才进行通信。
发端窗口的大小取决于收端的窗口大小rwnd(TCP报文的窗口大小字段)和拥塞窗口大小cwnd(见拥塞控制)
发端窗口大小 = min{ rwnd , cwnd };
3、关闭窗口:窗口缩回有个例外,就是发送rwnd=0表示暂时不愿意接收数据。这种情况下,发端不是把窗口收缩,二是停止发送数据。(为了比避免死锁,会用一些探测报定时发送试探,见定时器一节)
4、问题:某些时候,由于发端或收端的数据很慢,会引起大量的1字节数据痛惜,浪费很多资源。
(1)、发端的进程产生数据很慢时候,时不时的来个1字节数据,那么TCP就会1字节1字节的发送,效率很低。
解决方法(Nagle算法):
a、将第一块数据发出去
b、然后等到发送缓存有足够多的数据(最大报文段长度),或者等到收端确认的ACK时再发送数据。
c、重复b的过程
(2)、收端进程由于消耗数据很慢,所以可能会有这么一种情况,收端会发送其窗口大小为1的信息,然后有是1字节的传输
解决办法(2种)
a、Clark方法:在接收缓存的一半变空,或者有足够空间放最大报文长度之前,宣告接收窗口大小为0
b、推迟确认:在对收到的报文段确认之前等待到足够的接收缓存,或者等待到一个时间段(现在一般定义500ms)
2、窗口有3种动作:展开(右边向右),合拢(左边向右),收缩(右边向左)这三种动作受接收端的控制。
合拢:表示已经收到相应字节的确认了
展开:表示允许缓存发送更多的字节
收缩(非常不希望出现的,某些实现是禁止的):表示本来可以发送的,现在不能发送;但是如果收缩的是那些已经发出的,就会有问题;为了避免,收端会等待到缓存中有更多缓存空间时才进行通信。
发端窗口的大小取决于收端的窗口大小rwnd(TCP报文的窗口大小字段)和拥塞窗口大小cwnd(见拥塞控制)
发端窗口大小 = min{ rwnd , cwnd };
3、关闭窗口:窗口缩回有个例外,就是发送rwnd=0表示暂时不愿意接收数据。这种情况下,发端不是把窗口收缩,二是停止发送数据。(为了比避免死锁,会用一些探测报定时发送试探,见定时器一节)
4、问题:某些时候,由于发端或收端的数据很慢,会引起大量的1字节数据痛惜,浪费很多资源。
(1)、发端的进程产生数据很慢时候,时不时的来个1字节数据,那么TCP就会1字节1字节的发送,效率很低。
解决方法(Nagle算法):
a、将第一块数据发出去
b、然后等到发送缓存有足够多的数据(最大报文段长度),或者等到收端确认的ACK时再发送数据。
c、重复b的过程
(2)、收端进程由于消耗数据很慢,所以可能会有这么一种情况,收端会发送其窗口大小为1的信息,然后有是1字节的传输
解决办法(2种)
a、Clark方法:在接收缓存的一半变空,或者有足够空间放最大报文长度之前,宣告接收窗口大小为0
b、推迟确认:在对收到的报文段确认之前等待到足够的接收缓存,或者等待到一个时间段(现在一般定义500ms)
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- TCP/IP之TCP协议——流量控制(滑动窗口协议)
- TCP/IP之TCP协议:流量控制(滑动窗口协议)
- TCP/IP之TCP协议——流量控制(滑动窗口协议)
- TCP/IP之TCP协议:流量控制(滑动窗口协议)
- TCP流量控制:滑动窗口协议
- TCP协议滑动窗口与流量控制
- 面试之路(29)-TCP流量控制和拥塞控制-滑动窗口协议详解
- TCP流量控制和拥塞控制-滑动窗口协议详解
- TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [1])
- TCP/IP协议族之运输层(TCP流量控制和拥塞控制 )
- TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [1])
- TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [2])
- TCP/IP协议族之运输层(TCP流量控制和拥塞控制)
- TCP/IP协议族之运输层(TCP流量控制和拥塞控制 [1])
- SVN嵌入属性(获得最后一次提交的人,时间...)
- 快乐虾的工具箱 0.0.1
- ROR与社区网站开发
- sql查询出表中所有列名 判断两个表中的列是否相同?
- X86上4系统的安装
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- 加快 DHTML 的12个技巧
- 用c/c++实现linux下检测网络接口状态
- df 和du 的区别 linux磁盘命令详解
- 使用Random函数创建随机数
- 逐浪CMS:个人门户时代的“箱子”应用
- 灵图:不能上市就“冬眠”
- JavaScript中Array(数组)的属性和方法
- Pear DB 新手入门指南