应用层网络服务程序简介
一.HTTP协议和服务
1.HTTP协议概述
-
应用层协议HTTP是Web的核心。HTTP协议在Web的客户端程序和服务器程序中得以实现,运行在不同系统上的客户端程序和服务器程序,通过交换HTTP消息彼此交流。HTTP协议定义数据格式,使得服务器和客户端通过协议进行数据交流。
-
Web页面(web page, 也称为文档)是客户端和服务器交流的基本内容,它由多个对象构成。对象(object)是可由URL进行寻址的文件,例如HTML文件、JPG图像、GIF图像、Java小应用程序、语音片段等。
-
Web页面大多数由一个基本HTML文件和很多HTML文件中所引用的对象构成。例如,如果某个Web页面包含1个HTML文本文件和5个PNG图像,这个Web页面就由6个对象构成,即基本HTML文件加5个图像。
-
这个基本的HTML文件使用文件中的内置URL来引用本页面中所使用的其他对象,例如上述的5个PNG图像需要在基本HTML文件中进行URL的引用定义。
一个URL由两部分构成:存放该对象的服务器主机和该对象的录节目。例:
roll.mil.news.sina.com.cn/phototj_slide/146/index.shtml
roll.mil.news.sina.com.cn表示主机名,/phototj_slide/146/index.shtml表示路径名。浏览器是Web的用户代理,它显示所请求的Web页面,并提供大量的导航与配置特性。Web浏览器还实现HTTP的客户端,因此在Web上下文中,可以从进程意义上互换使用"浏览器"和"客户"两词。
2.HTTP协议的基本过程
HTTP协议是基于客户端/服务器之间的请求响应进行交互的。
1.HTTP协议的宏观过程
-
一个客户端与服务器建立连接后,发送一个请求给服务器,请求方式的格式为:统一资源标识符、协议版本号,后边是MIME信息包括请求修饰符、客户端信息和可能的内容。
-
服务器接到客户端的请求后,向客户端发送相应响应信息,其格式为:一个状态行包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
-
在Internet上,HTTP通信通常发生在TCP/IP连接之上。默认端口是TCP协议的80端口,其他端口也是可用的。但这并不是表明HTTP协议在Internet或其他网络的其他协议之上可以完成,HTTP只能在TCP协议的基础之上进行传输。
-
在WWW中,“客户 ”与 “服务器” 是一 个相对的概念,这个概念只在某个连接中有效,某个连接中的客户在另一 个场景中可能是服务器。WWW 服务器运行时,一直在TCP80端口(WWW的默认端口)监听,等待连接请求的出现。
如下图,客户端和服务器之间的HTTP协议访问基本过程:
2.HTTP协议的内部过程
以上是HTTP协议的概要运作方式,下面对HTTP协议的内部操作过程进行详细介绍。
首先,简单介绍基于HTTP协议的客户/服务器模式的信息交换过程,如下图所示,它分4个过程:建立连接、发送请求信息、发送响应信息、关闭连接。
-
建立连接:连接的建立是通过申请**套接字(Socket)**实现的。客户打开 一个套接字并把它绑定在一个端口上,如果成功,就相当于建立了一个虚拟文件。
-
发送请求:打开一个连接后,客户端把请求消息送到服务器的监听端口上,完成提出请求动作。HTTP/1.0请求消息格式如下:
请求行中的方法用于HTTP的动作方式,常用的方法有GET、HEAD和POST。不同的请求对象对应GET的结果是不同的,对应如下:
HEAD方法要求服务器查找对象的元信息,而不是对象本身。
POST方法从客户端向服务器传送数据,POST发送的数据被服务器接收后进行处理。
例:GEThttp://networking.zju.edu.cn/zju/index.htmHTTP/1.0
头信息又称元信息,即信息的信息,利用元信息可以实现有条件的请求或应答。
请求头:告诉服务器怎样解释本次请求,主要包括用户可以接受的数据类型、压缩方法和语言等。
实体头:实体信息类型、长度、压缩方法、最后一次修改时间、数据有效期等。
实体:请求或应答对象本身。 -
发送响应:服务器在处理完客户的请求之后,要向客户端发送响应消息。HTTP/1.0的响应消息格式如下:
响应的信息包括:服务程序名、通知客户请求的URL需要认证、请求的资源何时能使用。 -
关闭连接:客户和服务器双方都可以关闭套接字来结束TCP/IP对话。
二.FTP协议和服务
FTP是一种从一个主机向另一个主机传送文件的协议。
1.FTP协议概述
FTP协议中客户端与服务器进行文件传输的交互方式如下所示,客户端包含用户接口和客户端接口,服务器端为FTP服务器,客户端和服务器都与文件系统进行交互。
1.FTP协议的步骤
如果用户想把远程FTP服务器上的某个文件下载到本地来,需要经过如下几个步骤:
-
首先用户通过FTP接口输入命令,让FTP客户端接口连接远方的FTP服务器主机。
-
连接成功后,远程的FTP服务器主机要求输入合适的用户名和密码,在用户名和密码得到正确的验证后,进入正常的FTP下载过程。
-
与本地的文件系统相似,可以在远程的FTP服务器上进行文件目录的转换,进入合适的目录,进行相关的操作。
-
对目标文件的下载,需要使用FTP协议特定的命令行格式,FTP服务器进行解析后,与客户端之间进行文件传输。
-
文件传输成功后,客户端关闭与服务器之间的FTP连接。
2.FTP是双端口服务器
-
与HTTP协议相同,FTP协议也建立在TCP协议之上,但与HTTP间有很大的差别,最主要的差别是FTP协议使用两个并行的TCP连接来传送文件,一个是控制连接,另一个是数据连接。
-
控制连接用于在客户端和服务器端之间传送控制信息,例如用户名和密码、改变目录、上传或者下载文件的命令等。
-
数据连接用户收发数据的连接信息如下图所示。由于FTP协议的控制信息是由一个单独的TCP 连接来控制,通常将控制信息称为FTP 的带外数据,即控制信息是不包含在FTP协议的数据连接之中的。
-
当FTP的客户端与远程的FTP服务器端启动FTP会话过程的时候,FTP的客户端首先连接FTP服务器的21端口。连接成功后,将登录所用的用户名和登录密码发送给服务器端,登录成功后就可以进行命令交互了。
-
经典的FTP协议客户端将本地的数据端口告诉服务器端,以方便在进行文件上传或者下载的时候服务器连接客户端的数据端口。
-
最新的FTP协议允许客户端连接FTP服务器的20 端口来进行数据的收发。
-
控制数据的交互通过控制连接来传输,而文件数据的传输则通过数据端口。
-
数据连接在本次传输完成后,可能关闭数据连接,到下次的传输发起的时候再次打开,因此数据传输是非持久的,如下图所示。
在整个FTP的会话期间,FTP服务器必须维护连接中的用户状态。也就是说,FTP服务器必须把某个控制连接与某个用户对应起来,对当前用户的状态进行跟踪。这种对用户状态的维护限制了FTP的性能。
2.FTP协议的工作模式
FTP协议的工作模式分为主动模式和被动模式,二者主要区别在于对数据端口的处理方式不同:主动模式在客户端连接后,告诉服务器数据连接的端口;被动模式在客户端连接后,进行数据传输的时候临时连接TCP服务器的20端口,利用此端口进行数据的传输。
1.主动模式
主动模式又叫标准模式、PORT模式。主动模式下FTP协议的客户端和服务器端同时作为TCP连接的客户端和服务器端,FTP客户端建立数据连接的TCP服务器等待FTP服务器端的连接。一个主动模式的FTP连接建立遵循以下步骤。
-
FTP客户端连接FTP服务器端的21端口,建立控制连接。
-
FTP客户端在某个端口建立一 个TCP 服务器,进行侦听等待服务器的数据连接请求。FTP客户端使用PORT命令告诉FTP服务器客户端的命令连接侦听端口。
-
FTP服务器使用20号端口,与FTP客户端的数据连接侦听端口进行连接。
-
传送数据的时候通过FTP协议的客户端与服务器端的端口进行通信。
2.被动模式
-
被动模式又称为PASV模式。
-
被动模式下建立命令通道的方式与主动方式相同,但是命令通道建立成功后,FTP客户端不发送port命令,而是发送pasv命令。
-
FTP服务器接收到此命令后,在高端口上随机选取一个端口并将端口号告诉客户端,客户端在这个端口上与服务器端进行数据的传输。
-
由于防火墙可能对没有开放的端口进行拦截,所以很多防火墙后的FTP服务器和客户端不能正常地通过主动模式或者被动模式进行数据传输,造成FTP协议不能正常工作,这通常要采用模式的转换,将主动模式和被动模式进行调整。
3.FTP协议的传输方式
FTP协议有两种传输方式:ASCII传输模式和二进制数据传输模式,二者的区别在于对数据是否进行了解释。
1.ASCII传输方式
-
如果在远程机器上运行的不是UNIX, 当文件传输时FTP通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
-
但有时用户正在传输的文件包含的不是文本文件,它们可能是程序、数据库、字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸、字库等信息的非打印字符)。
-
在复制任何非文本文件之前,用binary命令告诉FTP逐字复制,不要对这些文件进行处理,这也是下面要讲的二进制传输。
2.二进制传输模式
-
二进制传输中,数据中保存文件的位序,这样原始的数据和复制的数据是逐位一一对应的,而对数据内容本身不进行判断。
-
例如,Linux操作系统以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果在ASCII方式下传输二进制文件,必须对内容进行转译。这会使传输稍微变慢,也会损坏数据,使文件变得不能用(在大多数计算机上,ASCII方式设每一 字符的第一 有效位无意义,因为A SCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的)。
-
如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。
4.一个简单的FTP过程
在主机192.168.1.150上使用Xlight FTP建立一个FTP服务器,站点上仅有一个test.txt文件,在FTP服务器上建立用户名和密码均为test的用户账号,使用此账号登录FTP服务器下载文件过程:
5.常用的FTP工具
在Linux下常用的FTP客户端有FTP命令行工具,可以方便地使用命令行进行FTP交互。在Linux操作系统下经常使用的还有一个图形界面的FTP 客户端工具 gftp。Linux操作系统下的服务器端经常使用的有vsftp和wuftp,目前使用vsftp的人员占多数,读者可以查阅相关的资料配置自己的FTP站点。
三.TELNET协议和服务
TELNET协议为远程登录协议之一,使用TELNET协议可以在本机上登录到远程的计算机上进行一些操作。
1.远程登录的基本概念
-
分时操作系统允许多个用户同时使用一台计算机。
-
为了保证系统的安全和记账方便,系统要求每个用户有单独的账号作为登录标识,系统还为每个用户指定了一 个口令。
-
用户在使用该系统之前要输入标识和口令,这个过程被称为 “登录”。
-
远程登录是指用户使用telnet命令,使自己的计算机暂时成为远程主机的 一 个仿真终端的过程。
2.使用TELNET协议进行远程登录的工作过程
使用TELNET协议进行远程登录时需要满足以下条件:首先在本机装有包含TELNET协议的客户程序,知道远程主机的IP地址或者域名,要能正常登录必须知道登录的用户名和口令。TELNET远程登录服务分为以下4个过程:
-
本地主机与远程主机建立连接。这个建立过程实际上是建立一个TCP 连接,用户必须知道远程主机的IP地址或域名。
-
将本地终端上输入的用户名和口令,以及以后输入的任何命令或字符以**NVT (Net Virtual Tenninal)**格式传送到远程主机。该过程实际上是从本地主机向远程主机发送一个IP数据报。
-
将远程主机输出的数据转化为本地所接受的格式送回本地终端,包括输入命令回显和命令执行结果。
3.TELNET协议
TELNET协议服务器软件是最常用的远程登录服务器软件,它是一 种典型的客户端/服务器模型的服务,使用TELNET协议来工作。
1.基本内容
TELNET协议是TCP/IP协议族中的 一 种,是Internet远程登录服务的标准协议。使用TELNET协议能够把本地用户所使用的计算机变成远程主机系统的 一 个终端。它提供了3种基本服务。
-
TELNET定义 一 个网络虚拟终端为远地系统提供一个标准接口。客户端程序不必详细了解远地系统,只需构造使用标准接口的程序。
-
TELNET包括一个允许客户端和服务器协商选项的机制,而且它还提供一组标准选项。
-
TELNET对称处理连接的两端,即TELNET不强迫客户端从键盘输入,也不强迫客户端在屏幕上显示输出。
2.异构网络适应
-
为了使得多种操作系统间的TELNET交互操作能够正常进行,TELNET协议定义了 一些统一 的网络传输格式和命令。
-
例如,某些操作系统中需要每行文本用 ASCII 回车控制符(CR ) 结束,另一些系统则需要使用ASCII换行符(LF)作为 一 行的结束标志,还有一 些系统需要用两个字符的序列回车换行(CRLF)作为结束标记。
-
大多数操作系统提供了一个中断当前程序运行的快捷键,但这个快捷键在各个系统中有可能不同( 一 些系统使用Ctrl+C , 而另一 些系统使用Esc键)。
-
如果不考虑多种操作系统之间的差异和异构性,就会发生在某个操作系统本地发出的字符或者命令,传送到远程主机后不能正常解析的情况。
TELNET协议定义了数据和命令在Internet上的传输方式,即网络虚拟终端NVT (Net Virtual Terminal)。它的应用过程如下所述:
-
对于发送的数据:客户端软件把来自用户终端的按键和命令序列转换为NVT格式,并发送到服务器,服务器软件将收到的数据和命令,从NVT格式转换为远地系统需要的格式。
-
对于返回的数据:远程服务器将数据格式转换为NVT格式,而本地客户端将接收到的NVT格式数据再转换为本地的格式。
3.传送远地命令
-
大多数的操作系统都实现各种控制命令的各种快捷键操作,当登录的用户在本地终端输入这些快捷键的时候,本地系统将执行对应的本地控制命令,而不把这些快捷键作为输入。
-
TELNET协议使用NVT来定义客户端的快捷键并将控制功能传送到服务器。
-
当用户从本地输入普通字符时,NVT将按照其原始含义传送;
-
当用户输入快捷键或者组合键的时候,NVT把输入的键值转化为特殊的ASCII字符在网络上传送,并在其到达服务器后转化为相应的控制命令。
4.数据流向
-
TELNET应用软件有一个缺点,它的效率不高。主要是其中的数据流向造成的。
-
数据信息被用户从本地键盘输入并通过操作系统传到客户端程序,客户端程序将其处理后返回操作系统,并由操作系统经过网络传送到服务器,服务器的操作系统将所接收的数据传给服务器程序,并经服务器程序再次处理后返回到操作系统上的终端入口点,最后,服务器操作系统将数据传送到用户正在运行的应用程序,这便是一 次完整的输入过程;
-
输出将按照同一 通路从服务器传送到客户端。
-
因为每一次输入和输出时,计算机将切换进程环境好几次,这个开销是很昂贵的。由于用户按键的速率并不高,所以响应速度一 般来说仍然可以接受。
四.NFS协议和服务
NFS协议是文件共享的协议,它可以使得主机之间进行文件的共享。客户端可以像在本机上的文件一 样操作远程主机的文件。N FS 协议最初仅支持 UDP 协议,目前最新版本的NFS可以支持UDP或者TCP协议,不过UDP协议的速度会更快。
1.安装NFS服务器和客户端
-
NFS协议是一个十分简单的协议,它本身没有提供信息传输的协议和功能。之所以NFS能够让主机之间通过网络进行资料共享,这是因为NFS使用了一些其他传输的协议,主要用到了**RPC (Remote Procedure Call)**功能。所以在启动NFS服务器的时候需要启动RPC服务。
-
在Ubuntu下进行NFS服务器的安装有两个版本可供选择,nfs-kemel-server和nfs-user-server。二者之间的差别于前者是在内核层实现的,速度快,后者的速度相对慢。
-
安装NFS服务还需要安装nfs-common, 当然,Ubuntu会自动提示软件之间的依赖关系进行安装。
2.服务器端的设定
要使安装的服务器程序能够正常工作,主要的工作是对服务器的配置文件进行编辑。这个配置文件是etc/exports, 这个文件中的格式如下:
上面这个格式表示,将同一 个目录共享给两个不同的主机,但这两台主机的访问权限和参数是不同的,所以需设置两个主机对应的权限。可以设定的参数如下图所示:
编辑**/etc/exports**为如下内容,将/tmp目录共享为任何人可以共享并共享可以进行读写操作:/home/test目录192.168.1子网下的的主机进行读写,其他主机只读。
/tmp *(rw,no_root_squash)
/home/test 192.168.1.*(rw) *(ro)
配置好后可以使用如下命令启动NFS:
/etc/inti.d/nfs-kernel-server start
3.客户端的操作
客户端挂载服务器上共享的NFS目录,使用mount命令,格式如下:
mount -t nfs 主机名或者主机IP地址:/共享目录名 挂载的本机目录
例:对上面的服务器的设置,使用如下命令将home/test目录挂载到本机的**/mnt/nfs**目录下:
mount -t nfs 192.168.1.153:/home/test /mnt/nfs
挂载之后,由于本机服务器在同一个网段上,可以像操作本机目录中的文件一样进行操作。
注:服务器开启之后,可能客户端不能正常挂载服务器已经共享出来的目录,一般是由于Liunx防火墙开启,可以将防火墙关闭,清空命令:
iptables -F
4.showmount命令
在NFS相关的命令中showmount命令是经常使用的命令。它主要有两个命令选项:
- -a:一般在NFS SERVER上使用,用来显示已经挂载上本机nfs目录的客户端机器列表。
- -e:显示指定的NFS SERVER上export出来的目录。
五.自定义网络服务
下面将对用户配置自己的网络服务进行简单的介绍,通过内容的学习,用户可以配置简单的网络服务程序。
1.xinetd/inetd
-
在Linux操作系统中, 一 些小的服务程序或者不经常使用的服务程序,被集成到一 个服务器管理程序中,通常是inetd, 目前一 般使用 xinetd。
-
xinetd (eXtended InterNET services daemon), 也叫做扩展因特网驻留程序。
-
它是一种控制因特网服务的应用程序,例如常用的TELNET服务、FTP服务和POP等服务程序通常都集成在这个服务器中。
检查系统中是否已经安装了xinetd 服务程序,可以使用如下命令:
ps ax|grep xinetd
2.xinetd服务配置
xinetd默认配置路径是**/etc/xinetd.conf**,查看会发现,它将/etc/xinetd.d目录量的文件包含起来:
includedir /etc/xinetd.d
在/etc/xinetd.d目录下中有很多默认的配置文件,查看time服务配置文件:
服务time是一个时间服务,用于向客户端提供网络时间校准。对于一个服务xinetd的描述类型,按照如下格式进行定义:
server 服务名称
{
选项 = 值
选项 += 值
...
}
-
server是必需关键字,"服务器名称"要描述的服务名字。之后属性用大括号括起,其中每一项都定义了由server-name定义的服务。
-
服务名称是任意的,通常是标准网络服务名,也可增加其他非标准的服务。
-
选项的操作符可以是=、+=、或 -=。所有属性可以使用=,其作用是分配一个或多个值,某些属性可以使用 "+= " 或 "-= " 的形式,它的作用是将其值增加到某个表中,或将其值从某个表中删除。
xinetd的指示符如下表所示:
3.自定义网络服务
以vsftpd为例进行自定义网络服务的设置,首先安装vsftpd服务程序,使用命令apt-get install vsftpd进行安装:
以root身份在**/etc/xinetd.d/目录中编辑文本proftpd**,内容如下:
-
第1和第2行是注释行。
-
第3行是定义服务的名称为vsftpd。
-
第5行disable表示禁用,那么,disable=no就是启动。
-
第6行是指定该服务的端口,ftp的端口是21。如果不用21端口,可以根据vsftpd.conf文件做相应的改变。
-
第7行socket的类型,这里设为stream(流)。
-
第8行是指定协议,这里设为tcp协议。
-
第9行是启动该服务的用户,设为root。
-
第10行是指定运行文件的路径。
-
第12行是不等待至启动完成。
编译运行:
killall -HUP xinetd
然后使用ftp localhost登录进行测试,发现FTP程序已经登录。