[翻译] Chapter 11.  Frame Transmission 帧传输

本文详细阐述了Linux系统中帧的传输过程,包括帧传输的主要任务、设备调度、队列管理及软中断处理等关键环节,并对比了帧传输与接收的逻辑相似性。

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

Transmission 是 帧从Linux系统中出去的 术语,这时帧由系统发送出去或者是转发出去的情况。在本章会涉及到帧传输过程中的主要任务,有以下:

1、启动和禁用帧传输

2、调度网口设备传输帧

3、在设备的出口队列中选择等待的下一帧进行传输

4、传输本身(transmission实现函数)

帧传输在很多情况下是在第十章介绍的帧接收的逆过程,比如传输的软中断是NET_TX_SOFTIRQ,接收的软中断是NET_RX_SOFTIRQ,传输的软中断处理函数net_tx_action对应接收的就是net_rx_action等等。因此如果已经学习了上一章,这一章的内容就比较容易理解。图11-1比较了设备接收和传输帧的逻辑。这里有一些相似点:

1、poll_list 是轮询的设备列表,因为这些设备有非空的接收队列。output_queue是有帧需要传输的设备列表。poll_list和output_queue都是softnet_data结构体的两个元素,在第9章中描述

2、设备想要被调度传输帧必需先打开,即设置了_ _LINK_STATE_START flag;并且还要使能传输,即_ _LINK_STATE_XOFF flag 清除

3、当一个设备被接收调度,它的_ _LINK_STATE_RX_SCHED标识位被设置;当一个设备被传输调度,它的_ _LINK_STATE_SCHED被设置

dev_queue_xmit 在传输中发挥作用与netif_rx 在接收中相同,都是在驱动缓冲区和内核缓冲区之间传输帧。当设备需要帧传输时或者需要对一些不用的缓冲区做清扫动作时,net_tx_action函数就会被调用。与入口有队列可以用之外,出口同样有队列可以使用。出口队列,被流量控制模块调用(QoS layer)实际上要比入口队列复杂一些:不同于入口队列是一个先进先出的模型,出口队列是一个树形结构。尽管流量控制也同样对入口队列支持,但它更多的是用来管理和维护并不是真正的控制流量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值