Linux内核之网络协议栈
Linux内核之网络协议栈
不如吃个药
写博客最好到时间是十年前,其次是现在
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux网络协议栈 —— 套接字缓存(socket buffer)
套接字缓存(socket buffer)1 套接字缓存1.1 sk_buff1.2 与sk_buff相关的函数2 套接字缓存队列(Socket-Buffer Queues)2.1 sk_buff_head2.2 与sk_buff_head相关的函数Linux网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1 套接字缓存skb由两部分组成:(1) 报文数据:它保存了实际在网络中传输的数据;(2) 管理数据:供内核处原创 2020-09-22 20:31:13 · 1818 阅读 · 0 评论 -
数据包接收系列 — 下半部实现(软中断)
内核版本:2.6.37下半部的实现接收数据包的下半部处理流程为:net_rx_action // 软中断 |--> process_backlog() // 默认poll |--> __netif_receive_skb() // L2处理函数 |--> ip_rcv() // L3入口net_rx_action软中断(NET_RX_SOFTIRQ)的处理函数net_rx_ac转载 2020-09-22 10:59:44 · 390 阅读 · 0 评论 -
数据包接收系列 — 上半部实现(内核接口)
这里写目录标题1 上半部的实现2 netif_rx3 softnet_data4 enqueue_to_backlog内核版本:2.6.371 上半部的实现接收数据包的上半部处理流程为:el_interrupt() // 网卡驱动 |--> el_receive() // 网卡驱动 |--> netif_rx() // 内核接口 |--> enqueue_to_backlog() /转载 2020-09-22 10:48:28 · 416 阅读 · 0 评论 -
数据包接收系列 — 上半部实现(网卡驱动)
上半部实现(网卡驱动)1 网卡概述1.1 网卡收包1.2 网卡发包1.3 网卡数据结构1.4 网卡中断处理函数2 上半部的实现2.1 el_interrupt2.2 el_receive内核版本:2.6.371 网卡概述1.1 网卡收包网线上的物理帧首先被网卡芯片获取,网卡芯片会检查物理帧的CRC,保证完整性。然后网卡芯片将物理帧头去掉,得到MAC包。网卡芯片会检查MAC包内的目的MAC地址,如果和本网卡的MAC地址不一样则丢弃(混杂模式除外)。之后网卡芯片将MAC帧拷贝到网卡内部的缓冲区,触转载 2020-09-22 10:31:47 · 659 阅读 · 0 评论 -
数据包接收系列 — 数据包的接收过程(宏观整体)
本文将介绍在Linux系统中,数据包是如何一步一步从网卡传到进程手中的。如果英文没有问题,强烈建议阅读后面参考里的两篇文章,里面介绍的更详细。本文只讨论以太网的物理网卡,不涉及虚拟设备,并且以一个UDP包的接收过程作为示例.本示例里列出的函数调用关系来自于kernel 3.13.0,如果你的内核不是这个版本,函数名称和相关路径可能不一样,但背后的原理应该是一样的(或者有细微差别)网卡到内存网卡需要有驱动才能工作,驱动是加载到内核中的模块,负责衔接网卡和内核的网络模块,驱动在加载的时候将自己注册转载 2020-09-22 10:17:12 · 2308 阅读 · 1 评论 -
Linux协议栈--NAPI机制分析
目录标题1 概述2 实现2.1 NAPI设备结构2.2 初始化2.3 调度2.4 轮询方法2.5 非NAPI和NAPI处理流程对比3 简单使用内核版本:2.6.371 概述NAPI是linux新的网卡数据处理API,据说是由于找不到更好的名字,所以就叫NAPI(New API),在2.5之后引入。简单来说,NAPI是综合中断方式与轮询方式的技术。中断的好处是响应及时,如果数据量较小,则不会占用太多的CPU事件;缺点是数据量大时,会产生过多中断,而每个中断都要消耗不少的CPU时间,从而导致效率反而不原创 2020-09-21 18:53:21 · 2312 阅读 · 0 评论
分享