上一篇文章中介绍了sk_buff的基本结构,对sk_buff的基本组织结构以及对数据的处理有了一定的了解,接下来我们继续来介绍sk_buff中另外两个比较重要的概念。 4.sk_buff的clone 首先,为什么要对skb进行clone呢? 我们知道对于面向连接的协议,数据传到下层并不是真正的完成了发送过程,只有在接到对方的确认后才能丢弃数据。clone的意义就在于这,保存
sk_buff是内核网络子系统的一个支柱结构,各层协议都依赖于sk_buff而存在,所以了解它的设计是很重要的,这其中当然也包括了很重要的网络缓冲区的管理机制,下面一个系列都围绕它来展开。 sk_buff作为一个buffer,最重要的当然还是数据,所以sk_buff对数据的组织是学习重点。另外,为了满足上层的需求,sk_buff还有一些其它必要的功能。整理一下,可划分为以下几个方
一提到TCP连接,会很自然的想到三次握手,没错,这几篇文章就主要讲的是在linux实现中的三次握手,只不过更注重于实现方法和设计结构。我们这里不会着重讲协议,虽然这与实现是密不可分的,有需要的话可以参考以下资料: RFC 793:TCP最权威的定义,但理解起来可能会困难一些 http://www.tcpipguide.com/:国外一个牛人写的TCP/IP详解,很通俗易懂,涵盖了
因为协议族和协议都是用户在创建socket时指定的,所以相比系统初始化和模块初始化,socket创建的过程要复杂一些。下面我们先来看一下socket的创建过程: 从上图(我画的是一种类似于时序图的图)中可以看出,socket的创建过程是纵向的,因为它要把几个层中的接口串在一起使用。socket初始化最多就涉及到proto接口层。 下面我们就按照调用顺序来分
上一篇文章中介绍了socket系统的初始化,下面开始介绍目前应用最广泛的一个协议族:ipv4(或者叫af_inet)的初始化。ipv4作为一个内嵌模块,位于net/ipv4目录下,入口点为inet_init()[net/ipv4/af_inet.c:1512],该函数写的很整齐,方便了我们这些读者。先上代码: static
网络启动初始化函数入口为net/socket.c:2200:socket_init() static int __init sock_init(void) { /* &nbs
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号