当前位置:网站首页>TCP协议如何确保可靠传输
TCP协议如何确保可靠传输
2020-11-08 09:45:00 【osc_7vovprrl】
关于“tcp协议如何确保可靠传输”这个问题,网上的资料参差不齐。近期开始在图书馆读一些教材,带着问题读了以下书目的关于TCP的章节,总结记录了下来。
- 德国波茨坦大学《internetworking Technische Grundlagen und Anwendungen》/《网络技术基础与应用》(christoph meinel,harald sack)
- 《深入理解计算机网络》(王达)
- 《计算机网络教程自顶向下的方法》(Behrouz A.Forouzan Firouz Mosharraf)
- 《计算机网络》(张曾科、阳宪惠)
- 《计算机网络》第7版(谢希仁)
为什么TCP需要可靠传输呢
- 网络层是不可靠。网络层的任务仅仅是选择合适的网间路由和交换结点, 确保数据及时传送。
- 传输层性质所致,上层需要可靠性。因而传输层的主要任务是根据通信子网的特性最佳的利用网络资源,并以可靠和经济的方式,为会话层之间,提供建立、维护和取消传输连接的功能,负责可靠地传输数据。
- UDP通过牺牲可靠性,换取尽力交付、通信效率高、确保数据的实时性的特点。自然需要TCP的出现,来对使用需求互补完善。
因而以上3点,可靠传输的重担交予到了TCP之上。
TCP怎么做到可靠传输呢
为了实现可靠传输的目的,TCP使用4个解决方案:面向连接的传输机制、超时重传控制、可变滑动窗口流量控制、 拥塞控制。
面向连接的传输机制
使用了三次握手、四次挥手,这个比较常见,大家一般都熟悉了,就不冗余赘述了。
校验和,确认应答(ACK),序列号。
并对重复无效的ACK进行处理,收下后并丢弃,实现自动重传请求。
超时重传控制
当报文发出后在一定的时间内未收到接收方的确认,发送方就会进行重传。每发送一个分组,就设置一个超时重传计时器,当收到对方返回的ack,就撤销已设置的超时计时器。为实现这一步,有三个注意点:
- 发送后保留副本,以备重传时使用,收到对方返回的ack后,才清除副本。
- 编号。
- 超时重传计时器的时间设置适考虑时延、拥塞的等不确定因素,因而重传时间设置会比数据分组的平均往返时间更长一些。
可变滑动窗口流量控制
窗口分为发送窗口和接收窗口。简单而言,接收方把能接受的数据大小(接受窗口大小),通过ACK反馈予发送方,从而设置协调发送内容大小。细节有以下几点:
- 当发送数据超出接收方窗口大小时,超出部分重传;
- 当发送数据小于接收方窗口大小时,发送方继续发送内容;
- 并不是对每一个报文段都有ACK的回复,可能时一至多个报文段,发送一个ACK;
- 当收到的报文段个数缺失,收到的报文段会存入缓存,等待发送方重传缺失的报文段;合并完整,再返回ACK;如果长时未收到缺失的报文段,则缓存中的报文段会被一并清空。
拥塞控制
拥赛控制的算法有四种:慢开始、拥塞避免、快重传和快恢复。
- 慢开始:由小到大逐步增加拥塞窗口数值。
拥塞窗口初始值 = 1至两个发送方最大报文段的数值;
拥塞窗口每次增加量 = min(新收到确认报文的字节数,发送方最大报文段的数值)。
- 拥塞避免:让拥塞窗口换慢增大。
每经过一个RTT就滑动窗口大小就只加1;
- 快重传:接收方收到的数据后立即确认,一个数据包回一个确认ACK, 以实现尽早知道当中个别报文的丢失。
例如,当发送过程中M3数据包丢失,接收方只收到了M2与M4数据包时,接收方连续返回3个M2的ACK予发送方(提示发送方漏了M3小兄弟);
发送方收到3个连续的M2的ACK后,立即重传M3数据包。
- 快恢复:遇到网络拥塞后,立马减小拥塞窗口。
设置一个ssthresh作为使用拥塞避免算法的起始点,通过这个ssthresh值为滑动窗口最大门限值的一半。
理解以上四个算法思路,看下面这个图就轻而易举了:
总结:TCP因为位于传输层,承上启下,解决下层网络层的不可靠问题,为会话层提供提供可靠连接;并实现对UDP使用的互为补充。
TCP可靠性主要通过面向连接的传输机制、超时重传控制、可变滑动窗口流量控制、 拥塞控制实现。
版权声明
本文为[osc_7vovprrl]所创,转载请带上原文链接,感谢
https://my.oschina.net/u/4342884/blog/4707936
边栏推荐
- iOS 学习笔记二【cocopods安装使用和安装过程中遇到的问题及解决办法】【20160725更新】
- 蓝牙2.4G产品日本MIC认证的测试要求
- 游戏优化性能杂谈(十一) - 知乎
- 个人短网址生成平台 自定义域名、开启防红、统计访问量
- 墨者学院SQL注入解题
- 2020-11-05
- How can a technician take over a complex system?
- More than 50 object detection datasets from different industries
- ulab 1.0.0发布
- Face recognition: attack types and anti spoofing techniques
猜你喜欢
iOS上传App Store报错:this action cannot be completed -22421 解决方案
VC++指定目录下文件按时间排序输出
The difference between vivoy 73s and glory 30 Youth Edition
数据科学面试应关注的6个要点
Search and replace of sed
面部识别:攻击类型和反欺骗技术
Fgagt: flow guided adaptive graph tracking
Wechat nickname Emoji expression, special expression causes the list not to be displayed, export excel error report and other problems solved!
python_ scrapy_ Fang Tianxia
Which is more worth starting with the difference between vivos7e and vivos7
随机推荐
1. In depth istio: how is sidecar auto injection realized?
laravel8更新之速率限制改进
Insight -- the application of sanet in arbitrary style transfer
print( 'Hello,NumPy!' )
软件测试就是这么回事?!
Cloud Alibabab笔记问世,全网详解仅此一份手慢无
Do you really understand the high concurrency?
M 端软件产品设计思虑札记 - 知乎
Littlest JupyterHub| 02 使用nbgitpuller分发共享文件
5G+AR出圈,中国移动咪咕成第33届中国电影金鸡奖全程战略合作伙伴
仅用六种字符来完成Hello World,你能做到吗?
IOS learning note 2 [problems and solutions encountered during the installation and use of cocopods] [update 20160725]
Swiper window width changes, page width height changes lead to automatic sliding solution
Python3.9的7个特性
PCIe enumeration process
函数周期表丨筛选丨值丨SELECTEDVALUE - 知乎
归纳一些比较好用的函数
Unparseable date: 'mon Aug 15 11:24:39 CST 2016', time format conversion exception
Dogs can also operate drones! You're right, but it's actually an autonomous drone - you know
nvm