扫码阅读
手机扫码阅读

Linux 网络发包流程

66 2024-07-20

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:Linux 网络发包流程
文章来源:
咸鱼运维杂谈
扫码关注公众号
Linux 网络发送数据包流程摘要

摘要

本文由咸鱼撰写,续前篇《Linux 网络收包流程》后,详细介绍了 Linux 系统中网络发送数据包的具体流程。

简要回顾收包流程

简述了数据包从网卡接收到应用程序读取的过程,包括DMA传输至内存、硬中断处理、软中断处理、到达三层、四层协议栈,最后由应用层应用程序读取。

发包流程

详细说明了发包流程,包括网卡启动、socket建立、内核与网卡硬件使用的 RingBuffer 分配及初始化,以及数据从 igb_tx_buffer 数组到网卡硬件的 e1000_adv_tx_desc 数组的传输过程。

拷贝到内核

介绍了数据从应用程序通过 socket 系统调用拷贝到内核的过程,包括使用 send/sendto 函数、sock_sendmsg 函数及 TCP 协议的 tcp_sendmsg 函数,以及数据的拷贝和触发发送操作。

网络协议栈处理

传输层处理包括拥塞控制、滑动窗口、封装 TCP 头;网络层处理涉及路由查找、IP 头设置、netfilter 过滤、skb 切分;数据链路层处理包括邻居子系统和网络设备子系统的协同工作。

到达网卡发送队列

描述了数据包添加到网卡发送队列的过程,包括选择队列、调用驱动程序入口函数、触发发送操作以及在某些情况下触发软中断的情形。

数据发送

阐述了驱动程序如何处理 skb 描述信息并通过 DMA 将数据发送到网络的详细步骤。

收尾工作

解释了数据发送完成后,网卡设备如何通过中断来执行清理工作,包括释放内存资源。

总结

总结了整个数据包发送流程,从应用程序通过 socket 拷贝数据到内核,到网络协议栈处理,再到数据链路层的处理,最后到网卡发送数据,以及硬中断触发的收尾工作。

文章结束鼓励读者支持作者,以一键三连的形式表示喜爱。

想要了解更多内容?

查看原文:Linux 网络发包流程
文章来源:
咸鱼运维杂谈
扫码关注公众号