sk_buff

sk_buff 定义及其操作 1. sk_buff 结构体 可以看出 sk_buff 结构体很重要, sk_buff --- 套接字缓冲区,用来在linux网络子系统中各层之间数据传递,起到了“神经中枢”的作用。 当发送数据包时,linux内核的网络模块必须建立一个包含要传输的数据包的sk_buff,然后将sk_buff传递给下一层,各层在 sk_buff 中添加不同的协议头,直到交给网络设备发送。 同样,当接收数据 阅读详情

This is a large struct containing all the control information required for the packet (datagram, cell, whatever). The sk_buff elements are organized as a doubly linked list, in such a way that it is very efficient to move an sk_buff element from the beginning/end of a list to the beginning/end of another list. A queue is defined by struct sk_buff_head, which includes a head and a tail pointer to sk_buff elements.

All the queuing structures include an sk_buff_head representing the queue. For instance, struct sock includes a receive and send queue. Functions to manage the queues (skb_queue_head(), skb_queue_tail(), skb_dequeue(), skb_dequeue_tail()) operate on an sk_buff_head. In reality, however, the sk_buff_head is included in the doubly linked list of sk_buffs (so it actually forms a ring).

When a sk_buff is allocated, also its data space is allocated from kernel memory. sk_buff allocation is done with alloc_skb() or dev_alloc_skb(); drivers use dev_alloc_skb();. (free by kfree_skb() and dev_kfree_skb(). However, sk_buff provides an additional management layer. The data space is divided into a head area and a data area. This allows kernel functions to reserve space for the header, so that the data doesn’t need to be copied around. Typically, therefore, after allocating an sk_buff, header space is reserved using skb_reserve(). skb_pull(int len) – removes data from the start of a buffer (skipping over an existing header) by advancing data to data+len and by decreasing len.

struct sk_buff has fields to point to the specific network layer headers:

  • transport_header (previously called h) – for layer 4, the transport layer (can include tcp header or udp header or icmp header, and more)
  • network_header – (previously called nh) for layer 3, the network layer (can include ip header or ipv6 header or arp header).
  • mac_header – (previously called mac) for layer 2, the link layer.
  • skb_network_header(skb), skb_transport_header(skb) and skb_mac_header(skb) return pointer to the header.

The struct sk_buff objects themselves are private for every network layer. When a packet is passed from one layer to another, the struct sk_buff is cloned. However, the data itself is not copied in that case. Note that struct sk_buff is quite large, but most of its members are unused in most situations. The copy overhead when cloning is therefore limited.

  • Almost always sk_buff instances appear as “skb” in the kernel code.
  • struct dst_entry *dst – the route for this sk_buff; this route is determined by the routing subsystem.

    • It has 2 important function pointers:
      int (*input)(struct sk_buff*);
      int (*output)(struct sk_buff*);
    • input() can be assigned to one of the following : ip_local_deliver, ip_forward, ip_mr_input, ip_error or dst_discard_in.
    • output() can be assigned to one of the following :ip_output, ip_mc_output, ip_rt_bug, or dst_discard_out.

    • we will deal more with dst when talking about routing.
      In the usual case, there is only one dst_entry for every skb.

    • When using IPsec, there is a linked list of dst_entries and only the last one is for routing; all other dst_entries are for IPSec transformers ; these other dst_entries have the DST_NOHASH flag set. These entries , which has this DST_NOHASH flag set are not kept in the routing cache, but are kept instead on the flow cache.
  • tstamp (of type ktime_t ) : time stamp of receiving the packet.
    • net_enable_timestamp() must be called in order to get values.
TCP/IP之buff分析m_buff与sk_buff 终于下决心开始看TCP/IP部分的源码了,从《TCI/IP详解,卷二》作为入口。。。 首先来分析一下存取数据的buff, 在书上,强调的是mbuf,不过好像现在新版本的内核改动比较大,更重要的还是sk_buff,不过还是先来看看mbuff吧, 文件在:Driver/net/skfp/h/mbuf.h struct s_mbuf { struct s_mbuf *sm_next ; /* 阅读详情

相关推荐

sk_buff数据结构详解

sk_buff 简介 封包存储于struct sk_buff中,所有网络分层都会使用这个结构来储存其报头、有关用户数据的信息,以及协调其工作的其他内部信息。从第二层到第四层都会使用这个数据结构。L4附加一个报头传给L3,L3附加自己的报头传给L2,L2附加自己的报头传给L1转发出去。设备收到sk_buff之后,每层都只处理自己的报头,并将其呈交给上层。 sk_buff数据结构 内核使用一个双向链表来维护sk_buff,链表的开端使用了一个哑元元素sk_buff_head,如下图所示为sk_buff链表

qq_38107043的博客 3609

linux 网络 sk_buff结构

sk_buff的意思是socket buffer,这是Linux网络子系统中的核心数据结构。定义在中,它由许多变量组成,目标就是满足所有网络协议的需要。sk_buff在不同的网络层被使用(MAC 或其他在 L2 的协议,在 L3 的 IP 协议,在 L4 的 TCP 或 UDP 等),当它从一层传递到另一层时,各个字段也会发生变化。在被传递到 L3 之前,L4 会追加头信息,然后在被传递到 L2 之前,L3 会追加头信息。。

wwwlyj123321的博客 4476

STM32H743 ADC多通道采样实战:CubeMX配置+DMA传输避坑指南

本文详细介绍了STM32H743 ADC多通道采样的实战配置,包括CubeMX参数设置、DMA传输优化及常见问题解决方案。重点解析了ADC模块的核心特性、多通道采样序列配置、Cache一致性处理等关键技术,帮助开发者高效实现稳定可靠的模拟信号采集系统。

weixin_29175469的博客 612

sk_buff 介绍

sk_buff是Linux网络协议栈最重要的数据结构之一,该数据结构贯穿于整个数据包处理的流程。由于协议采用分层结构,上层向下层传递数据时需要增加包头,下层向上层数据时又需要去掉包头。sk_buff中保存了L2,L3,L4层的头指针,这样在层传递时只需要对数据缓冲区改变头部信息,并调整sk_buff中的指针,而不需要拷贝数据,这样大大减少了内存拷贝的需要。 struct sk_buff {//介

chn89的专栏 4627

Netty UDP

UDP是一种无连接的协议,它并不在通信双方之间建立连接,而是直接将数据包从发送端发送到接收端。UDP不保证数据包的可靠传输,也不保证数据包的顺序,因此其传输速度通常比TCP快,且系统开销较小。然而,这也意味着UDP在某些情况下可能会丢失数据包或数据包到达的顺序错乱。

王小工小工历程 2027

告别AT串口线!用STM32F407的USB FS口直连EC800M进行物联网通信

本文介绍了一种创新的物联网通信方案,利用STM32F407的USB FS接口直连EC800M模块,替代传统的AT串口线连接。通过详细的硬件对比、STM32CubeMX配置和USB驱动调试步骤,展示了如何实现更高效的AT指令通信,同时降低硬件复杂度和功耗。

weixin_29189987的博客 706

sk_buff结构

文章出处:http://book.51cto.com/art/200912/168620.htm                     http://www.newsmth.net/pc/pccon.php?id=1363&nid=296040&pid=0&tag=0&tid=7570     内核层和用户层在网络方面的差别很大,在内核的网络层中sk_buff结构占有重要的地位,几乎所有的处

韦编二绝 1419

星座SAR动目标检测(GMTI)

参考代码 星座SAR动目标检测 www.youwenfan.com/contentcsg/52399.html。

feifeigo123的博客 549

Linux编程——sk_buff

本文简要介绍了Linux网络编程中使用较多的sk_buff结构体,以便于能够快速理解内核代码中相关sk_buff的使用。

UWB技术博客 1108

【2025最新版】Open3D 区域生长分割(python详细过程版)

点云区域生长分割算法的python详细过程版实现。博客长期更新,本文最新更新时间为:2025年3月23日。

点云侠的博客 9529

(LDA新闻文本主题分析)基于 gensim训练LDA模型,进行新闻文本主题分析 完整代码+数据 可直接运行

(LDA新闻文本主题分析)基于 gensim训练LDA模型,进行新闻文本主题分析 完整代码+数据 可直接运行

机器学习深度学习业余选手 1498

非常详细的详谈struct sk_buff

非常详细的详谈struct sk_buff 排版太慢 难看的话可以下载WOR文档 专门详解struct_sk_buff 链接: http://pan.baidu.com/s/1gf8VNKR 密码: pquc 注:本文大部分内容来源于网络收集加上自己理解,如有不托之处,请指出,本人无任何版权! 全称socket buffers,简称skb,中文名字叫套接字缓存。它作为网络数据包

zhuhuibeishadiao 1万+

基于语义分割的实时建图:HDMap动态更新

基于语义分割的实时建图:HDMap动态更新​ ,人工智能,计算机视觉,大模型,AI,本文围绕基于语义分割的实时建图技术在HDMap动态更新中的应用展开,介绍了语义分割基础、HDMap概述、相关实时建图技术、动态更新关键技术、系统性能评估指标、实际应用案例、面临的挑战与解决方案及未来发展趋势。阐述了该技术如何利用传感器数据和语义分割算法,解决传统HDMap构建与更新的弊端,分析了其在精度、实时性、鲁棒性等方面的表现,以及在自动驾驶和智能交通中的应用,还探讨了现存问题及未来优化方向。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

sk_buff详解

sk_buff 整理笔记(一、数据结构) sk_buff整理笔记(二、操作函数) sk_buff整理笔记(三、内存申请和释放) sk_buff整理笔记(四、克隆与复制) sk_buff整理笔记(五、队列管理函数) from:https://blog.youkuaiyun.com/YuZhiHui_No1 ...

hzj_001的博客 7423

机器人控制基础:伺服驱动电机 PID 参数自适应控制的实现方法及研究

伺服电机PID参数自适应控制技术研究 摘要:针对伺服驱动电机在动态负载工况下传统PID控制性能下降的问题,本文研究了多种自适应控制方法。通过分析6种主流技术(包括模型参考自适应、模糊逻辑、神经网络等)的原理、实现步骤及适用场景,揭示了负载感知精度、参数调节实时性和系统稳定性三大技术难点,并提出了相应解决方案。以模糊自适应PID为例的实验验证表明,该技术能有效提升伺服系统在变负载条件下的控制性能。研究为工业应用中伺服电机的精确控制提供了重要参考。

start_up_go的博客 828

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

sk_buff详解2

转载来源:http://blog.youkuaiyun.com/lamdoc/article/details/7873120 1. sk_buff 结构体 可以看出 sk_buff 结构体很重要, sk_buff --- 套接字缓冲区,用来在linux网络子系统中各层之间数据传递,起到了“神经中枢”的作用。 当发送数据包时,linux内核的网络模块必须建立一个包

qinm的专栏 1340

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Linux内核sk_buff结构分析

原文地址:http://blog.chinaunix.net/uid-22227409-id-2656912.html 在内核中sk_buff表示一个网络数据包,它是一个双向链表,而链表头就是sk_buff_head,在老的内核里面sk_buff会有一个list域直接指向sk_buff_head也就是链表头,现在在2.6.32里面这个域已经被删除了。 而sk_buff的内存布局可以

深海蓝的技术随笔 9084

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Linux内核中sk_buff结构详解

sk_buff结构体中的都是sk_buff的控制信息,是网络数据包的一些配置,真正储存数据的是sk_buff结构体中几个指针指向的数据区中,线性数据区的大小 = (skb->end - skb->head),对于每个数据包来说这个大小都是固定不变的,在传输过程中skb->end和skb->head所指向的地址都是不变的,这里要注意这个地址不是本机的地址,如果是本机的地址那么数据包传到其他主机上这个地址就是无效的,所以这个地址是这个skb缓冲区的相对地址。各层协议头部相关信息放在线性数据区中。

smartvxworks的博客 3421

linux skb_buf大小,网络sk_buff缓冲区[1]sk_buff的结构

sk_buff是内核网络子系统的一个支柱结构,各层协议都依赖于sk_buff而存在,所以了解它的设计是很重要的,这其中当然也包括了很重要的网络缓冲区的管理机制,下面一个系列都围绕它来展开。sk_buff作为一个buffer,最重要的当然还是数据,所以sk_buff对数据的组织是学习重点。另外,为了满足上层的需求,sk_buff还有一些其它必要的功能。整理一下,可划分为以下几个方面(当然字段也可以这...

weixin_35431719的博客 1585

sk_buff操作函数

几个操作sk_buff指针的函数 首先来认识三个空间: 第一个:headroom 就是skb->head和skb->data之间的空间 第二个:data 就是skb->data和skb->tail之间的空间 第三个:tailroom 就是skb->tail和skb->end之间的空间 head --> |----------| ...

sidemap的博客 1175

sk_buff结构体

简要说明       sk_buff结构可能是linux网络代码中最重要的数据结构,它表示接收或发送数据包的包头信息。它在中定义,并包含很多成员变量供网络代码中的各子系统使用。     这个结构被不同的网络层(MAC或者其他二层链路协议,三层的IP,四层的TCP或UDP等)使用,并且其中的成员变量在结构从一层向另一层传递时改变。L4向L3传递前会添加一个L4的头部,同样,L3向L2传递前,会

2020

sk_buff祥解

Socket Buffers - sk_buff One of the problems of having many layers of network protocols, each one using the services of another, is that each protocol needs to add protocol headers and tails to da

collide的专栏 4345

sk_buff 整理笔记(一、数据结构)

对sk_buff结构体以及相关的sk_buff_head结构体、sk_buff结构体数据区、sk_shared_info分片结构体、分片结构体的数据区的常用成员字段进行透彻的分析。以及分析这几个结构体的关系与一个sk_buff数据包的形成和其data指针的变化。 (1)sk_buff->data_len:只计算分片中数据的长度,即是分片结构体中page指向的数据区长度。这个在分片结构体中会再详细讲解下。 (2)sk_buff->len:表示当前缓冲区中数据块的大小的总长度。它包括主缓冲中(即是sk_

YuZhiHui_No1的专栏 3万+

sk_buff相关资料

1.sk_buff sk_buff是linux内核TCP/IP协议栈最重要的结构,它是网络数据报在内核中的表现形式。sk_buff的定义在$KERN_DIR/incude/linux/skbuff.h中。 1.1 sk_buff最重要的几个成员: 1.sk_buff sk_buff是linux内核TCP/IP协议栈最重要的结构,它是网络数据报在内核中的表现形式。sk_buff的定义在$KERN_D

sally2021的专栏 1790

Sk_buff结构

套接字缓冲区用结构体struct sk_buff表示,它用于在网络子系统中的各层之间传递数据,处于一个核心地位,非常之重要。它包含了一组成员数据用于承载网络数据,同时,也定义了在这些数据上操作的一组函数。下面是其完整的定义:    struct sk_buff {        struct sk_buff      *next;        struct sk_buff      *prev;

Walter的专栏 3046
上一篇: leetcode 233 Number of Digit One
下一篇: 轻松学习RSA加密算法原理
HelloCooper
博客等级 码龄11年 13粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值