TCP协议如何保证数据可靠性
为什么TCP协议是可靠的?TCP协议是怎么保证数据的可靠的?答:能够保证TCP协议可靠的算法有检验和,连接管理机制,ACK应答机制,快速重传和超时重传机制,滑动窗口机制,拥塞控制机制,这些机制共同保证TCP协议的可靠性。检验和:TCP检验和的计算与UDP一样,在计算时要加上12byte的伪首部,检验范围包括TCP首部及数据部分,但是UDP的检验和字段为可选的,而TCP中是必须有的。计算方法为:在发送方将整个报文段分为多个16位的段,然后将所有段进行反码相加,将结果存放在检验和字段中,接收方用相同的方法进行计算,如最终结果为检验字段所有位是全1则正确(UDP中为0是正确),否则存在错误。可以保证接收方能判断当前报文是否属于自己要接受的报文,如果为0,那就是,不为0,则不是,丢弃此报文。抽象些来说就像是取快递,你的电话姓名和快递上的信息一致,你才能确定这是你的快递,才会去取,不会错拿别人的快递。序列号:TCP 对每个报文进行编号,这些编号就是序列号。而序列号有多种作用a:保证可靠性,当接收到的数据失序时,就能立马知道b:去除重复的报文,数据传输过程中的确认应答,重发控制,重复控制等功能都要依靠序列号来实先。c:提高效率,可以实现多次发送,一次确认。ACK应答机制:发送的每一条消息,都需要对方发送一条消息来回复消息是否被收到。主要实现是TCP的首部来控制,当ACK =1 时ack才有效,ack等于期望下一个传输过来的序号,也就是上一次接收消息的序号+1。这样就可以保证消息能被确认接收。(三次握手和四次挥手都在用这个机制)连接管理机制:三次握手建立连接与四次挥手断开连接,保证了TCP的全双工工作。快重传和超时重传:保证了数据能够不丢失的传输数据。(注意:超时重传机制和快重传机制,同时存在。谁先检验到报文失序,谁就生效。)滑动窗口:滑动窗口既提高了报文传输的效率,也避免了发送方发送过多的数据而导致接收方无法正常处理的异常。数据的发送方和接收方都有滑动窗口,对于发送方来说,窗口内就是可以发送的报文,当窗口的前沿紧挨的报文发送并且确认时,窗口向后移动。而窗口的后沿可以向前移动,当接收方处理不了那么多的报文时,就会发送消息告诉发送方,此时滑动窗口就需要缩小,所以后沿前移。但是TCP非常不建议窗口后沿前移。说到滑动窗口,就不得不梳理一下消息发送的过程中的缓存机制:发送方和接收方的滑动窗口工作流程:伴随着效率的提升,也会有问题产生,如果消息没被确认怎么办如图所示,假如31,32,33,34,报文发送了,32,33,34都被确认了,31没被确认怎么办呢?这时就重新发送31,并且31之后的数据报全部重新发送。在图中我们还会发现窗口的前沿和后沿会移动,窗口前沿和后沿都向后移动,意味着前沿紧挨的报文发送并被确认,而后沿的前移意味着,接收端处理那么多消息,请缩小窗口的大小。所以解决了发送的数据过多,导致接收端无法正常接收的异常。拥塞控制:拥塞控制使得宏观网络中的资源能够合理的应用。实现的算法有四个,慢开始,拥塞避免,快速回复,和快速重传.1.慢开始指一开始发送报文时,不清楚网络中的情况,试探性的发送1cwnd(拥塞窗口)的数据量。2.如果没有到ssthresh(慢开始门限值),则以指数形式增长,一直到门限值;3.当到达门限值时,此时采用拥塞避免算法让拥塞窗口缓慢增长,即每经过一个RTT(往返时间)就把发送方的拥塞窗口+1,不能是指数性增长了,一直到发生网络拥塞为止。4.当发生网络拥塞时,把ssthresh的值设置为出现拥塞时发送窗口大小的一半,然后把拥塞窗口设置为1,再次执行慢开始算法。5.在发送方知道只是丢失了个别的报文段时,采用快恢复算法,将门限值设置成拥塞窗口大小的一半,并将拥塞窗口设置为当前门限值,并执行拥塞避免算法。6.当发送方一连收到3个对同一个报文段的重复确认时,采用快速重传算法,立即进行重传,这样就不会出现超时,可以使整个网络的吞吐量提高约20%。

TCp协议的功能机制有哪些
TCP协议的主要功能 :当应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。 TCP协议(Transmission ControlProtocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,TCP协议就起到了这个作用。

可靠传输机制
TCP发送的报文段是交给IP层传送的,但IP层只能提供尽最大努力服务。也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使得两个传输层之间的通信变得可靠。理想的传输条件有以下特点:在这样的情况下,不采取任何措施就能实现可靠传输。然而实际的网络都不具备上述的两个条件。但是我们可以使用一些可靠传输协议,当出现差错时让发送方重传出现差错的数据,同时在接收方来不及处理收到的数据时,及时告知发送方降低数据发送的速度——流量控制。这样本来不可靠的信道就能实现可靠的传输。可靠传输:即发送端发送的是什么,接收端接收到的就是什么。也就是在数据传输的过程中没有传输差错。数据传输过程中可能出现的问题:比特出差错、丢包。可靠传输的方法:停止-等待协议、滑动窗口协议。(1) 全双工通信的双方既是发送方也是接收方,但是为了讨论问题方便,仅考虑一方发送数据(发送方),一方接收数据(接收方)。(2) 数据传输的过程中既可能出现差错,又有可能出现丢包的现象。(3) 所有传输的数据单元称为分组。发送方每发送一分组就停止等待,只有等到了接收方发送来的确认后才可以发送下一个分组。(1)分组丢失或检测到分组出错发送方在传输过程中分组丢失,这时接收方没有接收到分组不会知道发送方发送了分组,就不会给发送方返回确认信息(分组出错,接收方会直接丢弃分组也不会返回确认信息),而发送方在等待接收方的确认信息以此来发送下一个分组。所以可靠传输协议这样规定:当发送方超过一段时间没有仍然没有收到的确认,就认为刚才的分组丢失了,因而重传前面的发送过的分组。这就是超时重传。超时重传要求在每次发送完一个分组时设置一个超时计时器,如果在超时计时器到期之前收到了对方的确认,就撤销已设置的超时计时器。(2)确认分组(ACK)丢失接收端接收了发送方传输的分组后,向发送方发送ACK,但是ACK在传输过程中丢失了,那么发送方就收不到确认信息,这时发送端超时计时器到期后就要重传分组,接收方仍会重复接收分组,并且丢弃重复的分组,并重传ACK。(3)ACK分组迟到下图的传输过程没有出现差错,接收方接收分组后向发送方发送ACK,但是确认信息迟到了,在超时计时器到期后发送方会重新发送分组,接收方仍然会重复接收分组,并且丢弃重复的分组,并重传ACK。当发送方收到ACK后会发送下一个分组,在后来发送方收到迟到的ACK时,发送方会收下并直接丢失。优缺点:停止等待协议优点是简单,但缺点是信道利用率太低。假定A发送分组需要的时间是TD。显然,TD等于分组的长度除以数据率。再假定分组正确到达B后,B处理分组的时间可以忽略不计,同时立即发回确认。假定B发送确认分组需要时间TA,如果A处理确认分组的时间也可以忽略不计,那么A在经过(TD+ RTT + TA)后就可以再发送下一个分组,这里的RTT是往返时间。信道利用率:发送方在一个发送周期内,有效地发送数据所需要的时间占整个发送周期的比率。因为仅仅是在时间TD内才用来传送有用数据(包括分组的首部),因此信道利用率U为:为了提高传输效率,发送方可以不使用低效率的停止等待协议,而是采用流水线传输。流水线传输就是发送方可以连续发送多个分组,不必每次发完一个分组就停下来等待对方的确认。这样信道上一直有数据在不断的传送,显然这样会提供信道利用率。在回退N步协议中,允许发送方发送多个分组而不需等待确认,但它也受限于流水线中未确认的分组数不能超过某个最大允许数N。发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。如上图所示,发送方收到了对第0分组的确认后,将发送窗口向前移动一个分组的位置。上图表示了GBN协议的序号范围示意图。其中序号被分割成了四个部分,各个部分的含义如图所示。(1)上层的调用。(2)收到一个ACK:GBN协议中,对序号为n的分组的确认是采用累积确认(cumulative acknowledgement)的方式。(3)超时事件:如果发生超时事件,发送方重传所有已发送但还未被确认过的分组。(1) 如果接收方正确收到n号分组,并且按序(即上次交付给上层的分组序号是n-1),则接收方位分组n发送一个ACK,并将该分组交付给上层。(2) 其他情况,接收方丢弃分组,并为最近按序接收到的分组重新发送ACK。即GBN协议中,接收方丢失所有失序的分组,接收方不缓存任何的失序分组,只需要维护一个下一个按序接收的分组序号:expectedseqnum。很显然,GBN协议对失序的分组选择直接丢失的行为优点是使得接收缓存简单,即接收方不缓存任何失序的分组,但是缺点也是非常明显的,由于一个分组出错可能需要重传原来已经正确传送的分组,这对资源无疑是一种浪费,其次这些重传的分组也许也会丢失或出错,从而导致更多的重传。最后,用一个例子总结下一GBN协议的工作流程(1) 发送端发送0、1、2、3号分组,此时发送窗口已满,不能在发送新的分组,在4个分组的传输的过程中,其中2号分组丢失。(2) 接收方返回对0号分组的确认,此时窗口向前滑动一个分组位置,并同时发送4号分组。此时,由于0号分组已被确认,计时器重新启动,开始为分组1开始计时....(3) 接收方在接收到发送方的0号分组后期望接下来收到1号分组,但是没有收到1号分组,但是却收到2号分组和3号分组,所以直接丢失,并向发送方返回ACK 0,同样对于之后收到的4号分组也是直接丢失并返回ACK 0,此时窗口已经满了,也无法发送新的分组。(4) 在计时器超时后,发送方重传所有已发送但是没有被确认的分组,即1号、2号、3号和4号分组,如果这次没有分组丢失,那么接收方会返回这4个分组的确认,发送方在收到确认后,将窗口向前移动4个分组位置。(1)GBN协议使用累积确认机制。(2)接收方只按顺序接收分组,不按序的分组直接丢失。(3)重传时需要重传全部已发送但是没有被确认的分组。(4)确认序列号最大的、按序到达的分组。选择重传协议是对GBN协议的缺点进行了改进,GNB超时重传会对那些已经正确传送的分组都重新传送,并且对失序到达的分组直接丢失。选择重选协议通过让发送方仅重传那些可能在接收方出错(即丢失或受损)的分组而避免了不必须要的重传。SR协议的改进措施:下图表示选择重选协议的发送窗口和接收窗口。发送窗口和同步窗口是不同步的。(1)上层的调用。(2)收到一个ACK。如下图所示,当收到2号分组的确认后,窗口向前滑动一直到最小序号的未确认的分组处,即5号分组处。(3)超时:定时器再次被用来发送丢失的分组。每个分组都有自己的逻辑定时器,因为超时发生后只能发送一个分组。(1) SR接收方将确认一个正确接收的分组(在窗口内)而不管其是否按序。失序的分组将被缓存直到所有丢失的分组(即序号更小的分组)都被收到为止,这是才可将一批分组按序交付给上层,然后向前移动滑动窗口。如果接收方收到一个在窗口左侧的分组(确切的来说,左边一个窗口大小范围的序号分组,即rev_base - N~rev_base - 1),在这种情况下,必须发送一个ACk,即使该分组是接收方以前已确认的分组。对于其他情况,则忽略分组即可。下面的图可以表示SR协议的工作过程,具体分析过程和GBN协议相似,这里就不细说了。(1)对窗口内的分组逐一确认,收一个确认一个。(2)只传出错的分组。(3)接收方有缓存机制,存放失序的分组。

请说明传输层tcp协议采用了哪些机制来保证端到端结之间的可靠传输
补充:1、建立连接的时候三次握手,解除连接的时候四次挥手; 2、确认机制:超时重传,捎带确认,合并确认;3、CRC校验机制4、流量控制:滑动窗口机制 5、拥塞控制:慢开始,拥塞避免,快重传,快恢复
简单说包括三个核心: 1、连接和断开时三次握手2、确认机制(超时、捎带确认、合并确认等)3、CRC校验机制 详细的原理就不是几句话能说清了,欢迎追问。
1、确认机制 2、超时重传 3、顺序重组

TCP能够提供可靠的服务的机制有哪些
三次握手,四次挥手、流量控制、拥塞控制、超时重传机制、还有的我想不起来了
三次握手

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