- 博客(7)
- 资源 (2)
- 收藏
- 关注
原创 设备接口层接收数据包(二)
这篇笔记和设备接口层之数据包接收中内容有重复,但是在之前的笔记中重点介绍的是网络设备如何和设备层的框架代码配合将数据包接收,对接收后数据包如何递交给上层协议只是简单的进行了介绍,这篇笔记会重点介绍下这方面的内容。此外,这篇笔记也会介绍下PF_PACKET套接字是如何在设备层进行勾包的。1. netif_receive_skb该函数详细说明还是见笔记“设备接口层之数据报接收”,这里我们将其中和...
2018-11-22 23:14:29 1073
原创 默认网络设备流量控制
在设备接口层之数据包发送中有介绍过,数据包发送分为有队列发送和无队列发送,并且有队列发送依赖于流量控制机制,这篇笔记就来看下流量控制相关的内容。流量控制机制的核心是为发送过程建立排队规则,让发送的每一包数据先入队列,然后再出队列,真正最终发送的顺序就是出队列的顺序,而是用什么样的队列,以及队列内部如何控制可以有上层通过tc工具进行配置,对于内核的发送框架,只规定了标准的入队和出队接口进行了标准化...
2018-11-18 17:21:04 1242
原创 数据收发过程中的网络设备状态
从前面的数据收发过程中也看到了,在收发流程中很多检查设备状态的操作,这篇笔记来完整的看下在设备注册成功后,到底有哪些状态,它们是如何控制收发流程的。1. net_device的state字段dev->state字段描述了设备和设备队列的状态,当前定义有如下值:/* These flag bits are private to the generic network queueing ...
2018-11-18 13:07:10 5136
原创 设备接口层发送数据包
高层协议(如IP)经过路由后,为数据包确定了出口net_device,然后通过邻居子系统为数据包添加L2首部,最后数据包交给函数,由设备接口层接力后续的数据发送流程。这篇笔记分析了数据包从进入设备接口层到给到网络设备驱动之间的代码实现。
2018-11-17 13:59:51 1546
原创 设备接口层接收数据包(一)
数据包最先当然是由网卡收到(不考虑环回接口这样的虚拟设备),那么之后软件是如何接收该数据,又是如何将数据递交给协议栈的,这篇笔记就来看看linux内核和驱动程序时如何配合完整这个接收过程的。1. 数据接收模式当前内核提供了两种数据接收模式:非NAPI方式(老方法)和NAPI(新方法,即New API)。新老方法的接收过程分别如下图所示:1.1 非NAPI方式如上图b所示,当网卡收到数据包...
2018-11-14 22:29:39 2054
原创 net_device的注册与注销
net_device对象只有通过register_netdev()注册到系统后才能被外部感知到。类似的,在释放之前需要通过unregister_netdev()将net_device对象先从系统中注销。这篇笔记分析了这两个过程的实现。
2018-11-13 00:30:42 4103
原创 net_device的管理
系统将所有已注册的网络设备从三个维度上组织为一个链表和两个哈希表:上面的三个表的表头是在网络命名空间中定义的,如下:表项定义每个网络设备也需要有相关的字段才能将网络设备对象接入全局的表中:组织结构清除了数据结构定义,下面来看看内核利用这些数据结构对已注册网络设备对象的组织:dev_base_head链表的内存布局如下所示:为了内存对齐,struct net_device结构在分配时有可能在其首部会有一段padding,而全局的dev_base_head指向的是net_device结构的第一个成员的
2018-11-11 12:59:27 1667
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人