TCP/IP学习笔记17--TCP-- 窗口控制 重发控制 流控制
事业无穷年 -- 韩愈
利用窗口控制提高速度:
TCP传输数据是,以一个段为单位(每次发送一个数据包),每发一个段需要一次确认应答,这样就难免存在这样的缺点:包的往返时间越长,通信性能就越低。

为解决这个问题,牛人们提出了窗口的概念。即使往返时间较长的情况下,它也能控制网络性能的下降。
使用窗口后,发送端发送一个段之后,没有必要等到收到对端针对这个段的ACK之后再发送下一个包,而是以更大的单位进行ACK.
窗口大小指 无需等待ACK而可以继续发送数据的最大值,下图所示的窗口为4个段,每个段的大小为1000:

窗口机制的实现使用了大量的缓冲区,如上图,一次连续发送4个段,这些发送出去的数据需要被保存在缓存中,直到收到对端返回的ACK,才能清除。 另外,注意,接受端返回的ACK一定是按照顺序返回的,如上图,肯定是先返回ACK1001,再是ACK2001......
为什么叫做滑动窗口呢:看下图:

窗口里的数据表示已经被发送出去,正在等待回馈的数据。
窗口控制与重发控制:
使用窗口时,如果出现段丢失怎么办?
1)ACK在返回的路途中丢失:
在这种情况下,数据包已经到达了对端,实际上不需要再被重新发送了。在没有使用窗口控制的情况下,没有收到确认应答的数据会不断地重新发送,而在使用窗口控制的情况下,即使某些数据包的ACK被丢失也没有影响! 如下图所示,发送端收到了ACK 2001,就会说说明ACK1001已经被接受端返回了!!就没有必要再等待ACK1001了。
2)某个数据包丢失的情况:
在这种情况下,如下图所示,如果发送端的1001-2000个字节(第二个数据包)丢失,接受端在接受到第3个数据包时,会提醒发送端:“我想要接受的是1001开始的数据段”,即发送ACK1001。如果接受端收到第4个数据段时,还没有收到第2个段,则继续发送ACK1001. 接受端连续收到ACK1001,会确认第2个包丢失,然后就会赶紧重发第2个数据包。 一般地,当发送端连续3次接受到ACK1001时,就会断定需要重发,不必继续等待设置的重传计时器时间了。
这种方式比较高效,因此也被称作高速重发控制。(学习笔记18中会还会提到,其与拥塞控制算法有关)

流控制 (窗口大小)
通信过程中,如果接受端处于高负荷情况,导致其不能接受数据,会导致发送端重新发送数据包,为避免这种无端的流浪浪费,TCP提供了流控制的机制: 让发送端根据接受端的实际能力来控制发送的数据量。
具体操作是,接受端自动向发送端发送自己可以接受的数据的大小,从而 发送端不会发送超过这个限度的数据。该限度被称为窗口大小。
TCP的首部中,专门有一个字段来通知窗口大小。

TCP/IP学习笔记17--TCP-- 窗口控制 重发控制 流控制的更多相关文章
- TCP/IP学习笔记16--TCP--特点,数据重发,连接管理,段
TCP充分实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的包进行顺序控制,这些在UDP中都是没有的.UDP是一种没有复杂控制,提供面向无连接通信服务的一种协议.TCP是面向有 ...
- TCP/IP学习笔记:TCP传输控制协议(一)
1 TCP的服务 尽管TCP和UDP都使用相同的网络层(IP),TCP却向用户提供一种面向连接的,可靠地字节流服务.两个使用TCP的应用,在彼此交换数据之前必须先建立一个TCP连接,在一个TCP连接中 ...
- tcp/ip学习笔记-TCP
tcp/ip学习笔记-TCP 彭会锋 报文发送采用的是tcp_output函数,
- tcp/ip学习笔记(1)-基本概念
为什么会有tcp/ip 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样.计 ...
- TCP/IP学习笔记18--TCP--拥塞控制 (慢开始, 拥塞避免, 快重传和快恢复)
用最多的梦面对未来 -- 李嘉诚 在某段时间,若对网络资源的需求超过了该资源所能提供 ...
- TCP/IP学习笔记(3)-IP、ARP、RARP协议
这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据 ...
- TCP/IP学习笔记(3)----IP,ARP,RARP协议
把这三个协议放到一起学习是因为这三个协议处于同一层(网络层协议),ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP ...
- TCP/IP学习笔记12-- IP协议基础
IP(internet protocol, 网际协议) IP相当于OSI参考模型中的第三层 -- 网络层. --网络层的下一层--数据链路层的主要作用是在 同一种数据链路 的节点之间进行包传递,而一旦 ...
- TCP/IP学习笔记7--TCP/IP模型通信例子学习
"一位如蝴蝶般美丽的女子向我飞来,翩翩的舞姿如同云端轻盈的叶儿." -------------------------------------------------------- ...
随机推荐
- janusgraph-创建索引出现GraphIndexStatusReport[success=false, indexName='mixedvlabel', targetStatus=[REGISTERED], notConverged={vlabel=INSTALLED}, converged={}, elapsed=PT1M0.07S]
参考网址: https://www.cnblogs.com/Uglthinx/p/9630779.html 原因:我的是事务没有完全关闭 解决办法: 创建一个混合索引: // 在graph中有事务执行 ...
- C++中指针形参问题
1.C++指针做形参,会有很多陷阱,很多时候也许并不如我们想的那样.比如我们想通过一个函数改变指针的值: #include<</SPAN>iostream> using nam ...
- Markdown 设置字体大小颜色及背景色
一.更改字体.大小.颜色 <font face="黑体">我是黑体字</font><font face="微软雅黑">我是微 ...
- 调用图灵API V2 遇到的坑
1:遇到的第一个问题:跨域 解决办法: 第一种:使用query中的jsonp 可惜图灵要求post方法,而jsonp,只能使用get方法,才能跨域,失败 第二种:服务器添加header,可是我怎么去改 ...
- ESP8266 tcp透传AP+STA
AP 建立WIFI,接受STA连接,串口数据和TCP互传 #include <ESP8266WiFi.h> const char *ssid = "esp8266_666&quo ...
- 思科ASA对象组NAT
ACL对象组NAT配置 ciscoasa#conf t ciscoasa(config)#hostname ASA ASA(config)#domain-name asa.com ASA(config ...
- prisma mongodb 试用
prisma 已经支持mongodb了,我们需要做的就是安装新版本的prisma cli,后然初始化项目使用 环境准备 安装cli 注意使用新版本(prisma/1.32.2) 低版本有坑 npm i ...
- 点击复制文字到剪贴板兼容性安卓ios
一般那种活动H5分享可能会用到点击复制文字到剪贴板,很简单的功能 于是搜了一搜:js复制文字到剪贴板,可用结果大致分为两类: 一类是js原生方法,这种方法兼容性不好,不兼容ios: https://d ...
- MintUI引入vue项目以及引入iconfont图标
官网地址:http://mint-ui.github.io/#!/zh-cn 中文文档:http://mint-ui.github.io/docs/#/zh-cn2 示例展示:http://eleme ...
- restframework之节流
基本思路(原生Django而言): 在django2.x中,若出现节流(访问频率控制)的需求,我们首先想到的是使用一个字典(dict类型)来存储所有IP地址的访问时间记录,这是针对于匿名用户(IP)而 ...