电子发烧友网 > 通信网络 > 正文

TCP BBR拥塞控制算法深度解析

2020年11月06日 09:26 次阅读

写本文的初衷一部分来自于工作,更多的来自于发现国内几乎还没有中文版的关于TCPbbr算法的文章,我想抢个沙发。

本文的写作方式可能稍有不同,之前很多关于OpenVPN,Netfilter,IP路由,TCP的文章中,我都是先罗列了问题,然后阐述如何解决这个问题。但是本文不同!本文的内容来自于我十分厌恶的一个领域,其中又牵扯到我十分厌恶的一家公司-华夏创新(Appex),这些令我厌恶的东西让我不得不放弃很多的东西。所以,我不会先说业界遇到了什么问题,而是直接步入主题,阐述bbr算法的组成。我十分讨厌与人谈论关于TCP拥塞控制的话题,一方面是因为这个话题太过发散,任何人都可以说出自己的理由让人信服自己的忽悠人的算法,另一方面,我觉得我接触到的所有人当中并没有人真的懂这些(当然,我也不懂!而且比那些人更加不懂!),所以我宁可花些时间在预研或者研发上,我也不想跟人瞎逼逼或者听别人瞎逼逼。

随便提出一个TCP拥塞算法,任何人都可以做到说它好,任何人也可以做到说它不好,因为没人真的懂网络,所以聊这些是没有意义的!TCP不是网络范畴的技术,它是控制论范畴的,TCP技术不属于网络技术!

我的观点是,正确的做法只有一种,其它的都是错误的做法,都没有意义!

国庆节前,我看到了bbr算法,发现它就是那个唯一正确的做法(可能有点夸张,但起码它是一个通往正确道路的起点!),所以花了点时间研究了一下它,包括其patch的注释,patch代码,并亲自移植了bbrpatch到更低版本的内核,在这个过程中,我也产生了一些想法,作为备忘,整理了一篇文章,记如下,多年以后,再看TCPbbr算法的资料时,我的记录也算是中文社区少有的第一个吃螃蟹记录了,也算够了!

正文之前,给出本文的图例:

使用BBR之前

我希望更多的人试用这个算法,并且与我共享测试结果,包括但不限于算法的带宽利用率,抢占性等!特别是温州皮鞋产老板!这个算法并不是我写的,既然开源那就不应该封闭于任何公司或者个人,所以我有权在这里就我知道的东西述说一二。

我深深地明白,我以下写的这些有很多理解不周到的地方,我也深深的明白很多传统学生出身的人不会告诉我那些疏漏,我指的是温州老板那样的人,因为他们几乎都是在索取而不分享,如果他们发现了我的疏漏,他们会默默记上一笔,到头来他们学会了我分享的东西,他们又改进了我的疏漏(但是并不告诉我!),他们又拥有自己独立学会的那些东西(他们也不会告诉我!),所以,最终,他们任何人都比我更加博学且高明!然而不幸的是,这就是我的目标,我并不在乎那些人,我甚至不会在乎自己!

所以,赶紧试用bbr吧,赶紧改进吧,功劳是你的,虚无是我的!

BBR的组成

bbr算法实际上非常简单,在实现上它由5部分组成:

1.即时速率的计算

计算一个即时的带宽bw,该带宽是bbr一切计算的基准,bbr将会根据当前的即时带宽以及其所处的pipe状态来计算pacingrate以及cwnd(见下文),后面我们会看到,这个即时带宽计算方法的突破式改进是bbr之所以简单且高效的根源。计算方案按照标量计算,不再关注数据的含义。在bbr运行过程中,系统会跟踪当前为止最大的即时带宽。

2.RTT的跟踪

bbr之所以可以获取非常高的带宽利用率,是因为它可以非常安全且豪放地探测到带宽的最大值以及rtt的最小值,这样计算出来的BDP就是目前为止TCP管道的最大容量。bbr的目标就是达到这个最大的容量!这个目标最终驱动了cwnd的计算。在bbr运行过程中,系统会跟踪当前为止最小RTT。

3.bbrpipe状态机的维持

bbr算法根据互联网的拥塞行为有针对性地定义了4中状态,即STARTUP,DRAIN,PROBE_BW,PROBE_RTT。bbr通过对上述计算的即时带宽bw以及rtt的持续观察,在这4个状态之间自由切换,相比之前的所有拥塞控制算法,其革命性的改进在于bbr拥塞算法不再跟踪系统的TCP拥塞状态机,而旨在用统一的方式来应对pacingrate和cwnd的计算,不管当前TCP是处在Open状态还是处在Disorder状态,抑或已经在Recovery状态,换句话说,bbr算法感觉不到丢包,它能看到的就是bw和rtt!

4.结果输出-pacingrate和cwnd

首先必须要说一下,bbr的输出并不仅仅是一个cwnd,更重要的是pacingrate。在传统意义上,cwnd是TCP拥塞控制算法的唯一输出,但是它仅仅规定了当前的TCP最多可以发送多少数据,它并没有规定怎么把这么多数据发出去,在Linux的实现中,如果发出去这么多数据呢?简单而粗暴,突发!忽略接收端通告窗口的前提下,Linux会把cwnd一窗数据全部突发出去,而这往往会造成路由器的排队,在深队列的情况下,会测量出rtt剧烈地抖动。

bbr在计算cwnd的同时,还计算了一个与之适配的pacingrate,该pacingrate规定cwnd指示的一窗数据的数据包之间,以多大的时间间隔发送出去。

5.其它外部机制的利用-fq,rack等

bbr之所以可以高效地运行且如此简单,是因为很多机制并不是它本身实现的,而是利用了外部的已有机制,比如下一节中将要阐述的它为什么在计算带宽bw时能如此放心地将重传数据也计算在内。..

带宽计算细节以及状态机

1.即时带宽的计算

bbr作为一个纯粹的拥塞控制算法,完全忽略了系统层面的TCP状态,计算带宽时它仅仅需要两个值就够了:

1)。应答了多少数据,记为delivered;

2)。应答1)中的delivered这么多数据所用的时间,记为interval_us。

将上述二者相除,就能得到带宽:

bw=delivered/interval_us

非常简单!以上的计算完全是标量计算,只关注数据的大小,不关注数据的含义,比如delivered的采集中,bbr根本不管某一个应答是重传后的ACK确认的,正常ACK确认的,还是说SACK确认的。bbr只关心被应答了多少!

这和TCP/IP网络模型是一致的,因为在中间链路上,路由器交换机们也不会去管这些数据包是重传的还是乱序的,然而拥塞也是在这些地方发生的,既然拥塞点都不关心数据的意义,TCP为什么要关注呢?反过来,我们看一下拥塞发生的原因,即数据量超过了路由器的带宽限制,利用这一点,只需要精心地控制发送的数据量就好了,完全不用管什么乱序,重传之类的。当然我的意思是说,拥塞控制算法中不用管这些,但这并不意味着它们是被放弃的,其它的机制会关注的,比如SACK机制,RACK机制,RTO机制等。

接下来我们看一下这个delivered以及interval_us的采集是如何实现的。还是像往常一样,我不准备分析源码,因为如果分析源码的话,往往难以抓住重点,过一段时间自己也看不懂了,相反,画图的话,就可以过滤掉很多诸如unlikely等异常流或者当前无需关注的东西:

TCP BBR拥塞控制算法深度解析

上图中,我故意用了一个极端点的例子,在该例子中,我几乎都是使用的SACK,当X被SACK时,我们可以根据图示很容易算出从Delivered为7时的数据包被确认到X被确认为止,一共有12-7=5个数据包被确认,即这段时间网络上清空了5个数据包!我们便很容易算出带宽值了。我的这个图示在解释带宽计算方法之外,还有一个目的,即说明bbr在计算带宽时是不关注数据包是否按序确认的,它只关注数量,即数据包被网络清空的数量。实实在在的计算,不猜Lost,不猜乱序,这些东西,你再怎么猜也猜不准!

计算所得的bw就是bbr此后一切计算的基准。

2.状态机

bbr的状态机转换图以及注释如下图所示:

TCP BBR拥塞控制算法深度解析

通过上述的状态机以及上一节的带宽计算方式,我们知道了bbr的工作方式:不断地基于当前带宽以及当前的增益系数计算pacingrate以及cwnd,以此2个结果作为拥塞控制算法的输出,在TCP连接的持续过程中,每收到一个ACK,都会计算即时的带宽,然后将结果反馈给bbr的pipe状态机,不断地调节增益系数,这就是bbr的全部,我们发现它是一个典型的封闭反馈系统,与TCP当前处于什么拥塞状态完全无关,其简图如下:

TCP BBR拥塞控制算法深度解析

这非常不同于之前的所有拥塞控制算法,在之前的算法中,我们发现拥塞算法内部是受外部的拥塞状态影响的,比如说在Recovery状态下,甚至都不会进入拥塞控制算法,在bbr进入内核之前,Linux使用PRR算法控制了Recovery状态的窗口调整,即便说这个时候网络已经恢复,TCP也无法发现,因为TCP的Recovery状态还未恢复到Open,这就是根源!

pacingrate以及cwnd的计算

这一节好像是重点中的重点,但是我觉得如果理解了bbr的带宽计算,状态机以及其增益系数的概念,这里就不是重点了,这里只是一个公式化的结论。

pacingrate怎么计算?很简单,就是是使用时间窗口内(默认10轮采样)最大BW。上一次采样的即时BW,用它来在可能的情况下更新时间窗口内的BW采样值集合。这次能否按照这个时间窗口内最大BW发送数据呢?这样看当前的增益系数的值,设为G,那么BW*G就是pacingrate的值,是不是很简单呢?!

至于说cwnd的计算可能要稍微复杂一点,但是也是可以理解的,我们知道,cwnd其实描述了一条网络管道(rwnd描述了接收端缓冲区),因此cwnd其实就是这个管道的容量,也就是BDP!

BW我们已经有了,缺少的是D,也就是RTT,不过别忘了,bbr一直在持续搜集最小的RTT值,注意,bbr并没有采用什么移动指数平均算法来“猜测”RTT(我用猜测而不是预测的原因是,猜测的结果往往更加不可信!),而是直接冒泡采集最小的RTT(注意这个RTT是TCP系统层面移动指数平均的结果,即SRTT,但brr并不会对此结果再次做平均!)。我们用这个最小RTT干什么呢?

当前是计算BDP了!这里bbr取的RTT就是这个最小RTT。最小RTT表示一个曾经达到的最佳RTT,既然曾经达到过,说明这是客观的可以再次达到的RTT,这样有益于网络管道利用率最大化!

我们采用BDP*G‘就算出了cwnd,这里的G’是cwnd的增益系数,与带宽增益系数含义一样,根据bbr的状态机来获取!

bbr的细节浅述

该节的题目比较怪异,既然是细节为什么又要浅述??

这是我的风格,一方面,说是细节是因为这些东西还真的很少有人注意到,另一方面,说是浅述,是因为我一般都不会去分析代码以及代码里每一个异常流,我认为那些对于理解原理帮助不大,那些东西只是在研发和优化时才是有用的,所以说,像往常一样,我这里的这个小节还是一如既往地去谈及一些“细节”。

1.豪放且大胆的安全探测

在看到bbr之后,我觉得之前的TCP拥塞控制算法都错了,并不是思想错了,而是实现的问题。

bbr之所以敢大胆的去探测预估带宽是因为TCP把更多的权力交给了它!在bbr之前,很多本应该由拥塞控制算法去处理的细节并不归拥塞控制算法管。在详述之前,我们必须分清两件事:

1)。传输多少数据?

2)。传输哪些数据?

按照“上帝的事情上帝管,凯撒的事情凯撒管”的原则,这两件事本来就该由不同的机制来完成,不考虑对端接收窗口的情况下,拥塞窗口是唯一的主导因素,“传输多少数据”这件事应该由拥塞算法来回答,而“传输哪些数据”这个问题应该由TCP拥塞状态机以及SACK分布来决定,诚然这两个问题是不同的问题,不应该杂糅在一起。

然而,在bbr进入内核之前的LinuxTCP实现中,以上两个问题并不是分得特别清。TCP的拥塞状态只有在Open时才是上述的职责分离的完美样子,一旦进入Lost或者Recovery,那么拥塞控制算法即便对“问题1):传输多少数据”都无能为力,在Linux的现有实现中,PRR算法将接管一切,一直把窗口下降到ssthresh,在Lost状态则反应更加激烈,直接cwnd硬着陆!随后等丢失数据传输成功后再执行慢启动。..。在重新进入Open状态之前,拥塞控制算法几乎不会起作用,这并不是一种高速公路上的模式(小碰擦,拍照后停靠路边,自行解决),更像是闹市区的交通事故处理方式(无论怎样,保持现场,直到交警和保险公司的人来现场处置)。

bbr算法逃离了这一切错误的做法,在bbr的patch中,并非只是完成了一个tcp_bbr.c,而是对整个TCP拥塞状态控制框架进行了大手术,我们可以从以下的拥塞控制核心函数中可见一斑:

staTIcvoidtcp_cong_control(structsock*sk,u32ack,u32acked_sacked,

intflag,conststructrate_sample*rs

{

conststrucTInet_connecTIon_sock*icsk=inet_csk(sk);

if(icsk-》icsk_ca_ops-》cong_control){

//如果是bbr,则完全被bbr接管,不管现在处在什么状态!

/*目前而言,只有bbr使用了这个机制,但我相信,不久的将来,

*会有越来越多的拥塞控制算法使用这个统一的完全接管机制!

*就我个人而言,在几个月前就写过一个patch,接管了tcp_cwnd_reducTIon

*这个prr的降窗过程。如果当时有了这个框架,我就有福了!

*/

icsk-》icsk_ca_ops-》cong_control(sk,rs);

return;

}

//否则继续以往的错误方法!

if(tcp_in_cwnd_reduction(sk)){

/*Reducecwndifstatemandates*/

//非Open状态中拥塞算法不受理窗口调整

tcp_cwnd_reduction(sk,acked_sacked,flag);

}elseif(tcp_may_raise_cwnd(sk,flag)){

/*Advancecwndifstateallows*/

tcp_cong_avoid(sk,ack,acked_sacked);

}

tcp_update_pacing_rate(sk);

}

在这个框架下,无论处在哪个状态(Open,Disorder,Recovery,Lost.。.),如果拥塞控制算法自己声明有这个能力,那么具体可以传输多少数据,完全由拥塞控制算法自行决定,TCP拥塞状态控制机制不再干预!

2.为什么bbr可以忽略Recovery和Lost状态

看懂了以上第1点,这一点就很容易理解了。

在第1点中,我描述了bbr确实忽略了Recovery等非Open的拥塞状态,但是为什么可以忽略呢?一般而言,很多人都会质疑,会说bbr采用这么鲁莽的方式,最终一定会让窗口卡住不再滑动,但是我要反驳,你难道不知道cwnd只是个标量吗?我画一个图来分析:

TCP BBR拥塞控制算法深度解析

看懂了吗?不存在任何问题!基本上,我们在讨论拥塞控制算法的时候,会忽略流量控制,因为不想让rwnd和cwnd杂糅起来,但是在这里,它们相遇了,幸运的是,并没有引发冲突!

然而,这并不是全部,本节旨在“浅析”,因此就不会关注代码处理的细节。在bbr的实现中,如果算法外部的TCP拥塞状态已经进入了Lost,那么cwnd该是多少呢?在bbr之前的拥塞算法中,包括cubic在内的所有算法中,当TCP核心实现从将cwnd调整到1或者prr到ssthresh一直到恢复到Open状态,拥塞算法无权干预流程,然而bbr不。虽然说进入Lost状态后,cwnd会硬着陆到1,然而由于bbr的接管,在Lost期间,cwnd还是可以根据即时带宽调整的!

这意味着什么?

这意味着bbr可以区别噪声丢包和拥塞丢包了!

a)。噪声丢包

如果是噪声丢包,在收到reordering个重复ACK后,由于bbr并不区分一个确认是ACK还是SACK引起的,所以在bbr看来,即时带宽并没有降低,可能还有所增加,所以一个数据包的丢失并不会引发什么,bbr依旧会给出一个比较大的cwnd配额,此时虽然TCP可能已经进入了Recovery状态,但bbr依旧按照自己的bw以及调整后的增益系数来计算cwnd的新值,过程中并不会受到任何TCP拥塞状态的影响。

如此一来,所有的噪声丢包就被区别开来了!bbr的宗旨是:“首先,在我的bw计算指示我发生拥塞之前,任何传统的TCP拥塞判断-丢包/时延增加,均全部失效,我并不care丢包和RTT增加”,随后brr又会说:“但是我比较care的是,RTT在一段时间内(随你怎么配,但我个人倾向于自学习)都没有达到我所采集到的最小值或者更小的值!这也许意味着着链路真的发生拥塞了!”。..

b)。拥塞丢包

将a)的论述反过来,我们就会得到奇妙的封闭性结论。这样,bbr不光是消除了吞吐曲线的锯齿(ssthresh所致,bbr并不使用ssthresh!),而且还消除了传统拥塞控制算法(指bbr以及封闭的傻逼Appex之前)的判断滞后性问题。在cubic发现丢包进而判断为拥塞时,拥塞可能已经缓解了,但是cubic无法发现这一点。为什么?原因在于cubic在计算新的cwnd的时候,并没有把当前的网络状态(比如bw)当作参数,而只是一味的按照数学意义上的三次方程去计算,这是错误的,这不是一个正确的反馈系统的做法!

基于a)和b),看到了吧,这就是新的拥塞判断机制!综合考虑丢包和RTT的增加:

b-1)。如果丢包时真的发生了拥塞,那么测量的即时带宽肯定会减少,否则,丢包即拥塞就是谎言。

b-2)。如果RTT增加时真的发生了拥塞,那么测量的即时带宽肯定会减少,否则,时延增加即拥塞就是谎言。

bbr测量了即时带宽,这个统一cwnd和rtt的计量,完全忽略了丢包,因此bbr的算法思想是TCP拥塞控制的正轨!事实上,丢包本就不应该作为一种拥塞的标志,它只是拥塞的表现。

3.状态机的点点滴滴

我在上文已经呈现了关于STARTUP,DRAIN,PROBE_BW,PROBE_RTT的状态图以及些许细节,当时我指出这个状态图的目标是为了完成bbr的目标,即填满整个网络!在这个状态图看来,所有已知的东西就是当前的即时带宽,所有可以计算的东西就是增益系数,然后根据这两个元素就可以轻易计算出pacingrate和cwnd,是不是很简单呢?整体看来就是就是这么简单,但是从细节上看,不同的pipe状态中的增益系数的计算却是值得推敲的,以下是bbr处在各个状态时的增益系数:

STARTUP:2~3

DRAIN:pacingrate的增益系数为1000/2885,cwnd的增益系数为1000/2005+1。

PROBE_BW:5/4,1,3/4,bbr在PROBE_BW期间会随机在这些增益系数之间选择当前的增益系数。

PROBE_RTT:1。但是在探测RTT期间,为了防止丢包,cwnd会强制cut到最小值,即4个MSS。

我们可以看到,bbr并没有明确的所谓“降窗时刻”,一切都是按照状态机来的,期间丝毫不会理会TCP是否处在Open,Recovery等状态。在此前的拥塞控制算法中,除了Vegas等基于延时的算法会在计算得到的targetcwnd小于当前cwnd时视为拥塞而在算法中降窗外,其它的所有基于丢包的算法中均是检测到丢包(RTO或者reordering个重复ACK)时降窗的,可悲的是,这个降窗过程并不受拥塞算法的控制,拥塞算法只能消极地给出一个ssthresh值,即降窗的目标,这显然是令人无助的!

bbr不再关注丢包事件,它并不把丢包当成很严重的事,这事也不归它管,只要TCP拥塞状态机控制机制可以合理地将一些包标记为LOST,然后重传它们便是了,bbr能做的仅仅是告诉TCP一共可以发出去多少数据,仅此而已!然而,如果TCP并没有把LOST数据包合理标记好,bbr并不care,它只是根据当前的bw和增益系数给出下一个pacingrate以及cwnd而已!

4.关于SchedFQ

这里涉及的是bbr之外的东西,Fairqueue!在bbr的patch最后,会发现几行注释:

NOTE:BBR*must*beusedwiththefqqdisc(“mantc-fq”)withpacing

enabled,sincepacingisintegraltotheBBRdesignand

implementation.BBRwithoutpacingwouldnotfunctionproperly,and

mayincurunnecessaryhighpacketlossrates.

记住这几行文字并理解它们。

这是bbr最为重要的一方面。虽然说Linux的TCP实现早就支持的pacingrate,但直到4.8版本都没有在TCP层面支持它,很大的一部分原因是因为借助已有的FQ可以很完美地实现pacingrate!TCP可以借助FQ来实现平缓而非突发的数据发送!

关于FQ的详细内容可以去看相关的manual和源码,这里要说的仅仅是,FQ可以根据bbr设置的pacingrate将一个cwnd内的数据的发送从“突发到网络”这种行为变换到“平缓发送到网路”的行为,所谓的平缓发送指的就是数据包是按照带宽速率计算的间隔一个个发送到网络的,而不是突发进网络的!

这样一来,就给了网络缓存以缓解的机会!记住,关键问题是bbr会在每收到ACK/SACK时计算bw,这个精确的测量不会漏掉任何可乘之机,即便当前网络拥塞了,它只要能在下一时刻恢复,bbr就可以发现,因此即时带宽通常可以表现这一点!

5.其它

还有关于令牌桶监管发现(ltpoliced)的主题,longterm采样的主题,留到后面的文章具体阐述吧,本文已经足够长了。

6.bufferbloat问题

关于深队列,数据包如何如何长时间排队但不丢包却引发RTO,对于浅队列,数据包如何如何频繁丢包。..谈起这个话题我一开始想滔滔不绝,后来想骂人,现在我三缄其口!任何人都知道端到端的QoS是一个典型的反馈系统,但是任何人都只是夸夸其谈,我选择的是闭口不说,如果非要我说,我的回答就是:不知道!

这是一个怎么说都能对又怎么说都能错的话题,就像股票预测那样,所以我选择闭嘴。

bbr算法到来后,单单从公共测试结果上看,貌似解决了bufferbloat问题,也许吧,也许。bbr好像真的开始在高速公路上飚车了。..最后给出一个测试图,来自《AquicklookatTCPBBR》:

TCP BBR拥塞控制算法深度解析

bbr代码的简单性和复杂性

我一向觉得TCP拥塞控制算法太过复杂,而复杂的东西基本上就是用来装逼的垃圾,直到遇到了bbr。

NealCardwell提供的patch简单而又直接,大家可以从该bbr的pach上一看究竟!在bbr模块之外,NealCardwell主要更改了tcp_ack函数里面关于delivered计数的部分以及拥塞控制主函数,这一切都十分显然,只要patch代码就可以一目了然。在数据包被发送的时候-不管是初次发送还是重传,均会被当前TCP的连接状况记录在该数据包的tcp_skb_cb中,在数据包被应答的时候-不管是被ACK还是被SACK,均会根据当前的状态和其tcp_skb_cb中状态计算出一个带宽,这些显而易见的逻辑相比任何人都应该知道哪里的代码被修改了!

然而,这种查找和确认的工作太令人感到悲哀,读懂代码是容易的,移植代码是无聊的,因为时间卡的太紧!我必须要说的是,如果一件感兴趣的事情变成了必须要完成的工作,那么做它的激情起码减少了1/4,OK,还不算太坏,然而如果这个必须完成的工作有了deadline,那么激情就会再减少1/4,最后,如果有人在背后一直催,那么完蛋,这件事可以瞬间完成,但是我可以郑重说明这是凑合的结果!但是实际上,这件事本应该可以立即快速有高质量的完成并验收!

写在最后

我本来应该可以把本文写的更长些,但是打住了,因为我没有时间,没有精力,更没有业务去继续,我写这一切纯粹是闲的,周末比较无聊,所以信手拈来几笔画了几张图,完成了本文。

我之所以不继续下去的原因更多的是只是因为没有时间!我比较讨厌急功近利,我比较喜欢工匠精神,一种时间打磨精品的精神,一种自由引导创造的精神,如果没有时间,什么都是掰扯!

比较讽刺的是,这个bbr算法显然不是一个“一周或者两周搞定的算法”,但是中国人却希望花更少的时间去将其“拿来”就用。..。中国人认为任何事情都是可以靠加班可以解决的,所谓愚公移山,精卫填海,铁杵磨针,人心齐泰山移的精神早已深入人心,殊不知这种XX行径根本经不起推敲,你把全中国14亿不止的人聚集起来一起去推泰山,看能推得动么?你真的用一根铁杵去磨针么?为什么不去想着买针!?傻逼!我不说了,本文所写的技术中透露的态度,与生活无关,亦与工作无关,这种态度完全是我自己一个人的世界,与不理解以及反对的人,不讨论,不争论,不辩论。..!技术是大家的,态度是个人的。
编辑:hfy

下载发烧友APP

打造属于您的人脉电子圈

关注电子发烧友微信

有趣有料的资讯及技术干货

关注发烧友课堂

锁定最新课程活动及技术直播

电子发烧友观察

一线报道 · 深度观察 · 最新资讯
收藏 人收藏
分享:

评论

相关推荐

《计算机体系结构—网络篇4》之TTL、TCP/IP协议族详述、ARP欺骗、DNS劫持

点击右方"佳嵌"图标,可以看所有课程。我们将《嵌入式工程师-系列课程》分成两大阶段:第一阶段:《计算机体系结构》课程&n
发烧友学院发表于 2018-12-08 00:00 3247次阅读
《计算机体系结构—网络篇4》之TTL、TCP/IP协议族详述、ARP欺骗、DNS劫持

TCP/IP十个问题

本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养。....
发表于 2020-11-04 14:46 145次阅读
TCP/IP十个问题

TCP/IP介绍

TCP/IP 是用于因特网 (Internet) 的通信协议。 计算机通信协议(Computer Communication Protocol)计算机...
发表于 2020-11-04 11:44 101次阅读
TCP/IP介绍

TCP/IP必会的10个问题图解

一、TCP/IP模型 TCP/IP协议模型(Transmission Control Protoco....
发表于 2020-11-03 09:34 117次阅读
TCP/IP必会的10个问题图解

防止网络拥塞现象的TCP拥塞控制算法

为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制。最初由V.Jacobson在1988年的论....
发表于 2020-10-29 14:54 134次阅读
防止网络拥塞现象的TCP拥塞控制算法

TCP传输流量控制和拥塞避免方案

先来了解2个TCP的概念: MSS:Maximum Segment Size,TCP一次传输发送的最....
发表于 2020-10-29 11:17 291次阅读
TCP传输流量控制和拥塞避免方案

常用的网络协议介绍及层次关系

一、OSI模型 名称 层次 功能 物理层 1 实现计算机系统与网络间的物理连接 数据链路层 2 进行....
发表于 2020-10-28 11:25 271次阅读
常用的网络协议介绍及层次关系

网络协议:TCP的三次握手,四次挥手技术解析

TCP 包头格式 老规矩,咱们先来看看 TCP 头的格式。 从上面这个图可以看出,它比 UDP 要复....
发表于 2020-10-26 15:28 509次阅读
网络协议:TCP的三次握手,四次挥手技术解析

TCP协议和UDP协议对比 UDP协议的原理及应...

前言 TCP协议在不可靠的网络环境上提供了可靠的通信通道,隐藏了大量的底层细节,使应用程序更加简洁。....
发表于 2020-10-26 15:05 438次阅读
TCP协议和UDP协议对比 UDP协议的原理及应...

通信网络协议之TLS技术概念原理及其网络优化

TLS协议的目标是为信息传输提供三个基本的保证:加密、身份验证和数据完整性。这三种服务并不是必须的,....
发表于 2020-10-24 10:34 856次阅读
通信网络协议之TLS技术概念原理及其网络优化

关于通信网络中常见的网络协议盘点

在网络的各层中存在着许多协议, 它是定义通过网络进行通信的规则, 接收方的发送方同层的协议必须一致,....
发表于 2020-10-24 10:32 309次阅读
关于通信网络中常见的网络协议盘点

理解TCP/IP协议遇到的三个疑问解答

虽然国际标准化组织制定了这样一个网络协议的模型,但是实际上互联网通讯使用的网络协议是TCP/IP网络....
发表于 2020-10-22 14:40 264次阅读
理解TCP/IP协议遇到的三个疑问解答

详解TCP/IP协议总结

IP协议头当中,最重要的就是TTL(IP允许通过的最大网段数量)字段(八位),规定该数据包能穿过几个....
发表于 2020-10-18 11:02 304次阅读
详解TCP/IP协议总结

串口服务器概述和功能介绍

串口服务器设备概述 串口服务器设备的作用是提供串口转以太网的功能,可以将RS232、RS485、RS....
发表于 2020-10-15 16:27 324次阅读
串口服务器概述和功能介绍

互联网核心协议之一:TCP的基础知识

TCP 是互联网核心协议之一,本文介绍它的基础知识。 一、TCP 协议的作用 互联网由一整套协议构成....
发表于 2020-10-13 11:25 302次阅读
互联网核心协议之一:TCP的基础知识

工业以太网到底有什么类型

工业以太网的使用逐渐广泛,业内人士对于工业以太网也更为熟悉。在往期文章中,小编对工业以太网有过诸多介....
发表于 2020-10-11 10:44 158次阅读
工业以太网到底有什么类型

工业以太网交换机和到底有什么区别

工业以太网正逐步被使用,学习工业以太网的朋友也增益增多。与工业以太网不可分离的设备便是工业以太网交换....
发表于 2020-10-11 10:44 308次阅读
工业以太网交换机和到底有什么区别

TCP协议拥塞控制的滑动窗口协议解析

TCP协议作为一个可靠的面向流的传输协议,其可靠性和流量控制由滑动窗口协议保证,而拥塞控制则由控制窗....
发表于 2020-10-08 17:04 414次阅读
TCP协议拥塞控制的滑动窗口协议解析

Linux操作系统修改内核参数的三种方法详细说明

linux内核的参数设置怎么弄呢,Linux 操作系统修改内核参数有以下三种方式:
发表于 2020-10-06 18:03 395次阅读
Linux操作系统修改内核参数的三种方法详细说明

如何决定协议属于哪个层?OSI模型是关键参考点

开放系统互连( OSI )模型是了解网络的第一道关。它是在 ISO / IEC7498-1 中正式定....
发表于 2020-09-30 14:42 461次阅读
如何决定协议属于哪个层?OSI模型是关键参考点

TCP、VISA通讯

TCP、VISA通讯,仅供参考
发表于 2020-09-29 19:19 182次阅读
TCP、VISA通讯

浅谈OpenAMP的应用程序中RPMSG_ADD...

在OpenAMP的应用程序中,经常看到地址被设置成RPMSG_ADDR_ANY。在通信过程中,为什么....
发表于 2020-09-29 13:43 391次阅读
浅谈OpenAMP的应用程序中RPMSG_ADD...

PLC作为TCP服务器的实战应用

对于自控或电气工程师来说,西门子PLC是每个人都非常熟悉的一款PLC品牌;而对于上位机开发工程师来说....
发表于 2020-09-25 11:44 553次阅读
PLC作为TCP服务器的实战应用

labviewTCP通讯为什么只能发送一次数据?

在程序框图里面我已经使用WHILE循环在一直读数据,然后又使用事件结构想实现发送数据的功能,但是现在点击以及布...
发表于 2020-09-16 13:19 124次阅读
labviewTCP通讯为什么只能发送一次数据?

浅谈TCP面向连接的虚电路实现

为面向连接的会话建立的通信信道自然是逻辑的,常被称作虚电路(virtual circuit),它关心....
发表于 2020-09-07 15:51 146次阅读
浅谈TCP面向连接的虚电路实现

一文详谈HTTP协议的长连接和短连接

HTTP的长连接和短连接本质上是TCP长连接和短连接。HTTP属于应用层协议,在传输层使用TCP协议....
发表于 2020-09-07 10:52 313次阅读
一文详谈HTTP协议的长连接和短连接

学嵌入式网络编程少不了的协议:TCP/IP

1、OSI参考模型及TCP/IP参考模型读者一定都听说过著名的OSI协议参考模型,它是基于国际标准化组织(ISO...
发表于 2020-08-25 18:52 909次阅读
学嵌入式网络编程少不了的协议:TCP/IP

请问M3或M4加载TCP/IP协议以后能达到的理想传输速度是多少?

M3或M4加载TCP/IP协议以后能达到的理想传输速度是多少?...
发表于 2020-08-19 09:20 0次阅读
请问M3或M4加载TCP/IP协议以后能达到的理想传输速度是多少?

过来人的经验:程序员如何对自己的职业有一定的认识

这篇文章的主要内容主要是我今年 3 月份在腾讯做的直播,主要是想让一些技术人员对世界有一个大体的认识....
发表于 2020-08-13 14:26 462次阅读
过来人的经验:程序员如何对自己的职业有一定的认识

通俗地讲解TCP的固定窗口和滑动窗口

TCP 还提供了流量控制机制。 流量控制可以调整给定会话中源和目的之间的数据流速,有助于保持 TCP....
发表于 2020-08-13 09:56 681次阅读
通俗地讲解TCP的固定窗口和滑动窗口

请教一下W5300TCP连接的问题

不知道哪里的内容有违规了,只能发图片了,抱歉! ...
发表于 2020-08-11 19:46 202次阅读
请教一下W5300TCP连接的问题

如何利用Java代码实现UDP和TCP通信

UDP是一种面向无连接的协议,因此传输过程中不能保证数据的完整性。jdk提供了网络通信包,在java....
发表于 2020-08-04 10:03 135次阅读
如何利用Java代码实现UDP和TCP通信

请问怎么判断TCP断开了?

怎么判断TCP断开了?设置为透传的。
发表于 2020-07-31 06:24 0次阅读
请问怎么判断TCP断开了?

如何分辨TCP(虚电路)和UDP

在传输方式上,虚电路服务在源、目的主机通信之前,应先建立一条虚电路,然后才能进行通信,通信结束应将虚....
发表于 2020-07-13 17:05 460次阅读
如何分辨TCP(虚电路)和UDP

如何使用无线技术实现大功率快速充电

无线技术控制充电的方式已经成为新的发展潮流和趋势,随着CANFD在汽车电子与轨道交通等行业的广泛应用....
发表于 2020-07-04 11:38 778次阅读
如何使用无线技术实现大功率快速充电

5G时代摒弃现用的TCP/IP协议,争取自主研发...

印度选择摒弃一切中国的App,说是出于安全考虑。他们大方地告诉所有人,这些App可能对他们的国防安全....
发表于 2020-07-03 08:47 688次阅读
5G时代摒弃现用的TCP/IP协议,争取自主研发...

详谈TCP网络编程的套接字和端口

当网络中的两台计算机进行通信时,除了确定计算机在网络中的IP地址外,还需要确定计算机中的一个端口,端....
发表于 2020-07-01 10:09 726次阅读
详谈TCP网络编程的套接字和端口

深入了解Modbus TCP协议

协议数据单元是Modbus的通用数据结构,它与底层物理结构无关,Modbus RTU、Modbus ....
发表于 2020-06-25 17:39 409次阅读
深入了解Modbus TCP协议

深入浅出DDoS攻击防御——攻击

DDoS(Distributed Denial of Service,分布式拒绝服务)攻击的主要目的....
发表于 2020-06-20 09:46 810次阅读
深入浅出DDoS攻击防御——攻击

谁有tcp连接和发送的示例代码啊?

我现在能用目前的代码实现udp发送和接收,但都不是基于连接的,怎样让设备成为一个tcp服务端。 其实我用套接字实现了...
发表于 2020-06-15 14:40 50次阅读
谁有tcp连接和发送的示例代码啊?

TCP, ISO- on- TCP, UDP连接

TSEND“ & „TRCV “ 发送和接收数据(TCP 和ISO - on- TCP)„T....
发表于 2020-06-12 15:11 742次阅读
TCP, ISO- on- TCP, UDP连接

在TCP Socket例程基础上添加led闪烁遇到问题的解决办法?

我想在通过接收数据的时候使CC3200 Lanuchpad上的3颗led灯闪烁,已经添加了头文件和修改了pinmuxconfig,但是一旦使...
发表于 2020-06-11 12:29 63次阅读
在TCP Socket例程基础上添加led闪烁遇到问题的解决办法?

自动连接管理的通讯块建立连接并发送数据的主要原因

自动连接管理的通讯块( 仅用于S7- 1200)
发表于 2020-06-10 11:11 484次阅读
自动连接管理的通讯块建立连接并发送数据的主要原因

通信协议之间的建立连接以及数据传输

无连接管理功能的通讯块 1. „ TCON „ 建立连接 2.„TDISCON“ 断开连....
发表于 2020-06-04 16:18 548次阅读
通信协议之间的建立连接以及数据传输

Linux Rootkit如何避开内核检测的

行文至此,我们应该已经可以说出无数种方法来完成上面的事情,对我个人而言,我的风格肯定又是二进制hoo....
发表于 2020-06-03 15:56 813次阅读
Linux Rootkit如何避开内核检测的

LabVIEW 做TCP服务端怎么把多个客户端区分开

LabVIEW 做TCP服务端因为要连接四个客户端假如有四个客户端分别是1号 2号 3号 4号,这四个客户端分开单独控制...
发表于 2020-05-29 16:48 733次阅读
LabVIEW 做TCP服务端怎么把多个客户端区分开

高精度无线温湿度传感器应用在那些方面

无线温湿度传感器的概述: 无线温湿度传感器的特点及应用领域,温湿度传感器是一款可以将采集到的温湿度数....
发表于 2020-05-28 16:28 314次阅读
高精度无线温湿度传感器应用在那些方面

无锡艾默森Modbus TCP转Profinet...

无锡艾默森Modbus TCP转Profinet网关基本说明:无锡艾默森PN3011实现MODBUS....
发表于 2020-05-28 15:09 250次阅读
无锡艾默森Modbus TCP转Profinet...

Linux内核架构--基本概念

首先,Linux整体的架构如图: 再来看Linux内核架构, 内核由五个主要子系统组成: Proce....
发表于 2020-05-20 09:28 91次阅读
Linux内核架构--基本概念

深入探讨HTTP3原理及应用

在万维网诞生之时,万维网仅仅是一群交换超文本文件的计算机。在计算机之间交换文件是一个简单的程序,包括....
发表于 2020-05-17 11:31 1182次阅读
深入探讨HTTP3原理及应用

4串口服务器

4串口服务器ZLAN5443A是上海卓岚信息科技有限公司开发的新一代4串口服务器。可以实现4路串口数....
发表于 2020-05-15 15:41 178次阅读
4串口服务器

485串口联网服务器

485串口联网服务器可以将485等串口设备连接到网络中,让这些设备采集的数据发往网络,建立串口和网络....
发表于 2020-05-15 15:11 78次阅读
485串口联网服务器

基于TCP/AQM流体动力学模型实现H∞拥塞控制...

Internet的拥塞控制已经成为当前计算机网络研究领域的一个热点。网络拥塞的发生来源于网络资源和流....
发表于 2020-05-14 09:41 189次阅读
基于TCP/AQM流体动力学模型实现H∞拥塞控制...

WebSocket工作原理及使用方法

它有很多名字; WebSocket,WebSocket协议和WebSocket API。从首选的消息....
发表于 2020-05-05 22:12 1009次阅读
WebSocket工作原理及使用方法

四种远程调用的区别和联系

首先看下这张图要实现网络通信,底层要通过TCP的三次握手连接,而我们最熟悉的应该是HTTP协议,那H....
发表于 2020-04-21 17:26 1840次阅读
四种远程调用的区别和联系

如何学习TCP IP笔记资料概述

TCP/IP协议簇 2、应用层 Telnet、SNMP、FTP、SSH、TFTP、HTTP、HT....
发表于 2020-04-18 11:46 1491次阅读
如何学习TCP IP笔记资料概述