1、数据从外部到达网卡
2、网卡把数据DMA到内存
3、对CPU发出硬中断,通知CPU处理
4、CPU响应硬中断,发出软中断
5、kssoftirqd进程处理软中断,调用网卡驱动收包
6、保存为skb
7、协议层处理skb
8、放入socket接收队列
9、唤醒阻塞的用户程序
网络通信
1、创建kssoftirqd进程(数量为CPU核心数,每个CPU一个)
2、网络子系统初始化,softnet数据结构
3、协议栈的注册,inet_proto(tcp,udp),ptype(ipv4,ipc6)
4、网卡驱动初始化和网卡的启动
5、创建socket套接字
5.1、和Linux文件系统挂钩,生成fd
5.2、socket初始化(与协议栈相关,找到相关协议,初始化socket,接收队列,缓冲区)
6、修改softnet_data,告诉设备有外部数据来了
7、注册软中断处理函数,将网卡DMA的内存中数据放入到协议栈中处理
8、协议栈处理完数据后交给socket接收缓冲区
