tcp使用什么进行流量控制(TCP采用什么来实现流量控制)

      最后更新:2024-02-18 10:39

      从源向目的传送数据段的过程中,tcp使用什么机制提供流量控制

      1.采用面向连接的三次握手实现可靠对象传输。 2.使用数据窗口机制协商队列大小实现数据队列传输。 3.通过序列化应答和必要时重发数据包,TCP 为应用程序提供了可靠的传输流和虚拟连接服务。 下面是找到的长篇大论中比较好的文章: 一、TCP协议
      从源向目的传送数据段的过程中,tcp使用什么机制提供流量控制

      TCP协议是如何实现差错控制和流量控制?

      流量控制: 1、流量控制是管理两端的流量,以免会产生发送过块导致收端溢出,或者因收端处理太快而浪费时间的状态。用的是:滑动窗口,以字节为单位2、窗口有3种动作:展开(右边向右),合拢(左边向右),收缩(右边向左)这三种动作受接收端的控制。合拢:表示已经收到相应字节的确认了展开:表示允许缓存发送更多的字节收缩(非常不希望出现的,某些实现是禁止的):表示本来可以发送的,现在不能发送;但是如果收缩的是那些已经发出的,就会有问题;为了避免,收端会等待到缓存中有更多缓存空间时才进行通信。发端窗口的大小取决于收端的窗口大小rwnd(TCP报文的窗口大小字段)和拥塞窗口大小cwnd(见拥塞控制)发端窗口大小 = min{ rwnd , cwnd };3、关闭窗口:窗口缩回有个例外,就是发送rwnd=0表示暂时不愿意接收数据。这种情况下,发端不是把窗口收缩,二是停止发送数据。(为了比避免死锁,会用一些探测报定时发送试探,见定时器一节)4、问题:某些时候,由于发端或收端的数据很慢,会引起大量的1字节数据痛惜,浪费很多资源。(1)、发端的进程产生数据很慢时候,时不时的来个1字节数据,那么TCP就会1字节1字节的发送,效率很低。解决方法(Nagle算法):a、将第一块数据发出去b、然后等到发送缓存有足够多的数据(最大报文段长度),或者等到收端确认的ACK时再发送数据。c、重复b的过程(2)、收端进程由于消耗数据很慢,所以可能会有这么一种情况,收端会发送其窗口大小为1的信息,然后有是1字节的传输解决办法(2种)a、Clark方法:在接收缓存的一半变空,或者有足够空间放最大报文长度之前,宣告接收窗口大小为0b、推迟确认:在对收到的报文段确认之前等待到足够的接收缓存,或者等待到一个时间段(现在一般定义500ms)拥塞控制:1、如果网络上的负载(发送到网络上的分组数)大于网络上的容量(网络同时能处理的分组数),就可能引起拥塞,判断网络拥塞的两个因素:延时和吞吐量。拥塞控制机制是:开环(预防)和闭环(消除)(见网络原理相关书籍,略)tcp处理拥塞的三种策略:慢启动(指数增大),拥塞避免(加法增大),拥塞检测(除2减少,或叫做乘法减少)2、慢启动:指数增大/* ssthresh是慢开始门限,slow start threshold表示一个上限,一般的实现为65535B */cwnd = 1;(1表示一个MSS报文段,不是一个字节)while ( cwnd < ssthresh )if( 发出的报文段确认 )cwd *= 2;3、拥塞避免:加法增大当到达ssthresh之后,就是加法阶段了,每收到一个确认,cwd += 1;4、拥塞检测:乘法减少(除2减少)当报文需要重传时,说明拥塞可能发生了,由于重传有2种情况,所以也分两种处理(1)、由于超时重传,这是拥塞的可能性比较大,如下做强反映调整a、 ssthresh /= 2;b、 cwnd = 1;重新慢启动过程(2)、由于收到3个重复的ACK的重传,采取弱反映:a、ssthresh /= 2;b、cwnd = ssthresh;c、开始拥塞避免过程差错控制:1、TCP必须保证数据:按序,没有差错,没有部分丢失,没有重复的交给应用层。方法就是:校验和,确认,超时重传2、校验和:和UDP的做法一样,也要伪首部,和UDP不同的是这个功能在TCP中是必须的3、确认:ACK的确认机制(下面是一些原则)a、ACK报文不需要确认,也不消耗序号b、当一端发送数据时,尽量包含捎带确认。c、收端推迟发送ACK报文段,如果仅有一个未确认的按序报文段;延迟到500ms,或者有第二个报文段接收时(转d),或者有数据要发送时(转b)d、任何时候,不能有两个(以上)未确认的报文段(就是说如果收端有两个未确认的按序报文段,就马上发送ACK报文段进行确认)e、当收到一个序号比期望序号还大的报文段时,马上发送ACK,让发端进行快重传f、收到重复的报文段,就立即发送确认(解决ACK丢失问题)g、丢失的报文段到达,发送确认,表示已经收到了丢失的报文4、确认类型累计确认:收端忽略掉所有失序报文,告知发端他期待下一个收到的序号,叫做肯定累计ACK。肯定是说:丢弃的,丢失的,重复的都不报告。选择确认(SACK):在某些新TCP实现里面实现了这个东西,报告失序和重复的数据,作伪TCP首部选项字段的一部分。5、重传(两种情况) : 重传定时器时间到,或者 发端收到重复的三个ACK(快重传) 给分儿,采纳
      你需要专业级的交换机
      TCP协议是如何实现差错控制和流量控制?

      TCP 流量控制与拥塞控制

      TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的。为了通过IP数据报实现可靠性传输,需要考虑很多事情,侧如数据的破坏、丢包、重复以及分片顺序混乱等问题。如不能解决这些问题,也就无从谈起可靠传输。TCP通过校验和、序列号、确认应答、重发控制、连接管理、以及窗口控制等机制来实现可靠性传输。TCP建立连接的实质是,主机A和主机B告知彼此的第一个发送字节的初始序列号,建立连接后对每一个发送的字节都需要以初始序列号为基点进行编号,需要对方来确认每一个字节编号都已经成功接收,双方初始序列号是由操作系统动态生成的随机的值,一般每个TCP 会话都会有不一样的初始序列号,占四个字节。TCP通过肯定的确认应答(ACK) 实现可靠的数据传输。当发送端将数据发出之后会等待对端的确认应答。如果有确认应答,说明数据已经成功到达对端。反之,则数据丢失的可能性很大。在一定时间内没有等到确认应答,发送端就可以认为数据已经丢失,并进行重发由此,即使产生了丢包,仍然能够保证数据能够到达对端,实现可靠传输。如果数据被重发之后若还是收不到确认应答,则进行再次发送。此时确认应答的时间将会以2倍、4信的指数函数延长。达到一定次数后,如果任没有任何确认应答返回,就会判断为网络发生异常,强制关闭连接,并且通知应用通信异常强行终止。发送端根据自己的实际情况发送数据。但是,接收端可能收到的是一个毫无关系的数据包又可能会在处理其他问题上花费一些时间。因此在为这个数据包做其他处理时会耗费一些时间,甚至在高负荷的情况下无法接收任何数据。如此一来,如果接收端将本应该接收的数据丢弃的话,就又会触发重发机制,从而导致网络流量的无端浪费。为了防止这种现象的发生,TCP 提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量。这就是所谓的流控制。它的具体操作是,接收端主机向发送端主机通知自己可以接收数据的大小,于是发送端会发送不超过这个限度的数据。该大小限度就被称作窗口大小。在前面6.4.6 节中所介绍的窗口大小的值就是由接收端主机决定的。TCP 首部中,专门有一个字段用来通知窗口大小。接收主机将自己可以接收的缓冲区大小放人这个字段中通知给发送端。这个字段的值越大,说明网络的吞吐量越高。不过,接收端的这个缓冲区一旦面临数据溢出时,窗口大小的值也会随之被设置为一个更小的值通知给发送端,从而控制数据发送量。也就是说,发送端主机会根据接收端主机的指示,对发送数据的量进行控制。这也就形成了一个完整的TCP 流控制(流量控制)。因为 TCP 的窗口控制,收发主机之间即使不再以一个数据段为单位发送确认应答,也能够连续发送大量数据包。然而,如果在通信刚开始时就发送大量数据,也可能会引发其他问题。一般来说,计算机网络都处在一个共享的环境。因此也有可能会因为其他主机之间的通信使得网络拥堵。在网络出现拥堵时,如果突然发送一个较大量的数据,极有可能会导致整个网络的瘫痪。TCP 为了防止该问题的出现,在通信一开始时就会通过一个叫做慢启动的算法得出的数值,对发送数据量进行控制。首先,为了在发送端调节所要发送数据的量,定义了一个叫做“拥塞窗口”的概念。于是在慢启动的时候,将这个拥塞窗口的大小设置为1个数据段发送数据,之后每收到一次确认应答(ACK),拥塞窗口的值就加1MSS。在发送数据包时,将拥塞窗D的大小与接收端主机通知的窗口大小做比较,然后按照它们当中较小那个值,发送比其还要小的数据量。如果重发采用超时机制,那么拥塞窗口的初始值可以设置为1以后再进行慢启动修正。有了上述这些机制,就可以有效地减少通信开始时连续发包导致的网络拥堵,还可以避免网络拥塞情况的发生。慢启动算法的基本思想是当TCP开始在一个网络中传输数据或发现数据丢失并开始重发时,首先慢慢的对网路实际容量进行试探,避免由于发送了过量的数据而导致阻塞。主机发送了一个报文后就要停下来等待应答,每收到一个应答,拥塞窗口就增加一段长度,直至等于设定的阈值。比如我们可以先让发送方发一个包,等这个包被 ack 之后,我们再发 2 个包,这 2 个被 ack 之后再发 4 个包,以此类推,让一次所发的包数量慢慢增加,这就是慢启动。谈 TCP 离不开 窗口的概念,有 congestion window,receive window,sliding window 等等。window 是以 tcp segment 数量为单位,我们可以说当前 window 值由几个 tcp 包构成,而当我们说 window size 的时候,又是在说一个 window 所包含的字节数。window size 除了和 tcp segment 的数量有关之外,还和单个 tcp segment 的最大 size 有关,即 MSS 值。发送方的 Window 大小称之为 CWND(congestion window),接收方的 Window 大小称之为 RWND(receiver window,或 advertised window)。CWND 表示当前发送方可以发送多少个 TCP 包,而 RWND 表示当前接收方还能接收多少个 TCP 包。值得注意的是,CWND 是一个发送方本地的值,并不会在网络上传输。而 RWND 则是由接收方告知发送方的,是存在于 TCP 包的协议中,会通过网络传输。比如,A主机发送给B window 大小为8192,意思是:B主机最多可以连续发送8192 字节给A主机(一般来说,8192字节就是A主机的接收缓冲区大小),如果B主机不小心发送超过8192字节,如果application 没有及时取走,则超过 8192 自己数据可能会因为A主机的接收缓冲区满而被丢弃,所以B主机会严格遵守A的 RWND 的大小,如果A主机通告它的window大小为 0,则B主机一定不会发送数据。TCP首部中 Window Size 占两个byte,最大值为65535。MTU: Maximum Transmit Unit,最大传输单元,即物理接口(数据链路层)提供给其上层(通常是IP层)最大一次传输数据的大小;以普遍使用的以太网接口为例,缺省MTU=1500 Byte,这是以太网接口对IP层的约束,如果IP层有<=1500 byte 需要发送,只需要一个IP包就可以完成发送任务;如果IP层有> 1500 byte 数据需要发送,需要分片才能完成发送,这些分片有一个共同点,即IP Header ID相同。MSS:Maximum Segment Size ,TCP提交给IP层最大分段大小,不包含TCP Header和 TCP Option,只包含TCP Payload ,MSS是TCP用来限制application层最大的发送字节数。如果底层物理接口MTU= 1500 byte,则 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte,如果application 有2000 byte发送,需要两个segment才可以完成发送,第一个TCP segment = 1460,第二个TCP segment = 540。Persist Timer: 用于周期探测对方receiver window size 是否依然为0的定时器。比如,A主机通告它的window大小为 0,则B一定不会发送数据。B主机也不会一直等下去,如果一直等下去则会发生死锁。为了防止这种情况的死锁发生,发送者使用了一个持续计时器(persiet timer)来周期性的询问接收者是否已增加了窗口。从发送者发出的这些段称为窗口探测(window probes)。在iOS设备上抓包比较方便,除了常用的,如:Charles、Paw 等软件外,我们还可以使用tcpdump。以下是抓包的步骤:(待续)
      TCP 流量控制与拥塞控制

      TCP是如何通过滑动窗口协议实现流量控制的?

      TCP的窗口以字节为单位进行调整,以适应接收方的处理能力。处理过程如下: (1)TCP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓存区;(2)发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;(3)发送方根据确认信息,改变窗口的尺寸,增加或者减少发送未得到确认的字节流中的字节数。调整过程包括:如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍。 TCP的窗口机制和确认保证了数据传输的可靠性和流量控制。
      00000000000000000 data ll windowpart 211110000000000000000000000000000000 datall windowpart 311110000000000000000000000000000000 datallwindowpart 411111001100000000000000000000000000 datallwindowpart 511111101100000000000000000000000000 data11window....and so on do you understand ?
      T C P使用一种窗口(w i n d o w)机制来控制数据流。当一个连接建立时,连接的每一端分配一个缓冲区来保存输入的数据,并将缓冲区的尺寸发送给另一端。当数据到达时,接收方发送确认,其中包含了自己剩余的缓冲区尺寸。剩余的缓冲区空间的大小被称为窗口( w i n d o w) ,指出窗口大小的通知称为窗口通告(window advertisement) 。接收方在发送的每一确认中都含有一个窗口通告。 如果接收方应用程序读数据的速度能够与数据到达的速度一样快,接收方将在每一确认中发送一个正的窗口通告。然而,如果发送方操作的速度快于接收方(由于C P U更快) ,接收到的数据最终将充满接收方的缓冲区,导致接收方通告一个零窗口( zero window) 。发送方收到一个零窗口通告时,必须停止发送,直到接收方重新通告一个正的窗口。TCP的窗口以字节为单位进行调整,以适应接收方的处理能力。处理过程如下:(1)TCP连接阶段,双方协商窗口尺寸,同时接收方预留数据缓存区;(2)发送方根据协商的结果,发送符合窗口尺寸的数据字节流,并等待对方的确认;(3)发送方根据确认信息,改变窗口的尺寸,增加或者减少发送未得到确认的字节流中的字节数。调整过程包括:如果出现发送拥塞,发送窗口缩小为原来的一半,同时将超时重传的时间间隔扩大一倍。 TCP的窗口机制和确认保证了数据传输的可靠性和流量控制。
      TCP是如何通过滑动窗口协议实现流量控制的?

      tcp协议的主要功能是什么

      1、完成对数据报的确认、流量控制和网络拥塞。2、自动检测数据报,并提供错误重发的功能。3、将多条路径传送的数据报按照原来的顺序进行排列。4、控制超时重发,自动调整超时值。tcp协议简介:TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内 [1] 另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。
      功能是完成对数据报的确认、流量控制和网络拥塞。1、在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。2、在保证可靠性上,采用超时重传和捎带确认机制。3、在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。TCP是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提供一条具有下列特点的通信方式:1、基于流的方式。2、面向连接。3、可靠通信方式。4、在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销。5、通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。
      tcp协议的主要功能:1、完成对数据报的确认、流量控制和网络拥塞;2、自动检测数据报,并提供错误重发的功能;3、将多条路径传送的数据报按照原来的顺序进行排列;4、控制超时重发,自动调整超时值。tcp协议的工作方式1、建立连接TCP是因特网中的传输层协议,使用三次握手协议建立连接。当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的 SYN 执行 ACK 确认。这种建立连接的方法可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。2、连接终止建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。
      tcp协议的主要功能是什么

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类