16.3.3 发送网络数据send()
Linux对网络数据的发送过程的处理与接收过程相反。在一端对socket进行write()的过程中,首先会把要write的字符串缓冲区整理成msghdr的数据结构形式,然后调用sock_sendmsg()把msghdr的数据传送至inet层。
对于msghdr结构中数据区中的每个数据包,创建sk_buff结构,填充数据,挂至发送队列。一层层往下层协议传递,如图16.13所示。以下每层协议不再对数据进行复制,而是对sk_buff结构进行操作。

图16.11 网卡接收数据流程 图16.12 协议栈处理数据流程 图16.13 协议栈处理数据流程
最后调用网络驱动,发送数据,在网络发送成功后要产生中断,将发送结果反馈回应用层,此过程与接收网络数据的过程类似。
本文详细介绍了Linux系统中网络数据的发送过程。从write()调用开始,通过msghdr结构整理数据,再由sock_sendmsg()传递至网络层。过程中创建sk_buff结构并挂载到发送队列,最终调用网络驱动完成数据发送。
1169

被折叠的 条评论
为什么被折叠?



