linux内核网络分析-通用字段“每日读书”

news2025/1/11 16:49:55

这一讨论sk_buff主要字段这些字段都与特定内核功能无关

struct timeval stamp;

通常只对一个已经封包才有意义这是一个时间戳用于避哦啊是封包何时接收或者有时候用于表示封包预定传输时间字段netif_rx 函数net_timestamp设置函数接收每个封包之后设备驱动程序调用对比第二十一给出描述

struct net_device *dev;

此段描述一个网络设备类型net_device 本章稍后做出详细说明dev所代表设备角色依赖于存储缓冲区内封包即将传输还是刚被而定

接收到一个封包设备驱动程序会代表接收接口数据结构指针更新字段下列取自vortex_rx代码片段所示接收到一帧3c95x系列以太网卡驱动程序就会调用函数(在 drivers/net/3c59x.c中)

static int vortex_rx(struct net_device *dev)

{

skb->dev = dev;

skb->protocol = eth_type_trans(skb, dev);

netif_rx(skb);//封包传到较高分层

}

传输一个封包参数代表发送封包设备设置代码要比接收封包更为复杂所以相关讨论推迟二十一三十五进行

有些网络功能允许一些设备集合起来代表转移虚拟借口一个虚拟设备驱动程序提供接口服务当该设备驱动程序调用dev参数指向虚拟设备的net_device 数据结构驱动程序群组选择一个特定设备然后dev参数改为指向设备net_devoce数据结构因此在这些情况下封包处理期间传输设备指针可能会变化

struct net_device *input_dev

这是已经接收封包源自设备封包是由本地产生NULL指针Ethernet 设备而言字段eth_type_trans初始化字段主要流量控制traffic control使用

struct net_device *real_dev

字段只对虚拟设备有意义代表虚拟设备关联真实设备例如BondingVLAN接口使用字段用以记下真实设备输入流量什么地方接收来的

union {...} h

union {...} nh

union {...} mac

这些指向TCP/IP协议栈报头指针h针对L4, nh针对L3 mac针对L2每个字段都指向一个各种结构组成联合每个协议结构都是内核解析例如h一个联合内核解释每个L4协议报头h都有一个字段每个联合都有一个名为raw成员用于初始化后续所有访问都是通过协议指定成员

接收一个数据封包负责处理n报头函数n-1接收一个缓冲区缓冲区skb->data 指向n报头开端处理n函数初始化适当指针skb->nh 用以保存skb->data 字段因为下一层进行处理skb->data 设成缓冲区另一个不同偏移量这个指针内容就会丢失接着函数完成n处理封包传给n+1处理函数更新skb->data, 使指向n报头尾端也就是n + 1报头开始

传送一个封包就是过程逆过程所增加复杂度就是每一个层增加一个新的报头

struct dst_entry dst

这个结构路由子系统使用由于这个数据结构相当复杂需要了解其他子系统如何工作知识因此推迟第七部分予以描述

char cb[40]

这是一个控制缓冲区control buffer, 或者私有信息存储空间每一个内部使用维护作用字段sk_buff结构静态分配(目前的大小是40个字节)而且容量足以容纳每个层所需要私有数据每一个层代码都是通过进行访问这样使得代码更具有可读性例如tcp使用这个空间存储一个tcp_skb_cb数据结构数据结构定义在include /net/tcp.h

struct tcp_skb_cb {

__u32 seq;//起始序列号编号

__u32 end_seq; //SEQ + FIN +SYN + datalen

__u32 wlen;//用于计算rtt's

__u8 flags;//TCP报头标志

  }

以下TCP代码用于访问结构一些简单的指针组成

#define TCP_SKB_CB(__skb) ((struct tcp_skb_cb*)& ((__skb))->cb[0])

以下TCP子系统收条填写结构案例

int tcp_v4_rcv(struct sk_buff *skb)

{

th = skb->h.th;

TCP_SKB_CB(skb)->seq = ntohl(th->seq);

TCP_SKB_CB(skb)->end_seq = (TCP_SKB_CB(skb)->seq + th->syn + th->fin + skb->len - th->doff * 4);

TCP_SKB_CB(skb)->ack_seq = ntohl(th->ack_seq);

TCP_SKB_CB(skb)->wlen = 0;

TCP_SKB_CB(skb)->flags = skb->nh.iph->tos;

TCP_SKB_CB(skb)->sacked = 0;

}

为了了解cb缓冲区参数如何找回可以看一下net/ipv4/tcp_output.ctcp_transmit_skb tcp函数一个数据压入IP以便于传输

二十二章你还了解IPV4如何采用cb存储有关IP分片信息

unsigned incsum

unsigned char ip_sumed

这些代表校验和(checksum)以及相关联状态标识用法将在十九章予以描述

unsigned char cloned

一个boolean 标识置位表示结构另一个sk_buff 缓冲区克隆参见稍后 缓冲区克隆拷贝一节

unsigned chapkt_type

字段根据L2目的地址进行类型划分可能取值列于include/linux/if_packet.h Ethernet 设备而言参数函数eth_type_trans 进行初始化十三章予以描述

PACKET_HOST

已经收帧目的地址接收接口换句话说, 封包已经达到目的地

PACKET_MULTICAST

已接收目的地址是该接口已经注册多播地址之一

PACKET_BRODCAST

目的地址接收接口广播地址

PACKET_OTHERHOST

已经接收目的地址不属于接口相匹配地址多播以及广播因此如果转发机制使能不得不转发否则就会丢弃

PACKET_OUTGOING

封包正被发送标识用户Decnet 协议并且每个分流器一个输出封包副本函数

PACKET_LOOPBACK

封包传送回环设备由于标识处理回环设备内核可以跳过一些真实设备所需要操作

PACKET_FASTROUTE

fastroute 功能路由封包

十三章详细描述了这些如何根据L2目的地址设置

__u32 priority

字段表示传输或者转发封包Qos 登记如果封包本地产生套接字定义优先级相反如果封包正被转发函数rt_tos2priority 根据IP报头本身Tos 字段定义字段函数十八章所描述DSCP 无关二十六ip_forward 函数一节讨论角色

unsigned shorprotocol

L2设备驱动程序角度就是用在下一个较高协议典型协议IPIPV6以及ARP完整列表可以include/linux/if_ether.h找到由于每种协议都有自己函数处理例程处理输入封包因此驱动程序使用这个字段通知上层使用哪个处理例程每个驱动程序调用netif_rx启动上面网络 分层处理例程所以函数调用protocol字段必须初始化更多细节参见十章十三章

unsigned short security

这是封包安全级最初引入这个字段是为了IPsec, 现在已经不再使用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1562830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

护眼台灯哪个牌子最好,护眼台灯五大品牌墙裂分享

近视在儿童中愈发普遍,许多家长开始认识到,除了学业成绩之外,孩子的视力健康同样重要。毕竟,学业的落后可以逐渐弥补,而一旦孩子近视,眼镜便可能成为长期伴随。因此,专业的护眼台灯对于每个家庭…

钉钉服务端API报错 43008 参数需要multipart类型

钉钉服务端API报错 43008 参数需要multipart类型 problem 使用媒体文件上传接口,按照文档输入参数,结果返回报错 # 参数 {"access_token": "xxx""type": "image","media": "/Users/xxx/xxx/s…

上位机图像处理和嵌入式模块部署(qmacvisual之n点标定)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 工业场景中,很多时候图像是用来做测量的。虽然我们很希望载台是平的,摄像头是正对着拍摄物体的,但是运行时间长…

String类教程:如何在Java中使用字符串操作

咦咦咦,各位小可爱,我是你们的好伙伴——bug菌,今天又来给大家普及Java SE相关知识点了,别躲起来啊,听我讲干货还不快点赞,赞多了我就有动力讲得更嗨啦!所以呀,养成先点赞后阅读的好…

【洛谷】P9240 [蓝桥杯 2023 省 B] 冶炼金属

题目链接 P9240 [蓝桥杯 2023 省 B] 冶炼金属 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 这道题可以用数学的方法去做,但是我想不到😇有兴趣的可以去看看数学的题解 比较简单的思路就是二分查找,轻松简单不费脑,带你…

深信服超融合虚拟机的导入方法

以从vmware虚拟机导出的虚拟机为例。 1 进入虚拟机页面点【新增】,选择【导入虚拟机】 2 以文件类型为ovf、mf、vmdk为例导入 选择文件类型,选择那三个导出的虚拟机的文件,选择分组,存储位置和运行位置默认,操作系统…

翻译学习(英译汉)

2024-04-02 翻译词组:shrinking deficits 我的练习:财政赤字 问题 1:shrinking deficits 怎么理解,在中文应该怎么称呼 问题 2:Shrinking deficits 可以译为中文多种句式吗 AI助手 Kimi.ai - 帮你看更大的世界 (…

Python抓取京东、淘宝商品数据(属性详情,sku价格抓取)

抓取京东、淘宝等电商平台的商品数据(包括属性详情、SKU价格等)通常涉及到网络爬虫技术。这些平台都有自己的反爬虫机制,因此抓取数据需要谨慎操作,避免对平台造成不必要的负担或违反其使用条款。 公共参数 名称类型必须描述key…

Leetcode-2810-故障键盘-c++

题目详见https://leetcode.cn/problems/faulty-keyboard/ 题解 这道题的关键是如何合理地使用STL,毕竟是一道简单题。 之前常用到的Vector容器是单向开口的连续内存空间 deque则是一种双向开口的连续线性空间,又称双端动态数组。所谓的双向开口&#x…

RAG已死,Gemini当立!AI技术革新带来颠覆性变革

简单的RAG系统可能即将被淘汰,但更个性化的版本将继续存在。 我最近在深入研究Genimi 1.5 Pro,作为一名AI领域的创业者,我有一些见解想要与你分享。 RAG是一种搜索技术,它通过比较信息的相似度来检索所需内容。 鉴于RAG主要用于…

【SQL Server】2. 将数据导入导出到Excel表格当中

最开始,博主介绍一下自己的环境:SQL Sever 2008 R2 SQL Sever 大致都差不多 1. 通过自带软件的方式 首先找到下载SQL Sever中提供的导入导出工具 如果开始界面没有找到自己下载的路径 C:\Program Files\Microsoft SQL Server\100\DTS\Binn下的DTSWiz…

投资回收期

投资回收期 利率与贴现率 贴现率是指将未来支付改变为现值所使用的利率,简单而言,就是将来的钱折算到现值,少掉或多出的那部分钱与将来的钱的比值。 利率是指一定时期内利息额与本金的比率,通常以一年期利息与本金…

testbench中一些常用的系统命令

前言 记录一下自己仿真过程中用到过的一些用于testbench的系统命令,根据自己用到的情况不定时进行补充。 文件操作 $fopen 用于打开文件的命令,格式如下 file $fopen("file_name","mode") file_name:要打开的文件…

CTK插件框架学习-事件监听(04)

CTK插件框架学习-插件注册调用(03)https://mp.csdn.net/mp_blog/creation/editor/136989802 一、主要流程 发送者注册消息事件接收者订阅消息事件接收者相应消息事件 事件监听比插件接口调用耦合性更弱,事件由框架维护,不需要指定发送方和接收方 二、…

“创新强基·应用强链”2024第104届上海电子展会

2024第104届上海电子展会 2024 Shanghai electron Expo 时间:2024年11月18--20日 地点:上海新国际博览中心 主题:创新强基应用强链 上海与长三角各地产业协同发展,到2025年,初步建成具有全球影响力和竞争力的世界级电子信息产业集群。产业链稳定性和韧…

如何在Facebook直播?手把手教你进行Facebook Live!

做跨境电商和外贸的朋友们,你们有试过用直播来卖货吗?现在有很多海外直播带货平台,像TikTok、YouTube等平台就受到许多卖家青睐。但是,作为社媒营销主阵地之一的 Facebook,它的直播功能 Facebook Live 却常常被许多卖家…

全氟化合物的变异系数

采用变异系数&#xff08;the coefficient of variation&#xff1b;CV&#xff09;来评价PFAAs的离散程度[1]。CV≤10%表示弱变异水平&#xff0c;10% < CV≤100%表示培养中等变异&#xff0c;CV > 100%表示强变异。CV的计算方法如下&#xff1a; 其中&#xff0c;s为标…

python爬虫----了解爬虫(十一天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

【云服务选购指南】4月 阿里云99续费统计 集体降价20% 京东云全网保价 博客建站 游戏服务器 2-64G大盘点

本文纯原创&#xff0c;侵权必究 【云服务器推荐】价格对比&#xff01;阿里云 京东云 腾讯云 选购指南视频截图 《最新对比表》已更新在文章头部—腾讯云文档&#xff0c;文章具有时效性&#xff0c;请以腾讯文档为准&#xff01; 【腾讯文档实时更新】2024年-幻兽帕鲁服务器…

computed计算属性、watch侦听器、生命周期

计算属性 点击查看 Vue文档 基础语法 多次使用计算属性&#xff0c;计算属性方法也只执行一次&#xff0c; 调用计算属性的方法不能加() 直接修改计算数学的值 计算属性不能通过双向绑定修改&#xff08;默认不能改&#xff09; 想要修改计算属性&#xff0c;就必须使用计…