当前位置:网站首页>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
边栏推荐
- Do you really understand the high concurrency?
- Python loop distinction (while loop and for loop)
- print( 'Hello,NumPy!' )
- 架构师(2020年11月)
- Littlest JupyterHub| 02 使用nbgitpuller分发共享文件
- “1024”征文活动结果新鲜出炉!快来看看是否榜上有名?~~
- 临近双11,恶补了两个月成功拿下大厂offer,跳槽到阿里巴巴
- QT hybrid Python development technology: Python introduction, hybrid process and demo
- Function periodic table filter value selectedvalue
- 蓝牙2.4G产品日本MIC认证的测试要求
猜你喜欢
微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!
Adobe Prelude / PL 2020 software installation package (with installation tutorial)
Daily challenges of search engines_ 4_ External heterogeneous resources - Zhihu
Shiyou's numerical analysis assignment
IOS learning note 2 [problems and solutions encountered during the installation and use of cocopods] [update 20160725]
个人短网址生成平台 自定义域名、开启防红、统计访问量
Qt混合Python开发技术:Python介绍、混合过程和Demo
Spotify是如何推动数据驱动决策的?
2020-11-05
Insight -- the application of sanet in arbitrary style transfer
随机推荐
python 循环区分(while循环和for循环)
Cloud Alibabab笔记问世,全网详解仅此一份手慢无
QT hybrid Python development technology: Python introduction, hybrid process and demo
[summary series] technical system of Internet server: high performance database index
将“光头”识别为“足球”,AI 摄像头如何犯的错?
Qt混合Python开发技术:Python介绍、混合过程和Demo
【总结系列】互联网服务端技术体系:高性能之数据库索引
Review the cloud computing application scenarios you didn't expect (Part 1)
What details does C + + improve on the basis of C
Wechat nickname Emoji expression, special expression causes the list not to be displayed, export excel error report and other problems solved!
Ulab 1.0.0 release
微信昵称emoji表情,特殊表情导致列表不显示,导出EXCEL报错等问题解决!
Dogs can also operate drones! You're right, but it's actually an autonomous drone - you know
sed之查找替换
Architect (November 2020)
阅读心得:FGAGT: Flow-Guided Adaptive Graph Tracking
shiyou的数值分析作业
进程、线程和协程的区别
抖音直播监控Api:随机推荐
Face recognition: attack types and anti spoofing techniques