网络编程实用教程第1章网络编程基础本章介绍网络编程相关的基本概念,包括进程通信的概念因特网中网间进程的标识方法网络协议的特征TCP/IP中用户数据报协议UDP和传输控制协议TCP的特点目前的网络编程现状网络应用程序的客户/服务器交互模式1.1网络编程相关的基本概念1.1.1网络编程与进程通信1.进程与线程的基本概念进程是处于运行过程中的程序实例,是操作系统调度和分配资源的基本单位。一个进程实体由程序代码、数据和进程控制块三部分构成。各种计算机应用程序在运行时,都以进程的形式存在。网络应用程序也不例外。Windows系统不但支持多进程,还支持多线程。当创建一个进程时,系统会自动创建它的第一个线程,称为主线程。然后,该线程可以创建其他的线程,而这些线程又能创建更多的线程。图1.1单CPU分时地运行进程中的各个线程2.网络应用进程在网络体系结构中的位置从计算机网络体系结构的角度来看,网络应用进程处于网络层次结构的最上层。从功能上,可以将网络应用程序分为两部分,一部分是专门负责网络通信的模块,它们与网络协议栈相连接,借助网络协议栈提供的服务完成网络上数据信息的交换。另一部分是面向用户或者作其他处理的模块,它们接收用户的命令,或者对借助网络传输过来的数据进行加工,这两部分模块相互配合,来实现网络应用程序的功能。图1.2网络应用程序在网络体系结构中的位置网络应用程序最终要实现网络资源的共享,共享的基础就是必须能够通过网络轻松地传递各种信息。网络编程首先要解决网间进程通信的问题。然后才能在通信的基础上开发各种应用功能。3.实现网间进程通信必须解决的问题网间进程通信是指网络中不同主机中的应用进程之间的相互通信问题,网间进程通信必须解决以下问题:(1)网间进程的标识问题(2)如何与网络协议栈连接的问题(3)多重协议的识别问题(4)不同的通信服务的问题1.传输层在网络通信中的地位图1.3说明了基于TCP/IP协议栈的进程之间的通信的情况。图1.3网络应用程序在网络体系结构中的位置1.1.2因特网中网间进程的标识按照OSI七层协议的描述,传输层与网络层在功能上的最大区别是传输层提供进程通信的能力。TCP/IP协议提出了传输层协议端口(protocolport,简称端口)的概念,成功地解决了通信进程的标识问题。传输层是计算机网络中,通信主机内部进行独立操作的第一层,是支持端到端的进程通信的关键的一层。2.端口的概念端口是TCP/IP协议族中,应用层进程与传输层协议实体间的通信接口类似于文件描述符,每个端口都拥有一个叫作端口号(portnumber)的整数型标识符从实现的角度讲,端口是一种抽象的软件机制,包括一些数据结构和I/O缓冲区。图1.4UDP与TCP的报文格式3.端口号的分配机制TCP/IP协议采用了全局分配(静态分配)和本地分配(动态分配)相结合的分配方法。对于TCP,或者UDP,将它们的全部65535个端口号分为保留端口号和自由端口号两部分。保留端口的范围是0—1023,又称为众所周知的端口或熟知端口(well-knownport),只占少数,采用全局分配或集中控制的方式,由一个公认的中央机构根据需要进行统一分配,静态地分配给因特网上著名的众所周知的服务器进程,并将结果公布于众。表1.1一些典型的应用层协议分配到的保留端口TCP的保留端口UDP的保留端口FTP21DNS53HTTP80TFTP69SMTP25SNMP161POP3110……其余的端口号,1024-65535,称为自由端口号,采用本地分配,又称为动态分配的方法。总之,TCP或UDP端口的分配规则是:端口0:不使用,或者作为特殊的使用;端口1-255:保留给特定的服务,TCP和UDP均规定,小于256的端口号才能分配给网上著名的服务;端口256-1023:保留给其他的服务,如路由;端口1024-4999:可以用作任意客户的端口;端口5000-65535:可以用作用户的服务器端口。我们可以描述一下,在这样的端口分配机制下,客户进程C与服务器进程S第一次通信的情景。图1.5表示了客户与服务器第一次通信的情况。图1.5客户与服务器的第一次通信4.进程的网络地址的概念在因特网络中,用一个三元组可以在全局中唯一地标识一个应用层进程:应用层进程地址=(传输层协议,主机的IP地址,传输层的端口号)这样一个三元组,叫做一个半相关(half-association),它标识了因特网中,进程间通信的一个端点,也把它称为进程的网络地址。5.网络中进程通信的标识一个完整的网间通信需要一个五元组在全局中唯一地来标识:(传输层协议,本地机IP地址,本地机传输层端口,远地机IP地址,远地机传输层端口)这个五元组称为一个全相关(association)。即两个协议相同的半相关才能组合成一个合适的全相关,或完全指定一对网间通信的进程。1.面向消息的协议与基于流的协议(1)面向消息的协议面向消息的协议以消息为单位在网上传送数据,在发送端,消息一条一条地发送,在接收端,也只能一条一条地接收,每一条消息是独立的,消息之间存在着边界。1.1.3网络协议的特征图1.6保护消息边界的数据报传输服务(2)基于流的协议基于流的协议不保护消息边界,将数据当作字节流连续地传输,不管实际消息边界是否存在。图1.7无消息边界的流传输服务2.面向连接的服务和无连接的服务一个协议可以提供面向连接的服务,或者提供无连接的服务。面向连接服务是电话系统服务模式的抽象,即每一次完整的数据传输都要经过建立连接,使用连接,终止连接的过程。无连接服务是邮政系统服务的抽象,每个分组都携带完整的目的地址,各分组在系统中独立传送。3.可靠性和次序性可靠性保证了发送端发出的每个字节都能到达既定的接收端,不出错,不丢失,不重复,保证数据的完整性,称为保证投递。次序性是指对数据到达接收端的顺序进行处理。保护次序性的协议保证接收端收到数据的顺序就是数据的发送顺序,称为按序递交。1.1.4高效的用户数据报协议UDP传输层的用户数据报协议(UserDatagramProtocol,UDP)是一种尽力传送的无连接的不保障可靠的传输服务,是一种保护消息边界的数据的传输。1.1.5可靠的传输控制协议TCP1.可靠性是很多应用的基础2.TCP为应用层提供的服务传输控制协议(TransmissionControlProtocol,TCP)应用层进程提供一个面向连接的、端到端的、完全可靠的(无差错、无丢失、无重复或失序)全双工的流传输服务。3.TCP利用IP数据报实现了端对端的传输服务TCP被称作一种端对端(endtoend)协议,这是因为它提供一个直接从一台计算机上的应用进程到另一远程计算机上的应用进程的连接。应用进程能请求TCP构造一个连接,通过这个连接发送和接收数据,以及关闭连接。由TCP提供的连接叫做虚连接(virtualconnection),虚连接是由软件实现的。事实上,底层的因特网系统并不对连接提供硬件或软件支持,只是两台机器上的TCP软件模块通过交换消息来实现连接的幻象。图1.8TCP是一个端到端的传输协议4.三次握手为确保连接的建立和终止都是可靠的,TCP使用三次握手(3-wayhandshake)的方式来建立连接,图1.9TCP的三次握手过程1.2.1基于TCP/IP协议栈的网络编程基于TCP/IP协议栈的网络编程是最基本的网络编程方式,主要是使用各种编程语言,利用操作系统提供的套接字网络编程接口,直接开发各种网络应用程序。本书主要讲解这种网络编程的相关技术。1.2三类网络编程1.2.2基于应用的网络编程应用是因特网上最广泛的应用,称为万维网基于应用的网络编程技术,包括所见即所得的网页制作工具,和动态服务器页面的制作技术。1.2.3基于.NET框架的WebServices网络编程1.关于.NET平台微软公司在2000年7月公布的.NET平台是一个全新的开发框架,集成了微软二十世纪九十年代后期的许多技术,(1).NET平台有四组产品①开发工具:②专用服务器③Web服务。④设备:(2)MS.NET顺应了软件工业的趋势,包括以下几个方面:①分布式计算:②组件化:③企业级别的服务:④WEB范型转移:(3).NET平台由三层软件构成①顶层是全新的开发工具VS.NET,②中间层包括三部分:.NET服务器、.NET服务构件和.NET框架。③底层是WINDOWS操作系统。(4).NET框架的设计要支持的目标①简化组件的使用:②实现语言的集成:③支持Internet的互操作:④简化软件的开发:⑤简化组件的部署:⑥提高可靠性:⑦提高安全性:2.关于Web服务什么是Web服务?Web服务是松散耦合的可复用的软件模块,在Internet上发布后,能通过标准的Internet协议在程序中访问,具有以下的特点:(1)可复用:(2)松散耦合:(3)封装了离散:(4)Web服务可以在程序中访问(5)Web服务在Internet上发布本节着重于因特网上的高级服务,以及提供这些服务的应用软件。讨论网络应用软件的客户/服务器交互模式,并说明网络协议操作的方式为什么需要这种模式。这是构筑所有网络应用的基础。1.3客户/服务器交互模式1.3.1网络应用软件的地位和功能因特网仅仅提供一个通用的通信构架,它只负责传送信息,而对于信息传过去干什么用,利用因特网究竟提供什么服务,由哪些计算机来运行这些服务,如何确定服务的存在,如何使用这些服务等等问题,都要由应用软件和用户解决。网络应用进程通信时,普遍采用客户/服务器交互模式(client-serverparadigmofinteraction),简称C/S模式。这是因特网上应用程序最常用的通信模式。1.3.2客户/服务器模式C/S模式过程中服务器处于被动服务的地位。首先服务器方要先启动,并根据客户请求提供相应服务,服务器的工作过程是:(1)打开一通信通道,并告知服务器所在的主机,它愿意在某一公认的地址上(熟知知端口,如FTP为21)接收客户请求。(2)等待客户的请求到达该端口。(3)服务器接收到服务请求,处理该请求并发送应答信号。为了能并发地接收多个客户的服务请求,要激活一个新进程或新线程来处理这个客户请求(如UNIX系统中用fork、exec)。服务完成后,关闭此新进程与客户的通信链路,并终止。(4)返回第二步,等待并处理另一客户请求。(5)在特定的情况下,关闭服务器。客户方采取的是主动请求方式,其工作过程是:(1)打开一通信通道,并连接到服务器所在主机的特定监听端口。(2)向服务器发送请求报文,等待并接收应答;继续提出请求,与服务器的会话按照应用协议进行。(3)请求结束后,关闭通信通道并终止。表1.2一些著名的网络应用网络应用客户端软件服务器软件应用层协议电子邮件foxmail电子邮件服务器SMTP、Pop3文件传输cutFTP文件传输服务器FTP客户软件和服务器软件通常还具有以下一些主要特点:1.客户软件(1)在进行网络通信时临时成为客户,但它也可在本地进行其他的计算。(2)被用户调用,只为一个会话运行。在打算通信时主动向远地服务器发起通信。1.3.3客户与服务器的特性(3)能访问所需的多种服务,但在某一时刻只能与一个远程服务器进行主动通信。(4)主动地启动与服务器的通信。(5)在用户的计算机上运行,不需要特殊的硬件和很复杂的操作系统。2.服务器软件(1)是一种专门用来提供某种服务的程序,可同时处理多个远地客户的请求。(2)当系统启动时即自动调用,并且连续运行着,不断地为多个会话服务。(3)接受来自任何客户的通信请求,但只提供一种服务。(4)被动地等待并接受来自多个远端客户的通信请求。(5)在共享计算机上运行,一般需要强大的硬件和高级的操作系统支持。(1)客户和服务器都是软件进程,C/S模式是网络上通过进程通信建立分布式应用的常用模型。(2)非对称性:服务器通过网络提供服务,客户通过网络使用服务,这