16.3.3 发送网络数据send()

本文详细介绍了Linux系统中网络数据的发送过程。从write()调用开始,通过msghdr结构整理数据,再由sock_sendmsg()传递至网络层。过程中创建sk_buff结构并挂载到发送队列,最终调用网络驱动完成数据发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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  协议栈处理数据流程

最后调用网络驱动,发送数据,在网络发送成功后要产生中断,将发送结果反馈回应用层,此过程与接收网络数据的过程类似。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值