TCP 协议的低效实现

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

包括 Linux kernel 在内的各种 TCP 实现均使用类似 skb 的对象管理一个个 packet,使 TCP 失去了 “流” 特征。应用通过 syscall 每写入一批数据,协议栈都可能生成一个 skb:
TCP 协议的低效实现

仅管理这些 skb 就是一笔大开销。除了 skb 数据结构本身的 crud 操作外,在处理 SACK 时还要涉及 split/merge,非常麻烦。为了提高效率,rtx 从链表组织成了红黑树,同时,为了记录 RACK,还有一个 时间序链表,这些链表本身都没有错,问题在于在这个框架中,skb 为主,skb->data 被挟裹在 skb 之中,只是其一个属性,本末倒置。

举一个例子,如果 SACK 携带了 12345~22345 这个 block,如何找到它?显然需要操作 skb 队列,看一下 tcp_sacktag_write_queue 这个函数就知道多复杂了。带宽越大,rtx queue 越大,问题越大越复杂。

这件事的局面如下图所示:
TCP 协议的低效实现

其实把 skb 和 data 的关系颠倒一下,将 skb 置于更下层,只负责发送之用。以 data 为主,置于一段平坦的内存空间(一般表示为 ringbuffer),用 “页表项” 管理每一个固定的小段(比如 4KB),每段都可以指向一个或几个 skb,而每一个 skb 则反过来指示自己的 data 范围,这就非常简单了。

仍然以 SACK block:12345~22345 为例,连续寻址直接定位到 12345 - una~22345 - una,删除这段区间小段所指向的 skb,对应 skb 收缩或被回收。

这件事的局面如下图所示:
TCP 协议的低效实现

就像操作系统管理 page 使用的页表一样,内存就是内存,永远在那里,而 page 对象描述其属性,TCP 数据流的平坦空间也用一个 “页表” 管理起来,连续的流永远在那里,而 skb 对象描述其属性。

但这也只是说说,Linux TCP 的实现已经摆在那里 20 年了,作为通用系统不可能改变。如果非要实现高效传输,只能指望专门的协议栈实现。

拉肚子刷头条看到一幅图,觉得不错:
TCP 协议的低效实现

在下班的路上写下一句感慨:这就是现如今各种在高速网络上运行的传输协议自找的麻烦,明明修座立交就能搞定的事,偏偏都在秀复杂的算法。

我本以为 seastar tcp 会好一些,可是依然很难用加减乘除来进行 crud。

浙江温州皮鞋湿,下雨进水不会胖。文章来源地址https://www.toymoban.com/news/detail-447251.html

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

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

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

相关文章

  • Linux内核--网络协议栈(五)TCP IP栈的实现原理与具体过程

    一、引言 二、Linux内核的结构 三、Linux网络子系统 四、TCP/IP协议栈 ------4.1、网络架构 ------4.2、协议无关接口 ------4.3、套接口缓存 ------4.4、重要的数据结构 五、网络信息处理流程 ------5.1、硬中断处理 ------5.2、ksoftirqd内核线程处理软中断 ------5.3、网络协议栈处理 ------5.4、

    2024年01月21日
    浏览(74)
  • Linux 系统中常见的命令,它们用于执行各种任务,包括文件和目录管理、系统信息查看、用户管理等

    以下是一些在 Linux 系统中常见的命令,它们用于执行各种任务,包括文件和目录管理、系统信息查看、用户管理等。这里列举了一些基础的命令: 文件和目录管理: ls: 列出目录内容。 ls cd: 切换当前目录。 cd /path/to/directory cp: 复制文件或目录。 cp source_file destination mv: 移动

    2024年01月19日
    浏览(96)
  • QT 利用开源7z 实现解压各种压缩包,包括进度条和文件名的显示(zip,7z,rar,iso等50多种格式)

            想做一个winRAR一样的解压软件吗?很简单,利用开源的7z库就能实现。我看网上其他人说的方法不敢苟同,误人子弟。以前自己在项目中使用过7z,这次又有需要,就想记录下来。如果你研究过如何用7z的话,一定知道7z的每一个GUID都代表了一种格式,50多种GUID也就有

    2024年02月04日
    浏览(54)
  • EasyDarwin计划新增将各种流协议(RTSP、RTMP、HTTP、TCP、UDP)、文件转推RTMP到其他视频直播平台,支持转码H.264、文件直播推送

    之前我们尝试做过EasyRTSPLive(将RTSP流转推RTMP)和EasyRTMPLive(将各种RTSP/RTMP/HTTP/UDP流转推RTMP,这两个服务在市场上都得到了比较多的好评,其中: 1、EasyRTSPLive用的是EasyRTSPClient取流,EasyRTSPClient只支持RTSP取流,所以,EasyRTSPLive就只能做RTSP流的转推功能; 2、EasyRTMPLive用的是

    2024年01月19日
    浏览(39)
  • 【Linux】 -- TCP协议 (一)

    TCP全称为 “传输控制协议”(Transmission Control Protocol) TCP协议被广泛应用 其根本原因就是提供了详尽的可靠性保证 基于TCP的上层应用非常多 比如HTTP、HTTPS、FTP、SSH、MySQL等。 为什么网络中会存在不可靠 冯诺依曼体系结构 这里的 输入设备 内存 输出设备 cpu这些硬件都是相互

    2024年02月08日
    浏览(23)
  • 【Linux】TCP协议

    从上一章开始,我们正式进入 传输层 的学习,该层两个重要的协议TCP协议和UDP协议。上一章我们主要学习了UDP,认识了其报头和各个字段。TCP协议因为要维持可靠性传输,所以要做很多工作,同时也很难理解,本章我们将重讲TCP协议。 整个网络协议栈就叫做TCP/IP协议栈,可

    2024年02月06日
    浏览(26)
  • Linux——TCP协议2

    目录  确认应答(ACK)机制 超时重传机制  连接管理机制  流量控制 滑动窗口  快重传VS超时重传 拥塞控制  延迟应答 捎带应答  面向字节流 粘包问题 TCP异常情况  基于TCP应用层协议 TCP/UDP对比 用UDP实现可靠传输 listen 的第二个参数     TCP将每个字节的数据都进行了编号. 即

    2024年02月07日
    浏览(24)
  • 【Linux 网络】 传输层协议之TCP协议 && TCP的三次握手和四次挥手

    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议 基于TCP应用层协议 HTTP HTTPS SSH Telnet FTP SMTP 源/目的端口号: 表示数据是从哪个进程来, 到哪个进程去 32位序号/确认序号:TCP的确认应答机制要使用到的字段,保证TCP的可靠

    2024年02月14日
    浏览(57)
  • Linux网络-UDP/TCP协议详解

    2023/10/17 14:32:49 Linux网络-UDP/TCP协议详解 零、前言 一、UDP协议 二、TCP协议 1、应答机制 2、序号机制 3、超时重传机制 4、连接管理机制 三次握手 四次挥手 5、理解CLOSE_WAIT状态 6、理解TIME_WAIT状态 7、流量控制 8、滑动窗口 丢包问题 9、拥塞控制 10、延迟应答 11、捎带应答 12、面

    2024年02月07日
    浏览(54)
  • Linux内核TCP/IP协议栈

    inet_init 是如何被调用的?从start_kernel到inet_init调用路径 在 Linux 内核启动过程中,inet_init 函数是通过以下路径被调用的: 1.start_kernel 函数是内核的入口点,它位于 init/main.c 文件中。 2.在 start_kernel 函数中,会调用 rest_init 函数来初始化系统的剩余部分。 3.rest_init 函数中会调

    2024年01月25日
    浏览(62)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包