linux-kernel - 在 TCP 堆栈中的哪个点将各种信息添加到 skbuff?
问题描述
我正在为自定义片上数据包交换机编写自定义设备驱动程序。
试图弄清楚 skbuff 数据结构的用法。主要是在堆栈中的哪个位置添加特定的信息?
这是我对堆栈的理解:
- 应用程序创建一个套接字
- 这将创建一个套接字数据结构,并向其中添加 IP 地址
- 应用程序调用套接字上的函数来发送消息
- 切换到内核
- 内核创建 skbuff 数据结构,作为进入网络堆栈的准备
- 内核向 skbuff 添加内容——添加指向用户空间开始的消息、长度和目标 IP 地址的指针(从套接字数据结构中获取)
- 内核将 skbuff 传递给 TCP 内核模块
- TCP 模块向 OS 请求每个 64KB 的缓冲区,将消息中的数据复制到缓冲区中,调整 skbuff 中的指针以指向 OS 提供的缓冲区
- 缓冲区位于内核地址空间中
- 对于每个缓冲区,都会创建一个新的 skbuff 并将其添加到列表中
- TCP 将 skbuff 结构列表交给 Switch Driver
- 此时交换机设备驱动程序有: skbuff 结构的链表,每个结构都有一个指向 TCP 头的指针、指向 TCP 尾的指针和指向保存数据包有效负载的 OS 缓冲区的指针
这一切都正确吗?主要是堆栈中创建 skbuff 的点,以及将每条信息添加到 skbuff 的点
感谢您的帮助,清理这将是巨大的。
解决方案
推荐阅读
- python - 如果熊猫中两个日期之间的日期,则查找每个 ID 的值总和
- azure - Azure 自定义视觉:是否可以在自定义视觉环境中存储图像元数据(不是标签)?
- windows - 为什么flutter.dev无法访问?
- apache - 如何针对安全漏洞强化 Apache
- javascript - 在 forEach 中查找特定的 div
- java - 将浮点值格式化为特定格式 - Java 与 C# 数字格式
- sql-server - 我正在尝试将我的插入查询更改为批量插入,我该怎么做?
- powershell - Teams PowerShell:访问令牌验证失败
- redis - 处理 Azure Redis 缓存异常
- python - 使用 numpy 交换数组中一定百分比的元素