预览加载中,请您耐心等待几秒...
1/4
2/4
3/4
4/4

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

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

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

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

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

应用安全 Linux环境下基于UDP 的socket编程浅析 吴佩贤 绍兴文理学院计算机系浙江312000 摘要:socket适用于网络环境中的进程间通信,它已成为当前许多操作系统的网络API,也是网络操作系统中必 不可少的基础功能。尽管UDP无法像TCP一样提供可靠的数据传输,但UDP并不比TCP缺乏优越性。随着Linux 操作系统和Internet的不断发展,Linux网络环境下尤其是基于UDP的socket通信技术仍广为注目。文章介绍了 Linux平台下的socket及其编程原理,并通过一个Java编写的基于UDP的客户/服务器程序,描述了网络中不同 主机上的两个进程之间的socket通信机制。 关键词:socket;UDP;TCP;客户/服务器;进程;Java 0引言Linux将套接字地址族抽象为统一的BSD套接字接口, 该接口是应用程序的开发接口,由各地址族专有的软件支 Linux是一个诞生于Internet和WWW的产品,它具有 持。LinuxBSDsocket支持以下常见套接字类型: 稳定、简易、高效、兼容性好等特点,并且支持多种网 (1)SOCK_STREAM(数据流套接口):提供一个 络协议,如Ipv4、Ipv6、X.25、IPX、NETBIOS、DDP 面向连接的双工顺序数据流传输和可靠的数据传输服务。这 等。套接字(socket)是介于网 种套接字可以保证数据传输的可靠性,不会出现数据丢失、 络应用层和传输层之间的编程接 破损或重复出现等差错,而且通过流量控制避免发送的数据 口,套接字接口提供了访问下层 流超限。Internet地址中的TCP协议支持流套接字。 通信协议的大量系统调用和相应 (2)SOCK_DGRAM(数据报套接口):提供一个 的数据结构,进程在Linux上的 无连接和不可靠的双工数据传输服务。数据包以独立包形式 网络通信过程就是使用套接字传 被发送和接收。不对数据的传输提供无错保证,即数据可 输数据的过程。套接字在UDP/IP 能被丢失、破坏,也可能被重复接收。Internet地址中的 网络模型中的地位如图1所示。 图1套接字UDP协议支持这种套接字。 1BSD套接字接口(3)SOCK_RAW(原始套接口):这种类型的套 socket最早应用于伯克莱大学BSDUNIX中,所以习惯接字允许对低层协议如IP或ICMP直接访问,可以直接填 上又称其为BSDsocket。一个套接字描述为一个通信连接的充IP、TCP、UDP或者ICMP的包头,发送用户自己定 一端,在一个通信连接中的两端通信程序应各自有一个套接义的IP包或者ICMP包,主要用于协议的开发。 字来描述它们自己那一端,不同主机中的两个进程通过各自2用户数据报协议UDP及无连接服务 的套接字发送和接收消息,从而实现进程间跨网络的通信。 Internet给分布式应用程序提供两类服务:一是面向连 Linux环境中套接字支持多种网络协议,不同类型网络 接的服务,二是无连接服务。面向连接的服务由TCP提 协议具有不同的工作方式,所使用的地址格式也完全不同。 供,客户和服务器在彼此间发送数据之前要先建立三次握 对于各种网络协议而言,使用相同地址格式的几个协议称为 手,以确保发送端的数据最终按顺序完整无误地传送给接收 一个协议地址簇,表1列出了BSD套接字的常见地址族。 端。无连接服务则由UDP提供,发送端和接收端在传送数 表1BSD套接字地址族的主要类型 据之前不需要进行握手,因而不会带入任何延迟。 在无连接模式下,客户程序没有把套接字固定连接到一 个指定的远程端点上,而是在每次发送数据报时指定远程目 的地。因而UDP具有相当的灵活性:客户程序可以在它要 求发送时才决定和哪个服务器交互。从图1可以看出,UDP 作者简介:吴佩贤(1974-),男,讲师,主要从事实时操作系统研究。 2006.163 应用安全 通过套接字直接从应用程序进程得到消息,附上源和目标端 格式声明为: 口号,并把得到的数据段传递给网络层。网络层将数据封 intbind(intsockfd,structsockaddr*my_addr,int 装到IP数据包里,并使用尽力服务方式将数据包传递给接 addrlen)。sockfd为套接口描述字;指针my_addr指向 收端。如果该数据包到达接收端,UDP通过端口号和IP目 sockaddr结构,该结构包含了远程服务程序的IP地址与端 标地址将数据包中的内容传正确地送给接收端的套接字。 口号;addrlen指明sockaddr结构的长度。 UDP在传递数据时并不保持发送端和接收端间的连接状态, 3.3sendto函数 即不对接收和发送缓冲区、拥塞控制、数据到达顺序等参 sendto()用于将应用缓冲区中的数据发送到指定