TCP协议滑动窗口(一)——控制数据传输速率
窗口大小:TCP头中一个16位的域,表示当前可用接受缓冲区大小。在每个TCP对等段连接初始化时,告诉对方自己的窗口大小(不一定是满额,假如满额65201字节,可能暂时通告5840字节)。若客户端接受数据速度大于客户端程序读取数据速度,那么会导致接收缓冲区充满,窗口大小减少为0,当服务器得知此消息时将不会发送数据。
TCP发送端发送数据时,并不是直接传输给接收端,而是先将数据复制到发送缓冲区。类似的,TCP接受端从TCP数据段得到数据后,将其放入接受缓冲区。这样可以避免TCP连接滥用内存、CPU、网络带宽,从而阻止其他连接使用这些资源。也就是说,发送端发送数据有两个要求
- 发送缓冲区有数据可以发送
- 接受缓冲区有空间可以接受
如何知道接收端是否存在空间接受数据那?
窗口大小作为TCP头的一部分,每个TCP数据段无论是否为用户数据段都会带有该信息。接收端确认收到数据返回ack时,会更新自己的窗口大小。发送端会根据窗口大小控制发送数据了速率。
为什么一开始窗口大小不是最大?
一开始通知一个较小的窗口,用以强制控制发送端数据流速率。当TCP没有感到网络拥塞时,逐渐增大窗口大小,直到达到最大窗口大小。事实上,这就是拥塞控制机制。
窗口大小为0后,接受缓冲区数据被接受,发送端如何知晓窗口大小不再为0?
当窗口大小由0变为正数,接收端发送ack通告发送端一个非零窗口。但是为了防止该ack不幸丢失而导致接收端和发送端陷入死锁(接收端通告了不为0窗口等待接受数据,发送端等待不为0窗口),TCP发送端设置了persistent定时器。
什么是persistent定时器?
TCP发送端每隔一端时间发送一个零窗口探测器,该探测会利用persistent定时器来发送。persistent定时器发送一个没有数据的序列号,该序列号是小于最后传输数据的序列号,这时接收端会回送ack通告发送端。persistent定时器会按指数回退,也就是说往后的探测器发送频率会越来越慢(1s,2s,4s,8s)。
http://www.cnblogs.com/yuhanghzsd/p/6323527.html
TCP协议滑动窗口(一)——控制数据传输速率的更多相关文章
- TCP协议滑动窗口(一)——控制大批量数据传输速率
窗口大小:TCP头中一个16位的域,表示当前可用接受缓冲区大小.在每个TCP对等段连接初始化时,告诉对方自己的窗口大小(不一定是满额,假如满额65201字节,可能暂时通告5840字节).若客户端接受数 ...
- tcp协议头窗口,滑动窗口,流控制,拥塞控制关系
参考文章 TCP 的那些事儿(下) http://coolshell.cn/articles/11609.html tcp/ip详解--拥塞控制 & 慢启动 快恢复 拥塞避免 http://b ...
- 面试连环炮系列(二十):TCP的滑动窗口协议是什么
TCP的滑动窗口协议是什么 滑动窗口协议,用于网络数据传输时的流量控制,以避免拥塞的发生.该协议允许发送方在停止并等待确认前发送多个数据分组.由于发送方不必每发一个分组就停下来等待确认,因此该协议可以 ...
- TCP的滑动窗口机制【转】
原文链接:http://www.cnblogs.com/luoquan/p/4886345.html TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议.既然是一个可靠的 ...
- 计算机网络(八),TCP的滑动窗口
目录 1.RTT和RTO 2.TCP使用滑动窗口做流量控制与乱序重排 3.滑动窗口的基本原理 八.TCP的滑动窗口 TCP头部中的窗口字段:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端 ...
- TCP协议总结--停止等待协议,连续ARQ协议,滑动窗口协议
前言:在学习tcp三次握手的过程之中,由于一直无法解释tcpdump命令抓的包中seq和ack的含义,就将tcp协议往深入的了解了一下,了解到了几个协议,做一个小结. 先来看看我的问题: 这是用tcp ...
- 一篇带你读懂TCP之“滑动窗口”协议
前言 你现在的努力,是为了以后有更多的选择. 在上一篇文章通过"表白"方式,让我们快速了解网络七层协议了解了网络七层协议. 接下来我们要把重心放在网络传输的可靠性上面.一起来看TC ...
- TCP的滑动窗口与拥塞窗口
一.滑动窗口 滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的. 对ACK的再认识,ack ...
- [TCP/IP] 滑动窗口
什么是滑动窗口? 滑动窗口机制是TCP协议的一种流量控制和防拥塞的机制. 滑动窗口的工作原理? 简单来讲,就是接收方和发送方分别保留一块缓冲区,作为接收和发送数据来使用,发送数据过程中,如果发送方发的 ...
随机推荐
- Linux中通过命令直接删除文件中最后一行
何谓Sed(Stream EDitor):Sed原为UNIX系统上的非交谈式文字编辑器(non-interactive stream editor).当Sed读入待编辑文件,会依编辑命令来进行文件的编 ...
- 一道题看懂OC的文件管理:NSFileManager,计算文件包含内存大小
计算文件夹下所有文件的大小 // 查看错误信息 __autoreleasing NSError *error; // 文件管理对象 NSFileManager *manager = [NSFileMa ...
- [Asp.Net Core轻量级Aop解决方案]AspectCore Project 介绍
AspectCore Project 介绍 什么是AspectCore Project ? AspectCore Project 是适用于Asp.Net Core 平台的轻量级 Aop(Aspect- ...
- Linux 分区和目录解析
转自:http://www.cnblogs.com/apprentice89/archive/2012/12/17/2821332.html 计算机中存放信息的主要的存储设备就是硬 盘,但是硬盘不能直 ...
- laravel数据库迁移的migrate小解
当通过命令行:php artisan migrate:make create_authors_table --table=authors --create时,在 migration.php 中若Sch ...
- jquery之选项卡效果
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JNI错误总结(转)
源:JNI错误总结 最近公司里要用JNI技术,用java去调用已经写好的本地DLL库.之前自己也没接触过相关技术,其中花了大部分时间在调试改错上面,网上对于错误的解决方案也不多,现在项目接近完工,自己 ...
- STM32-USB详细使用说明(转)
源:STM32-USB详细使用说明 附件HID的双向通信 亮点STM32开发板充实了USBHID数据发送和接收例程(STM32固件库3.5 USB库3.4)
- UE4上传图片到服务器
客户端代码: void AHttpTestCharacter::MyHttpCall(FString Url){ // TexturePath contains the local file full ...
- C语言-break和continue
先看以下switch语句的程序: scanf("%d",&score); if (score>=0 && score<=100) ...