Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155874
  • 博文数量: 41
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-14 10:16
文章分类
文章存档

2011年(1)

2010年(5)

2009年(35)

我的朋友

分类: LINUX

2009-07-24 14:43:34

1文件结构

1.1文件结构图

1.1 Linux1.2.13内核协议栈文件结构图

1.2文件结构描述

       Linux 1.2.13内核源代码关于协议栈的部分分为三大类,主要分布在四个文件夹中,详细介绍如下:

drivers文件夹:存放与设备驱动相关的文件,Linux 1.2.13内核并未做到驱动层和协议栈实现层之间的完全分离,所以此文件夹中也包含一部分协议栈的功能文件。

include/linux文件夹:存放网络协议栈涉及的头文件,主要定义了协议的数据结构和涉及到的宏。

net 文件夹:存放网络协议的具体实现代码。Net/unix下是有关unix的域代码,unix域是模拟网络传输方式在本机范围内用于进程间数据传输的一种机制,此子文件夹不涉及网络部分;net/inet下是有关网络各协议实现的代码;net/protocols.c文件定义了链路层所使用协议的初始化函数;net/socket.c文件中定义的函数是做为网络协议栈的最上层实现函数,是系统调用层和网络协议栈函数集合的接口层,实现比较简单,大多数实现的功能只是调用下一层函数进行处理。

2协议栈相关文件功能介绍

2.1 include/linux文件夹下的头文件介绍

头文件详细介绍如表2.1头文件功能列表。

2.1头文件功能列表

头文件名

最后修改日期

说明

etherdevice.h

1994-04-18 16:38

以太网协议相关函数声明

icmp.h

1993-12-01 20:44

ICMP 协议结构定义

if.h

1994-12-01 03:53

接口相关结构定义

if_arp.h

1995-02-05 20:27

ARP 协议结构定义

if_ether.h

1995-02-02 02:03

以太网首部及标志位定义

if_plip.h

1995-02-13 03:11

并行线网络协议

if_slip.h

1994-05-07 19:12

串行线网络协议

igmp.h

1995-01-24 21:32

IGMP 协议结构定义

in.h

1995-02-23 19:32

协议号定义

inet.h

1995-01-27 18:17

INET 域部分函数声明

interrupt.h

1995-01-26 13:38

 

ip.h

1995-04-17 18:47

IP 协议结构定义

ip_fw.h

1995-03-10 02:33

防火墙相关结构定义

ipx.h

1995-01-31 15:36

IPX 包交换协议结构定义

net.h

1995-02-23 19:26

INET 层关键结构定义

netdevice.h

1995-02-05 19:48

设备相关结构定义

notifier.h

1995-01-07 18:57

事件响应相关结构定义

ppp.h

1994-08-11 00:26

点对点协议结构定义

route.h

1994-08-11 00:26

路由结构定义

skbuff.h

1995-01-24 21:27

数据包封装结构定义

socket.h

1995-02-02 02:03

常数选项定义

sockios.h

1995-01-24 21:27

选项定义

tcp.h

1995-04-17 18:47

TCP 协议结构定义

timer.h

1995-01-23 03:30

定时器相关结构定义

udp.h

1993-12-01 20:44

UDP 协议结构定义

un.h

1994-06-17 12:53

UNIX 域地址结构定义

2.2 net/inet下文件介绍

2.2.1 net/inet/af_inet.c文件

       文件功能:实现表示层的功能,表示层的工作是对某些字段进行检查后向下层继续传递请求,该文件提供的函数主要是做为接口函数,通过调用传输层函数来实现功能。

       sk_inuse函数:检测一个端口号是否已被使用,端口的存储结构是哈希表。对于不同的协议使用相同的端口号不会有任何问题。

       get_new_socknum函数:获取一个新的未使用的端口号。

       put_sock函数:将一个新的sock结构插入到对应的链表中。使用本地掩码进行了地址排序。

       remove_sock函数:从链表中删除一个指定端口号的sock结构。

       destroy_sock函数:销毁一个套接字连接,包括该套接字对应的sock结构。销毁之前进行相应的内存释放。

       inet_fcntl函数:设置和获取套接字的信息。目前本函数只实现了套接字的属主功能。设置功能需要超级用户权限。

       inet_setsockopt函数:选项的设置。

       inet_getsockopt函数:选项的读取。

       inet_autobind函数:自动绑定一个本地端口号。

       inet_listen函数:sock结构的state字段设置为TCP_LISTEN,此函数无需调用底层函数。

       def_callback1def_callback2def_callback3函数:三个回调函数目前实现的功能主要是唤醒相关的进程。

       inet_create函数:用于创建一个套接字对应的sock结构并对其进行初始化,此函数被上层sock_socket函数调用。

       inet_dup函数:复制一个socket,通过调用inet_create函数来实现。该函数主要被服务器端调用,当服务器端调用accept函数时需要创建一个新的套接字,这个新套接字的初始值是通过listen套接字复制过来的,复制过程要通过次函数来实现。

       closing函数:检测套接字的状态。当状态为TCP_FIN_WAIT1TCP_CLOSINGTCP_LAST_ACKTCP_FIN_WAIT2时表示本地套接字已处于关闭状态。

       inet_release函数:sock_release函数调用,进一步完成套接字的关闭操作,解除socket结构和sock结构的互引用关系。

inet_bind函数:sock_bind函数调用,完成本地地址绑定,本地地址包括IP地址和端口号,如未指定系统会自动分配。

       inet_error函数:返回套接字通信过程中的错误。返回前会清楚当前的错误值。

       inet_connect函数:sock_connect调用,完成套接字的连接操作。

 

 

                                                                                   978计划工作组

                                                                                       2009-7-24

阅读(1215) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:tcp.c文件的tcp_select_window函数(1)

给主人留下些什么吧!~~