TCP/IP协议栈在Linux与FreeBSD中的实现分析.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:3 大小:188KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

TCP/IP协议栈在Linux与FreeBSD中的实现分析.pdf

TCP/IP协议栈在Linux与FreeBSD中的实现分析.pdf

预览

在线预览结束,喜欢就下载吧,查找使用更方便

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

Ml。仳0mputeAppll。。H。聃vo1.22,N。.6,2006学习园地竺竺.竺!.竺16.竺文章一号{10o7—757X(20o6)O6—0o6O一02..TCP/IP协议栈在Limux与FreeBSD中的实现分析胡影,蒋年德摘要;本文分析了Linux和freeBSD两个探作系统的部分网络实现代码,井通过研究一个完整的1/o探作流程,遍历探作乐境中TCP/IP协议栈的内撮实现,最后时相关实现作出了相应的评价·关t词:Linux;FreeBSD~TCP/IP协议栈中圈分类号TP316文献标识码;A发现差错,TCP将会要求重发。因此,TCP/IP~EINTERNET1引言中几乎可以无差错地传送数据。在众多的开源操作系统种,LINUX以开放性和众多的驱动支持著称,FreeBSD有着优良的UNIX传统,是公认的最3TCP/IP协议的实现稳定的操作系统。对网管来说如何进行选择,本文拟从协议栈的实现中寻找答案。从进程的角度上讲,可以调出send,sendto来发送一段数据,也可以使用文件系统中的write和writev.同理,接收数据2Linux、FreeBSDTCP协议组筒介可以使用相应的recv,recvfrom这样的接口,或者使用文件系统提供的read,readv.对于接收来说,是异步进行的,也就是说,是中断驱动的,在以后的分析中,我们妥注意这点。为简单2.1Linux与Freebsd筒介起见,同时又不失一般性,我们将分析TCP协议的输入输出Linux作为一种开放源代码的操作系统,自1991年问世全过程,并对Linux及FreeBSD的实作一对比。以来,不管是从功能上,还是从流传的广度上,都得到了稳步的增长。Linux系统包含了建立Internet网络环境所有服务的在实现上,FreeBSD与最初的实现一脉相承·而Linux的实现自成体系,仅与传统实现保持接121上的兼容,我们将针对软件包,如ApacheWeb服务器、MAIL服务器、firesaU、Databa8e服务器等。因此研究Linux操作系统下的TCP/IP协源码级的实现,来分析一下两者的异同。3.1TCP协议栈在FreeBSD上的实现首先介绍FreeBSD上议栈的实现具有重要意义。LinuxBSD是一个稳定的、开放源码的、完全32位的操作的协议实现,这也是最正统的实现。下图是完整的输入输出路系统,它是基于X86平台上的一种UNX,FreeBSD以其良好径。fTI_一I}的高负荷稳定性,被众多ISP(Internet服务提供商)、ICP选作——各种Server的OS,它可以直接用于教学和商务服务,能方便的进行二次开发。目前,FreeBSD已被研究中心或大学用来研发出了一些高水平的应用程序,其应用范围已逐步推广。2.2TCP/IP协议组筒介[血五]TCP/IP(传输控制协议/网间协议)是一种网络通信协—I]议,它规范了网络上的所有通信设备,尢其是一个主机与另一蜜Hetheroutputp个主机之间的数据往来格式以及传送方式。TCP/IP是IN—TERNET的基础协议,也是一种电脑数据打包和寻址的标准畜唾n-●_。_--●。_。_-。-●-。_。-。-。。_。——方法。大数据传送中,可以形象地理解为有两个信封,TCP和IP就像是信封,要传递的信息被划分成若干段,每一段塞人圈1TCP协议栈在FreeBSD上的实现在图1的左边是TCP/IP的输出,不管应用程序调用哪个一个TCP信封,并在该信封而上记录有分段号的信息,再将输出函数,最终都要调用sosend来完成输出。Sosend将从用TCP信封塞人IP大信封,发送上网。在接受端,一个TCP软件包收集信封,抽出数据,按发送前的顺序还原,并加以校验,若户空间把数据复制进内核管理的m—buf数据结构中(m—buf作者筒介。黎蒋年鬈德:,江器西囊抚州柰东攀华登理圭工拳学霞院葬计羹算机鸢与鎏通禧信黍系:,囊抚州。344∞00。0·6O·MicrocomputerApplicationsVo1.22,No.6,2006学习园地微型电脑应用2006年第22卷第6期是FreeBSD的TCP实现使用的数据缓冲结构)。在sosend完样可以通过vfs的write来调用,也可以直接使用send来调用,成数据复制后,将调用TCP的输出函数top-output,它要做它们最终都是调用sock-snedmsg。sock-sendmsg通过它的的事情是分配一个新的m—buf确良不保存tcp头,并计算相内棱版本-sock-sendmsg直接调用tcp-sendmsg来发送数应的数据校验码,在下一步的ip-o