【Linux】从内核角度理解 TCP 的 全连接队列(以及什么是 TCP 抓包)
文章目录
- 概念引入
- 理解全连接队列
- 内核方面理解
- Tcp抓包
- 方法
- 注意事项
概念引入
我们知道,TCP的三次握手是由TCP协议 自动处理的,建立连接的过程与用户是否进行accept无关,accept()的作用主要是为当前连接创建一个套接字,用于进行后续的通信;
当服务器来不及进行accept时,底层的TCP listen sock依然允许建立三次握手,建立连接成功,但这个建立连接的数量是有限的:backlog + 1,这个长度就是全连接队列的长度
理解全连接队列

我们根据上图得出几个结论:
- 如图中所述:连接本质是内核中的一种结构体对象,当客户端向服务器发送连接请求时,会先进行三次握手,随后加入到全连接队列中去,如果此时服务器闲置,则会将全连接队列中的连接拿去一部分进行处理
- 全连接队列的最大值是Backlog+1,不代表服务器只能同时处理Backlog+1个请求每次服务器会一次处理n个请求(全连接队列拿取)
- 全连接队列既不能为空,也不能太长
- 为空:增加服务的闲置率,减少给用户提供的效率
- 太长:增加用户等待时间(如果全连接队列本就有连接,证明服务器已经来不及处理连接);且增加空间浪费(需要给每个客户端连接创建额外的空间)
内核方面理解

上面的图片基本揭示了当创建一个文件描述符后,是如何建立连接读取数据的
当创建文件描述符后,会经历以下过程:
-
创建
struct file:- 当一个进程请求创建一个 socket 时,内核首先分配一个
struct file结构体,这个结构体代表打开的文件或 socket,包含文件的类型、状态和指向实际数据的指针。
- 当一个进程请求创建一个 socket 时,内核首先分配一个
-
创建
struct socket:- 接下来,内核会为该 socket 创建一个
struct socket结构体。这个结构体包含了 socket 的相关信息,如协议类型(TCP、UDP等)和相关的操作函数指针。
- 接下来,内核会为该 socket 创建一个
-
创建
struct tcp_socket:- 如果是 TCP socket,内核会在
struct socket中创建一个struct tcp_socket结构体。这一结构体专门处理 TCP 协议的特定信息和操作。
- 如果是 TCP socket,内核会在
-
创建
struct inet_connection_sock:struct tcp_socket还包含一个struct inet_connection_sock,它负责处理 TCP 连接的状态,包括全连接队列(accept queue)和半连接队列(syn queue)。
-
包含
struct sock:inet_connection_sock中有一个struct sock,这是网络协议栈的核心结构之一。struct sock包含了许多关键信息,包括:- 读写缓冲区:用于存储接收到的数据和待发送的数据。
- 状态信息:例如连接的状态(监听、已连接、关闭等)。
全连接队列与缓冲区
-
全连接队列:
- 一旦 TCP 三次握手完成,连接会被加入到全连接队列中,这样服务器就可以处理这些连接。
-
读写缓冲区:
- 当数据通过网络接收时,它会被存储在
struct sock中的读缓冲区中,进程可以通过系统调用(如recv)读取这些数据。 - 类似地,待发送的数据会放入写缓冲区,直到发送完成。
- 当数据通过网络接收时,它会被存储在
Tcp抓包
方法
Linux下的TCP抓包可以使用TCPDump ,TCPDump 是一款强大的网络分析工具, 主要用于捕获和分析网络上传输的数据包
- 捕获所有网络接口上的 TCP 报文
使用以下命令可以捕获所有网络接口上传输的 TCP 报文:
sudo tcpdump -i any tcp
- 捕获指定网络接口上的 TCP 报文
只想捕获某个特定网络接口上的 TCP 报文, 可以使用以下命令:
sudo tcpdump -i <interface> tcp
interface部分的网络接口可以通过ifconfig命令查看
- 捕获特定源或目的 IP 地址的 TCP 报文
使用 host 关键字可以指定源或目的 IP 地址。 例如:
- 要捕获源 IP 地址为
192.168.0.8的 TCP 报文, 可以使用以下命令:
sudo tcpdump src host 192.168.0.8 and tcp
- 要捕获目的 IP 地址为
192.168.0.9的 TCP 报文, 可以使用以下命令:
sudo tcpdump dst host 192.168.0.9 and tcp
- 同时指定源和目的 IP 地址, 可以使用 and 关键字连接两个条件:
sudo tcpdump src host 192.168.0.8 and dst host 192.168.0.9 and tcp
- 捕获特定端口的 TCP 报文
使用 port 关键字可以指定端口号。 例如, 要捕获端口号为 80 的 TCP 报文(通常是 HTTP 请求):
sudo tcpdump port 80 and tcp
- 保存捕获的数据包到文件
使用 -w 选项可以将捕获的数据包保存到文件中, 以便后续分析。 例如:
sudo tcpdump -i eth0 port 80 -w data.pcap
这个代码会把捕获到的 HTTP 流量保存到 data.pcap 文件中;
另外,pcap 后缀的文件与 PCAP(Packet Capture) 文件格式相关,即用于捕获网络数据包的文件格式
- 从文件中读取数据包进行分析
使用 -r 选项可以从文件中读取数据包进行分析:
tcpdump -r data.pcap
该代码将读取 data.pcap 文件中的数据包并进行分析
注意事项
- 使用
tcpdump时, 需要确保有足够的权限来捕获网络接口上的数据包。 - 使用
tcpdump的时候, 有些主机名会被云服务器解释成为随机的主机名, 可以使用 -n 选项避免
相关文章:
【Linux】从内核角度理解 TCP 的 全连接队列(以及什么是 TCP 抓包)
文章目录 概念引入理解全连接队列内核方面理解Tcp抓包方法注意事项 概念引入 我们知道,TCP的三次握手是由TCP协议 自动处理的,建立连接的过程与用户是否进行accept无关,accept()的作用主要是为当前连接创建一个套接字,用于进行后…...
太速科技-712-6U VPX飞腾处理器刀片计算机
6U VPX飞腾处理器刀片计算机 一、产品概述 该产品是一款基于国产飞腾FT-2000四核处理器或D2000八核处理器的高性能6U VPX刀片式计算机。产品提供了可支持全网状交换的高速数据通道,其中P1、P2均支持1个PCIe x16 Gen3或2个PCIe x8 Gen3或4个PCIe x4 Gen3总…...
深度学习(八) TensorFlow、PyTorch、Keras框架大比拼(8/10)
一、深度学习框架概述 深度学习框架在当今人工智能和机器学习领域中占据着至关重要的地位。其中,TensorFlow 由 Google 开发,自 2015 年发布以来,凭借其灵活的计算图、自动微分功能以及跨平台支持等特点,迅速成为主流深度学习框架…...
thinkphp中命令行工具think使用,可用于快速生成控制器,模型,中间件等
在使用tp框架的时候tp内置了一个think的命令行工具, 这个工具可以帮助我们快速的生成控制器,模型,中间件的代码。 这个工具就和laravel中的 artisan 的作用都差不多,只是名称不同而已。 tp中常用的命令行工具: 1. 快…...
Discourse 是否支持手机注册
Discourse 能不能使用手机进行注册? 功能总结 简答来说,Discourse 不能使用手机注册,Discourse 也没有提供这个功能。 这个功能多是需要 SSO 来实现。 比如说华为的那个社区,他们自己做了一个自己的用户管理 SSO,然…...
软件测试学习笔记丨Flask框架-请求与响应
本文转自测试人社区,原文链接:https://ceshiren.com/t/topic/23408 请求方法 from flask import Flaskapp Flask(__name__)app.route("/cases", methods["get"]) def get_case():return {"code": 0, "msg": &…...
【C++笔记】list结构剖析及其模拟实现
【C笔记】list结构剖析及其模拟实现 🔥个人主页:大白的编程日记 🔥专栏:C笔记 文章目录 【C笔记】list结构剖析及其模拟实现前言一 .list的结构及其介绍1.1list的结构1.2list的使用1.3迭代器划分 二.list的模拟实现2.1 list结构…...
C#进阶1
C#进阶1 本文章主要介绍C#的进阶知识,如反射,特性.... 参考视频链接 原码 文章目录 C#进阶1反射步骤泛型反射调用方法 获取属性 特性特性的定义步骤扩展枚举练习 反射 在 C# 中,反射(Reflection)是一种强大的机制&a…...
PHP如何对输出进行转义
在PHP中,对输出进行转义是为了防止跨站脚本攻击(XSS)和其他安全问题。PHP提供了多种函数来对输出进行转义,这些函数根据输出的上下文(如HTML、JavaScript、URL等)而有所不同。以下是一些常用的转义函数及其…...
Windows 10 安装Docker踩过的坑和解决-31/10/2024
目录 环境版本 一、Docker Desktop双击启动没反应,open //./pipe/dockerDesktopLinuxEngine: The system cannot find the file specified. 二、Docker Desktop运行run命令时显示错误HTTP code 500 并且错误大意是服务器拒绝访问 三、检测Docker是否可以正常使用…...
【应急响应】Linux植入恶意程序排查流程
文章目录 前言一、Linux入侵检查二、Linux系统被入侵/中毒有哪些现象三、Linux系统被入侵/中毒处置过程四、Linux安全防护措施五、服务器被GetShell渗透解决办法(案例)前言 本篇文章主要是以我们日常的运维工作中对Linux服务器进行安全检查,进一步介绍如何使用具体命令来对Li…...
微信小程序app.js里面onLaunch里面的函数比page里面的onshow里面的方法后执行
微信小程序app.js里面onLaunch里面的函数比page里面的onshow里面的方法后执行 我们在app.js里面执行登录时可以调用checkLoginReadyCallback wx.login({ success: (res) > { $api .login({ jsCode: res.code, }) .then((res1) > { wx.hideLoading(); if (res1.code 0) …...
斐波那契时间序列,精准捕捉市场拐点 MT4免费公式源码!
指标名称:斐波那契时间序列 版本:MT4 ver. 2.01 斐波那契时间序列是一种技术分析工具,通过将斐波那契数列(如1, 2, 3, 5, 8, 13等)应用于时间轴上,用于预测市场价格的时间周期拐点。斐波那契时间序列在股…...
计算机的错误计算(一百四十)
摘要 探讨 MATLAB 中函数 的计算精度。 从计算机的错误计算(一百三十九)知,对于对数运算,当真数在 1 附近时,计算机的输出会出现较大误差。为此,IEEE 754-2019 中专门定义有函数 其目的就是当自变量在 …...
JavaEE初阶---网络原理(四)--IP协议/DNS协议
文章目录 1.初识网络层(了解即可)2.地址管理2.1动态分配2.2网络地址转换2.3IP-v6最终解 3.网段划分4.以太网协议--数据链路层5.DNS应用层协议 1.初识网络层(了解即可) 网络层做的事情就是下面的两个: 1)地…...
LeetCode20:有效的括号
原题地址:. - 力扣(LeetCode) 题目描述 给定一个只包括 (,),{,},[,] 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合…...
简单介绍Class文件、Dex文件以及ELF文件
Class文件 Class文件是Java源代码文件经Java编译器编译后得到的Java字节码文件。对比Linux、Windows上的可执行文件而言,Class文件可以看作是Java虚拟机的可执行文件。 Dex文件 Dex文件是Android平台上与传统Class文件对应的Java字节码文件。Dex文件的核心内容与Cl…...
Vivo开奖了,劝退价。。
vivo 也开奖了,不过有小伙伴反馈是个劝退价,甚至不如隔壁的 oppo,要说这两家也是渊源颇深,一家是绿厂,一家是蓝厂,高管也都是早期步步高出来的。 给大家盘一下开奖的信息,方便大家横向做个对比&…...
鸿蒙打包hvigorw clean报错No npmrc file is matched in the current user folder解决
问题 在执行hvigorw clean等命令时,报错如下: Error: The hvigor depends on the npmrc file. No npmrc file is matched in the current user folder. Configure the npmrc file first解决方案 在用户当前目录下新建.npmrc文件,并配置如下…...
无人机救援系统基本组成
无人机救援系统基本组成 1. 源由2. 组成2.1 无人机载具2.1.1 多旋翼2.1.2 垂起固定翼2.1.3 智能避障2.1.4 物资投递 2.2 智能吊舱2.2.1 云台2.2.2 高清摄像2.2.3 红外热成像2.2.4 激光测距2.2.5 目标跟踪 2.3 通讯链路2.3.1 超长距离通信2.3.2 长距离通信2.3.3 中等距离通信 2.…...
如何高效管理命令历史:yargs readline功能的终极指南
如何高效管理命令历史:yargs readline功能的终极指南 【免费下载链接】yargs yargs the modern, pirate-themed successor to optimist. 项目地址: https://gitcode.com/gh_mirrors/ya/yargs 在现代命令行工具开发中,提供流畅的用户交互体验至关…...
如何快速清理Windows驱动存储:Driver Store Explorer完整使用指南
如何快速清理Windows驱动存储:Driver Store Explorer完整使用指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer Driver Store Explorer(简称RAPR)是…...
回流平台深耕闲置翡翠流通,以数字化服务激活珠宝产业新动能
据中国珠宝玉石首饰行业协会数据,我国珠宝玉石首饰产业市场规模持续扩大,翡翠玉石作为第二大珠宝消费品类,市场存量可观。与此同时,发达国家二手高端消费品交易占整个高端消费品市场的20%至30%,我国目前占比约5%&#…...
手把手教你用STM32F103驱动DS3231高精度时钟模块(附完整源码与避坑指南)
手把手教你用STM32F103驱动DS3231高精度时钟模块(附完整源码与避坑指南) 1. 硬件准备与连接 DS3231作为一款高精度实时时钟模块,其内部集成了温度补偿晶体振荡器(TCXO),在-40C到85C范围内精度可达2ppm。与STM32F103的硬件连接主…...
如何使用AI大模型进行报表合并?一句话搞定复制粘贴
每个月底,财务小张都要做一件事:把1月到12月的销售明细表合成年报。12个Excel文件,每个文件30多列,字段名倒是一致,但数据量加起来几十万行。她的老办法是打开所有文件,逐个复制粘贴到一个新表里࿰…...
二供泵站设备全生命周期管理系统方案
在城镇居民二次供水管理体系中,泵房分散于各小区及大型建筑,管理部门长期面临“监管盲区、故障滞后、运维成本高”的突出矛盾。由于缺乏统一的远程监控手段,水泵运行状态、进出水压力、水箱液位、变频器参数等关键数据无法实时获取࿰…...
那个号称能把安全厂商、操作系统厂商桌子都掀了的Anthropic Mythos到底是吹牛还是真牛
权力的杠杆与认知的泡沫:Anthropic Mythos 模型在网络安全领域的真实效能与战略叙事深度评估2026年4月7日,Anthropic 公司发布了名为 Claude Mythos Preview 的新型前沿模型,这一事件在人工智能与网络安全交叉领域引发了前所未有的剧烈震荡。…...
如何快速掌握Java-Callgraph2:静态调用图分析的完整指南
如何快速掌握Java-Callgraph2:静态调用图分析的完整指南 【免费下载链接】java-callgraph2 Programs for producing static call graphs for Java programs. 项目地址: https://gitcode.com/gh_mirrors/ja/java-callgraph2 你是否曾经在复杂的Java项目中迷失…...
从零搭建CFD-DEM耦合环境:OpenFOAM与PFC3D在WSL2下的实战部署指南
1. 环境准备:WSL2与Ubuntu基础配置 第一次接触CFD-DEM耦合仿真的同学,建议从Windows系统起步。微软的WSL2(Windows Subsystem for Linux)现在已经能完美支持Ubuntu环境,实测比虚拟机流畅得多。我去年在联想小新Pro16上…...
AI智能体安全框架实战:从提示词注入防御到工具调用沙箱化
1. 项目概述:当AI智能体需要“安全管家”最近在折腾AI智能体(Agent)的开发,尤其是在尝试让它们接入外部工具和API时,一个绕不开的“老大难”问题就是安全性。你辛辛苦苦训练或调教好的智能体,一旦让它能执行…...
