[TOC]
### **整体流程**
- 网卡收到帧
- 网卡通过DMA机制把帧拷贝到环形队列(RingBuffer)中
- 网卡给CPU发送一个硬中断
- CPU根据中断类型执行网卡注册的硬中断处理函数
- 硬中断处理函数的主要功能是:(1)把网卡队列(napi_struct数据结构)加入到CPU的poll_list链表尾部(2)然后触发`NET_RX_SOFTIRQ`软中断
- CPU执行该软中断对应的处理函数`net_rx_action`
- `net_rx_action`函数的主要功能是:(1)关闭CPU的硬中断(2)遍历CPU的poll_list链表(链表的每个节点可以看成是某个网卡的队列,可能有多个网卡),然后对于每个节点(其实就是每个网卡),调用该网卡注册的poll函数(轮询函数),把帧从RingBuffer中取出,组装成`sk_buff`数据结构,然后网卡的poll函数调用内核协议栈中的函数(比如`napi_gro_receive`)往内核协议栈进行传递
### **FAQ**
1、关闭的是CPU的硬中断,还是网卡的硬中断?
A:在`net_rx_action`函数中,一开始就调用了`local_irq_disable()`,猜测是关闭该CPU的硬中断。
2、硬中断什么时候开启?
A:在`net_rx_action`函数中,有调用`local_irq_enable()`,需要看代码进一步确定什么时候开启硬中断
- 应用层
- HTTP
- Cookie
- Session
- HTTP报文格式
- HTTP的Header字段
- HTTPS
- 简介
- 原理
- RSA加密与解密
- 证书签名与验证
- TLS双向认证
- openssl命令汇总
- DNS
- DNS的记录类型
- DNS的报文格式
- FAQ
- 传输层
- TCP
- CloseWait
- 网络层
- IPv6
- 链路层
- 链接层基础知识
- VLAN
- FAQ
- Linux网络收发包
- 网卡收包
- 网卡发包
- 收发包FAQ
- LVS
- 安装-DR模式
- 基本原理
- Ipvsadm命令
- Netfilter
- Netfilter简介
- 注册钩子函数
- Netfilter中数据包流向
- Iptables的数据结构
- 连接跟踪
- 初识连接跟踪
- 连接跟踪详解
- 连接跟踪数据结构
- 数据包与连接的状态
- NAT
- IPVS
- KubeProxy的IPVS模式
- Linux虚拟网络设备
- 虚拟网络设备简介
- Tap
- VethPair
- Vlan
- Vxlan
- Flannel的VXLAN原理
- Openstack的VXLAN原理
- VXLAN总结
- Bridge
- 给容器设置主机网段IP
- Macvlan
- Ipvlan
- IPIP
- IPIP使用介绍
- IPIP源码分析
- Limdiag网络
- 详细设计
- kubeovn
- IP命令
- Calico
- Calico常见问题
- ARP无响应
- 其他