收包专题

微知-如何查看linux网口的收包队列/channel个数?ethtool -l eth0

文章目录 查看修改说明 查看 ethtool -l eth0 比如mellanox网卡是63个channel 修改 ethtool -L eth0 combined 16 修改为16 说明 channel是eth收包的循环缓冲队列的个数 表示有多少个循环缓冲队列。每个队列里面存储N个包,N就是它的深度。 网卡收到包后dma到该ringbuf,然后内核的ksoftd

减少网卡中断收包产生的CPU消耗

目标:减少网卡中断收包产生的CPU消耗。 优化的措施: 1,  减少收包的队列数:igb.RSS 2,  减少中断调用的次数:rx-usecs   Some useful tips: 1,  IGB driver requires the following parameter igb.RSS which demonstrates the number of Receive-Sid

unity学习(42)——创建(create)角色脚本(panel)——UserHandler(收)+CreateClick(发)——服务器收包2

1.解决上一次留下的问题: log和reg的时候也有session,输出看一下这两个session是同一个不: 实测结果reg log accOnline中的session都是同一个对象,但是getAccid时候的session就是另一个了。 测试结果,说明在LogicHandler的process中就已经是不同的 public void process(Session sessio

Linux-4.20.8内核桥收包源码解析(七)----------本地(br_pass_frame_up)or 转发(br_forward)

作者:lwyang? 内核版本:Linux-4.20.8 本地 处理本地数据包的情况,即数据包目的mac地址是本地的单播数据、广播、组播和网桥处于混杂模式时都需要交给上层处理,在处理完NF_BR_PRE_ROUTING链后会调用br_pass_frame_up进入上层处理 static int br_pass_frame_up(struct sk_buff *skb){struct

Linux-4.20.8内核桥收包源码解析(六)----------决策函数br_handle_frame_finish

作者:lwyang? 内核版本:Linux-4.20.8 br_handle_frame_finish函数主要是决策将不同类别的数据包做不同的分发路径,它会决定数据包是转发还是交给上层协议栈去处理,所以我给这个函数取名为决策函数,也是即将离开NF_BR_PRE_ROUTING链时做的处理 int br_handle_frame_finish(struct net *net, struct

Linux-4.20.8内核桥收包源码解析(五)----------桥处理流程br_handle_frame

作者:lwyang? 内核版本:Linux-4.20.8 网桥是一种2层网络互连设备,而不是一种网络协议。它在协议结构上并没有占有一席之地,因此不能通过向协议栈注册协议的方式来申请网桥数据包的处理。相反,网桥接口的数据包和一般接口(如eth0)在格式上完全是一样的,不同之处是网桥在2层上就对它进行了转了,而一般接口要在3层 才能根据路由信息来决定是否要转发,如何转发。 linux内核是通

Linux-4.20.8内核桥收包源码解析(四)----------netif_receive_skb

作者:lwyang? 内核版本:Linux-4.20.8 netif_receive_skb实现了报文递交到上层协议模块,具体递交方法为由指针func指向的函数确定。首先会遍历ptype_all链表,输入一份报文到ptype_all链表的输入接口,然后通过桥转发报文,若转发成功则无需输入到本地,否则遍历ptype_base链表,根据接受报文注册的协议类型调用对应的报文接受例程。 比如IP

Linux-4.20.8内核桥收包源码解析(二)----------sk_buff的操作

作者:lwyang? 内核版本:Linux-4.20.8 SKB的缓存池 网络模块中,有两个用来分配SKB的高速缓存池 void __init skb_init(void){skbuff_head_cache = kmem_cache_create_usercopy("skbuff_head_cache",sizeof(struct sk_buff),0,SLAB_HWCACHE_A

Linux-4.20.8内核桥收包源码解析(一)----------sk_buff(详细)

作者:lwyang? 内核版本:Linux-4.20.8 网络子系统中用来存储数据的缓冲区叫做套接字缓存,简称SKB,可处理变长数据,尽量避免数据的复制。 每一个SKB都在设备中标识发送报文的目的或接受报文的来源地,主要用于在网络驱动程序和应用程序直接传递复制数据包。 当应用程序要发送一个数据包,数据通过系统调用提交到内核,系统分配一个SKB来存储数据,然后往下层传递,在传递到网络驱

skb操作之网卡收包

好久没有写博客了,今天来聊一聊收包过程中的skb是如何操作的,内容比较简单 2023.3.6也是一个小有特别的日子 收包过程中的skb变化 驱动申请skb 当nic有数据包到来时,驱动会调用netdev_alloc_skb函数去申请一个skb,该skb就用于存放网卡后续拷贝过来的数据,接下来的流程图中skb的长度都假设未进行字节对齐,驱动调用完该接口后,skb如下图所示: 网卡DMA拷