logo资料库

基于Linux的网络通信模型的设计与实现.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
技术天地 T e c h n o l o g y W o r l d 基于Linux的网络通信模型的 设计与实现 王 鸽 刘钊远 西安邮电大学 【摘 要】随着 Linux 操作系统的广泛推广及应用,网络系统的安全也成为研究热点。网络系统安 全在很大程度上取决于管理者及其所采取的安全措施 , 系统管理员可以通过对防火墙的设置和检测 , 从而达到加强网络安全的目的。为了提高多用户下服务器的通信效率,本文采用多进程并发模型,并 使用 socket 套接字来实现网络通信,同时通过对防火墙的设计在 Linux 下实现全程动态包过滤,提高 网络传输安全性,更好地发挥了 Linux 的实时性,并且保障了多用户/ 服务器之间的连接和数据传输 的可靠和稳定性。 【关键词】进程通信 多进程 并发模型 1 引言 L i n u x 操 作 系 统 具 有 高 效 、 稳 定 、 兼 容 性 好 等 特 点 , 可 以 运 行 在 多 种 硬 件 平 台 上 , 目 前 Linux在企业及工程中也广泛应用,基于它的实 时 性 和 稳 定 性 等 特点,被用在大型的视频会议 汇接系统中,支持大容量客户对服务器的实时会 议。基于Linux的防火墙在对网络安全的保障下主 要实现几个功能:一是在Linux下实现全程动态包 过滤功能,通过分析数据包的地址、协议、端口 对网络连接当前状态进行访问控制,从而提高系 统的性能和安全性。二是配备了日志记录系统和 查询工具,用于记录系统管理、系统访问及针对安 全策略的网络访问情况。三是制作防火墙过滤数据 库,并且管理员可以能动地对该数据库进行设置。 在Linux环境下开发安全并且高性能的网络通信程 序很好地发挥了Linux的网络特性。Socket套接 字提供了访问下层通信协议的系统调用,它是介 于应用层和传输层之间的编程接口[1]。本文主要 设计和实现三层C/S模式的网络通信功能,基于 Linux下的并发服务器设计克服了跨地域会议的 不便及与会成员数量受限等缺点。 2 网络通信的应用背景 2.1 电话会议汇接系统架构 由于Linux的稳定性和实时性等优点,目前 广泛应用于大型网络通信系统中。本文设计的模 式应用于企业版的电话会议汇接系统中,在不改 变用户平时打电话的习惯下接入该系统线路和通 信设备。如图1,当用户需要发起会议时,可使 用客户端安装的软件选择会议成员,通过打电话 的方式举行会议,同时可进行在线视频对话,支 持用户间传送文件和视频,发送短消息。NET服 务器负责将用户要传输的数据进行中转,属于中 转服务器,文件服务器、视频服务器等对文件及 2013 年 3 月 | 保密科学技术 | 33
技术天地 T e c h n o l o g y W o r l d 文件 服务器 传统电话网 汇接平台 NET服务器 INTERNET网 短消息 服务器 防火墙 图1 系统结构 视频进行存储。该系统结合了Linux的特性,实 现大容量客户间的会议及通信,充分发挥了实时 性的特点。 2.2 系统设计模型 本 文 通 过 对 电 话 会 议 系 统 原 理 的 理 解 , 来 实现客户端、NET服务器及文件服务器之间的通 信。采用Socket网络编程,并发式服务器的架构 来设计程序,通过TCP/IP协议来传输数据。NET 服务器后级增加防火墙,所有视频、音频和指令 数据全部走HTTP隧道来穿越防火墙,开放80端 口,对数据包加HTTP包头[2]。从系统的安全性考 虑,NET服务器选用具有强大的处理能力的双核 PowerPC嵌入式处理器,并带有多个高速网络接 口。对于内网来说,NET是服务器,来侦听和处 理客户端的请求;对于外网来说,NET充当客户 端角色,对文件服务器发送连接请求,即所谓的 三层C/S模式结构,如图2所示。 当 用 户1 想 对 用 户2 发 起 会 议 时 , 先 向NET 34 | 保密科学技术 | 2013 年 3 月 文件服务器 否 用户2是否在线 将传送给2的文件转发 是 NET服务器 用户1先向NET发送连接请求 通知有会议邀请 用户1想向用户2 发起会议邀请 用户2向NET 发送请求 图2 设计模型 服务器发送连接请求,成功后会向NET发送数据 包 , 包 括 目 的 客 户 信 息 等 。 此 时 ,NET 会 有 一 个在线成员列表来进行查找。如果用户2在线, NET会对用户2发送信息告知它用户1的会议请 求,用户2同意则进行会议,同时可以在线发送 视频、文件等。若用户2不在线,这时NET会反 馈给用户1,用户1将要发给用户2的文件先发到 NET服务器,服务器则将文件转发到文件服务器 进行存储。当用户2再次上线后会对NET发送连 接请求,这时NET将用户2上线的信息发送给文 件服务器,文件服务器将NET转发的文件再次发 回到NET,再转发给用户2,这样就实现了三层 之间的基本数据传输。 2.3 网络通信模型实现 网络化的应用程序在开始任何通信之前都必 须要创建套接字。Socket可以看成在两个程序进 行 通 信 连 接 中 的 一 个 端 点 , 一 个 程 序 将 一 段 信 息写入Socket中,该Socket将这段信息发送给另 外 一 个Socket , 使 这 段 信 息 能 传 送 到 其 他 程 序 中。生成套接字主要有3个参数:通信的目的IP 地址、使用的传输层协议(TCP或UDP)和使用 的端口号[3]。通过将这3个参数结合起来,与一个 Socket绑定,应用层就可以和传输层通过套接字 接口,区分来自不同应用程序进程或网络连接的
技术天地 T e c h n o l o g y W o r l d 通信,实现数据传输的并发服务。具体创建流程 如图3所示。 3 通信协议 服务器 Socket() Bind() Listen() Accept() 阻塞,等待客户连接请求 连接建立 服 务 请 求 服务响应 Recv() 处理服务请求 Send() Close() 客户机 Socket() Connect() Send() Recv() Close() 图3 C/S模式创建流程 服务程序编写的基本步骤如下: 创 建 套 接 口 (socket 函 数 ) → 绑 定 套 接 口 (bind函数)→设置套接口为监听模式,进入被 动接受连接请求状态(listen函数)→接受请求, 建立连接(accept函数)→为每个客户创建子进 程fork()→读/写数据(recv/send函数)→ 终止连接(close函数)。程序是通过将进程的创 建和启动置于循环中来实现的。 客户端程序编写步骤如下: 创建套接口(socket函数)→请求连接(connect 函数)→发送服务请求(send函数)→接受服务响 应(recv函数)→关闭连接(close函数)。 3.1 TCP/UDP服务流程 由上部分socket套接字类型,有两种Internet 应用程序服务:一种面向连接的TCP协议,另一 种面向无连接的UDP协议。 TCP在连接双方发送数据之前,都需要首先 建立一条连接。在建立连接的时候,客户端首先 向服务器申请打开某一个端口,然后服务器端发 回一个ACK报文通知客户端请求报文收到,客 户端收到确认报文以后再次发出确认报文来确认 刚才服务器端发出的确认报文,此时连接建立已 完成 [4]。这就叫做三次握手。如果再加上TCP的 超时重传机制,那么TCP就完全可以保证一个数 据包被送到目的地。TCP有一个特别的概念叫做 half-close,这个概念是说,TCP的连接是全双工 (可以同时发送和接收)连接,因此在关闭连接 的时候,必须关闭传和送两个方向上的连接[5]。 在UDP 模 式 下 , 客 户 程 序 没 有 把 套 接 字 固 定连接到一个指定的远程端点上,而是在每次发 送数据包时指定远程目的地。因而UDP具有相当 的灵活性,客户程序可以在它要求发送时才决定 和哪个服务器交互。UDP在传递数据时并不保 持发送端和接收端间的连接状态,即不对接收和 发送缓冲区、拥塞控制、数据到达顺序等参数进 行跟踪,因而UDP传送的数据包可能出错甚至丢 失,其可靠性无法得到保障[6]。尽管如此,UDP 在DNS解析、IP电话、实时视频会议、可存储的 音频视频流等应用程序中仍大受欢迎。其原因在 于:(1)相对于TCP,面向无连接的数据传送 不带时间延迟,速度自然要快;(2)UDP不对 发送端和接收端间的诸多参数进行跟踪,使得它 有能力支持更多的处于活动状态的客户,灵活性 强;(3)从数据段结构对比中可以发现,UDP 的数据包头部开销比TCP小得多;(4)由于没有 拥塞控制机制,UDP发送数据的速度仅仅受限于 应用程序产生数据的速度、源端的性能(CPU、 2013 年 3 月 | 保密科学技术 | 35
技术天地 T e c h n o l o g y W o r l d 时钟速度等)以及物理设备可以达到的带宽。 本设计采用TCP面向连接协议传输,以确保 数据可靠稳定传输。 3.2 数据传输 由于TCP协议是面向字节流的协议,并且每 一个子进程都要同时对多个描述符进行读写,子 进程之间还要进行频繁的数据传输,这样就会产 生数据的混乱,采用二次接收方式并在传输层和 应 用 层 之 间 加 入 安 全 服 务 层 的 方 式 实 现 网 络 数 据流的组织[7]。首先作为服务器接收客户端数据 时,对于每一个数据段进行两次接收,第一次接 收两个字节,这两个字节中保存了整个数据段的 长度,然后根据接收过来的数据计算出剩余字段 的总长度,进行二次接收[8]。发送数据时,将整 个数据段作为一个整体进行发送,这样,接收和 发送过程中保证了数据的完整性。长度字段对应 用层的数据进行了划分,对TCP的字节流能够有 效组织,也为进一步判定服务类型打下了基础。 协议包的格式如图4所示。 数据段 长度 源地址 (2字节) (2字节) (2字节) (1字节) (多字节) 目的 地址 服务 类型 服务 扩展 应用层数据 (小于1024 字节) 校验和 (2字节) 图4 TCP/IP数据包传输格式 整 个 协 议 包 格 式 类 似 于 隧 道 的 方 式 进 行 封 装 [9],对于应用层数据部分,可以根据不同的需求 进行不同级别的加密,实现通信数据的安全性。 源地址和目的地址分别表示报文的来源和目 的地,目的地可以是客户端或者内网服务器[10]。 服务类型字段表示客户端请求的服务类型,对于 不同种类的服务数据包,进行识别并处理,保障 了内部网络的安全,在安全服务层上实现了不同 36 | 保密科学技术 | 2013 年 3 月 服务的识别,提供服务的转换。0代表客户端之 间传送的数据,不需要经过内网服务器,根据目 的地址对该报文进行直接转发。 4 结语 通过大量的调试和对比,基于Linux的并发 服务器的设计提高了系统的实时性,在大容量客 户情况下,能确保数据可靠、稳定的传输,很好 地将Linux的特性和网络通信结合起来。 END 参考文献: [1] [美]理查德·史蒂文斯,贝尔·芬纳,鲁道夫.UNIX网 络编程(第一卷套接口API)[M].杨继张,译.北京: 清华大学出版社, 2011. [2] [美]理查德·史蒂文斯.UNIX网络编程(第二卷 进程间通信)[M].杨继张,译.北京:清华大学出版 社, 2009. [3] 许小蕾,苏厚勤.分层系统Socket应用软件的设计 与实现[J].计算机应用与软件,2009,26(01):173-175. [4] 葛福鸿,张丽萍.基于Socket技术的聊天软件设计 与实现[J].电脑编程技巧与维护,2012(05):55-57. [5] 郭东升,田秀华. Linux环境下基于Socket的网络 通信[J].软件导刊,2009(01):116-118. [6] 科默·史蒂文.TCP/IP客户—服务器编程与应 用[M].赵刚,林瑶,蒋慧,译.北京:清华大学出版社, 2004. [7] 牛立华.浅析用Socket API实现的网络通信[J]. 计算机时代,2002(08):192-194. [8] 秦凯,戴曙光.利用VC++/C编程实现Windows 与Linux的网络通信[J].仪表技术,2009(02).33-37. [9] 孙琼.嵌入式Linux应用程序详解[M].北京:人民 邮电出版社, 2006. [10] 王丰锦,邵新宇.基于Socket和多线程的应用程 序间通信技术的研究[J].计算机应用,2000,20 (06):65-67.
分享到:
收藏