tcp_max_syn_backlog 和 somaxconn 有什么区别?

2024-04-15

我一直在阅读一些关于 Linux 上的 TCP 实现的文章,我很困惑,它们之间有什么区别net.ipv4.tcp_max_syn_backlog and net.core.somaxconnbacklog作为参数传递给listen()系统调用,它们之间有什么关系。

附:我想要对内核 4.15 进行解释,因为我发现最旧的内核和较新的内核在这个问题上存在一些差异。


sysctl 是一个 API。所以你可以直接阅读Linux内核适当版本的文档 https://elixir.bootlin.com/linux/v4.15.18/source/Documentation/networking/ip-sysctl.txt#L372:

tcp_max_syn_backlog - INTEGER
    Maximal number of remembered connection requests, which have not
    received an acknowledgment from connecting client.
    The minimal value is 128 for low memory machines, and it will
    increase in proportion to the memory of machine.
    If server suffers from overload, try increasing this number.

somaxconn - INTEGER
    Limit of socket listen() backlog, known in userspace as SOMAXCONN.
    Defaults to 128.  See also tcp_max_syn_backlog for additional tuning
    for TCP sockets.

让我们考虑一个TCP握手 https://www.geeksforgeeks.org/tcp-3-way-handshake-process/.. tcp_max_syn_backlog表示最大连接数SYN_RECV队列。 IE。当你的服务器收到SYN,发送SYN-ACK,但还没有收到ACK。这是所谓的“请求套接字”的单独队列 -reqsk在代码中(即不是完全成熟的套接字,“请求套接字”占用较少的内存。在这种状态下,我们可以节省一些内存并且尚未分配完整的套接字,因为如果 ACK 不会到达,将来可能根本不会建立完整的连接)。该队列的值会受到影响(请参阅这个帖子 https://stackoverflow.com/questions/58183847/does-listens-backlog-number-include-syn-received-connections-count-in-case-of-t/58185850) by listen() https://www.man7.org/linux/man-pages/man2/listen.2.html's backlog论证并受限于tcp_max_syn_backlog在内核中。

somaxconn代表最大尺寸ESTABLISHED队列。这是另一个队列。
回想一下前面提到的SYN_RECV队列 - 您的服务器正在等待客户端的 ACK。当 ACK 到达时,粗略地说,内核从“请求套接字”创建一个大的成熟套接字,并将其移动到 ESTABLISHED 队列。然后你可以做accept() https://man7.org/linux/man-pages/man2/accept.2.html在这个插座上。该队列还受到listen()'s backlog论证并受限于somaxconn在内核中。

有用的链接:1 https://stackoverflow.com/questions/23862410/invalid-argument-setting-key-net-core-somaxconn/25074725#25074725, 2 http://veithen.io/2014/01/01/how-tcp-backlog-works-in-linux.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tcp_max_syn_backlog 和 somaxconn 有什么区别? 的相关文章

  • 在 Linux 上更快地分叉大型进程?

    在现代 Linux 上达到与 Linux 相同效果的最快 最好的方法是什么 fork execve combo 从一个大的过程 我的问题是进程分叉大约 500MByte 大 并且一个简单的基准测试只能从进程中实现约 50 个分叉 秒 比较最
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 跟踪 Linux 程序中活跃使用的内存

    我想跟踪各种程序在特定状态下接触了多少内存 例如 假设我有一个图形程序 最小化时 它可能会使用更少的内存 因为它不会重新绘制窗口 这需要读取图像和字体并执行大量库函数 这些对象仍然可以在内存中访问 但实际上并没有被使用 类似的工具top它们
  • 通过特定分隔符删除字符串

    我的文件中有几列 其中第二列有 分隔符 我想删除第二列中的第一个 第三个和第四个字符串 并将第二个字符串留在该列中 但我有正常的分隔符空间 所以我不知道 input 22 16050075 A G 16050075 A G 22 16050
  • perl6 IO::Socket::INET 无法从套接字接收数据:连接被对等方重置

    示例服务器 usr bin env perl6 my listen IO Socket INET new listen localhost
  • 应用程序无缘无故地被杀死。怀疑 BSS 高。如何调试呢?

    我已经在CentOs6 6中成功运行我的应用程序 最近 硬件 主板和内存 更新了 我的应用程序现在毫无理由地被杀死 root localhost PktBlaster PktBlaster Killed 文件和 ldd 输出 root lo
  • 使用PHP套接字发送和接收数据

    我正在尝试通过 PHP 套接字发送和接收数据 一切正常 但是当我尝试发送数据时 PHP 不发送任何内容 Wireshark 告诉我发送的数据长度为 0 我正在使用这段代码
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • Linux TUN/TAP:无法从 TAP 设备读回数据

    问题是关于如何正确配置想要使用 Tun Tap 模块的 Linux 主机 My Goal 利用现有的路由软件 以下为APP1和APP2 但拦截并修改其发送和接收的所有消息 由Mediator完成 我的场景 Ubuntu 10 04 Mach
  • 如何在bash中使用jq从变量中包含的json中提取值

    我正在编写一个 bash 脚本 其中存储了一个 json 值 现在我想使用 Jq 提取该 json 中的值 使用的代码是 json val code lyz1To6ZTWClDHSiaeXyxg redirect to http examp
  • 树莓派的设备树驱动内核

    我想用设备树驱动的 Linux 内核启动树莓派 有什么特别的事情要做吗 谁能指出为树莓派设置基于设备树的内核启动需要什么 我可能需要有树莓派内核源代码 其中设备驱动程序应与设备树兼容 如果是这样 我在哪里可以找到 Raspberry Pi
  • 为什么 Linux perf 使用事件 l1d.replacement 来处理 x86 上的“L1 dcache misses”?

    在英特尔 x86 上 Linux用途 https stackoverflow com a 52172985 149138事件l1d replacements来实施其L1 dcache load misses event 该事件定义如下 计数
  • C# 获取系统上 Socket.ReceiveBufferSize 和 Socket.SendBufferSize 的最大值

    我们的高吞吐量应用程序 1gbps 从大的 ReceiveBufferSize 和 SendBufferSize 中受益匪浅 我注意到在我的机器上 我可以拥有 100 MB 的缓冲区大小 没有任何问题 但在某些客户端和测试机器上 最大值略高
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • 从 Python 调用 PARI/GP

    我想打电话PARI GP http pari math u bordeaux fr dochtml gpman html仅从Python计算函数nextprime n 对于不同的n是我定义的 不幸的是我无法得到帕里蟒蛇 http code
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • 如何有效截断文件头?

    大家都知道truncate file size 函数 通过截断文件尾部将文件大小更改为给定大小 但是如何做同样的事情 只截断文件的尾部和头部呢 通常 您必须重写整个文件 最简单的方法是跳过前几个字节 将其他所有内容复制到临时文件中 并在完成
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两

随机推荐