首页
Python
Java
前端
数据库
Linux
Chatgpt专题
开发者工具箱
skb专题
网络设备中的SKB_BUFF
声明:原文摘抄自潘友华老师。 一. SKB_BUFF的基本概念 1. 一个完整的skb buff组成 (1) struct sk_buff–用于维护socket buffer状态和描述信息 (2) header data–独立于sk_buff结构体的数据缓冲区,用来存放报文分组,使各层协议的header存储在连续的空间中,以方便协议栈对其操作 (3) struct skb_shared_
阅读更多...
skb_dst_set - struct dst_entry dst 路由子系统使用。
现在有一个需求,使用netfilter框架,在NF_IP_FORWARD点做钩子。 把钩到的包从指定的物理接口发出去,这个怎么实现?哪个大侠能举个例子,谢谢 1、偿试修改skb_buff->dev,死机 2、偿试修改skb_buff->mac_header,死机 在NF_IP_FORWARD点,已经决定了路由,也就说决定了从哪个物理网口出了。要想实现从指定的物理接口出来,需要
阅读更多...
linux内核网络--skb_shared_info结构和skb_shinfo函数“每日读书”
如图2-5所示,数据缓冲区尾端有个名为skb_shared_info的数据结构,用以保持此数据区块的附加信息,此数据结构紧接在标记数据尾端的end指针之后,此数据结构的定义如下, struct skb_shared_info { atomic_t dataref; unsigned int nr_frags; unsigned short tso_size;
阅读更多...
【C语言】tcp_transmit_skb
一、__tcp_transmit_skb讲解 这个函数 __tcp_transmit_skb() 是 Linux 内核中 TCP/IP 协议栈的一部分,负责处理传输控制协议(TCP)数据包的发送。具体来说,这个函数将 TCP 头部添加到一个没有任何头部信息的 socket buffer (sk_buff) 数据包上,然后使用 IP 层进行进一步处理,并将数据包发送到网络设备。接下来用中文逐段说明
阅读更多...
skb_buff分析
本文转载: 网络协议设计要求: 1) 方便处理变长缓存 2) 容易添加和移除数据 3) 尽量避免数据复制 socket buffer 是linux系统中的套接字缓存,用来操作网络协议的数据结构。 保存在进程和网络接口之间互相传递用户数据。 sk_buffer 描述已接收或者待发送的数据报文信息。 skb在不同网络协议层之间
阅读更多...
Linux-4.20.8内核桥收包源码解析(四)----------netif_receive_skb
作者:lwyang? 内核版本:Linux-4.20.8 netif_receive_skb实现了报文递交到上层协议模块,具体递交方法为由指针func指向的函数确定。首先会遍历ptype_all链表,输入一份报文到ptype_all链表的输入接口,然后通过桥转发报文,若转发成功则无需输入到本地,否则遍历ptype_base链表,根据接受报文注册的协议类型调用对应的报文接受例程。 比如IP
阅读更多...
alloc_skb()
sock_alloc_send_pskb() --> alloc_skb() alloc_skb()用于分配缓冲区的函数。由于"数据缓冲区"和"缓冲区的描述结构"(sk_buff结构)是两种不同的实体,这就意味着,在分配一个缓冲区时,需要分配两块内存(一个是缓冲区,一个是缓冲区的描述结构sk_buff)。 /usr/src/linux-2.6.19/include/linu
阅读更多...
SKB几个复制函数的区别
1、skb_clone() Skb_clone()函数只是复制sk_buff结构,并不复制skb的数据缓冲区。Clone后的sk_buff结构与原始的sk_buff指向同一数据缓冲区。原始的和clone后的skb描述符的cloned值都会被置1,clone的skb描述符的users值置1,同时数据缓冲区的引用计数dataref增加1。 /** * skb_clone -
阅读更多...
linux内核协议栈 协议栈收包入口 netif_receive_skb
目录 1 协议栈入口 __netif_receive_skb_core() 2 vlan 操作 2.1 vlan报文信息 struct vlan_hdr 2.2 vlan 剥离 vlan_untag() 2.3 vlan 添加 eth_type_trans() 3 三层协议处理钩子注册 3.1 各种三层协议处理函数注册过程 3.2 桥处理函数注册 网络收包流程从网卡驱动开始
阅读更多...
【网络实验】非法(不按RFC标准)修改skb数据包遇到的现象
为论文做Linux内核编程实验总能遇到一些神奇的现象,现记录如下。 一、修改IP Fragment Offset(失败) 根据导师的需求,我在Netfilter Local Out钩子函数中把13bit fragment offset填为自定义的数据,同时保证flag DF位=1,即“不能分片”(Don‘t Fragment),希望各种网络软硬件设施能允许我发送这样的包。
阅读更多...
skb操作之网卡收包
好久没有写博客了,今天来聊一聊收包过程中的skb是如何操作的,内容比较简单 2023.3.6也是一个小有特别的日子 收包过程中的skb变化 驱动申请skb 当nic有数据包到来时,驱动会调用netdev_alloc_skb函数去申请一个skb,该skb就用于存放网卡后续拷贝过来的数据,接下来的流程图中skb的长度都假设未进行字节对齐,驱动调用完该接口后,skb如下图所示: 网卡DMA拷
阅读更多...