Linux 网络系统学习 IPv6 的初始化(详细而全面)
转自:http://blog.csdn.net/rstevens/archive/2007/04/10/1559289.aspx
1.
网络子系统
1.1.
网络子系统概述
Linux
内核中,与网络相关的代码是一个相对独立的子系统,称为网络子系统。
网络子系统是一个层次化的结构,可分为以下几个层次:
1、
Socket
层
Linux
在发展过程中,采用
BSD socket APIs
作为自己的网络相关的
API
接口。同时,
Linux
的目标又要能支持各种不同的协议族,而且这些协议族都可以使用
BSD socket APIs
作为应用层的编程接口。因此,在
socket APIs
与协议族层之间抽象出一个
socket
层,用于将
user space
的
socket API
调用,转给具体的协议族做处理。
2、
协议族层(
INET
协议族、
INET6
协议族等)
Linux
网络子系统功能上相当完备,它不仅支持
INET
协议族(也就是通常所说的
TCP/IP stack
),而且还支持其它很多种协议族,如
DECnet, ROSE, NETBEUI
等。
INET6
就是一种新增加的协议族。
对于
INET
、
INET6
协议族来说,
又进一步划分为传输层和网络层。
3、
设备驱动层
设备驱动层则主要将协议族层与物理的网络设备隔离开。它不在本文的讨论范围之内。
下图是
Linux
网络系统层次结构图。
1.2.
网络子系统的初始化
·
Socket
层的初始化:
Init()->do_basic_setup()->sock_init()
Sock_init()
:对
sock
和
skbuff
结构进行
SLAB
内存的初始化工作
·
各种网络协议族的初始化:
Do_initcalls()
:
对于编译到内核中的功能模块(而不是以模块的形式动态加载),它的初始化函数会在这个地方被调用到。
内核映象中专门有一个初始化段,所有编译到内核中的功能模块的初始化函数都会加入到这个段中;而
do_initcalls()
就是
相关文档:
最近通读了一下软件调试的艺术(The art of debugging with gdb,ddd,eclipse),总体来说是一般入门级的调试用书。我个人感觉对初学gdb的有一定的作用,有愧于题目art。我简单的做个总结,供入门参考。主要讲了gdb的常用命令以及常见bug的调试。
常用命令:
1. 暂停机制
a.断点的使用
& ......
在Linux下写了个小的socket程序,分为客户端和服务器端,服务端开一个端口(20000),做为一个daemon,等待客户的连接请求。一旦有客户连接(客户端的IP和端口号是不固定的),服务器端打印出客户端的IP地址和端口,并且向客户端发送欢迎信息和时间。
下面是 ......
Linux中的进程通信
1.管道
函数原型:int pipe(int filedes[2]);
函数返回值: 正确返回0;错误返回-1
其中的文件描述符filedes[0]是用来读取数据的,filedes[1]是用来写数据的。
例子1:
#include<stdio.h>
#include<stdlib.h>
#include<u ......
1 前言
许多人在分析linux代码时对网络部分(主要是src/linux/net,src/linux/include/net及src/linux/include/linux目录下的文件)比较感兴趣,确实,尽管已经从书本上学到了大量的TCP/IP原理,不读源码的话,头脑中还是建立不起具体的印象。而分析这部分代码的一个问题便是代码众多而资料很少。这篇文章的目的就是勾勒出 ......