滑动窗口 (TCP流量控制)
来源:互联网 发布:cf改枪软件 编辑:程序博客网 时间:2024/05/22 04:40
问题:如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲区的大小是固定的,就会丢失数据。
TCP协议通过“滑动窗口(Sliding Window)”机制解决这一问题。看下图的通讯过程:
1. 发送端发起连接,声明最大段尺寸是1460,初始序号是0,窗口大小是4K,表示“我的接收缓冲区还有4K字节空闲,你发的数据不要超过4K”。接收端应答连接请求,声明最大段尺寸是1024,初始序号是8000,窗口大小是6K。发送端应答,三方握手结束。
2. 发送端发出段4-9,每个段带1K的数据,发送端根据窗口大小知道接收端的缓冲区满了,因此停止发送数据。
3. 接收端的应用程序提走2K数据,接收缓冲区又有了2K空闲,接收端发出段10,在应答已收到6K数据的同时声明窗口大小为2K。
4. 接收端的应用程序又提走2K数据,接收缓冲区有4K空闲,接收端发出段11,重新声明窗口大小为4K。
5. 发送端发出段12-13,每个段带2K数据,段13同时还包含FIN位。
6. 接收端应答接收到的2K数据(6145-8192),再加上FIN位占一个序号8193,因此应答序号是8194,连接处于半关闭状态,接收端同时声明窗口大小为2K。
7. 接收端的应用程序提走2K数据,接收端重新声明窗口大小为4K。
8. 接收端的应用程序提走剩下的2K数据,接收缓冲区全空,接收端重新声明窗口大小为6K。
9. 接收端的应用程序在提走全部数据后,决定关闭连接,发出段17包含FIN位,发送端应答,连接完全关闭。
上图在接收端用小方块表示1K数据,实心的小方块表示已接收到的数据,虚线框表示接收缓冲区,因此套在虚线框中的空心小方块表示窗口大小,从图中可以看出,随着应用程序提走数据,虚线框是向右滑动的,因此称为滑动窗口。
滑动窗口:是一种流量控制技术。
意义:为了解决如果发送端发送的速度较快,接收端接收到数据后处理的速度较慢,而接收缓冲区的大小是固定的,就会丢失数据这一问题。滑动窗口本质上是描述接受方(本地)的TCP数据报缓冲区大小的数据,发送方根据这个数据来计算自己最多能发送多长的数据。如果发送方收到接受方的窗口大小为0的TCP数据报,那么发送方将停止发送数据,等到接受方发送窗口大小不为0的数据报的到来。
- TCP流量控制-滑动窗口
- 滑动窗口 (TCP流量控制)
- TCP 滑动窗口用以进行流量控制
- TCP流量控制:滑动窗口协议
- TCP 滑动窗口 (流量控制)
- TCP滑动窗口与流量控制
- TCP滑动窗口控制流量的原理
- TCP协议滑动窗口与流量控制
- TCP流量控制和拥塞控制-滑动窗口协议详解
- 流量控制--滑动窗口
- 计算机网络笔记--TCP流量控制中滑动窗口协议分析
- TCP的流量控制机制与滑动窗口
- 【网络编程】滑动窗口详解 (TCP流量控制)
- 控制流量-滑动窗口机制
- TCP/IP详解--流量控制机制 滑动窗口 Nagle算法 糊涂窗口综合征
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- TCP/IP之TCP协议(3):流量控制(滑动窗口协议)
- Python Twisted介绍
- 什么是 ICP
- linux 防火墙 认知
- Java关于Math类的三个取整方法
- 3.5 首部
- 滑动窗口 (TCP流量控制)
- 条款15:在资源管理类中提供对原始资源的访问
- Deep Compression阅读理解及Caffe源码修改
- 【DP】UOJ#17 【NOIP2014】飞扬的小鸟
- iOS headerdoc 代码注释打包sdk
- 打印字符菱形
- NOIP2016组合数问题 杨辉三角形+组合数
- miller_rabin素数检测总结
- JAVA设计模式之单例模式