tcp可靠性(tcp可靠性的实现机制)

      最后更新:2024-04-11 18:36:35 手机定位技术交流文章

      可靠传输的TCP/IP协议的可靠性

      TCP:传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP连接,之后才能传输数据。TCP提供超时重发,丢弃重复数据,流量控制等功能,保证能从一端传到另一端。当应用层向TCP层发送用于网间传输的、用字节表示的数据流,TCP则把数据流分割成适当长度的报文段,最大传输段大小(MSS)通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)限制。之后TCP把数据包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。在数据正确性与合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接收时都要计算校验和;同时可以使用md5认证对数据进行加密。在保证可靠性上,采用超时重传和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。UDP:用户数据协议,是一个简单的面向数据的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报削不用在客户和服务器之间建立一个连接,且没有超时重发机制,故而传输速度很快。TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。
      可靠传输的TCP/IP协议的可靠性

      TCP协议通过哪些差错检验和纠正方法来保证传输的可靠性

      TCP提供一种面向连接的、可靠的字节流服务。 面向连接:意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。TCP通过下列方式来提供可靠性:1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。(将数据截断为合理的长度)2、当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。 (超时重发)3、当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 。 (对于收到的请求,给出确认响应)(之所以推迟,可能是要对包做完整校验)4、 TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。(校验出包有错,丢弃报文段,不给出响应,TCP发送数据端,超时时会重发数据)5、既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。(对失序数据进行重新排序,然后才交给应用层)6、既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。(对于重复数据,能够丢弃重复数据)7、TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。(TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)TCP使用的流量控制协议是可变大小的滑动窗口协议。字节流服务::两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。TCP对字节流的内容不作任何解释:: TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。
      TCP协议通过哪些差错检验和纠正方法来保证传输的可靠性

      TCP协议通过哪些方法保证数据传输的可靠性

      TCP协议支持数据报传输可靠性的主要方法是确认、超时、重传、校验和以及流量控制。 (1)校验和——每个TCP报文段都包括检验和字段,校验和用来检查报文段是否出现传输错误,如果报文段出现传输错误,TCP检查出错就丢弃该报文段。(2)确认——接收端检查报文是否出错,发现出错时就丢弃,不发确认;而发送端TCP就通过检查接收端的确认,判断发送的报文段是否已经正确到达目的地。 (3)超时——发送端根据发出的报文段在超时规定的时间内是否收到确认,从而来判断该报文段是否丢失或传输出错。TCP使用了4种计时器:重传计时器、坚持计时器、保持计时器和时间等待计时器来保证了传输的可靠性。
      TCP协议通过哪些方法保证数据传输的可靠性

      TCP的可靠性实现

      TCP提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据包之前必须先建立一个TCP连接。这一过程与打电话很相似,先拨号振铃,等待对方摘机说“喂”,然后才说明是谁。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。TCP通过下列方式来提供可靠性:1.应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据长度将保持不变。由TCP传递给IP的信息单位称为报文段或段(segment)。2.当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认。TCP有延迟确认的功能,在此功能没有打开,则是立即确认。功能打开,则由定时器触发确认时间点。3.TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。4.既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。5.既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。6.TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。如果一方的应用程序先传10字节,又传20字节,再传50字节,连接的另一方将无法了解发方每次发送了多少字节。只要自己的接收缓存没有塞满,TCP 接收方将有多少就收多少。一端将字节流放到TCP连接上,同样的字节流将出现在TCP连接的另一端。另外,TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCⅡ字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。这种对字节流的处理方式与Unix操作系统对文件的处理方式很相似。Unix的内核对一个应用读或写的内容不作任何解释,而是交给应用程序处理。对Unix的内核来说,它无法区分一个二进制文件与一个文本文件。 TCP协议用于控制数据段是否需要重传的依据是设立重发定时器。在发送一个数据段的同时启动一个重传,如果在重传超时前收到确认(Acknowlegement)就关闭该重传,如 果重传超时前没有收到确认,则重传该数据段。在选择重发时间的过程中,TCP必须具有自适应性。它需要根据互联网当时的通信情况,给出合适的重发时间。这种重传策略的关键是对定时器初值的设定。采用较多的算法是Jacobson于1988年提出的一种不断调整超时时间间隔的动态算法。其工作原理是:对每条连接TCP都保持一个 变量RTT(Round Trip Time),用于存放当前到目的端往返所需要时间最接近的估计值。当发送一个数据段时,同时启动连接的定时器,如果在定时器超时前确认到达,则记录所需要的时间(M),并修正 RTT的值,如果定时器超时前没有收到确认,则将RTT的值增加1倍。通过测量一系列的RTT(往返时间)值,TCP协议可以估算数据包重发前需要等待的时间。在估计该连接所需的当前延迟时通常利用一些统计学的原理和算法(如Karn算法),从而得到TCP重发之前需要等待的时间值。 TCP的一项功能就是确保每个数据段都能到达目的地。位于目的主机的TCP服务对接受到的数据进行确认,并向源应用程序发送确认信息。使用数据报头序列号以及确认号来确认已收到包含在数据段的相关的数据字节。TCP在发回源设备的数据段中使用确认号,指示接收设备期待接收的下一字节。这个过程称为期待确认。源主机在收到确认消息之前可以传输的数据的大小称为窗口大小。用于管理丢失数据和流量控制。这些变化如右图所示。修改建立TCP连接的超时时间建立TCP连接需要经过三次握手:主动端先发送SYN报文,被动放回应SYN+ACK报文,然后主动端再回应ACK。l在主动端发送SYN后,如果被动端一直不回应SYN+ACK报文,主动端会不断的重传SYN报文直到超过一定的重传次数或超时时间。l在主动端发送SYN后,被动端回应SYN+ACK报文,但主动端不再回复ACK,被动端也会一直重传直到超过一定的重传次数或超时时间。(SYN报文攻击会出现这种情况)可以通过以下命令配置SYN报文的超时时间(发送SYN报文到三次握手成功的最大时间),也就是建立TCP连接的超时时间。命令作用R(config)#ip tcp syntime-out seconds修改建立TCP连接的超时时间。单位秒,取值范围5-300,缺省值20使用no ip tcp syntime-out命令恢复参数缺省值。修改缓冲区大小TCP的接收缓冲区是用来缓存从对端接收到的数据,这些数据后续会被应用程序读取。一般情况下,TCP报文的窗口值反映接收缓冲区的空闲空间的大小。对于带宽比较大、有大批量数据的连接,增大接收缓冲区的大小可以显著提供TCP传输性能。TCP的发送缓冲区是用来缓存应 用程序的数据,发送缓冲区的每个字节都有序列号,被应答确认的序列号对应的数据会从发送缓冲区删除掉。增大发送缓冲区可以提高TCP跟应用程序的交互能力,也因此会提高性能。但是增大接收和发送缓冲区会导致TCP占用比较多的内存。命令作用R (config)#ip tcp window-size size修改TCP连接的接收和发送缓冲区大小。单位字节,取值范围0-65535,缺省值4096。使用no ip tcp window-size命令恢复接收和发送缓冲区大小为缺省值。禁止端口不可达时的重置报文TCP模块在分发TCP报文时,如果找不到该报文所属的TCP连接会主动回复一个reset报文以终止对端的TCP连接。攻击者可能利用大量的端口不可达 的TCP报文对设备进行攻击。可以使用以下命令禁止/恢复在收到端口不可达的TCP报文时发送reset报文。命令作用R (config)#ip tcp not-send-rst禁止在接收到端口不可达的TCP报文时发送reset报文。使用no ip tcp not-send-rst命令恢复发送reset报文。限制TCP连接的MSS的最大值MSS是最大传输段大小的缩写,指一个TCP报文的数据载荷的最大长度,不包括TCP选项。在TCP建立连接的三次握手中,有一种很重要的工作那就是进行MSS协商。连接的双方都在SYN报文中增加MSS选项,其选项值表示本端 最大能接收的段大小,即对端最大能发送的段大小。连接的双方取本端发送的MSS值和接收对端的MSS值的较小者作为本连接最大传输段大小。发送SYN报文时的MSS选项值的计算方法如下。l非直连网络中:mss = 默认值 536。l直连网络中:mss = 对端ip地址对应的出口的MTU - 20字节ip头 - 20字节tcp头。  一般来说如果出口配置的某些应用影响了接口的mtu,那么该应用会相应的设置mtu,如隧道口,vpn口等。到这里得到的rmss值就是要发送的syn报文mss选项的值 。举例:一般情况下在直连网络中建立bgp邻居,那么该连接的发送的mss为1500 – 20 – 20 – 20 = 1440。ip tcp mss命令的作用是限制即将建立的TCP连接的MSS的最大值。任何新建立的连接协商的MSS值不能超过配置的值。命令作用R (config)#ip tcp mss max-segment-size限制TCP连接的MSS的最大值。单位为字节,取值范围68-10000。使用no ip tcp mss命令取消此限制。启用PMTU发现功能TCP的路径最大传输单元(PMTU)发现功能是按RF C1191实现的,这个功能可以提高网络带宽的利用率。当用户使用TCP来批量传输大块数据时,该功能可以使传输性能得到明显提升。命令作用R(config)#ip tcp path-mtu-discovery [ age-timer minutes| age-timer infinite ]启用PMTU发现功能。age-timer minutes:TCP在发现PMTU后,重新进行探测的时间间隔。单位分钟,取值范围10-30。缺省值10。age-timer infinite:TCP在发现PMTU后,不重新探测。按RFC1191的描述,TCP在发现PMTU后,隔一段时间可以使用更大的MSS来探测新的PMTU。这个时间间隔就是使用参数age-timer来指定。当设备发现的PMTU比TCP连接两端协商出来的MSS小时,设备就会按上述配置时间间隔,去尝试发现更大的PMTU。直到PMTU达到MS S的值,或者用户停止这个定时器,这个探测过程才会停止。停止这个定时器,使用age-timer infinite参数。使用no ip tcp path-mtu-discovery命令关闭PMTU发现功能。设置接口收发SYN报文的MSS选项值当客户端发起一个TCP连接时,它通过TCP SYN报文中的MSS选项字段协商TCP报文数据载荷的最大值,客户端SYN报文的MSS值表示后续服务器端发送TCP报文数据载荷的最大值,反之同理。如右图的拓扑,PC用http访问服务器可能会出现无法访问的情况。因为PC与服务器端建立的连接MSS协商的都会是1460,但1460的MSS无法通过R1和R2,R1和R2用隧道相连,MTU小于1500。这时可以通过在R2的(1)口和(2)口上配置如下命令,修改SYN报文中的MSS选项值。从而修改经过(1)口和(2)口的TCP连接协商的MSS值。命令作用R (config-if)# ip tcp adjust-mssmax-segment-size设置接口收发SYN报文的MSS选项值。单位为字节,取值范围500-1460。使用no ip tcp adjust-mss命令取消此项设置,则接口收发SYN报文时,不会修改报文的MSS选项值。在接口上配置本命令会使得该接口接收或发送SYN报文的MSS选项都被改为接口上配置的MSS值。建议出口和入口配置相同的值。如果SYN报文的入口和出口配置了不同的MSS值,经过该设备后,SYN报文的MSS选项被改为这两个口配置值的较小者。
      TCP的可靠性实现

      简述TCP协议在数据传输过程中收发双方是如何保证数据包的可靠性的

      答: (1)为了保证数据包的可靠传递,发送方必须把已发送的数据包保留在缓冲区;(2)并为每个已发送的数据包启动一个超时定时器;(3)如在定时器超时之前收到了对方发来的应答信息(可能是对本包的应答,也可以是对本包后续包的应答),则释放该数据包占用的缓冲区;(4)否则,重传该数据包,直到收到应答或重传次数超过规定的最大次数为止。 (5)接收方收到数据包后,先进行CRC校验,如果正确则把数据交给上层协议,然后给发送方发送一个累计应答包,表明该数据已收到,如果接收方正好也有数据要发给发送方,应答包也可方在数据包中捎带过去。
      简述TCP协议在数据传输过程中收发双方是如何保证数据包的可靠性的

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/317725.html

          热门文章

          文章分类