linux环境SOCKET编程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

计算机网络互连课程设计报告题目:linux环境SOCKET编程实现多机通信学生姓名:何琼学号:151021069专业班级:计算机科学与技术02104班同组姓名:王春喜陈立志指导教师:熊齐设计时间:2005-11-18指导老师意见:评定成绩:签名:日期:摘要套接字Socket接口最早是在BSDUNIX上实现的,是应用最广泛的一套应用程序接口。在UNIX系统中,网络应用编程界面有两类:UNIXBSD的套接字(socket)和UNIXSystemV的TLI。由于Sun公司采用了支持TCP/IP的UNIXBSD操作系统,使TCP/IP的应用有更大的发展,其网络应用编程界面──套接字(socket)在网络软件中被广泛应用,至今已引进微机操作系统DOS和Windows系统中,成为开发网络应用软件的强有力工具。本设计是面向客户—服务器模型设计,针对客户和服务器提供不同的套接字操作。客户随机申请一个套接字号,服务器拥有全局公认的套接字号,任何客户可以向它发出连接请求和信息请求。关键字:套接字客户—服务器模型TCP/IPUNIXBSDLinux1课程设计目的和意义Linux以其源代码公开闻名于世,并以其稳定性和可靠性雄霸操作系统领域,在网络应用技术方面使用得更加广泛。很久以来它就是Windows的重要对手之一。随着网络时代的来临,Linux的这种优势已变得更加突出。随着网络技术的发展,网络结构已从过去的主机/终端型、对等型发展到现在广为使用的客户机/服务器型。客户机/服务器模型应用十分广泛,在Internet上,E-mail,FTP等都是基于这种模型的。在面向连接的通信模式下,服务器打开监听端口,监听网络上其它客户机向该服务器发出的连接请求,当收到一个请求信号时与该客户机建立一个连接,之后两者进行交互式的通信在网络上,很多应用程序都使用TCP协议或UDP协议与其他机器上的应用程序进行通信。但是,在一台机器上,可能同时有多个应用程序在运行,那么,当目的机在收到数据后,怎么知道这些数据是发送给该机上的哪个应用程序的呢?为此,TCP/IP协议中引进了端口(port)的概念,利用端口来区分应用程序,每个端口与一个应用程序相联系。每个端口有一个16位(二进制)的标识符,称为端口号。由于每个主机上的端口号是独立分配的,所以它不可能全局唯一。端口号与主机的IP地址合起来,就构成了套接字Socket,它能在全网范围内唯一标识某个主机的某个端口,也即套接字Socket能够唯一标识某个应用程序的位置。UNIX系统的I/O命令集,是从Maltics和早期系统中的命令演变出来的,其模式为打开一读/写一关闭(open-write-read-close)。在一个用户进程进行I/O操作时,它首先调用“打开”获得对指定文件或设备的使用权,并返回称为文件描述符的整型数,以描述用户在打开的文件或设备上进行I/O操作的进程。然后这个用户进程多次调用“读/写”以传输数据。当所有的传输操作完成后,用户进程关闭调用,通知操作系统已经完成了对某对象的使用。在UNIX系统中,任何对I/O的操作都是通过读或写一个文件描述符来实现的。一个文件描述符只是一个简单的整形数值,它代表一个被打开的文件(这里的文件指广义的UNIX文件)。在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户/服务器模式(Client/Servermodel),即客户向服务器发出服务请求,服务器接收到请求后,提供相应的服务。客户/服务器模式的建立基于以下两点:首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基与客户/服务器模式的TCP/IP。客户/服务器模式过程中采取的是主动请求方式:首先服务器方要先启动,并根据请求提供相应服务:1.打开一通信通道并告知本地主机,它愿意在某一公认地址上(周知口,如FTP为21)接收客户请求;2.等待客户请求到达该端口;3.接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一新进程来处理这个客户请求(如UNIX系统中用fork、exec)。新进程处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。4.返回第二步,等待另一客户请求。5.关闭服务器客户方:1.打开一通信通道,并连接到服务器所在主机的特定端口;2.向服务器发服务请求报文,等待并接收应答;继续提出请求......3.请求结束后关闭通信通道并终止。TCP/IP协议被集成到UNIX内核中时,相当于在UNIX系统引入了一种新型的I/O操作。UNIX用户进程与网络协议的交互作用比用户进程与传统的I/O设备相互作用复杂得多。首先,进行网络操作的两个进程客户/服务器同机器上,如何建立它们之间的联系?其次,网络协议存在多种,如何建立一种通用机制以支持多种协议?这些都是网络应用编程界面所要解决的问题。在TCP/IP协议中,套接字对应的端口号由于是用16位两进制来表示的,所以它的范围从0到65535。在实际应用中,小于1024的端口号常被系统保留,用于一些预定义的服务,如端口21用于FTP协议,端口25用于EMAIL,Web服务缺省的端口号为80。TCP/IP协议也采用了Client/Server模型,使用TCP/IP协议的网络应用程序分为两类:一类应用程序为其他主机提供服务,这类应用程序就是Client/Server模型中的服务程序。另一类应用程序使用服务程序提供的服务,它们主动向服务程序发送连接请求,这类程序就是客户程序。客户程序可以任意选择其进行通信的端口的端口号,而服务程序(特别是一些众所周知的服务)往往使用较固定的端口号。服务程序运行后,就在各自的端口上等待。客户程序如要使用某一台主机的相应的服务,只要往该服务对应的套接字上发送数据即可。2需求分析2.1网间进程通信进程通信的概念最初来源于单机系统。由于每个进程都在自己的地址范围内运行,为保证两个相互通信的进程之间既互不干扰又协调一致工作,操作系统为进程通信提供了相应设施,如UNIXBSD中的管道(pipe)、命名管道(namedpipe)和软中断信号(signal),UNIXsystemV的消息(message)、共享存储区(sharedmemory)和信号量(semaphore)等,但都仅限于用在本机进程之间通信。网间进程通信要解决的是不同主机进程间的相互通信问题(可把同机进程通信看作是其中的特例)。为此,首先要解决的是网间进程标识问题。同一主机上,不同进程可用进程号(processID)唯一标识。但在网络环境下,各主机独立分配的进程号不能唯一标识该进程。其次,操作系统支持的网络协议众多,不同协议的工作方式不同,地址格式也不同。因此,网间进程通信还要解决多重协议的识别问题。图1不同的BSP版以及重要的TCP/IP特征为了解决上述问题,TCP/IP协议引入了下列几个概念。端口网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信能力。从这个意义上讲,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种标识符。为此,TCP/IP协议提出了协议端口(protocolport,简称端口)的概念,用于标识通信的进程。端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序(即进程)通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接收,相应进程发给传输层的数据都通过该端口输出。在TCP/IP协议的实现中,类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问之。类似于文件描述符,每个端口都拥有一个叫端口号(portnumber)的整数型标识符,用于区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。端口号的分配是一个重要问题。有两种基本分配方式:第一种叫全局分配,这是一种集中控制方式,由一个公认的中央机构根据用户需要进行统一分配,并将结果公布于众。第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己与该端口号联系起来(绑扎)。TCP/IP端口号的分配中综合了上述两种方式。TCP/IP将端口号分为两部分,少量的作为保留端口,以全局方式分配给服务进程。因此,每一个标准服务器都拥有一个全局公认的端口(即周知口,well-knownport),即使客户/服务器不同机器上,其端口号也相同。剩余的为自由端口,以本地方式进行分配。TCP和UDP均规定,小于256的端口号才能作保留端口地址网络通信中通信的两个进程分别在客户/服务器的机器上。在互连网络中,两台机器可能位于客户/服务器的网络,这些网络通过网络互连设备(网关,网桥,路由器等)连接。因此需要三级寻址:1.某一主机可与多个网络相连,必须指定一特定网络地址;2.网络上每一台主机应有其唯一的地址;3.每一主机上的每一进程应有在该主机上的唯一标识符。通常主机地址由网络ID和主机ID组成,在TCP/IP协议中用32位整数值表示;TCP和UDP均使用16位端口号标识用户进程。网络字节顺序不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低价先存),有的存高位字节(高价先存)。为保证数据的正确性,在网络协议中须指定网络字节顺序。TCP/IP协议使用16位整数和32位整数的高价先存格式,它们均含在协议头文件中。连接两个进程间的通信链路称为连接。连接在客户/服务器表现为一些缓冲区和一组协议机制,在外部表现出比无连接高的可靠性。半相关网络中用一个三元组可以在全局唯一标志一个进程:(协议,本地地址,本地端口号)这样一个三元组,叫做一个半相关,它指定连接的每半部分。全相关一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。也就是说,不可能通信的一端用TCP协议,而另一端用UDP协议。因此一个完整的网间通信需要一个五元组来标识:(协议,本地地址,本地端口号,远地地址,远地端口号)这样一个五元组,叫做一个相关(association),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成一连接。2.2服务方式在网络分层结构中,各层之间是严格单向依赖的,各层次的分工和协作集中体现在客户/服务器之间的界面上。“服务”是描述客户/服务器之间关系的抽象概念,即网络中各层向紧邻上层提供的一组操作。下层是服务提供者,上层是请求服务的用户。服务的表现形式是原语(primitive),如系统调用或库函数。系统调用是操作系统内核向网络应用程序或高层协议提供的服务原语。网络中的n层总要向n+1层提供比n-1层更完备的服务,否则n层就没有存在的价值。在OSI的术语中,网络层及其以下各层又称为通信子网,只提供点到点通信,没有程序或进程的概念。而传输层实现的是“端到端”通信,引进网间进程通信概念,同时也要解决差错控制,流量控制,数据排序(报文排序),连接管理等问题,为此提供不同的服务方式:面向连接(虚电路)或无连接面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立连接,使用连接,终止连接的过程。在数据传输过程中,各数据分组不携带目的地址,而使用连接号(connectID)。本质上,连接是一个管道,收发数据不但顺序一致,而且内容相同。TCP协议提供面向连接的虚电路。图2面向连接的客户/服务器模式服务器socket()服务响应服务请求建立连接处理服务请求bind()listen(

1 / 25
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功