Linux网络协议栈
文章平均质量分 74
zhaqiwen
这个作者很懒,什么都没留下…
展开
-
Linux网络协议栈(三) -- 网络设备(2)
2.1、网络设备的注册与注销注册网络设备发生在下列情形: (1)加载网卡驱动程序 网卡驱动程序如果被编译进内核,则它在启动时被初始化,在运行时被作为模块加载。无论初始化是否发生,所以由驱动程序控制的网卡都被注册。 (2)插入可热拔插网络设备 当用户插入一块热拔插网卡,内核通知其对应的驱动程序以注册设备。(为了简单化,我们假定设备驱动程序已经被加载)。两个主要的情转载 2012-07-04 14:58:20 · 1125 阅读 · 0 评论 -
多核处理器下的快速包处理软件架构FastGate
FastGate主要的目标是帮助用户缩短研发周期,保护已有的代码,快速开发和灵活部署自己的业务。用户无需关注多核处理器的硬件细节、无需关注性能和扩展性,只需专注于自身功能模块的开发,然后通过和FastGate框架的无缝集成便可以快速形成自己独有的产品,推出市场,同时又可以根据业务需要,灵活的扩展。FastGate框架的的设计和SDN & OpenFlow的思想很吻合转载 2015-08-22 08:50:48 · 2001 阅读 · 0 评论 -
PFQ,适用于多核处理器系统中的网络监控框架
PFQ 是一个支持多语言的网络框架,主要用于 Linux 操作系统下进行高效的包捕获和传输,适用于多核处理器系统中的网络监控框架。PFQ 专门为多核处理器而优化,包括对多个硬件队列的网络设备优化,支持任意网络设备驱动,并提供一个脚本用来加速和优化对设备数据的获取。该框架可用来开发高性能的应用,使用 C、C++11 和 Haskell 。此外 PFQ 还包含一个纯函数语言 PFQ/l转载 2015-01-12 15:17:28 · 1629 阅读 · 0 评论 -
高性能网关设备及服务实践
一、引言随着互联网的高速发展,内容量的提升以及对内容智能的需求、云产业的快速突起,作为互联网的计算基石服务器的形态以及使用成为了炙手可热的话题,全球各家大型互联网公司都持续的在服务器平台上有非常大的动作,譬如facebook的OCP等,而整个服务器的生态链也得到了促进和发展。随着服务器硬件性能的提升和网络硬件的开放,传统PC机的处理性能甚者可以和网络设备相媲美。另一方面SDN技术的发展,基转载 2015-01-11 22:25:15 · 7161 阅读 · 0 评论 -
高性能的内核 Socket 实现 Fastsocket
2014年10月18日,当时就职于新浪操作系统团队的林晓峰在Github上开源了名为Fastsocket的项目,并在之后一天的中国Linux内核开发者大会上对该项目的原理和应用效果进行了介绍(演讲slides在此)。根据Github官网的介绍,Fastsocket是:高度可扩展的socket是Linux内核层面的底层网络实现在多核机器上可实现极佳性能,24核以内的性能增长呈线性转载 2014-11-14 13:59:52 · 4707 阅读 · 0 评论 -
Linux网络协议栈 -- socket connect 发起连接请求
1、sys_connect 对于客户端来说,当创建了一个套接字后,就可以连接它了。 case SYS_CONNECT: err = sys_connect(a0, (struct sockaddr __user *)a1, a[2]); break;[转载 2012-07-08 20:17:26 · 1829 阅读 · 0 评论 -
Linux网络协议栈 -- socket bind 地址绑定
1、bind()当创建了一个 Socket 套接字后,对于服务器来说,接下来的工作,就是调用 bind(2)为服务器指明本地址、协议端口号,常常可以看到这样的代码: strut sockaddr_in sin; sin.sin_family = AF_INET; sin.sin_addr.s_addr = xxx; sin.sin_port = xxx; bind(s转载 2012-07-08 19:50:04 · 7425 阅读 · 0 评论 -
Linux网络协议栈 -- socket listen监听
一、sys_listen 对面向连接的协议,在调用 bind(2)后,进一步调用 listen(2),让套接字进入监听状态: int listen(int sockfd, int backlog); backlog 表示新建连接请求时,最大的未处理的积压请求数。 这里说到让套接字进入某种状态,也就是说,涉及到套接字的状态变迁,前面 create 和bind 时,也遇到转载 2012-07-08 19:57:33 · 8083 阅读 · 1 评论 -
Linux网络协议栈 -- socket accept接收连接
一、tcp 栈的三次握手简述 进一步的分析,都是以 tcp 协议为例,因为 udp要相对简单得多,分析完 tcp,udp的基本已经被覆盖了。 这里主要是分析 socket,但是因为它将与 tcp/udp传输层交互,所以不可避免地接触到这一层面的代码,这里只是摘取其主要流程的一些代码片段,以更好地分析 accept的实现过程。 当套接字进入 LISTEN后,意味着服务器端转载 2012-07-08 20:06:34 · 5232 阅读 · 1 评论 -
Linux网络协议栈 -- socket创建(1)
内核版本:2.6.12 一、系统总入口 Linux 内核为所有的与 socket 有关的操作的 API,提供了一个统一的系统调用入口,其代码在net/socket.c中: asmlinkage long sys_socketcall(int call, unsigned long __user *args) { unsigned long转载 2012-07-07 22:20:25 · 1484 阅读 · 0 评论 -
Linux网络协议栈 -- socket创建(3)
五、初始化 sk 分配完成 sk 后,另一个重要的功能就是初始化它,sk 的成员相当复杂,其主要的初始化工作是在函数 sock_init_data()中完成的: void sock_init_data(struct socket *sock, struct sock *sk) { /* 初始化其三个队列 */ skb_queue_h转载 2012-07-07 22:40:07 · 3666 阅读 · 0 评论 -
Linux网络协议栈 -- socket创建(2)
三、af_inet 协议簇的协议封装 接下来,函数调用之前已经注的 inet_family_ops的函数指针 create,也就是inet_create()函数,前面,可以说一个通用的 socket 已经创建好了,这里要完成与协议本身相关的一些创建 socket 的工作。这一部份的工作比较复杂,还是先来看看 af_inet.c 中的模块初 始化时候,做了哪些与此相关的工作。转载 2012-07-07 22:34:18 · 1248 阅读 · 0 评论 -
Linux网络协议栈(一) -- socket入门(2)
3、套接字的实现套接字最先是在UNIX的BSD版本实现的,所以也叫做BSD套接字,它隐藏了各个协议之间的差异,并向上提供统一的接口。Linux中实现套接字的基本结构:3.1、BSD套接字3.1.1、核心数据结构为了实现BSD套接字,内核提供一个重要的数据结构struct socket,它的定义如下: //BSD套接字(include/linux/net.h)转载 2012-07-04 14:46:17 · 1520 阅读 · 0 评论 -
Linux网络协议栈(二) -- 套接字缓存(socket buffer)
Linux网络核心数据结构是套接字缓存(socket buffer),简称skb。它代表一个要发送或处理的报文,并贯穿于整个协议栈。1、 套接字缓存skb由两部分组成:(1) 报文数据:它保存了实际在网络中传输的数据;(2) 管理数据:供内核处理报文的额外数据,这些数据构成了协议之间交换的控制信息。当应用程序向一个socket传输数据之后,该socket将创建转载 2012-07-04 14:52:25 · 963 阅读 · 0 评论 -
Linux网络协议栈(四) -- 链路层(2)
2、协议相关2.1、第3层协议的管理在Linux内核中,有两种不同目的的3层协议:(1) ptype_all管理的协议主要用于分析目的,它接收所有到达第3层协议的数据包。(2) ptype_base管理正常的3层协议,仅接收具有正确协议标志符的数据包,例如,Internet的0x0800。注意sb_buff与net_device中几个字段的区别:sb_buf转载 2012-07-04 15:17:25 · 3254 阅读 · 0 评论 -
Linux网络协议栈(四) -- 链路层(1)
1、接收帧当网络适配器接收到数据帧时,就会触发一个中断,中断处理程序执行一些需要及时处理的任务,然后在下半部进行其它可以延迟的处理。中断处理程序主要进行以下一些操作:(1) 分配sk_buff数据结构,并将接收到的数据帧从网络适配器I/O端口拷贝到sk_buff缓冲区中;(2) 从数据帧中提取出一些信息,并设置sk_buff相应的参数,这些参数将被上层的网络协议使用,例如s转载 2012-07-04 15:02:30 · 1930 阅读 · 0 评论 -
Linux网络协议栈(一) -- socket入门(1)
1、TCP/IP参考模型为了实现各种网络的互连,国际标准化组织(ISO)制定了开放式系统互连(OSI)参考模型。尽管OSI的体系结构从理论上讲是比较完整的,但实际上,完全符合OSI各层协议的商用产品却很少进入市场。而使用TCP/IP 协议的产品却大量涌入市场,几乎所有的工作站都配有TCP/IP协议,使得TCP/IP 成为计算机网络的实际的国际标准。2、套接字(socket) s转载 2012-07-04 14:43:19 · 1143 阅读 · 0 评论 -
Linux网络协议栈(三) -- 网络设备(1)
网络设备(network device)是内核对网络适配器(硬件)的抽象与封装,并为各个协议实例提供统一的接口,它是硬件与内核的接口,它有两个特征:(1) 作为基于硬件的网络适配器与基于软件的协议之间的接口;(2) 内核协议栈异步输入输出点。记住:网络设备软件对硬件的抽象网络设备与协议和网络适配器的关系如下:1、 net_device接口(net_devi转载 2012-07-04 14:55:19 · 1166 阅读 · 0 评论 -
Linux网络协议栈(五) -- 数据包的发送(based in 2.6.32)
一、关键数据结构对于输出封包,设备的数据结构主要包括两个:输出队列(queue)和输出队列规则(queue discipline)。我们首先来看输出队列(2.6.18内核中无该结构体):struct netdev_queue {structnet_device *dev;structQdisc *qdisc;unsigned long原创 2016-02-26 11:13:21 · 2665 阅读 · 0 评论