扩展— TCP 全连接队列与 tcpdump 抓包
前言在 Linux 网络编程开发中listen() 函数的第二个参数backlog是容易被初学者忽略的知识点。大多数开发者仅知道该参数和连接排队相关但不了解内核存在半连接队列、全连接队列两套独立管理结构一旦并发连接量超过队列上限会出现客户端连接超时、建链失败等问题。本文结合完整 C TCP 服务端 / 客户端实验、数据结构图解、netstat状态观测、tcpdump命令行抓包完整拆解 TCP 双队列底层逻辑配套可复现的实操案例所有内容基于本科计算机网络、Linux 系统编程体系无复杂度解析适合网络编程入门和知识学习。一、TCP 两套连接队列1.1 三次握手与双队列分工TCP 建立连接需要三次握手Linux 内核协议栈为监听端口维护两套独立队列分别管理握手不同阶段的连接请求两套队列各司其职互不干扰半连接队列存储服务器收到客户端SYN报文、回复SYNACK但尚未收到客户端第三次握手ACK的连接。全连接队列客户端完成三次握手、连接进入ESTABLISHED状态但应用程序未调用accept()从内核取出的连接。1.2 backlog 参数backlog仅约束全连接队列结论全连接队列最大有效长度 backlog 1。同时系统全局参数net.core.somaxconn会对队列上限做兜底限制最终生效长度取min(backlog1, somaxconn)线上高并发服务需同步调高该内核参数避免队列提前溢出。队列溢出后果当全连接队列填满新完成三次握手的连接无法存入队列内核不会回复 RST 重置报文客户端会持续重传第三次握手 ACK最终出现连接超时失败服务端侧新连接长期停留在SYN_RECV状态无法转为ESTABLISHED。二、TCP 双队列复现实验2.1 设计思路服务端逻辑调用Bind绑定端口Listen(2)设置 backlog2永久不调用 accept ()所有完成握手的连接全部积压在全连接队列。客户端逻辑循环发起 TCP 连接不主动断开预期现象backlog2全连接队列最大容量为 3启动 3 个客户端可正常建立ESTABLISHED连接启动第 4 个客户端时第四个连接停留在SYN_RECV无法进入全连接队列。2.2 源代码2.2.1 服务端 test_server.cc#include tcp_socket.hpp #include cstdio #include unistd.h int main(int argc, char* argv[]) { // 参数校验./test_server [ip] [port] if (argc ! 3) { printf(Usage ./test_server [ip] [port]\n); return 1; } TcpSocket sock; bool ret sock.Bind(argv[1], atoi(argv[2])); if (!ret) { printf(Bind failed\n); return 1; } // listen第二个参数backlog2 ret sock.Listen(2); if (!ret) { printf(Listen failed\n); return 1; } // 核心不调用accept所有连接积压在内核全连接队列 while (1) { sleep(1); } return 0; }2.2.2 客户端 test_client.cc#include tcp_socket.hpp #include cstdio #include unistd.h int main(int argc, char* argv[]) { if (argc ! 3) { printf(Usage ./test_client [ip] [port]\n); return 1; } TcpSocket sock; bool ret sock.Connect(argv[1], atoi(argv[2])); if (ret) { printf(connect ok\n); } else { printf(connect failed\n); } // 连接成功后持续持有不断开 while (1) { sleep(1); } return 0; }2.3 步骤与状态观测编译运行服务端./test_server 127.0.0.1 9090依次打开 3 个终端启动客户端./test_client 127.0.0.1 9090执行netstat -an | grep 9090查看连接状态服务端监听端口tcp 0 0 0.0.0.0:9090 0.0.0.0:* LISTEN3 组双向ESTABLISHED连接内核全连接队列未满4启动第 4 个客户端再次执行netstat 观测新增一条服务端侧状态为SYN_RECV的记录客户端侧显示ESTABLISHED。原因客户端已完成三次握手并收到服务端 SYNACK本地连接置为 ESTABLISHED但服务端全连接队列已满无法将该连接从半连接队列迁移至全连接队列服务端持续停留在SYN_RECV。三、TCP 数据结构图解3.1 层级关系用户态进程到 TCP 传输控制块的内核层级调用链路task_structLinux 进程核心结构体包含struct files_struct文件描述符管理结构fd_array[ ]文件描述符数组每个 fd 指向独立struct filestruct file私有数据private_data绑定struct socket套接字结构struct socket持有通用传输控制块struct sockstruct sock为多态基类衍生inet_sock、tcp_sock所有 TCP 连接的收发缓冲区、半 / 全连接队列、状态标识全部存储在tcp_sock结构体中是内核管理 TCP 连接的底层载体。3.2 sk_buffsk_buff是 Linux 网络协议栈承载单个数据包的标准容器网卡收发、TCP 队列排队的数据包全部封装为该结构四个指针划分内存区域head整块缓冲区内存起始地址data当前有效协议数据起始可前后移动用于动态增删二层 / IP/TCP 头部tail当前有效数据末尾end缓冲区内存边界内存分区从前往后依次为头空间、二层帧头、IP 头、TCP 头、应用层数据、尾空间。头部 / 尾部预留空闲空间协议栈处理报文时无需拷贝数据仅移动指针即可完成头部增减提升网络性能。图中nr_frags 2代表数据包存在分片分片数据通过frag_list链表挂载适合大报文分段存储。四、tcpdump 命令行抓包tcpdump是 Linux 原生命令行抓包工具无需图形界面适合服务器线上故障排查支持精准过滤 IP、端口、TCP 标志位抓包文件可导出.pcap格式在 Wireshark 中可视化分析。4.1 安装Ubuntu/Debian 系列sudo apt-get update sudo apt-get install tcpdumpCentOS/RHEL 系列sudo yum install tcpdump注意tcpdump 必须 root 权限运行普通用户执行需加sudo前缀。4.2 抓包命令分类4.2.1 按网络接口# 捕获所有网卡全部TCP报文 sudo tcpdump -i any tcp # 仅捕获eth0网卡流量 sudo tcpdump -i eth0 tcp参数说明-i指定网络接口any匹配本机全部网卡末尾tcp过滤仅保留 TCP 协议报文。4.2.2 按源/目的 IP 报文# 捕获源IP 127.0.0.1的TCP包 sudo tcpdump src host 127.0.0.1 and tcp # 捕获发往127.0.0.1的TCP包 sudo tcpdump dst host 127.0.0.1 and tcp # 双向过滤仅抓取127.0.0.1与192.168.1.10交互流量 sudo tcpdump src host 127.0.0.1 and dst host 192.168.1.10 and tcp4.2.3 按端口过滤# 抓取9090端口所有TCP流量服务端监听端口 sudo tcpdump port 9090 and tcp4.2.4 抓包存储# 将9090端口抓包数据保存至test.pcap sudo tcpdump -i any port 9090 -w test.pcap # 离线读取pcap文件分析数据包 tcpdump -r test.pcap4.3 注意事项-n不反向解析主机名、端口名称避免云服务器 DNS 解析延迟、乱码主机名线上抓包必加-v/-vv/-vvv逐级提升报文打印详细程度查看 TCP 序列号、窗口大小、校验和第三次握手纯 ACK 报文数据长度为 0无应用层负载。结语TCP 连接队列是网络编程底层核心基础看似简单的listen函数背后涉及完整内核队列管理机制。本文通过可复现 C 实验代码、内核结构体图解、命令行抓包实验覆盖理论、代码、观测完整链路。读者们可本地搭建实验环境修改 backlog 参数重复观测队列溢出现象加深对 TCP 内核双队列模型的理解。

相关新闻

C++ ADO远程访问Oracle数据库:环境配置、核心代码与性能优化

C++ ADO远程访问Oracle数据库:环境配置、核心代码与性能优化

1. 项目概述:为什么选择C与ADO进行Oracle远程访问?在众多企业级应用的后台,尤其是那些运行在Windows平台上的历史遗留系统或高性能中间件,C与Oracle数据库的组合依然是一个坚如磐石的经典架构。当项目需求明确指向“远程访问”时&…

2026/8/1 6:08:02 阅读更多 →
嵌入式C++安全编码实践与内存管理优化

嵌入式C++安全编码实践与内存管理优化

1. 嵌入式C安全编码概述在资源受限的嵌入式环境中,C因其高效性和面向对象特性成为主流开发语言。但嵌入式系统的特殊性(如实时性要求、内存限制、长期运行等)使得安全编码比传统软件开发更为关键。我曾参与过医疗设备控制系统的开发&#xff…

2026/8/1 6:08:02 阅读更多 →
《说文解字》白话译本选择与使用指南:从汉字结构到文化解读

《说文解字》白话译本选择与使用指南:从汉字结构到文化解读

1. 为什么《说文解字》值得读,但很多人读不下去《说文解字》是东汉许慎编撰的第一部系统分析汉字字形、考究字源的字典,收录了9353个汉字,按540个部首编排。这本书被称作“字圣经典”,是因为它不仅是查古字的工具,更是…

2026/8/1 6:08:02 阅读更多 →

最新新闻

兰亭妙微精益 UX 设计实战指南:以轻量化迭代消除设计资源浪费

兰亭妙微精益 UX 设计实战指南:以轻量化迭代消除设计资源浪费

兰亭妙微深耕政企、工业、医疗 B 端数字化系统 UI/UX 设计十六年,落地数百套管理平台、数据可视化软件。在长期项目复盘里我们发现,传统瀑布式设计流程存在明显短板:前期堆砌完整需求文档、反复打磨高保真页面、漫长评审周期,大量…

2026/8/1 6:49:16 阅读更多 →
选对 AI 写作工具,效率与质量双向落地|普通人选购核心标准 + PaperRed、笔捷 AI、毕业之家深度测评

选对 AI 写作工具,效率与质量双向落地|普通人选购核心标准 + PaperRed、笔捷 AI、毕业之家深度测评

在课程论文、毕业论文、工作报告、学术文稿需求激增的当下,AI 辅助写作早已不是 “加分项”,而是提升创作效率、把控内容合规性的刚需工具。但市面上产品功能鱼龙混杂:有的只追求生成速度却内容空洞,有的查重数据与学校系统偏差巨…

2026/8/1 6:49:16 阅读更多 →
《说文解字》白话译本:从汉字起源到现代应用的系统入门指南

《说文解字》白话译本:从汉字起源到现代应用的系统入门指南

拿到这套全五册全注全译版《说文解字》白话译本时,我第一反应是:终于不用再对着影印古籍猜字了。过去几年,每次想真正弄懂一个汉字的来龙去脉,总要翻出中华书局那本竖排无标点的影印本,边查字典边猜句读,一…

2026/8/1 6:49:16 阅读更多 →
02-自动求导搞不定nn_Module和autograd原理一次讲透

02-自动求导搞不定nn_Module和autograd原理一次讲透

自动求导搞不定?nn.Module和autograd原理一次讲透 我之前写训练循环的时候,遇到一个诡异的问题:loss在下降,但模型参数完全没更新。debug了半天,发现是requires_grad=False搞的鬼。更气人的是,这种bug不报错,你还得自己发现模型没学到东西。 这篇把PyTorch自动求导和n…

2026/8/1 6:49:16 阅读更多 →
AD19隐藏网络警告解析:原理图库引脚属性规范与多部件元件处理

AD19隐藏网络警告解析:原理图库引脚属性规范与多部件元件处理

1. 项目概述:AD19中一个“隐藏”的警告 如果你正在使用Altium Designer 19(AD19)进行PCB设计,尤其是在处理一些从旧版本迁移过来或者结构比较复杂的原理图库时,很可能在编译项目或检查电气规则时,在Message…

2026/8/1 6:49:16 阅读更多 →
MusicFree插件化音乐播放器:免费听歌的完整指南与实用技巧

MusicFree插件化音乐播放器:免费听歌的完整指南与实用技巧

MusicFree插件化音乐播放器:免费听歌的完整指南与实用技巧 【免费下载链接】MusicFree 插件化、定制化、无广告的免费音乐播放器 项目地址: https://gitcode.com/maotoumao/MusicFree 在数字音乐时代,寻找一款真正免费、无广告且功能强大的音乐播…

2026/8/1 6:48:16 阅读更多 →

日新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/8/1 5:19:34 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/1 0:00:48 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/1 0:00:48 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/1 0:00:48 阅读更多 →