tcp的5个可靠机制(TCP能够提供可靠的服务的机制有哪些)

      最后更新:2023-06-25 10:24

      可靠传输机制

      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协议的功能机制有哪些

      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协议的功能机制有哪些

      TCP可靠性的体现:seq和ack机制

      提到TCP和UDP的区别,很容易想到的就是TCP的可靠性,那TCP是通过什么机制实现了可靠性的呢?解释这个之前先来区分TCP中的大写ACK和小写ack。看一张经典的TCP三次握手过程图: 这张图里似乎有个大写的ACK也有个小写的ack,这也是容易混淆的地方。大写的ACK是控制位,在TCP报文头中有8个标志比特,也就是TCP报文头中有8位大小的数据是标志位,看一下TCP报文格式更好理解:它们中的多个可以同时被设置成1:CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置ECE标志的TCP包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。ECE(ECN Echo):用来在TCP三次握手时表明一个TCP端是具备ECN功能的。在数据传输过程中,它也用来表明接收到的TCP包的IP头部的ECN被设置为 11,即网络线路拥堵。URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1时表示有紧急数据。当URG=1时,后面的紧急指针字段才有效。ACK:表示前面的确认号字段是否有效。ACK=1时表示有效。只有当 ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为 1。PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为1,表示应当立即把数据提交给上层,而不是缓存起来。RST:表示是否重置连接。如果RST=1,说明TCP连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才为1。FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。这是大写的ACK,而小写的ack是确认序列号,和它一对的是seq即顺序序列号,也就是上图TCP报文格式中的Sequence Number和Acknowledgment Number。前面说了这么多只是为了区分TCP中的大写ACK和小写ack,也没其他方法就用大小写区分吧,本文关注的重点就是TCP中的seq和ack机制,通过它们实现了TCP的可靠性传输,当然TCP通过很多方面去保证了可靠性传输,这里seq和ack机制是防止数据丢失丢包的机制。顺序号seq:用来标识从TCP源端向TCP目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。理解起来就是TCP用顺序号对每个字节进行计数。由上图TCP报文格式中可以看出序号是 32bit 的无符号数,序号到达 后又重新开始计数。当建立一个新的连接时,顺序号字段包含由这个主机选择的该连接的初始顺序号 ISN ( Initial Sequence Number ),也就是说seq并不一定是从0开始的,所以刚在画TCP三次握手的时候,写的seq=x,即使还没有数据传输,seq包含了ISN后就成了一个随机数,并不是0。确认号ack:理解起来就一句话,所期望收到的下一个顺序号seq。TCP为应用层提供全双工服务,这意味数据能在两个方向上独立地进行传输,也就是说服务端和客户端都可能成为数据接收或者数据发送的一端。数据发送端在发送TCP报文时,计算在本次seq计数内,之前所有发送的报文中数据长度之和是多少,也就是计数记到哪里了,这就是seq。然后再计算之前所有收到的报文中收到的数据长度之和是多少,这就是ack。需要注意的是seq和ack是分开计数的。需要注意的是,SYN和FIN的TCP报文传输虽然没有数据,但是数据长度算1,ACK的传输,数据长度算0。数据接收端收到TCP报文后,将这次报文中的seq取出来,和自己最后一次发送的ack对比,如果一致,则代表数据没有丢失,理解起来就是这次的顺序号和上次自己期望的顺序号一致嘛。如果不一致就说明有丢包发生。其实就是TCP用0~对每个字节进行计数,用下图举个例子解释一下:三个过程:1.A在发送某个TCP报文前,发现此时自己这边的seq计数已经到了x,那这次的报文中seq=x,也就是在一次seq计数内,该端之前所有发送的报文中数据长度之和为x。然后这次又在这个报文中携带了长度为100bit的数据。2.B在收到这个报文后,拿到报文中的seq=x,又拿到了长度为100bit的数据,然后回包的时候ack=x+100。意思是告诉B你已经发了x+100位的数据了,下次发包的时候别忘了把seq改成x+100。3.A收到B回的数据包后,拿到报文中的ack=x+100,然后和自己这边的计数着的seq一比对,如果一样,说明A发的B都收到了没问题,如果不一样,假如A一看自己这边的seq已经等于y了,也就是自己计数着的已经发送y位的数据了,可是听B的意思它才收到x+100位数据,丢包了呗。然后就是重发什么的是TCP的另外一些机制。TCP就是通过seq和ack机制去确认传输过程中有没有丢包现象,前面说在一次计数范围内,seq并不一定是从0开始的,可以当我们用Wireshark抓包时,上面显示的seq确实从0开始的,这是因为Wireshark等抓包软件为了让seq和ack展示更直观,自动帮我们减去了初始顺序号 ISN,当然也可以设置为直接展示真正的seq和ack,那就看着比较乱了,贴一张Wireshark处理后的seq和ack变化过程图: 图中前三步即TCP的三次握手,之后是数据传输。可以结合该图去更好的理解本文。
      TCP可靠性的体现:seq和ack机制

      简述TCP协议的可靠性有哪些机制?

      .采用面向连接的三次握手实现可靠对象传输。 2.使用数据窗口机制协商队列大小实现数据队列传输。3.通过序列化应答和必要时重发数据包,TCP 为应用程序提供了可靠的传输流和虚拟连接服务。下面是找到的长篇大论中比较好的文章:一、TCP协议1、TCP 通过以下方式提供可靠性:◆ 应用程序分割为TCP认为最合适发送的数据块。由TCP传递给IP的信息单位叫做报文段。◆ 当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能记时收到一个确认,它 就重发这个报文段。◆ 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常延迟几分之一秒。◆ TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化如果收到报文段的检验和有差错,TCP将丢弃这个报文段和不确认收到这个报文段。◆ 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能失序,因此TCP报文段的到达也可能失序。如果必要,TCP将对收到的数据进行排序,将收到的数据以正确的顺序交给应用层。◆ 既然IP数据报会发生重复,TCP连接端必须丢弃重复的数据。◆ TCP还能提供流量控制,TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。另外,TCP对字节流的内容不作任何解释。2、TCP首部:TCP数据被封装在一个IP数据报中,格式如下:IP首部20 TCP首部20 TCP首部TCP首部格式如下:16位源端口号 16位目的端口号32位序号32位确认序号4位首部长度 保留6位 URG ACK PSH RST SYN FIN 16位窗口大小16位检验和 16位紧急指针选项数据说明:(1)每个TCP段都包括源端和目的端的端口号,用于寻找发送端和接收端的应用进程。这两个值加上IP首部的源端IP地址和目的端IP地址唯一确定一个TCP连接。(2)序号用来标识从TCP发送端向接收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。(3)当建立一个新连接时,SYN标志变1。序号字段包含由这个主机选择的该连接的初始序号ISN,该主机要发送数据的第一个字节的序号为这个ISN加1,因为SYN标志使用了一个序号。(4)既然每个被传输的字节都被计数,确认序号包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当时上次已成功收到数据字节序号加1。只有ACK标志为1时确认序号字段才有效。(5)发送ACK无需任何代价,因为32位的确认序号字段和ACK标志一样,总是TCP首部的一部分。因此一旦一个连接建立起来,这个字段总是被设置,ACK标志也总是被设置为1。(6)TCP为应用层提供全双工的服务。因此,连接的每一端必须保持每个方向上的传输数据序号。(7)TCP可以表述为一个没有选择确认或否认的华东窗口协议。因此TCP首部中的确认序号表示发送方已成功收到字节,但还不包含确认序号所指的字节。当前还无法对数据流中选定的部分进行确认。(8)首部长度需要设置,因为任选字段的长度是可变的。TCP首部最多60个字节。(9)6个标志位中的多个可同时设置为1◆ URG-紧急指针有效◆ ACK-确认序号有效◆ PSH-接收方应尽快将这个报文段交给应用层◆ RST-重建连接◆ SYN-同步序号用来发起一个连接◆ FIN-发送端完成发送任务(10)TCP的流量控制由连接的每一端通过声明的窗口大小来提供。窗口大小为字节数,起始于确认序号字段指明的值,这个值是接收端期望接收的字节数。窗口大小是一个16为的字段,因而窗口大小最大为65535字节。(11)检验和覆盖整个TCP报文端:TCP首部和TCP数据。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。TCP检验和的计算和UDP首部检验和的计算一样,也使用伪首部。(12)紧急指针是一个正的偏移量,黄蓉序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。(13)最常见的可选字段是最长报文大小MMS,每个连接方通常都在通信的第一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。二、TCP连接的建立和终止1、建立连接协议(1) 请求端发送一个SYN段指明客户打算连接的服务器的端口,隐疾初始序号(ISN),这个SYN报文段为报文段1。(2) 服务器端发回包含服务器的初始序号的SYN报文段(报文段2)作为应答。同时将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。(3) 客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)。这3个报文段完成连接的建立,称为三次握手。发送第一个SYN的一端将执行主动打开,接收这个SYN并发回下一个SYN的另一端执行被动打开。2、连接终止协议由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送(报文段4)。(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。(3) 服务器关闭客户端的连接,发送一个FIN给客户端(报文段6)。(4) 客户段发回确认,并将确认序号设置为收到序号加1(报文段7)。3、连接建立的超时如果与服务器无法建立连接,客户端就会三次向服务器发送连接请求。在规定的时间内服务器未应答,则连接失败。4、最大报文段长度MSS最大报文段长度表示TCP传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的MSS。一般,如果没有分段发生,MSS还是越大越好。报文段越大允许每个报文段传送的数据越多,相对IP和TCP首部有更高的网络利用率。当TCP发送一个 SYN时,它能将MSS值设置为外出接口的MTU长度减去IP首部和TCP首部长度。对于以太网,MSS值可达1460。如果目的地址为非本地的,MSS值通常默认为536,是否本地主要通过网络号区分。MSS让主机限制另一端发送数据报的长度,加上主机也能控制它发送数据报的长度,这将使以较小MTU连接到一个网络上的主机避免分段。5、 TCP的半关闭TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力,这就是TCP的半关闭。客户端发送FIN,另一端发送对这个FIN的ACK报文段。当收到半关闭的一端在完成它的数据传送后,才发送FIN关闭这个方向的连接,客户端再对这个FIN确认,这个连接才彻底关闭。6、2MSL连接TIME_WAIT状态也称为2MSL等待状态。每个TCP必须选择一个报文段最大生存时间(MSL)。它是任何报文段被丢弃前在网络的最长时间。 处理原则:当TCP执行一个主动关闭,并发回最后一个ACK,该连接必须在TIME_WAIT状态停留的时间为2MSL。这样可以让TCP再次发送最后的ACK以避免这个ACK丢失(另一端超时并重发最后的FIN)。这种2MSL等待的另一个结果是这个TCP连接在2MSL等待期间,定义这个连接的插口不能被使用。
      TCP协议在数据传输过程中的可靠性保障机制有: 1)通过检验和、确认、超时检测差错2)通过重传纠正差错;3)通过流量控制来减少差错出现的可能性 4)采用“累计确认”的办法解决确认报文丢失问题
      TCP协议在数据传输过程中的可靠性保障机制有: 1)通过检验和、确认、超时检测差错2)通过重传纠正差错;3)通过流量控制来减少差错出现的可能性 4)采用“累计确认”的办法解决确认报文丢失问题
      简述TCP协议的可靠性有哪些机制?

      TCP能够提供可靠的服务的机制有哪些

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

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

          热门文章

          文章分类