- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux网络体系结构【荐】.pdf
Linux
Linux
LLiinnuuxx网络体系结构
一 内核结构
按功能,Linux内核可以划分为5个不同的部分,每一部分处理一项明确的功能,同时
又向其他内核组件提供这项功能。这种结构也反映到内核的源代码上——这5部分都形成了
自己的子树。
1进程管理
2内存管理
3文件系统
4设备驱动程序
5网络
二 网络体系结构
先来看一下Linux网络体系结构
从上图可以看出Linux 网络体系结构由以下五个部分组成 1)系统调用接口 2)协议无关几
口 3)网络协议 4)设备无关接口 5 设备驱动程序。下面分别简述五个部分:
1)系统调用接口
系统调用接口是用户空间的应用程序正常访问内核的唯一合法途径(终端和陷入也可
访问内核)。如:
asmlingkage long sys_getpid(void)
{
returncurrent-pid;
}
系统调用一般由sys 开头 ,前面的修饰符是asmlingkage,表示函数由堆栈获得参数。
2)协议无关接口
协议无关接口是由socket 来实现的。它提供了一组通用函数来支持各种不同协议。
通过网络栈进行的通信都需要对 socket 进行操作。Linux 中的 socket 结构是 struct
sock ,这个结构是在 linux/include/net/sock.h 中定义的。这个巨大的结构中包含了特定
socket 所需要的所有状态信息,其中包括 socket 所使用的特定协议和在 socket 上可以执
行的一些操作。
网络子系统可以通过一个定义了自己功能的特殊结构来了解可用协议。每个协议都维护
了一个名为 proto 的结构(可以在 linux/include/net/sock.h 中找到)。这个结构定义了可以
在从 socket 层到传输层中执行特定的 socket 操作
3)网络协议
Linux 支持多种网络协议,可以在linux/socket.h中查到所支持的网络协议:
#defineAF_UNIX 1 /*Unix domain sockets */
#defineAF_LOCAL 1 /*POSIXname forAF_UNIX */
#defineAF_INET 2 /*Internet IP Protocol */
#defineAF_AX25 3 /*AmateurRadioAX.25 */
#defineAF_IPX 4 /*Novell IPX
其中每一个所支持的协议对应net_family[]数组中的一项,net_family[]是结构体指针数组,
其中的每一项都是一个结构体指针,指向一个net_proto_family 结构
structnet_proto_family {
int family;
int (*create)(struct socket *sock, int protocol);
shortauthentication;
shortencryption;
shortencrypt_net;
struct module *owner;
};这个结构体中注册了关于协议的信息。
4)设备无关接口
设备无关接口是由net_device 实现的。任何设备和上层通信都是通过net_device 设备无
关接口。
它将协议与具有很多各种不同功能的硬件设备连接在一起。这一层提供了一组通用函数
供底层网络设备驱动程序使用,让它们可以对高层协议栈进行操作。
首先,设备驱动程序可能会通过调用 register_netdevice 或 unregister_netdevice 在内核中进
行注册或注销。调用者首先填写 net_device 结构,然后传递这个结构进行注册。内核调用
它的 init 函数(如果定义了这种函数),然后执行一组健全性检查,并创建一个 sysfs 条目,
然后将新设备添加到设备列表中(内核中的活动设备链表)。在 linux/include/linux/netdevice.h
中可以找到这个 net_device 结构。这些函数都是在 linux/net/core/dev.c 中实现的。
要从协议层向设备中发送 sk_buff ,就需要使用 dev_queue_x
文档评论(0)