总体流程
<h2>收包</h2>
<ol>
<li>
<p>数据帧从外部网络到达网卡</p>
</li>
<li>
<p>网卡把帧 DMA 到内存</p>
</li>
<li>
<p>网卡触发硬中断</p>
</li>
<li>
<p>CPU 响应硬中断,简单处理后发出软中断</p>
</li>
<li>
<p>ksoftirqd 线程处理软中断,调用网卡注册的 poll 函数开始收包</p>
</li>
<li>
<p>帧被从 ring buffer 上摘下来保存为 skb</p>
</li>
<li>
<p>skb 走协议栈</p>
</li>
<li>如果是本机收包,则最终将数据放到 socket 的接收队列中</li>
</ol>
<h2>发包</h2>