当前位置: 首页 > news >正文

TCP 握手数据流

这张图详细描述了 TCP 握手过程中,从客户端发送 SYN 包到服务器最终建立连接的整个数据流转过程,包括网卡、内核、进程中的各个环节。下面对每个步骤进行详细解释:

客户端到服务器的初始连接请求
  1. 客户端发送 SYN 包
    • 客户端发起一个 TCP 连接请求,发送 SYN(同步)包到服务器。
    • 这个 SYN 包是三次握手的第一步。
网卡驱动
  1. 进入网卡的 RingBuffer

    • 服务器的网卡接收到来自客户端的 SYN 包,将其存储在网卡硬件的 RingBuffer 中。
    • RingBuffer 是网卡内置的一个循环缓冲区,用于暂存接收到的数据包。
  2. DMA 传输

    • 网卡使用 DMA(Direct Memory Access)将数据包从 RingBuffer 传输到系统内存中的 DMA 缓冲区。
    • DMA 缓冲区位于系统内存,由网卡驱动程序管理。
内核处理
  1. 硬中断触发

    • 当数据包被 DMA 传输到系统内存后,网卡触发硬中断通知 CPU 数据包已经到达。
    • 硬中断处理程序进行基本处理,如记录中断事件,并触发软中断请求。
  2. 软中断处理

    • 软中断处理程序(如 NAPI 轮询函数)将数据包从 DMA 缓冲区读取,并复制到 sk_buff 结构中。
    • sk_buff 是内核中用于存储和管理网络数据包的数据结构。
  3. 协议栈处理

    • 数据包被存储在 sk_buff 中,并传递给内核的网络协议栈进行处理。
    • netif_receive_skb 函数中,数据包根据其协议类型(如 TCP、UDP、ARP 等)被传递到相应的处理函数。
TCP 三次握手处理
  1. 进入半连接队列

    • 如果数据包是 TCP SYN 包,它将进入服务器的半连接队列(Syn Queue)。
    • 半连接队列用于存储尚未完成三次握手的连接请求。
  2. 完成三次握手

    • 服务器发送 SYN-ACK 包给客户端,并等待客户端发送 ACK 包以完成三次握手。
    • 当服务器接收到客户端的 ACK 包后,连接请求从半连接队列移到全连接队列(Accept Queue)。
进程处理
  1. 全连接队列
    • 全连接队列用于存储已完成三次握手的连接请求,等待应用层调用 accept 系统调用来处理这些连接。
    • 应用程序调用 accept 后,连接从全连接队列移到应用层,正式建立连接,准备进行数据传输。

DMA 缓冲区的满情况和处理方法

DMA 缓冲区满的处理
  1. 数据包丢失

    • 当 DMA 缓冲区满时,新到的数据包无法存储,将被丢弃。这会导致数据包丢失,特别是在高流量情况下。
  2. 优化措施

    • 增大 DMA 缓冲区:如果硬件允许,可以通过配置或升级网卡来增大 DMA 缓冲区的大小。
    • 调整系统参数:优化内核参数,以增加系统缓冲区的容量,提高整体处理能力。
    • 使用多队列:配置网卡的多队列机制,使得多个队列可以并行处理数据包,提高处理效率。
    • 流量控制:在高流量情况下,使用流量控制和限流机制,减少数据包丢失。
示例命令
  • 调整 RingBuffer 和队列大小

     bash 

    复制代码

    ethtool -G eth0 rx 4096

  • 调整内核参数

     bash 

    复制代码

    sysctl -w net.core.rmem_max=26214400 sysctl -w net.core.wmem_max=26214400

  • 调整中断亲和性

     bash 

    复制代码

    echo 1 > /proc/irq/IRQ_NUMBER/smp_affinity

结论

TCP 握手过程中,数据包从网卡接收到系统内存,再到内核处理的整个过程,涉及硬件(如网卡、RingBuffer、DMA)和软件(如 sk_buff、协议栈、连接队列)多个层面的协作。DMA 缓冲区在高流量情况下可能会满,通过合理的硬件配置和系统优化,可以提高网络数据包处理能力,减少数据包丢失,保障网络性能。

相关文章:

TCP 握手数据流

这张图详细描述了 TCP 握手过程中,从客户端发送 SYN 包到服务器最终建立连接的整个数据流转过程,包括网卡、内核、进程中的各个环节。下面对每个步骤进行详细解释: 客户端到服务器的初始连接请求 客户端发送 SYN 包: 客户端发起…...

MDA协议

MDA协议通常指消息摘要算法(Message Digest Algorithm),在计算机安全和密码学中被广泛用于数据完整性验证和认证。以下是对MDA协议的详细介绍: 1. 概述 MDA协议是一类哈希函数,用于生成固定长度的消息摘要或哈希值。…...

always块敏感列表的相关报错,

在综合的时候,报错如下 Synthesis synth_1 [Synth 8-91] ambiguous clock in event control ["E:/FPGA/FPGA_project/handwrite_fft/handwrite_fft.srcs/sources_1/new/reg_s2p.v":140] 猜测报错原因(暂时没有时间寻找原因,后续在…...

STM32空闲中断处理串口接受数据

1、检测到空闲线路中断也叫做空闲中断,意思是串口接收完1字节数据后,数据先保持高电平(空闲)的时间超过1字节数据所用的时间,则被判定为空闲中断。 2、HAL库中操作空闲中断的宏是 (1)_HAL_UAR…...

oak相机使用oak官网方式标定

目录 一、depthai ROS驱动 一、depthai ROS驱动 (1)驱动下载地址:2. C 开发快速上手 — DepthAI Docs 0.3.0.0 documentation sudo apt install ./depthai_2.17.1_arm64.deb //运行 Python3 utilities/cam_test.py -mres 400 -cams rgb,m …...

打造高效能“园区企业服务平台”,让企业更好更快发展!

​近年来,随着我国经济的快速发展,各地产业园区建设如火如荼,成为区域经济的支柱,如果说园区是区域经济的支柱,企业则是园区的血液,给园区带来生命力,为园区发展提供着动力,各地政府…...

【常见开源库的二次开发】基于openssl的加密与解密——openssl认识与配置(一)

目录: 目录: 一、什么是openssl? 二、所需要具备的开发工具 三、Windows上编译OpenSSL3.0 四、Linux编译openssl3.0 一、什么是openssl? OpenSSL 是一个开源的软件库,它提供了一系列加密工具和协议,主要用…...

前端时间格式传入后端负载里面没有东西

我是因为没有将时间值格式化&#xff0c;所有负载没有东西 <el-col :md"6"><el-form-item label"创建时间" prop"createTime"><el-date-picker v-model"queryParams.createTime" type"date" change"ha…...

BUCK电源芯片,电气参数,极限参数,工作特性,引脚功能

概述 在应用DC-DC开关电源芯片时&#xff0c;通常需要关注以下参数&#xff0c;同步与非同步&#xff0c;输入电压&#xff0c;输入电流&#xff0c;输出电压&#xff0c;输出电流&#xff0c;输入输出电容的选择&#xff1b;mosfet选型&#xff0c;电感选型&#xff0c;功耗&a…...

学习小记-使用Redis的令牌桶算法实现分布式限流

在介绍令牌桶算法前先介绍一下漏桶算法&#xff08;Leaky Bucket&#xff09; 漏桶算法&#xff08;Leaky Bucket&#xff09; 漏桶算法是一种固定容量的容器模型&#xff0c;它通过控制数据流入和流出的速度来限制数据的传输速率。漏桶算法的主要特点包括&#xff1a; 固定…...

electron + express 实现 vue 项目客户端部署

写在前面 作为一个前端程序员&#xff0c;如何实现从前端到客户端的跨越&#xff0c;可能是一个很难实现的事。但客户需求千奇百怪&#xff0c;偶尔遇到一个非要客户端的&#xff0c;如何应对&#xff1f; 那Electron可能真是你福音。具体它有哪些功能&#xff0c;可自行官网…...

千万慎投!自引率高达93%!这16本On hold正处于高危状态,无法检索,剔除岌岌可危中!近四年镇压期刊“出狱”情况一览

本周投稿推荐 SCI • 能源科学类&#xff0c;1.5-2.0&#xff08;25天来稿即录&#xff09; • CCF推荐&#xff0c;4.5-5.0&#xff08;2天见刊&#xff09; • 生物医学制药类&#xff08;2天逢投必中&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09…...

【数据结构】排序——快速排序

前言 本篇博客我们继续介绍一种排序——快速排序&#xff0c;让我们看看快速排序是怎么实现的 &#x1f493; 个人主页&#xff1a;小张同学zkf ⏩ 文章专栏&#xff1a;数据结构 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 ​ 目录 …...

Matlab 怎么查找矩阵中所有0的数据并赋值

index find(X40); X4(index)57.71527;...

开发一个HTTP模块

开发一个HTTP模块 HTTP模块的数据结构ngx_module_t模块的数据结构ngx_http_module_t数据结构ngx_command_s 数据结构 定义一个HTTP模块处理用户请求返回值获取URI和参数方法名URIURL协议版本 获取HTTP头获取HTTP包体 发送响应发送HTTP头发送内存中的字符串作为包体返回一个Hell…...

vue2实现复制,粘贴功能,使用vue-clipboard2插件

一、需求说明 在项目中 点击按钮 复制 某行文本是很常见的 应用场景&#xff0c; 在 Vue 项目中实现 复制功能 需要借助 vue-clipboard2 插件。 二、代码实现 1、安装 vue-clipboard2 依赖 &#xff08; 出现错误的话&#xff0c;可以试试切换成淘宝镜像源 npm config set r…...

【软件测试】 1+X初级 功能测试试题

【软件测试】 1X初级 功能测试试题 普通员工登录系统&#xff0c;在“个人信息维护”模块&#xff0c;可以查看和维护个人信息。个人信息维护需求包括用户&#xff08;UI&#xff09;页面、业务规则两部分。 UI 界面 个人信息维护 修改基本信息 业务规则 1. 个人信息维护页面…...

zynq启动和程序固化流程

普通FPGA启动 FPGA的启动方式主要包含主动模式、被动模式和JTAG模式。 主动模式&#xff08;AS模式&#xff09; 当FPGA器件上电时&#xff0c;它作为控制器从配置器件EPCS中主动发出读取数据信号&#xff0c;并将EPCS的数据读入到自身中&#xff0c;实现对FPGA的编程。这种…...

CSS3实现彩色变形爱心动画【附源码】

随着前端技术的发展&#xff0c;CSS3 为我们提供了丰富的动画效果&#xff0c;使得网页设计更加生动和有趣。今天&#xff0c;我们将探讨如何使用 CSS3 实现一个彩色变形爱心加载动画特效。这种动画不仅美观&#xff0c;而且可以应用于各种网页元素&#xff0c;比如加载指示器或…...

【JVM基础篇】Java的四种垃圾回收算法介绍

文章目录 垃圾回收算法垃圾回收算法的历史和分类垃圾回收算法的评价标准标记清除算法优缺点 复制算法优缺点 标记整理算法&#xff08;标记压缩算法&#xff09;优缺点 分代垃圾回收算法&#xff08;常用&#xff09;JVM参数设置使用Arthas查看内存分区垃圾回收执行流程分代GC算…...

Kodcloud可道云安装与一键发布上线实现远程访问详细教程

文章目录 1.前言2. Kodcloud网站搭建2.1. Kodcloud下载和安装2.2 Kodcloud网页测试 3. cpolar内网穿透的安装和注册4. 本地网页发布4.1 Cpolar云端设置4.2 Cpolar本地设置 5. 公网访问测试6.结语 1.前言 本文主要为大家介绍一款国人自研的在线Web文件管理器可道云&#xff0c;…...

python杨辉三角的两种书写方式

第一种&#xff08;设置二维列表设置每个元素为0进行替换元素&#xff09; 代码演示&#xff1a; n eval(input("请输入想要的行数")) lst[[0 for j in range(n)] for i in range(n)] # lst2[[0]*n]*n for i in range(n):for j in range(i1):if j0 or ji:lst[i][j…...

【CSS in Depth 2精译】2.5 无单位的数值与行高

当前内容所在位置 第一章 层叠、优先级与继承第二章 相对单位 2.1 相对单位的威力2.2 em 与 rem2.3 告别像素思维2.4 视口的相对单位2.5 无单位的数值与行高 ✔️2.6 自定义属性2.7 本章小结 2.5 无单位的数值与行高 有些属性允许使用无单位的数值&#xff08;unitless value…...

【人脸识别、Python实现】PyQt5人脸识别管理系统

PyQt5人脸识别管理系统 项目描述主要功能效果展示获取源码 项目描述 接的一个基于宿舍管理系统与人脸识别的小单子。然后我把它优化了一些&#xff0c;现在开源一下。有需要的小伙伴自取&#xff0c;点个免费的关注就行 主要功能 1、录入学生基本信息、录入人脸 2、主页面展…...

软设之观察者模式

设计模式中&#xff0c;观察者模式的意图是:定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 比如说&#xff0c;有一个新闻网站&#xff0c;订阅的用户众多&#xff0c;假如说管理员发布了一…...

deep learning 环境配置

1 NVIDIA驱动安装 ref link: https://blog.csdn.net/weixin_37926734/article/details/123033286 2 cuda安装 ref link: https://blog.csdn.net/qq_63379469/article/details/123319269 进去网站 https://developer.nvidia.com/cuda-toolkit-archive 选择想要安装的cuda版…...

09磁盘管理

一、磁盘管理 1.磁盘基础知识 &#xff08;1&#xff09;磁盘接口类型 个人电脑&#xff0c; 硬盘接口分为IDE类型和SATA类型 服务器版分为SCSI类型和SAS类型 &#xff08;2&#xff09;磁盘命名方式 windows中硬盘命名方式是c&#xff0c;d,e盘 linux中硬盘命名方式为 系统…...

Node.js Stream

Node.js Stream Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;它允许开发者使用 JavaScript 编写服务器端代码。Node.js 的一个核心特性是其对流&#xff08;Stream&#xff09;的处理能力。流是一种在 Node.js 中处理读/写文件、网络通信或任何端到端…...

简化嵌入式Linux开发:在Ubuntu上安装和配置交叉编译环境的高效方法

在嵌入式Linux开发中&#xff0c;我们通常需要在Ubuntu上安装交叉编译工具链&#xff0c;并配置相关文件。编译过程中&#xff0c;如果遇到依赖库问题&#xff0c;还需要手动查找并编译开源源码。这些步骤较为繁琐&#xff0c;为了简化操作&#xff0c;我们可以尝试以下方案&am…...

Photoshop批量处理图片分辨率

整理一些文件的时候&#xff0c;发现需要处理大量图片的尺寸和分辨率。如果一张一张的处理就会很慢&#xff0c;搜了下&#xff0c;Photoshop提供自动批量处理的方法。在此记录一下。 一、说说批量处理图片 1.打开PS软件并导入图片&#xff0c;我用的是比较老的版本cs4&#…...