linux网络数据包流程

一、介绍
对于调试linux网卡驱动或者wifi驱动性能,或者排查网络数据丢包的时候,需要对内核处理包要与基本的了解,从而排查出丢包出现在哪个环节,这里给出大致流程和常用排查方法

二、基本框架
1、硬件连接
1)以太网口
linux网络数据包流程_第1张图片网线通过变压器接PHY芯片、PHY芯片通过MII接MAC芯片、MAC芯片接PCI总线
PHY芯片主要负责:CSMA/CD、模数转换、编解码、串并转换
MAC芯片主要负责:
比特流和帧的转换:7字节的前导码Preamble和1字节的帧首定界符SFD
CRC校验

2)LTE/5G
linux网络数据包流程_第2张图片

3)wifi
linux网络数据包流程_第3张图片
三、流程
linux网络数据包流程_第4张图片网卡收到数据包,DMA到内核内存,中断通知内核数据有了,内核按轮次处理消耗数据包,一轮处理完成后,开启硬中断

1、网卡收到数据包。
2、将数据包从网卡硬件缓存转移内存中。
3、通知内核处理。
4、经过TCP/IP协议逐层处理。
5、应用程序通过read()从socket buffer读取数据

1、网卡收到数据包。
网卡本身是有4K以上的内存,用于发送和接收,收到网络信号后,将高低电平转换为数据存于网卡本身的fifo

2、将数据包从网卡硬件缓存转移内存中。
1)网卡申请ring buffer的描述,根据描述找到具体的物理地址,从fifo队列物理网卡会使用DMA将数据包写到skb_buffer
2)NIC触发一个硬中断,每一个硬件中断会对应一个中断号,且指定一个vCPU来处理,NAPI触发软中断,触发napi系统
3)硬件中断的中断处理程序调用驱动程序:
a.禁用网卡硬中断,通知NIC,再来数据不用触发硬中断了,把数据DMA拷入系统内存即可
b.NAPI触发软中断,触发napi系统,消耗ringbuffer指向的skb_buffer,NAPI循环处理ringbuffer数据,处理完成
c.启动网络硬件中断,有数据来时候就可以继续触发硬件中断,继续通知CPU来消耗数据包.

你可能感兴趣的:(linux,kernel内核,linux网络,数据包流程)