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

author author     2023-05-11     520

关键词:

参考技术A

在计算机网络的经典五层协议中,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与udp,可靠udp如何实现

两种协议都是传输层协议,为应用层提供信息载体。TCP协议是基于连接的字节流的可靠协议,有三次握手,四次挥手,超时重传,流量控制(滑动窗口),拥塞控制和差错控制,也正因为有可靠性的保证和控制手段,所以传输效率... 查看详情

udp如何实现可靠传输

参考技术A由于在传输层UDP已经是不可靠的连接,那就要在应用层自己实现一些保障可靠传输的机制简单来讲,要使用UDP来构建可靠的面向连接的数据传输,就要实现类似于TCP协议的1.超时重传(定时器)2.有序接受(添加包序号... 查看详情

计算机网络——tcp如何做到可靠数据传输(代码片段)

...靠数据传输的。二、正文?2.1网络传输存在的问题??研究TCP如何保证可靠数据传输之前,我们先来列举一下网络传输存在什么问题,只有发现了问题,才能对症下药,找出应对的方法。TCP是依靠网络层的IP协议来发送数据,而IP协... 查看详情

如何提高udp的可靠性

TCP是通过确认机制和超时重传机制实现可靠传输 UDPUDP它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接... 查看详情

tcp协议中是如何保证报文可靠传输的

1、什么是TCP的可靠传输  它向应用层提供的数据是无差错的、有序的、无丢失的,换言之就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的。2、TCP保证可靠传输的办法有哪些?  TCP采用了流量控制、拥塞... 查看详情

网络协议tcp和udp可靠性传输

...:网络协议一、协议1、HTTP协议:基于TCP连接的,主要解决如何包装数据,对应于应用层;2、TCP/UDP协议:主要解决数据如何在网络中传输,对应于传输层;3、IP协议:对应于网络层;·在传输数据时,可以只使用传输层(TCP/IP),但是那... 查看详情

udp如何实现可靠性传输?

版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[+] 1udp与tcp的区别        TCP(TransmissionControlProtocol传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协... 查看详情

tcp可靠传输及流量控制实现原理

...可靠传输?  1.停止等待协议通过确认与超时重传机制实现可靠传输在发送完一个分组后,必须暂时保留已发送的分组的副本。分组和确认分组都必须进行编号。超时计时器的重传时间应当比数据在分组传输的平均往返时间更... 查看详情

tcp实现可靠传输的机制

实现可靠传输需要保证三个条件:(1)无比特差错传输(2)字节流不丢不重不乱序(3)接收方的处理能力大于发送速率****************************************************************TCP的首部检验和会检查首部和数据段,保证报文段无比特差错,满足条... 查看详情

字节一面:如何用udp实现可靠传输?(代码片段)

...群里看到,有位读者字节一面的时候被问到:「如何基于UDP协议实现可靠传输?」很多同学第一反应就会说把TCP可靠传输的特性(序列号、确认应答、超时重传、流量控制、拥塞控制)在应用层实现一遍。实... 查看详情

tcp协议保证可靠传输机制

...。UDP是用户数据报协议,尽最大能力交付。那么TCP是如何保证数据的可靠传递的呢?TCP保证可靠数据传输的方式:1.数据包检验2.超时重传机制3.确认应答机制4.对失序数据包重排序5.TCP的流量控制与拥塞控制首先先看... 查看详情

tcp是如何保证可靠传输的

一、综述1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。2、数据校验3、数据合理分片和排序:  UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报... 查看详情

tcp可靠传输:校验和,重传控制,序号标识,滑动窗口确认应答

...通过校验和,重传控制,序号标识,滑动窗口、确认应答实现可靠传输应答码:ACK TCP的滑动窗口机制    TCP这个协议是网络中使用的比较广泛,他是一个面向连接的可靠的传输协议。既然是一个可靠的传输协议... 查看详情

计算机网络——运输层(67):tcp超时重传时间的选择tcp可靠传输的实现

...总。6.TCP超时重传时间的选择6.1课后练习7.TCP可靠传输的实现7.1课后练习6.TCP超时重传时间的选择  ■超时重传时间的选择是TCP最复杂的问题之一  如下图所示,假设主机A和B是因特网上的两台主机,它们之间已经建立... 查看详情

tcp可靠传输滑动窗口流量控制拥塞控制

...绍可靠传输、滑动窗口、流量控制、拥塞控制。1、TCP是如何保证可靠传输的序号TCP是基于字节流的,UDP是基于报文段,TCP为每个字节都边上序号,ACK和Seq也是这么来的,序号就是Seq。确认ACK和Seq配对使用重传超时... 查看详情

可靠数据传输的原理

...力而为的服务,也就是说不提供任何质量保证。那么TCP是如何在不可信信道上为上层服务提供可靠的服务呢?这里的可靠包括两方面:传输的数据比特不会受到损坏或丢失。所有数据都是按照其发送顺序进行交付的。一、可靠服... 查看详情

tcp可靠传输的实现

假设我们讨论A向B发送数据,A端有发送窗口,B端有接受窗口根据B给出的窗口值A构造出自己的发送窗口,假如A收到了B的确认报文,此时窗口的值为20,确认序号的值为31,那么接收端会构造出下面的窗口650)this.width=650;"src="https://... 查看详情

udp如何实现可靠性传输

文章目录如何让UDP实现可靠传输如何让UDP实现可靠传输自定义通讯协议,在应用层定义一些可靠的协议,比如检测包的顺序,重复包等问题,如果没有收到对方的ACK,重新发包,将实现放到应用层,然后类... 查看详情