TCP可靠数据传输

TCP的可靠数据传输

1.TCP保证可靠数据传输的方法

TCP主要提供了检验和、序号/确认号、超时重传、最大报文段长度、流量控制等方法实现了可靠数据传输。

检验和

通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢失该TCP报文段。

序号/确认号

序号:TCP传输时将每个字节的数据都进行了编号,这就是序号,一个报文段的序号字段因此是该报文段首字节的字节流编号。

确认号:主机 A 填充进报文段的确认号是主机 A 期望从主机 B 收到的下一字节的序号。

在上图中,通过序号和确认号,只要发送端有一个报文段传输,接收端没有通过确认号回应(ACK用来保证确认号是有效的),都会重发。或者接收端的响应报文段在网络中丢失了,导致发送端没有收到,也会重发数据。这就可以保证数据的完整性。

超时重传

在进行TCP传输时,TCP每发送一个报文段,都会在一个超时间隔内等待接收方发送回一个ACK确认报文段,如果在这个超时间隔内没有收到ACK确认报文段就会触发超时重传,TCP发送端就会重新发送此报文段。

这个超时间隔是按照3.5.3节的方法动态计算的

最大报文段长度:MSS

在建立TCP的时候,双方约定一个最大报文段长度(MSS)进行发送,重传的时候也是根据这个长度进行重传。

流量控制

        一般来说,我们总希望数据传输的更快一些。但如果发送方把数据发得过快,接收方就可能来不及接收,这就会造成数据的丢失。流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。
        利用滑动窗口机制可以很方便地在TCP连接上实现发送方流量控制。通过接收方的确认报文中的窗口字段,发送方能够准确地控制发送字节数。

        TCP通过让发送方维护一个称为接收窗口的变量来提供流量控制。通俗的说,接收窗口用于给发送方一个指示:该接收方还有多少可用的缓存空间。因为TCP是全双工通信,在连接两端的发送方都各自维护一个接收窗口rwnd,rwnd是动态变化的,下图对变量rwnd进行了图示。

接收窗口rwnd由以下公式得到:

rwnd = RcvBuffer - [LastByteRcvd - LastByteRead]

其中,

LastByteRcvd:接收方上的应用程序从缓存读出的数据流的最后一个字节的编号。

LastByteRead:从网络中到达的并且已放入接收方的接收缓存中的数据流的最后一个字节的编号。

LastByteRcvd - LastByteRead <= RcvBuffer

        接收方通过把当前的rwnd值放入它发给发送方的报文段接收窗口字段中,通知发送方它在该连接的缓存中还有多少可用空间。开始时,接收方设定rwnd = RcvBuffer。

        发送方轮流跟踪两个变量, LastByteSent和LastByteAcked,这两个变量的意义很明显,注意到这两个变量之间的差 LastByteSent - LastByteAcked,就是发送方发送到连接中但未被确认的数据量, 通过将未确认的数据量控制在值 rwnd 以内,就可以保证发送方不会使接收方的接收缓存溢出。 因此,发送方在该连接的整个生命周期须保证
LastByteSent - LastByteAcked <= rwnd

滑动窗口机制:缓存中会有一个窗口,这个窗口中全部都是发送方已发送但未收到响应ACK的报文段,当窗口中最早的那个已发送但未收到响应收到了响应报文段之后,滑动窗口会右滑。

2.超时间隔加倍

TCP重传具有最小序号的还未被确认的报文段时,如果TCP下次重传的还是此分组,那么会将此分组的超时定时器的时间间隔增加为原先的二倍。

3.快速重传

TCP发送方会在超时事件发生之前通过注意是否有3个冗余的ACK来决定是否重新发送冗余ACK所对应的报文段及之后的报文段。

如果TCP发送方接收到对相同数据的3个冗余ACK,它会把这当做一种暗示,说明跟在这个已被确认过3次的报文段之后的报文段已经丢失,TCP就执行快速重传。

超时间隔加倍和快速重传只是大多数TCP实现中所做的一些修改,并非所有TCP均有此机制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
TCP是传输控制协议(Transmission Control Protocol)的缩写,它是一种常用的网络传输协议。在数据传输中,TCP使用拼接的方式来传输数据。 首先,当发送方要向接收方传输数据时,它将数据分割成较小的块,称为TCP段或报文段。这样做的目的是为了将数据进行拆分,以便在网络上传输。 然后,TCP将每个TCP段打上标记,以确保接收方可以按照顺序将它们拼接在一起。这意味着即使TCP段在传输过程中可能经过不同的路径、以不同的顺序到达接收方,接收方仍然能够将它们正确地重新组装起来。 接收方接收到TCP段后,会按照序列号进行排序。接收方会根据TCP段头部中的序列号信息,将接收到的TCP段按照正确的顺序进行拼接。如果接收方发现某个TCP段的序列号缺失或者乱序,它会向发送方发送一个相应的请求,要求重传或者重新排序。 拼接数据的过程是通过在接收方维护一个缓冲区来完成的。接收方将接收到的TCP段存储在缓冲区中,直到所有的TCP段都到达,并且按照正确的顺序进行拼接。一旦所有的TCP段都被拼接完成,数据就可以被传递给上层应用程序进行处理。 总之,TCP数据传输中使用拼接的方式来传输数据。它将数据分割成较小的TCP段,并通过序列号信息,保证接收方能够按照正确的顺序将它们拼接在一起。这种机制确保了数据的可靠传输和正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真滴book理喻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值