当前位置:网站首页>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
边栏推荐
- Spotify是如何推动数据驱动决策的?
- Deeplight Technology Bluetooth protocol SRRC certification services
- 架构师(2020年11月)
- What? Your computer is too bad? You can handle these moves! (win10 optimization tutorial)
- 推荐一部经济科普视频,很有价值!
- NOIP 2012 提高组 复赛 第一天 第二题 国王游戏 game 数学推导 AC代码(高精度 低精度 乘 除 比较)+60代码(long long)+20分代码(全排列+深搜dfs)
- 归纳一些比较好用的函数
- Six key points of data science interview
- python_ scrapy_ Fang Tianxia
- Astra: the future of Apache Cassandra is cloud native
猜你喜欢

Basic concepts of computer network (5) basic principles of local area network

python_scrapy_房天下

C++在C的基础上改进了哪些细节

413【毕设课设】基于51单片机无线zigbee无线智能家居光照温湿度传输监测系统

Solve Safari browser download file name garbled problem

The most detailed usage guide for perconaxtradbcluster8.0

比Python快20%,就问你兴不兴奋?

Deeplight Technology Bluetooth protocol SRRC certification services

Game mathematical derivation AC code (high precision and low precision multiplication and division comparison) + 60 code (long long) + 20 point code (Full Permutation + deep search DFS)

解决Safari浏览器下载文件文件名称乱码的问题
随机推荐
python 循环区分(while循环和for循环)
iOS上传App Store报错:this action cannot be completed -22421 解决方案
How does spotify drive data-driven decision making?
洞察——风格注意力网络(SANet)在任意风格迁移中的应用
架构师(2020年11月)
nvm
Test requirements for MIC certification of Bluetooth 2.4G products in Japan
Architect (November 2020)
微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!
Solve Safari browser download file name garbled problem
i5 1135g7和i5 1035g1参数对比区别大吗? 哪个好
What details does C + + improve on the basis of C
Oschina plays on Sunday - before that, I always thought I was a
Experience the latest version of erofs on Ubuntu
SQL Server 2008R2 18456错误解决方案
Mouse small hand
Bili Bili common API
Codeforce算法题 | 你能想出解法,让你的基友少氪金吗?
ASP.NET A complete solution based on exception handling in MVC
ASP.NET MVC下基于异常处理的完整解决方案