解决TCP网络传输粘包问题

      最后更新:2022-04-29 03:33:19 手机定位技术交流文章

      TCP/IP为因特网通信技术确立了概念基础。TCP和IP协议是一揽子协议的两个主要协议。TCP/IP框中的TCP议定书确保数据段的可靠性和顺序。使用可靠的传输层协议,应用程序层协议允许通过 TCP 协议直接发送数据 。与数据部分损失或重复无关

      图1描述了TCP议定书和应用级协定。

      IP协议处理包裹的路径和传输。最高的TCP协议不再优先考虑路线和地点。因此,TCP处理传输可靠性和顺序问题。最高层不需要担心数据能否转移到目标进程。只要TCP协议中关于缓冲区的数据是书面的,数据将在几天内提供。协议书库几乎始终保证数据的存取。

      当应用层协议通过 TCP 协议传输数据时,TCP协议可以将应用层以多个包件形式发送的数据分割和传送。虽然数据接收者可能已经得到了无数的“侵犯数据包”,但数据接收者可能已经收到数据,数据接收者可能已经收到数据。因此,当应用层读取TCP缓冲带的数据时,他们发现了粘贴的数据集,然后发现了这些数据。收到的数据必须分列。

      粘胶袋不是根据TCP协议创建的。这是因为申请级别协议的设计师对TCP协议的误解。TRCP议定书的描述被置之不理,在建立应用层议定书方面缺乏经验。本条将从TCP协议开始,然后进入申请级协议。研究TCP协议中臭名昭著的“粘粘袋”是如何变成:

      • TPP协议是一项以字节流动为导向的协议,允许合并或分割APA数据。
      • (b) 应用层协议内没有特定信息,使数据接收者无法将数据合并。

      许多人可能认为粘胶袋是一个低层次的话题, 甚至不值得讨论。然而,提交人认为,这是一个令人感兴趣的主题。并不是每个人都深入地研究了基于TCP的应用级协议结构。这不是每个人对TCP的解释。许多个人认为方案拟订进程是自下而上。因此,提交人认为,这是一个值得答复的问题。我们必须提供必要的信息。而不是消极和仁慈的感情

      相信我,得到最新和最新的信息。 C++ 音视频 (a) 学习促进项目,例如: C/C++ Linux FFmpeg webRTC rtmp hls rtsp ffplay srs

      面向字节流

      TCP协议是一个连接的、可靠的、以字节为基础的传输层协议,应用层不将提供给TCP协议的数据发送到信息中对象的主机,这些信息有时被分解成数据段并传送到目标主机。

      Nagle方法是一种数据-包装减少算法,它改进了TCP传输性能技术方法,是一种数据-包装减少算法,它改进了TCP传输性能。因为网络的容量受到限制它不会直接向目标主机传送微小的数据块。这只是等待在当地缓冲区内传送更多数据的问题。这种散装数据传播技术尽管影响实时和网络延迟,但不是一个明智的概念。然而,它可以减少网络堵塞和节省资金的可能性。

      在早期的互联网中,Telnet是一个广受欢迎的应用程序。另一方面,Telnet将产生大量合法数据,只装载1字节。每个数据包的附加充电量为40字节。带宽使用率仅为24%。Nagle 算法是在时间设置中创建的。

      当应用程序层协议使用 TCP 协议发送数据时,实际上,拟转移的数据最初写入TCP协议的缓冲区,这是第一个发送的缓冲区。如果用户激活 Nagle 算法,因此,TCP协议可能不会立即传输书面数据。在数据超过最大数据段(MSS)或前一数据段由ACK收集之前,它将不从缓冲区传输数据。

      图2显示了Nagle 算法。

      网络堵塞问题将在几十年前出现, 然而今天的网络带宽资源并没有像过去那样受到限制, Linux 内核将利用以下的缺省来禁用Nagle算法:

      为了测试我们是否应该交付当前 TCP 数据段, Linux 内核使用 tcp_ nagle_ test 函数, 有兴趣的读者可以使用该函数作为条目, 获取今天Nagle 算法的完整图片 :

      由于数据集较小,Nagle算法提高了带宽利用率,降低了TCP和IP协议的额外费用。然而,采用这种技术可能会导致应用层协议中多次写入的数据被合并或独立分发。当接收者读取TCP议定书存储处的数据时,无关数据位于同一数据部分。等级协议可能无法分割和重组它们。

      除了Nagle算法之外,TCP协议还载有另一个推迟数据传输的选项。TCP_CORK如果我们启用此选项, TCP 协议将延迟提供200米的数据, 或等待在缓冲区内的数据超过 MSS, 当数据传输少于 MSS 时 。

      无论是TCP_NODELAY还是TCP_CORK,通过推迟数据传播,它们都增加了带宽的使用。它们分割和重组应用级协议中的数据。TPP协议以字节为基础,这是许多技术和配置可能发展的最根本原因。数据集的概念本身无法获取。数据不会按照数据集发送 。

      消息边界

      如果我们深入研究了TCP议定书和基于TCP的层议定书的结构,因此,建立应用层协议是没有错的, 这种协议可以被TCP协议任意分开, 并汇集成数据包。由于TCP协议是以字节为基础的,这意味着,申请级别协议必须界定电文的限度。

      如果我们能在申请一级协议中指明电文的限度,因此,无论TCP协议如何分割和重组应用层协议的数据集程序,根据协议条款,接收方有权恢复适当信息。在应用层协议中,最受欢迎的两种解决办法是长度和终点。

      图3说明了执行信息边界的技术。

      按长度计算,这样做有两种办法。使用设定长度就是一个例子。在申请一级,所有信息大小相同。另一个选择是选择一个不规则的长度。因此,要求列入一个字段,标明申请一级协议负责人的负载长度。因此,接收人可以区分各种电文和字节流。HTTP协议的信息边界以长度为基础:

      我们在上述HTTP信息中加以利用。Content-LengthHTTP 信件信头提供负载大小, 在应用层协议解析到适当数量字节时, 整个 HTTP 信件可以从中分离出来, 我们可以使用此规则重新配置 HTTP 信件, 而不取决于发件人如何处理相关数据包 。

      然而,《HTTP议定书》除了采用长度法来达到边界之外,还使用一种以终点为基础的技术,当HTTP使用区块转移机制时,HTTP信头不再含有HTTP信头。Content-Length它现在使用负载大小为 0 的 HTTP 信件作为信件边界 。

      除这两种方式外,我们还可以根据特定规则,例如通过TCP协议传输JSON数据等,实现电文界限,接收人可以根据收到的数据能否被视为有效的JSON,确定电文是否完整。

      总结

      TCP贴纸问题是应用层协议开发者设计不良的结果。它们忽视了TCP协议的主要数据传输方法,该方法以字节流为基础。它不包括信息、数据包等概念。所有数据交换都是无缝的。申请级别协议必须设计信息发送的边界。这个故事是我们对2011年埃及抗议的特别报导的一部分。让我们重温粘胶袋问题的根本原因:

      1. TCP协议是一个基于字节的传输层协议,不使用电文或数据包的概念。
      2. 确定申请层协议时不使用基于长度或终端的电文边界,许多电文是捆绑的。

      网络协议学习过程相当令人感兴趣,定期沉思其根本问题,使我们能够更深入地了解定义。 最后,让我们看看一些比较开放的问题,感兴趣的读者可以思考以下问题:

      • 以UDP协议为基础的应用级别协议的设计应该是什么样子? 粘糊糊的袋会是一个问题吗?
      • 哪些应用级协议使用长长框架,哪些使用终端框架?

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

          热门文章

          文章分类