TCP 的可靠传输

这篇具有很好参考价值的文章主要介绍了TCP 的可靠传输。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

可靠传输有啥用

我们知道相比于 UDP, TCP 的传输是可靠的, 啥意思呢?
就是 UDP 发送的数据, 它自己不知道发送的数据对方是否接收到.
而 TCP 发送的数据, 它知道对方是否接收到, 也就是说对方会给个应答.

假设一个场景 :
甲要付款给乙, 甲的账户上明明扣了款, 但是乙却迟迟没收到, 那甲还要付款吗? 甲的账户里已经扣了钱, 再付款就是冤大头了.
TCP 存在的初心就是为了保障数据传输的可靠性, 让这种情况不再发生.

那 TCP 具体是如何实现可靠传输的呢?

有两点 :

  1. 确认应答
  2. 超时重传

确认应答

确认应答是实现可靠性的最核心机制.
我们可以观察TCP报文结构 :
TCP 的可靠传输
其实 TCP 针对将要发送的数据都进行一个字节一个字节的编号, 即为序列号.
对于发送方来说, 确认序号无意义, 只有在ack中也就是应答报文中才有意义.
TCP 的可靠传输
为了更好理解, 就将数据传输简化如下 :
TCP 的可靠传输
确认序号是取发送过来的所有数据的最后一个字节的下一个字节的序号.

确认序号 1001 的含义 :

  1. < 1001 的数据我已经收到了.
  2. 接下来向发送方索要从 1001 开始的数据.

接收方可以通过 ack 的确认序号, 来告诉发送方哪些数据已经收到了.

在数据传输的过程中, 也可能出现 “先来后到” 的情况.
比如 : 客户端连续发了两条数据, 服务端先接收到数据2, 再接收到数据1, 显然这两个数据顺序反了, 如果就这样不管的话显然会出事的.

TCP 其实还有个整队的能力, TCP 会有个接收缓冲区 (一块内核中的内存空间), 每个 socket 都有一份自己的缓冲区.
TCP 将接收到的数据存储在缓冲区, 这样就可以利用序号来对数据进行整队了. (这也是 TCP 序号的一个重要用途).
这样就保证了应用程序读数据时, 读到的一定是有序的数据了.(和发送的顺序一样)

注意
应用程序读取完数据后, 缓冲区的数据就删除了.

超时重传

在数据传输过程中, 并不是一帆风顺的, 可能还会出现丢包情况.
丢包是网络上非常典型的情况.

为什么会丢包呢?
其实数据传输过程并不是简单的两个节点互动, 而是途中会经历很多节点, 就像我们看地图找目标点一样, 到达目标点可能需要经过多个十字路口.
TCP 的可靠传输
中间任何一个节点出了问题, 都可能会出现丢包情况.

这中间的每个设备, 都在承担很多的转发任务.
每个设备的转发能力都是有上限的.
当某一时刻, 某个设备的流量达到了峰值, 就可能会出现丢包情况.

如果包丢了, 接收方就收不到了, 也就不会返回 ack, 发送方也就拿不到应答报文, 等待一段时间后, 如果还是没有收到应答报文, 发送方就知道刚才的数据包丢包了, 就会再发一遍.

丢包是个概率事件, 如果发生了丢包, 一般重传还是可以传过去的.

发送方对于丢包的判定 : 一定时间内没有收到 ack.

其实丢包也分为两种情况的 :

  1. 数据直接丢失, 接收方没收到, 自然不会发送 ack.
  2. 接收方收到数据, 但是返回的 ack 丢了.

发送方是区分不了这两种情况的, 只能都重传了.

其实这两种情况 TCP 都考虑到了, 它会在缓冲区中, 根据数据序号来进行去重, 保证应用程序读取到的数据只有一份.

那它如何应对多个包丢失呢?

还是超时重传, 只是每丢包一次, 超时等待时间都变长 (降低重传的频率), 因为 TCP 认为这种情况是网络出现严重故障, 就干脆摆烂了, 节省资源.
如果连续多次重传都没有得到 ack, 此时 TCP 就会重置连接 (也就是重连), 如果重置连接失败, TCP 就会关闭连接, 放弃网络通信.

总结

TCP 可靠传输的基石 :文章来源地址https://www.toymoban.com/news/detail-414524.html

  1. 一切顺利, 以确认应答保证可靠性.
  2. 出现丢包, 使用超时重传作为补充.

到了这里,关于TCP 的可靠传输的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 网络原理(二)TCP的可靠传输

    网络协议的在实际运用是分为5层协议及: 应用层 传输层 网络层 数据链路层 物理层 这五层结构在,java 网络编程中已经有所现,具体用法具体实现的功能,都有。 这里主要的一个协议也是目前网络上最常用的一个协议,HTTP协议。 这层结构,决定数据要传输什么,拿到数据

    2024年02月09日
    浏览(37)
  • TCP消息传输可靠性保证

    三次握手 TCP 提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。 所谓三次握手是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包以确认连接的建立。在socket编程中,这一过程由客户端执行connect来触发。 第一次握手:客

    2024年02月12日
    浏览(42)
  • TCP如何保证传输可靠性?

    文章参考: 《网络是怎样连接的》:https://book.douban.com/subject/26941639/ 《图解网络》:https://www.xiaolincoding.com/network/ 在开始阅读该博客之前,先要好好了解一下 TCP报文头部 到底有那些信息,阅读后续内容时有任何模糊的地方都可以回来这里 查看梳理 ,接下来我来解释一下:

    2024年02月20日
    浏览(46)
  • TCP_可靠数据传输原理

    在网络通信中,TCP是确保数据可靠传输的关键协议。但在我们深入研究TCP拥塞控制技术之前,让我们先探索可靠数据传输的原理,特别是TCP头部中一些重要字段的作用。 网络层提供了点对点的通信服务,努力交付数据报,但并不保证可靠交付。这引出了运输层的角色,而TC

    2024年01月20日
    浏览(43)
  • 数据通信——传输层TCP(可靠传输原理的ARQ)

    上一篇讲述了停止等待协议的工作流程,在最后提到了ARQ自动请求重传机制。接下来,我们就接着上一篇的篇幅,讲一下ARQ这个机制 还是这个图来镇楼  发送端对出错的数据帧进行重传是自动进行的,因而这种差错控制体制常简称为ARQ(Automatic Repeat reQuest),直译是自动重传请

    2024年02月10日
    浏览(42)
  • TCP协议是如何实现可靠传输的

    1.TCP 是面向连接的运输层协议,在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务。为此,在 IP 的数据报服务基础之上,增加了保证可靠性的一系列措施。 2.TCP最主要的特点 (1)TCP 是面向连接的运输层协议。         每一条 TCP 连接只能有两个端点 (endp

    2024年02月08日
    浏览(46)
  • TCP如何保证传输的可靠性

    TCP采用哪些方式保证数据传输可靠? 答: 1、数据分块:将数据包划分为合适的大小,这样更能适应网络的限制,如果数据发生错误或丢失,只要重传有问题的部分即可,减少重传的数据量。方便进行流量和拥塞控制。 2、数据包有序号,可以根据序号对失序的数据包进行重

    2024年04月11日
    浏览(38)
  • 传统TCP设计的可靠传输协议详解

    传统TCP设计的可靠传输协议是一种基于TCP协议实现的可靠传输方法。下面是传统TCP设计的可靠传输协议的详细解释: 连接管理:传统TCP设计的可靠传输协议使用TCP协议进行连接管理。在建立连接时,客户端和服务器之间需要完成三次握手,以确保双方都准备好进行数据传输。

    2024年02月16日
    浏览(32)
  • 【lwip】14-TCP协议之可靠传输的实现(TCP干货)

    ‍ 前面章节太长了,不得不分开。 这里已源码为主,默认读者已知晓概念或原理,概念或原理可以参考前面章节,有分析。 参考:李柱明博客:https://www.cnblogs.com/lizhuming/p/17438743.html ‍ lwip的时钟机制可以翻看前面章节。 lwip的TCP可靠传传输的实现离不开两个时钟处理函数:

    2024年02月06日
    浏览(47)
  • 【网络协议】聊聊TCP如何做到可靠传输的

    网络是不可靠的,所以在TCP协议中通过各种算法等机制保证数据传输的可靠性。生活中如何保证消息可靠传输的,那么就是采用一发一收的方式,但是这样其实效率并不高,所以通常采用的是累计确认或者累计应答。 TCP为了保证顺序性,每个包都有一个ID,这个是建立连接之

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包