TCP详解

简介: 详解介绍TCP各个阶段的状态及原理

TCP超时重传

  原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
  影响超时重传机制协议效率的一个关键参数是重传超时时间(RTO,Retransmission TimeOut)。RTO的值被设置过大过小都会对协议造成不利影响。

(1)RTO设长了,重发就慢,没有效率,性能差。 
(2)RTO设短了,重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。 

  连接往返时间(RTT,Round Trip Time),指发送端从发送TCP包开始到接收它的立即响应所消耗的时间。

TCP滑动窗口

作用:
(1)提供TCP的可靠性;
(2)提供TCP的流控特性 

  TCP的滑动窗口的可靠性也是建立在“确认重传”基础上的。
发送窗口只有收到对端对于本段发送窗口内字节的ACK确认,才会移动发送窗口的左边界。
  接收端可以根据自己的状况通告窗口大小,从而控制发送端的接收,进行流量控制。

TCP拥塞控制

  拥塞控制是一个全局性的过程; 流量控制是点对点通信量的控制
  TCP拥塞控制4个核心算法:慢开始(slow start)、拥塞避免(Congestion Avoidance)、快速重传(fast retransmit)、快速恢复(fast recovery)
  拥塞窗口(cwnd,congestion window),其大小取决于网络的拥塞程度,并且动态地在变化。
  慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。

  为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量。ssthresh的用法如下:

当cwnd < ssthresh时,使用慢开始算法。 
当cwnd > ssthresh时,改用拥塞避免算法。 
当cwnd = ssthresh时,慢开始与拥塞避免算法任意。

  拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送发的拥塞窗口cwnd加1,而不是加倍。

  无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞,就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。如下图:

image

拥塞控制的具体过程如下: 
(1)TCP连接初始化,将拥塞窗口设置为1 
(2)执行慢开始算法,cwnd按指数规律增长,直到cwnd=ssthresh时,开始执行拥塞避免算法,cwnd按线性规律增长 
(3)当网络发生拥塞,把ssthresh值更新为拥塞前ssthresh值的一半,cwnd重新设置为1,按照步骤(2)执行

快重传和快恢复

快速重传(Fast retransmit)

  要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。
  快重传算法规定,发送方只要一连收到3个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计数器时间到期。
  

快速恢复(Fast Recovery)

  (1) 当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh减半。这是为了预防网络发生拥塞。请注意:接下去不执行慢开始算法。
  (2) 由于发送方现在认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

发送方窗口的上限值 = Min [ rwnd, cwnd ]
当rwnd < cwnd 时,是接收方的接收能力限制发送方窗口的最大值。
当cwnd < rwnd 时,则是网络的拥塞限制发送方窗口的最大值。

摘自:https://blog.csdn.net/qq_18539301/article/details/82351729

相关文章
|
8月前
|
人工智能 IDE API
还在配置规则文件和智能体?Roo Commander:预置90+领域专家,开箱即用的AI编程新体验
Roo指挥官是一款创新AI编程助手,通过智能调度90多位虚拟技术专家,实现对复杂项目的自主规划与高效执行。用户无需手动选择专家或反复调整提示,只需提交需求,系统即可自动分析、拆解任务并协调最合适的技术角色完成开发。文中以构建3D互动简历为例,展示了其从需求分析到项目落地的全流程自动化能力,显著提升开发效率,开启AI驱动的智能化编程新体验。
541 0
|
移动开发 前端开发 API
HTML5 Canvas 实现简易 绘制音乐环形频谱图
参考资料:1.Web 技术研究所2.Web_Audio_API 0.启发 在B站我们有很多的小伙伴们应该都看到过用AE做的可视化音乐播放器播放音乐的视频,看着特别酷炫带感有木有。
3618 0
|
10月前
|
网络协议 算法 安全
TCP协议(三次握手、流量控制、拥塞控制)
TCP协议是一种可靠的传输层通信协议,通过三次握手建立连接,确保数据安全传输。流量控制通过接收窗口避免接收方缓冲区溢出,拥塞控制则利用拥塞窗口调节网络传输速度,防止网络拥堵。三者协同工作,保障TCP在复杂网络环境中实现高效、可靠的数据传输。
3368 11
|
自然语言处理 小程序 IDE
只要几句话,通义灵码帮你创建专属健康管理小程序
数字时代的大潮中,编程不再高深莫测,而是每个人都可以尝试并享受的乐趣。今天,就让我们一起探索如何利用通义灵码的自然语言生成代码功能,轻松打造你的专属健康管理小程序,说不定在这个过程中,不管是身材管理,还是编程学习,都能让你离目标更近一步。
|
机器学习/深度学习 自然语言处理 算法
m基于深度学习的OFDM+QPSK链路信道估计和均衡算法误码率matlab仿真,对比LS,MMSE及LMMSE传统算法
**摘要:** 升级版MATLAB仿真对比了深度学习与LS、MMSE、LMMSE的OFDM信道估计算法,新增自动样本生成、复杂度分析及抗频偏性能评估。深度学习在无线通信中,尤其在OFDM的信道估计问题上展现潜力,解决了传统方法的局限。程序涉及信道估计器设计,深度学习模型通过学习导频信息估计信道响应,适应频域变化。核心代码展示了信号处理流程,包括编码、调制、信道模拟、降噪、信道估计和解调。
574 8
|
分布式计算 Hadoop Java
三十、MapReduce之wordcount案例(环境搭建及案例实施)
三十、MapReduce之wordcount案例(环境搭建及案例实施)
三十、MapReduce之wordcount案例(环境搭建及案例实施)
|
存储 JavaScript 前端开发
uni-app 从vue3项目创建到Pinia管理数据全局使用 持久化存储数据 详细教程
uni-app 从vue3项目创建到Pinia管理数据全局使用 持久化存储数据 详细教程
|
Java Spring
spring cloud 通过feign请求动弹设置请求头heades
spring cloud 通过feign请求动弹设置请求头heades
984 0
|
安全 网络安全 网络虚拟化
CTF学习和比赛平台简介
CTF学习和比赛平台简介
2125 1
|
存储 人工智能 安全
重磅干货不容错过!2017云栖大会汇总资料,速来领取!
2017云栖大会圆满结束!云栖大会由阿里巴巴集团主办,已经成为全球云计算TOP级峰会,汇聚DT时代最强大脑,描绘云计算发展趋势和蓝图,展现云计算、大数据、人工智能蓬勃发展的技术生态全景。云栖社区福利大放送,本文整理了全年8场峰会的资料,约800份技术资料,等你来下载!
110432 0