图 新手入门:了解网络应用与网络协议( 二 )


客户和服务器
一个网络应用协议通常拥有客户端(client side)和服务器端(server side)这两个对等的“端”或实体,它们分别对应运行客户程序的客户进程(简称客户)和运行服务器程序的服务器进程(简称服务器),如图2所示 。处于一个端系统中的客户端与处于另一个端系统中的服务器端彼此通信 。例如,web浏览器实现的是HTTP客户端,web服务器实现的是HTTP服务器端 。在电子邮件应用中,发送邮件消息的邮件服务器扮演SMIP的客户端角色,接收邮件消息的邮件服务器扮演SMTP的服务器端角色 。
 
图2:客户/服务器交互
对于许多应用来说,它们的客户端和服务器端可以同时实现在单台主机上 。就以主机A和主机B之间的一个Telnet会话为例 。假如这个Telnet会话是由主机A发起的(即主机A上有一个用户登录到了主机B),那么主机A运行的是该应用的客户端,主机B运行的是该应用的服务器端 。相反,假如这个Telnet会话是由主机B发起的,那么主机B运行的是该应用的客户端 。用于在两台主机之间传送文件的FTP提供了另外一个例子 。两台主机之间一旦启动一个FTP会话,其中任何一台主机就可以在该会话结束之前向另一台主机传达文件 。尽管如此,我们还是按照几乎所有网络应用的惯常情况,把发起会话的主机标为客户 。另外,单台主机实际上可能同时作为某个给定应用的客户主机和服务器主机 。例如,邮件服务器主机同时运行着SMlP客户端(用于发送邮件)和服务器端(用于接收邮件) 。
进程间跨网络的通信
一个网络应用涉及两台不同主机中跨网络彼此通信的两个进程(当然,组播网络应用有可能涉及两台以上主机间的通信) 。这两个进程通过经由各自的套接字(socket)发送和接收消息彼此通信 。我们可以把套接字看作相应进程上的“门”:进程把消息发送到网络或从网络接收消息都得经过自身的套接字 。当一个进程想给另一台主机中的另一个进程发送消息时,它就把该消息推出自家的门 。该进程认定在这扇门的另一侧有一个传输设施会把这个消息传输到目的进程的门口 。
图3展示了通过因特网彼此通信的两个进程间的套接字通信(本图假设底层的传输协议是TCP,不过UDP也可以同样使用) 。可见套接字是单台主机内应用层和传输层之间的接口 。套接字也用于指代应用程序和网络之间的应用程序接口(application program interface,简称API),因为它又是用于构造因特网中的网络应用程序的编程接口 。应用程序开发人员可以完全控制套接字的应用层一侧,对于套接字的传输层一侧却几乎无能为力 。对于传输层一侧他们只能控制:(1)传输协议的选择;(2)诸如最大缓冲区大小和最大片段大小等有限几个传输层参数的调整 。一旦选定某个可用的传输协议,就使用由该协议提供的传输层服务来构造应用程序 。
 
图3:应用程序进程、套接字
进程寻址
要让一台主机中的进程给另一台主机中的进程发送消息,发送进程必须能够识别接收进程 。用于标识接收进程的信息有两个:(1)接收主机的主机名或主机地址,(2)在接收主机内部识别接收进程的标识符 。
让我们先考虑主机地址 。在因特网应用中,接收主机是用其IP地址(1P addresse)标识的 。现在,我们知道IP地址是惟一标识每个端系统的一个32位二进制数值(更准确地说,IP地址惟一地标识将各台主机连接到因特网的网络接口),既然连接到公共因特网的任何端系统的IP地址必须全球惟一,IP地址的分配就必须仔细治理 。ATM网络的寻址标准则不同于因特网 。ITU—T已规定,在公共ATM网络中使用称为E.164地址(ITU1997)的类似电话号码的地址 。