tcp为啥能可靠传输(tcp为啥是可靠的)

      最后更新:2022-11-12 18:37:22 手机定位技术交流文章

      为什么说TCP和IP为INTERNET提供了可靠的传输保障?

      TCP/IP协议族包含了很多功能各异的子协议。为此我们也利用上文所述的分层的方式来剖析它的结构。TCP/IP层次模型共分为四层:应用层、传输层、网络层、数据链路层。 TCP/IP网络协议TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网间网协议)是目前世界上应用最为广泛的协议,它的流行与Internet的迅猛发展密切相关—TCP/IP最初是为互联网的原型ARPANET所设计的,目的是提供一整套方便实用、能应用于多种网络上的协议,事实证明TCP/IP做到了这一点,它使网络互联变得容易起来,并且使越来越多的网络加入其中,成为Internet的事实标准。* 应用层—应用层是所有用户所面向的应用程序的统称。ICP/IP协议族在这一层面有着很多协议来支持不同的应用,许多大家所熟悉的基于Internet的应用的实现就离不开这些协议。如我们进行万维网(WWW)访问用到了HTTP协议、文件传输用FTP协议、电子邮件发送用SMTP、域名的解析用DNS协议、 远程登录用Telnet协议等等,都是属于TCP/IP应用层的;就用户而言,看到的是由一个个软件所构筑的大多为图形化的操作界面,而实际后台运行的便是上述协议。* 传输层—这一层的的功能主要是提供应用程序间的通信,TCP/IP协议族在这一层的协议有TCP和UDP。* 网络层—是TCP/IP协议族中非常关键的一层,主要定义了IP地址格式,从而能够使得不同应用类型的数据在Internet上通畅地传输,IP协议就是一个网络层协议。* 网络接口层—这是TCP/IP软件的最低层,负责接收IP数据包并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。1.TCP/UDP协议TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性、流控或差错恢复功能。一般来说,TCP对应的是可靠性要求高的应用,而UDP对应的则是可靠性要求低、传输经济的应用。TCP支持的应用协议主要有:Telnet、FTP、SMTP等;UDP支持的应用层协议主要有:NFS(网络文件系统)、SNMP(简单网络管理协议)、DNS(主域名称系统)、TFTP(通用文件传输协议)等。IP协议的定义、IP地址的分类及特点什么是IP协议,IP地址如何表示,分为几类,各有什么特点?为了便于寻址和层次化地构造网络,IP地址被分为A、B、C、D、E五类,商业应用中只用到A、B、C三类。IP协议(Internet Protocol)又称互联网协议,是支持网间互连的数据报协议,它与TCP协议(传输控制协议)一起构成了TCP/IP协议族的核心。它提供网间连接的完善功能, 包括IP数据报规定互连网络范围内的IP地址格式。Internet 上,为了实现连接到互联网上的结点之间的通信,必须为每个结点(入网的计算机)分配一个地址,并且应当保证这个地址是全网唯一的,这便是IP地址。目前的IP地址(IPv4:IP第4版本)由32个二进制位表示,每8位二进制数为一个整数,中间由小数点间隔,如159.226.41.98,整个IP地址空间有4组8位二进制数,由表示主机所在的网络的地址(类似部队的编号)以及主机在该网络中的标识(如同士兵在该部队的编号)共同组成。为了便于寻址和层次化的构造网络,IP地址被分为A、B、C、D、E五类,商业应用中只用到A、B、C三类。* A类地址:A类地址的网络标识由第一组8位二进制数表示,网络中的主机标识占3组8位二进制数,A类地址的特点是网络标识的第一位二进制数取值必须为"0"。不难算出,A类地址允许有126个网段,每个网络大约允许有1670万台主机,通常分配给拥有大量主机的网络(如主干网)。* B类地址:B类地址的网络标识由前两组8位二进制数表示,网络中的主机标识占两组8位二进制数,B类地址的特点是网络标识的前两位二进制数取值必须为"10"。B类地址允许有16384个网段,每个网络允许有65533台主机,适用于结点比较多的网络(如区域网)。* C类地址:C类地址的网络标识由前3组8位二进制数表示,网络中主机标识占1组8位二进制数,C类地址的特点是网络标识的前3位二进制数取值必须为"110"。具有C类地址的网络允许有254台主机,适用于结点比较少的网络(如校园网)。为了便于记忆,通常习惯采用4个十进制数来表示一个IP地址,十进制数之间采用句点"."予以分隔。这种IP地址的表示方法也被称为点分十进制法。如以这种方式表示,A类网络的IP地址范围为1.0.0.1-127.255.255.254;B类网络的IP地址范围为:128.1.0.1-191.255.255.254;C类网络的IP地址范围为:192.0.1.1-223.255.255.254。由于网络地址紧张、主机地址相对过剩,采取子网掩码的方式来指定网段号。 TCP/IP协议与低层的数据链路层和物理层无关,这也是TCP/IP的重要特点。正因为如此 ,它能广泛地支持由低两层协议构成的物理网络结构。目前已使用TCP/IP连接成洲际网、全国网与跨地区网
      举个形象的例子 tip和tcp就像电话线与电话机电话线为可靠的传输提供线路基础 电话机提供了可靠传输的功能,因为一个正常的电话,有打电话的人,有接电话的人,而且在听电话的过程中还会有应答以告诉对方双方都在,所以这个传输是可靠的
      你查询下3次握手就知道为什么最可靠了。
      为什么说TCP和IP为INTERNET提供了可靠的传输保障?

      细说TCP的可靠传输、流量控制、拥塞控制

      TCP的可靠传输是基于连续ARQ协议的,ARQ协议中有两个重要的概念:滑动窗口和累计确认。但是我认为TCP能实现可靠传输不仅仅是靠连续ARQ协议,还依靠了:1.通过三次握手、四次挥手来保证信道的可连接性 ;2.采用停止等待协议、连续ARQ协议(自动重传)来保证数据的正确性;3.序列号和确认应答号保证了数据的有序性,4.校验和:如果收到字节的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。TCP通过三次握手来确定这是一个可靠的连接,三次握手的目的是为了确定客户端和服务端都有正常的【收发】能力,即客户端可以发送和接收消息,服务器也可以发送和接收消息。那么如果只有两次握手,则【客户端】的【接收】能力并没有得到确认,不能确定这是一个可靠的连接。同时,为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤,如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。这三个协议的目的,都是为了保证了客户端和服务器的数据,能确保传送到对面。如果数据在中途丢失或者延迟,则需要重新发送,一直到对面接收到为止。A每发送完一个报文M,就等候B对其确认;如果没收到确认,则不能继续发送,收到确认后再继续发送。缺点是一个个字节发送效率太低。数组分组在传输过程中发生错误时有两种情况:在这两种情况下,接收方都不会发送任何信息。发送方在一定时间内没有收到确认,就认为分组丢失,然后重传该数据分组,这就叫超时重传。停止等待ARQ协议就是通过这种确认和重传的机制,在不可靠的网络上实现可靠通信。显然,每次只发送一个报文然后等待确认效率太低。连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。如果中间发生丢失包的情况,A需要回退到确认的报文重新发送。A的发送窗口大小是根据B接受窗口设置的。也就是说A发送的报文速度不能超过B处理报文的速度。TCP中对于超时重传时间的选择是根据平均往返时间RTT来计算的。也就是说,如果A超过一个报文平均往返时间没有收到确认,就会重新发送报文。选择重传ARQ协议是指在接收方收到未按序排列的数据流时,通知发送方重传缺失的数据,而不是重传全部数据。TCP数据段首部中添加选择确认选项SACK可以实现该目的。如图所示,假设上述分组都在发送窗口中,收到三个不连续的分组。三个分组的边界分别为:[4000,5001]、[6000,7001]、[8000,9001]。在建立TCP连接时,连接双方先商定好,在首部选项中加入“允许SACK”的选项。在之后的TCP报文段中增加SACk选项,以便接收方向发送方报告不连续的字节块的边界。因为序号是32位,因此指明一个边界需要4个字节,说明一个字节块的边界需要8个字节。另外需要一个字节指明是SACK选项,一个字节指明这个选项的大小。TCP报文段首部选项最大为40个字节,因此最多指明4个字节块的边界信息。TCP标准并未指明发送方应该如何响应SACK,因此大多数实现还是重传所有未被确认的数据分组。利用滑动窗口机制可以实现对发送方的流量控制。在TCP连接建立时,接收方会在确认报文段中给出自己接收窗口的大小。在每次发送确认报文时能够根据情况动态调整接收窗口的大小,并将告知发送方。如下图所示:发送方发送序号从1开始的100字节的数据,接收方在确认报文中声明自身的接收窗口大小为300字节。之后发送方发送300字节数据,接收方在确认报文中声明自身接收窗口大小调整为50字节。发送方再发送50字节数据之后,收到接收方传来的确认报文,在该报文中声明接收窗口为0。在接收方接收窗口为0时,发送方不再发送数据,直到接收方发送确认报文表明窗口大小发生改变。可是这个确认报文不一定能够被发送方接收到,如果一旦该确认报文丢失,双方都将处于等待中,形成死锁。为防止这种情况出现,TCP规定在收到对方接受窗口为0时,启动一个坚持定时器周期性的发送探测报文,以确定对方接收窗口为0的状态是否改变。另外,TCP标准规定:接收方接收窗口为0时,不再接收正常数据,但是可以接收零窗口探测报文段、确认报文段、携带紧急数据的报文段。当主机开始发送数据时,如果立即将较大的发送窗口的全部数据注入网路中,那么由于不清楚网络的情况,有可能引起拥塞。比较好的方式是试探一下,即从小到大逐渐增大发送端的拥塞控制窗口数值。cwnd以指数增长的形式增长。接收方收到M1之后发送对M1的确认报文,M2报文丢失,之后接收方收到M3、M4、M5时每次都发送对M1报文的重复确认。快重传算法规定当收到三次重复确认后,发送方就认为M2报文段丢失,立即重传M2报文段。
      细说TCP的可靠传输、流量控制、拥塞控制

      为什么TCP的连接能够提高传输的可靠性

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

      TCP是如何保证实现可靠传输的?

      TCP是字节流传输协议,发送消息前的三次握手,发送过程中的顺序编号,确认应答(ACK)机制,开启时钟计时,客户端超时重传,服务端的差错检测(检验和)等。
      TCP是如何保证实现可靠传输的?

      TCP是如何实现可靠传输的?

      在计算机网络的经典五层协议中,TCP属于运输层,实现了进程间的通信,保证了数据的可靠传输,属于计算机网络协议族中最重要的协议之一,那么TCP是如何实现可靠数据传输的呢?运输层的进程间通信是通过socket实现的,socket是一个抽象的概念,在Linux系统中以文件的形式存在。网络层通过IP来区分主机,运输层则增加了端口的概念来区分进程。TCP协议中使用目标IP、目标端口、源IP、源端口来定义一个socket,只需要在运输层的报文头部附加上这些信息,目标主机就会知道数据要发送那个socket,对应监听该socket的进程就可以收到数据进行处理。TCP报文包括首部和数据部分,首部附加了TCP报文的信息,首部长度固定部分为20字节,还有40字节的可选部分,具体如下图所示:其中几个关键字段的作用如下:网络层只管尽可能将数据从一个主机发送到另一个主机,并不保证数据可靠到达,由于网络环境总是不稳定的,可能存在丢包、差错等请求,TCP则通过一系列的机制在运输层保证了数据的可靠传输。网络传输可能发生的异常情况和解决方法:要实现可靠传输,最简单的方法就是发送方发送一个报文,接收方收到报文后发送确认报文表示我收到了,你可以发下一个了,传输模型如下:这种方式保证可靠传输称为停止等待协议,这种方式缺点也很明显,效率非常低。为了提高传输效率,充分利用带宽,发送方会连续的发送数据包,如下图所示:客户端不等收到前一个包的确认报文就开始不断的发下一个包,这样可以充分利用网络带宽,提高传输效率,但是于此同时也带来了另外的问题,那么TCP是如何解决这些问题的?累计确认:网络中充斥着大量的发送包和确认回复报文,这些数据只是为了确认报文到达,并不是实际需要传输的数据。是不是一定要每一个报文都要发一个回复确认的报文呢,TCP采用了累计确认的方法:接收方在累计收到了一定量的数据包后发送一个确认报文告诉发送方在此之前的数据包都已经收到了,这样便可以减少确认报文的数量,提高带宽利用率。GBN(回退n步):如果发生丢包的情况,在连续ARQ中,如果接受方收到了123 567个字节,编号为4字节的包丢失了,按照累计确认只能发送3的确认回复,567都要丢掉,因为发送发会进行重传。选择确认ACK:在TCP报文头部的选项字段部分设置已收到的报文,每一段用两个边界来确定,比如上述情况可以用[1,3]和[5,7]来表示,客户端就会根据选项只重传丢失的数据段。因为接收方读数据的能力有限,发送发不能一直发送报文直到把缓冲区所有数据发送完,这样会导致接收方无法接收丢弃掉数据包,发送方收不到确认认为超时又会继续重传,产生了大量无用数据的重传。对此情况TCP使用滑动窗口来解决,基本模型如下:滑动窗口机制实现了TCP的流量控制,不至于发送太快导致太多的数据丢弃和重传。为了避免网络过分拥挤导致丢包严重,传输效率低,TCP实现了拥塞控制机制,拥塞控制的解决办法本质上是流量控制,控制发送方发送的速度,而上文提到流量控制是通过滑动窗口来实现的,所以最终也是通过调整发送方的滑动窗口大小来实现的。拥塞控制的几个重要的概念:慢启动、拥塞避免、快恢复、快重传Reno算法是比较常见的TCP实现的拥塞控制算法,其他拥塞算法还有Tahoe(已废弃不用)、New Reno等,通过拥塞控制算法可以很大程度避免网络拥挤。【书籍】计算机网络:自顶向下方法【码农有道】 这一篇TCP总结请收下
      TCP是如何实现可靠传输的?

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

          热门文章

          文章分类