Socket Kernel Source Chapter01 Introducation

Socket Kernel Source Chapter01 Introducation

 

0 序言

    我们一般都已经熟悉了简单的网络程序的编写,几个普通的网络函数就能实现和服务器、客户端,并完成数据传输。但这些看似简单的网络函数下面,其实隐藏着复杂的业务处理流程,这些过程都是Linux内核实现的。本文的目的就是介绍在Linux下,内核中的网络套接字到底是如何建立网络链接的、如何传输数据的,数据包是如何经过封装,被发送和接收的。本文对网络套接字内核进行源代码跟踪,包括socket(), bind(), listen(), accept(), connect(), close(), read(), write(),Linux版本为最新发布版本2.6.25。

 

    此篇为网络方面的内核编程作铺垫。"Socket Kernel Module"为其高级篇.      也是初学,错误难免,欢迎指正。

 

1 网络内核简介

Linux下网络传输基本分为三大层, UserSpaceKernelSpaceHardware如下图所示,软件部分为前两层,网络硬件设备为最后一层,这里重点介绍KernelSpace层。

 

UserSpace层,网络套接字被封装为socket(), bind(), listen(), accept(), connect(), close(),read(), write()等函数,来建立连接和传输数据,一般的网络程序直接使用即可。

 

我们真正感兴趣的网络套接字内核都在KernelSpace层。由于Linux支持多种网络协议族,包括TCP/IP, UnixSocket, IPX, AX25等等,因此对于UserSpace传来的命令或数据包,首先通过BSDSocket层来判断采用的是哪种网络协议族,如果是TCP/IP层,则进入传输层,即INETSocket层,调用TCPUDP或raw协议,进行封装、分组等处理,然后将传到网络层,即IPLayer,由其封装、判断路由、网络接口等处理;最后将数据包传递给网络设备发送。接收的过程正好相反。


下面分为两大部分介绍,分别是 TCP/IP 连接建立过程和传输过程。前者包括socket(), bind(), listen(), accept(), connect(), close(),主要是网络连接的建立和断开。后者包括 read(), write(),主要详细介绍传输的具体过程。

 

后文中主要讲解网络部分相关代码,详细源代码请参考http://lxr.linux.no/ 。 还有一部分是安全相关部分,此部分本书略过,请参考相关领域书籍。


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值