tcp有连接可靠(简述tcp建立连接的过程)

      最后更新:2023-05-20 23:12

      TCP 如何保证可靠性

      [TOC] 1. TCP可靠性的保证机制总结2. 网络基础:TCP协议-如何保证传输可靠性3. TCP协议的流量控制和拥塞控制4. TCP 的那些事儿(下)5. TCP拥塞控制:慢开始、拥塞避免、快重传、快恢复TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分,但是UDP的检验和字段为可选的,而TCP中是必须有的。计算方法为:在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算,如最终结果为检验字段所有位是全1则正确(UDP中也是全为1则正确),否则存在错误。TCP将每个数据包都进行了编号,这就是序列号。序列号的作用:a、保证可靠性(当接收到的数据总少了某个序号的数据时,能马上知道)b、保证数据的按序到达c、提高效率,可实现多次发送,一次确认d、去除重复数据数据传输过程中的确认应答处理、重发控制以及重复控制等功能都可以通过序列号来实现TCP通过确认应答机制实现可靠的数据传输。在TCP的首部中有一个标志位——ACK,此标志位表示确认号是否有效。接收方对于按序到达的数据会进行确认,当标志位ACK=1时确认首部的确认字段有效。进行确认时,确认字段值表示这个值之前的数据都已经按序到达了。而发送方如果收到了已发送的数据的确认报文,则继续传输下一部分数据;而如果等待了一定时间还没有收到确认报文就会启动重传机制。当报文发出后在一定的时间内未收到接收方的确认,发送方就会进行重传(通常是在发出报文段后设定一个闹钟,到点了还没有收到应答则进行重传)。一种情况是发送包丢失了,其基本过程如下:另一种情况是ACK 丢失,过程如下:当接收方接收到重复的数据时就将其丢掉,重新发送ACK。而要识别出重复的数据,前面提到的序列号就起作用了。重传时间的确定:重传时间的确定:报文段发出到收到应答中间有一个报文段的往返时间RTT,显然超时重传时间RTO会略大于这个RTT,TCP会根据网络情况动态的计算RTT,即RTO是不断变化的。在Linux中,超时以500ms为单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍。其规律为:如果重发一次仍得不到应答,就等待2 500ms后再进行重传,如果仍然得不到应答就等待4 500ms后重传,依次类推,以指数形式递增,重传次数累计到一定次数后,TCP认为网络或对端主机出现异常,就会强行关闭连接。连接管理机制即TCP建立连接时的三次握手和断开连接时的四次挥手。接收端处理数据的速度是有限的,如果发送方发送数据的速度过快,导致接收端的缓冲区满,而发送方继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应。因此TCP支持根据接收端的处理能力,来决定发送端的发送速度,这个机制叫做流量控制。在TCP报文段首部中有一个16位窗口长度,当接收端接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16窗口大小中。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接收方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口置为0,发送方收到后就不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。注意:窗口大小不受16位窗口大小限制,在TCP首部40字节选项中还包含一个窗口扩大因子M,实际窗口大小是窗口字段的值左移M位。流量控制解决了两台主机之间因传送速率而可能引起的丢包问题,在一方面保证了TCP数据传送的可靠性。然而如果网络非常拥堵,此时再发送数据就会加重网络负担,那么发送的数据段很可能超过了最大生存时间也没有到达接收方,就会产生丢包问题。为此TCP引入慢启动机制,先发出少量数据,就像探路一样,先摸清当前的网络拥堵状态后,再决定按照多大的速度传送数据。此处引入一个拥塞窗口:发送开始时定义拥塞窗口大小为1;每次收到一个ACK应答,拥塞窗口加1;而在每次发送数据时,发送窗口取拥塞窗口与接送段接收窗口最小者。慢启动:在启动初期以指数增长方式增长;设置一个慢启动的阈值,当以指数增长达到阈值时就停止指数增长,按照线性增长方式增加;线性增长达到网络拥塞时立即“乘法减小”,拥塞窗口置回1,进行新一轮的“慢启动”,同时新一轮的阈值变为原来的一半。“慢启动”机制可用图表示:1)连接建好的开始先初始化cwnd = 1,表明可以传一个MSS大小的数据。2)每当收到一个ACK,cwnd++; 呈线性上升3)每当过了一个RTT,cwnd = cwnd*2; 呈指数让升4)还有一个ssthresh(slow start threshold),是一个上限,当cwnd >= ssthresh时,就会进入“拥塞避免算法”(后面会说这个算法)1)收到一个ACK时,cwnd = cwnd + 1/cwnd2)当每过一个RTT时,cwnd = cwnd + 1这样就可以避免增长过快导致网络拥塞,慢慢的增加调整到网络的最佳值。很明显,是一个线性上升的算法。当出现ack超时的时候,需要重传数据包。TCP认为这种情况太糟糕,反应也很强烈。快速重传在收到3个duplicate ACK时就开启重传(三次 ack 就认为丢包的原理见 关于TCP乱序和重传的问题 、 TCP 快速重传为什么是三次冗余 ACK ),而不用等到RTO超时。TCP Reno的实现是:快速重传和快速恢复算法一般同时使用。快速恢复算法是认为,你还有3个Duplicated Acks说明网络也不那么糟糕,所以没有必要像RTO超时那么强烈。 注意,正如前面所说,进入Fast Recovery之前,cwnd 和 sshthresh已被更新:然后,真正的Fast Recovery算法如下:cwnd = sshthresh+ 3 * MSS (3的意思是确认有3个数据包被收到了)重传Duplicated ACKs指定的数据包如果再收到 duplicated Acks,那么cwnd = cwnd +1如果收到了新的Ack,那么,cwnd = sshthresh ,然后就进入了拥塞避免的算法了。如果你仔细思考一下上面的这个算法,你就会知道,上面这个算法也有问题,那就是——它依赖于3个重复的Acks。注意,3个重复的Acks并不代表只丢了一个数据包,很有可能是丢了好多包。但这个算法只会重传一个,而剩下的那些包只能等到RTO超时,于是,进入了恶梦模式——超时一个窗口就减半一下,多个超时会超成TCP的传输速度呈级数下降,而且也不会触发Fast Recovery算法了。 通常来说,正如我们前面所说的,SACK或D-SACK的方法可以让Fast Recovery或Sender在做决定时更聪明一些,但是并不是所有的TCP的实现都支持SACK(SACK需要两端都支持),所以,需要一个没有SACK的解决方案。而通过SACK进行拥塞控制的算法是FACK(可参见 关于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协议的主要功能是什么

      为什么说TCP的连接是具有可靠性的,并可以保证连接无二义性的?

      这个是TCP协议规定的,每个TCP连接建立的过程都有三个包就是三次握手。先发一个包过去问对方是不是正确的接受者,对方回复是,再发数据包,不是就丢掉。
      通过三次握手
      为什么说TCP的连接是具有可靠性的,并可以保证连接无二义性的?

      tcp/ip协议如何实现可靠传输

      1、建立连接:简单来说每个tcp/ip连接都是在三次握手基础上建立连接,并且实时检查连接状态。数据的传输具规范性。 2、超时重传:是TCP协议保证数据可靠性的另一个重要机制,其原理是在发送某一个数据以后就开启一个计时器,在一定时间内如果没有得到发送的数据报的ACK报文,那么就重新发送数据,直到发送成功为止。
      1.通过三次握手 2.设置了窗口 使它的传输有流量控制和差错控制实现的可靠传输 3.它是面向连接的协议不像udp
      tcp/ip协议如何实现可靠传输

      TCP怎么保证可靠性

      数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明它下一次需要接受的数据序列号。 如果发送方迟迟未收到应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传,这个时间一般是2*RTT(报文往返时间)+一个偏差值。TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送的数据的最大值。如果不适用窗口控制,每一个未收到确认应答的数据都要重发。使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接受1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发。但还有种情况可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果数据段丢失,接收端不会放过它的,会疯狂向它提醒。如果把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵,甚至造成网络的瘫痪。TCP为了防止这种情况而进行了拥塞控制。1.慢启动:定义拥塞窗口,一开始将该窗口的大小设为1,之后每次收到确认应答(经过一个RTT),将拥塞窗口大小*2.2.拥塞避免:设置慢启动阈值,一般开始都设为65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个RTT,拥塞窗口大小+1),一次来避免拥塞。将报文段的超时重传看作拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小的一般,并且将窗口大小设为初值1,然后重新进入慢启动过程。3.快速重传:在遇到3次重复确认应答(告诉重发控制)时,代表收到了3个报文段,但是这之前的1个段丢失了,便对它进行立即重传。然后,先将阈值设为当前窗口大小的一般,然后将拥塞窗口大小设为慢启动阈值+3的大小。 这样可以达到:在TCP通信时,网络吞吐量呈现逐渐的上升,并且随着拥堵来降低吞吐量, 再进入慢慢上升的过程,网络不会轻易的发生瘫痪。
      TCP怎么保证可靠性

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

          热门文章

          文章分类