【计网】TCP协议如何保证数据的顺序传输

TCP保证数据的顺序传输使用了ISN(initial sequence number - 初始化序列化)


为什么会导致数据乱序?

假设A和B之间使用相同的序列号:

  1. A向B发送SYN,seq=1的报文,经过三次握手建立连接
  2. A使用相同的seq=1向B发送200字节数据,由于网络阻塞,该数据报一直在网络中逗留
  3. A重启,B释放连接
  4. A重新发送seq=1给B建立连接
  5. A使用相同的seq=1向B发送250字节数据,B成功接收
  6. 之前由于网络问题未接收到的200字节数据到达B,B误以为是新建立的连接发送过来的数据,就会接收200字节数据
  7. 最终导致B在收到新tcp连接的数据后,又收到旧tcp连接的数据,从而出现数据乱序的问题。

解决方法

  1. A向B发送连接请求报文段,选择初始化序号seq=x
  2. B同意建立连接,在确认报文中发送确认号ack=x+1,同时自己选择一个序列化seq=y
  3. A收到B的确认,向B给出确认。ack=y+1,seq=x+1

如果不携带数据则不消耗序号,在这种情况下,下一个报文段的序号仍是seq=x+1

  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值