前言
本篇篇幅较长,请耐心或者选择性阅读。
第八章 应用协议
从本篇开始,将介绍一些应用层协议,一般情况下,人们不太会在意网络应用程序实际上是按照何种机制正常运行的。本章旨在介绍TCP/IP中所使用的几个主要应用协议,多处于OSI模型的第五层以上。
8.1 应用层协议概要
本章开始所要介绍的应用协议主要是指OSI参考模型中第五层、第六层、第七层上半部分的协议。
利用网络的应用程序有很多,包括Web浏览器、电子邮件、远程登录、文件传输、网络管理等。能够让这些应用进行特定通信处理的正是应用协议。
TCP和IP等下层协议不依赖于上层应用类型、适用性非常广的协议。而用应协议则是为了实现某种应用而设计和创造的协议。例如,远程登录等应用经常使用的TELNET
协议,它的支持基于文字的命令与应答,通过命令可以执行各种各样的其他应用。
网络应用由不同的用户和软件供应商开发而成。为了实现网络应用的功能,在应用之间进行通信时将其连接的网络协议是非常重要的。设计师和开发人员根据开发模块的功能和目的,可以利用现有的应用协议,也可以自己定义一个新的应用协议。
应用可以直接享用传输层以下的基础部分,因为开发者只需要关心选用哪种应用协议、如何开发即可,而不必担心应用中的数据该以何种方式发送到目标主机等问题。这也是得益于网络层。
TCP/IP的应用层涵盖了7层网络模型第5、6、7层的所有功能,不仅包含了管理通信连接的会话层功能、转换数据格式的表示层功能,还包括与对端主机交互的应用层功能在内的所有功能。
8.2 远程登录
远程登录是为了实现TSS(Time Sharing System,分时系统)
环境,是将主机和终端的关系应用到计算机网络上的一个结果。TSS中通常有一个处理能力非常强的主机,围绕该主机的是处理能力没有那么强的多个终端机器,这些终端通过专线与主机相连。
远程登录主要使用的是TELNET
和SSH(Secure SHell)
两种协议。
TELNET利用TCP的一条连接,通过该连接向主机发送文字命令并在主机上执行。本地用户好像直接与远端主机内部的Shell(值操作系统提供给用户的、便于使用该系统中各种功能的一种用户接口,可以解释用户从键盘或鼠标输入的内容,并让操作系统执行。UNIX中的sh、csh、bash,Windows中的Expolorer,MAC OS中的Finder等都属于该范畴)相连着似的,可以直接在本地操作。
TELNET可以分为两类基本服务。一是在仿真终端功能,二是协商选项机制。
TELNET常用于登录路由器或高性能交换机等网络设备进行相应的设置。通过TELNET登陆主机或路由器等设备时需要将自己的登录用户名和密码祖册到服务端。
TELNET中除了处理用户所输入的文字外,还提供选项的交互和协商功能。例如,为实现仿真终端(NVT,Network Virtual Terminal)
所用到的界面控制信息就是通过选项功能发送出去的。如下图所示,TELNET中的行模式或透明模式两种模式的设置,也是通过TELNET客户端与TELNET服务端之间的选项功能进行设置的。
书中还特意介绍了一下TELNET客户端,其就是利用TELNET协议实现远程登录的客户端程序。很多情况下,它的程序名就是telnet命令。
通常TELNET可坏蛋通常与目标主机的23号端口建立连接,并于监听这个端口的服务器端程序telnetd进行交互。当然,也可以与其他TCP端口号连接,只要在该端口上邮件听程序能够处理telnet请求即可。在一般的telnet命令中可以按照如下格式指定端口号:
telnet主机名 TCP端口号
TCP端口号=21时可以连接到FTP应用,=25时可以连接到SMTP,=80时可以连接到HTTP,=110时可以连接到POP3。如此看来,每个服务器都有相应的端口号在等待连接。
因此,以下两个命令可以视为相同:
ftp 主机名
telnet 主机名 21
鉴于以上提到的这些协议的命令和应答都是字符串,因此通过TELNET客户端连接以后可以直接输入这些协议的具体命令。TELNET客户端也可用于跟踪TCP/IP应用开发阶段的问题诊断。
SSH是加密的远程登录系统,TELNET中登录时无需输入密码就可以发哦是哪个,容易造成通信窃听和非法入侵的危险。使用SSH后可以加密通信内容,即使信息被窃听也无法破解所发送的密码、具体命令以及命令返回的结果是什么。
SSH还包括很多非常方便的功能:
- 可以使用更强的认证机制
- 可以转发文件(UNIX中可以使用scp、sftp等命令)
- 可以使用端口转发功能(X Window System串口展现)
端口转发是指将特定端口号所收到的消息转发到特定的IP地址和端口号码的一种机制。由于经过SSH连接的那部分内容被加密,确保了信息安全,提供了更为灵活的通信(可以实现虚拟专用网(VPN,Virtual Private Network)).
8.3 文件传输
FTP(File Transfer Protocol,文件传输协议)
是在两个相连的计算机之间进行文件传输时使用的协议。FTP也需要在登录到对方的计算机后才能进行相应的操作。
互联网中有一种FTP服务器允许任何人进行访问,叫做匿名服务器(anonymous ftp)
,登录这些服务器是使用匿名或ftp都可以。
那么FTP是如何工作的呢?
FTP使用两条TCP连接,一条用于控制,另一条用于数据(文件)的传输。
用于控制的TCP连接主要在FTP的控制部分应用。例如登陆用户名和密码的验证、发送文件的名称、发送方式的设置。利用该连接可以通过ASCII码字符串发送请求和接收应答(请求和应答的条目在书中用两个表进行了介绍,鉴于篇幅内容,此处就不再放入两个表格,有兴趣者可以自行查阅)。控制用连接占用的是TCP21号端口,在该端口上进行文件GET(RETR)、PUT(STOR)以及文件一览(LIST)等操作时,每次都会建立一个用于数据传输的TCP连接,文件一览表也是在这个新建的连接上进行。当数据传送完毕之后,传输数据的这条连接也会被断开,然后会在控制用的连接上继续进行命令或应答的处理。
通常,用于数据传输的TCP连接是按照与控制用的连接相反的方向建立的。因此,在通过NAT连接外部FTP服务器的时候,无法直接建立传输数据时使用的TCP连接。此时,必须使用PASV命令修改建立连接的方向才行。
而控制用的连接,在用户要求断开之前会一直保持连接状态,不过绝大多数FTP服务器都会对长时间没有任何新命令输入的用户连接强制断开。
数据传输用的TCP连接通常使用端口20,也可以用PORT命令修改为其他值,出于安全考虑,普遍在数据传输用的端口号中使用随机数进行分配。
FTP中,请求命令使用“RETR”等ASCII码字符串,针对这些命令的应答则使用如“200”等3位数字的ASCII码字符串。TCP/IP的应用协议中有很多使用这种ASCII码字符串的协议。
对于ASCII码字符串型协议来说,换行具有重要意义。很多情况下,一行字符串表示一个命令或一个应答,而空白则用来表示与参数之间的分隔符。即,命令和应答的消息通过换行区分、参数用空格区分。换行由“CR”(ASCII十进制数为13)和“LF”(ASCII十进制数为10)两个控制符号组成。
8.4 电子邮件
电子邮件发送距离不受限,在日常生活中的使用频率不输于聊天软件。电子邮件也支持邮件组的服务,指可以向该组内的所有用户同时发送邮件的功能。
提供电子邮件服务的协议叫做SMTP(Simple Mail Transfer Protocol)
。为了实现高效发送邮件内容,其在传输层使用了TCP协议。
早期电子邮件是在发送端主机与接收端主机之间直接建立TCP连接进行邮件传输,发送人写好邮件后,内容会保存在发送端主机的硬盘中。然后与对端主机建立TCP连接,将邮件发送到对端主机的硬盘。当发送正常结束后,再从本地硬盘中删除邮件。如果发送过程中发现对端计算机因没有插电等原因没有收到邮件,发送端将等待一定时间后重发。这种方法看起来可靠性非常高。但是,互利网应用逐渐变得越发复杂,这种机制也将无法正常工作。例如,使用者的计算机事儿开机时而关机的情况下,只有连对端都处于开机状态才可能实现电子邮件的收发。下图就展示了早期电子邮件的发送过程。
为了解决该问题,在技术上改变了以往直接在发送端和接收端主机之间建立TCP连接的机制,而引进了一种一直会连接电源的邮件服务器(相当于网关),发送端与接收端之间通过邮件服务器进行收发邮件,接收端从邮件服务器接收邮件时使用POP3(Post Office Protocol 3,邮局协议第3版)
。
我们都知道,使用电子邮件需要邮件地址,我们也很熟悉,通常邮件地址格式为:
名称@通信地址(包括邮件域名)
现在电子邮件的发送地址由DNS进行管理。DNS中注册有邮件地址,及其作为发送地址时对应的邮件服务器的域名,这些映射信息被称作为MX记录
。
在很长的一段时间内,互联网中的电子邮件只能处理文本格式的邮件。不过现在,电子邮件所能发送的数据类型已被扩展到MIME(Multiproce Internet Mail Extensions,广泛应用于互联网并极大的扩展了数据格式,还可以用于WWW和NetNews中)
,可以发送静态图像、动画、声音、程序等各种形式的数据。MIME规定了应用消息的格式,因此在OSI参考模型中相当于第六层表示层。
MIME基本上由首部和正文(数据)两部分组成。首部不能是空行,一旦出现空行,其后的部分将被视为正文数据。如果MIME首部的“Content-Type”中指定“Multipart/Mixed”,并以“boundary=”后面字符作为分隔符(开头一定要写“–”,间隔符后面也一定要写“–”),那么可以将多个MIME消息组合成为一个MIME消息。这就叫做multipart
,即各个部分都由MIME首部和正文数据组成。
内容类型“Content-Type”定义了紧随收不信息的数据类型,以IP首部为例,其就类似于协议字段。下表中列出了具有代表性的“Content-Type”。
下图则是MIME的举例:
SMTP(Simple Mail Transfer Protocol),发送电子邮件的协议,建立在FTP协议之上,使用TCP的25号端口。其建立一个TCP连接之后,在这个连接上进行控制和应答以及数据的发送。客户端以文本的形式发出请求,服务端返回一个3位数字的应答。下图为SMTP协议工作的流程:
SMTP以".“作为邮件正文的结束符,如果正文的行首有”.“,就会在之后追加一个”."。
接收邮件时如何行首出现两个"."字符,则删除其中一个。
需记,每个指令和应答的最后都必须追加换行指令(CR、LF)。
下表列出了SMTP中的一些主要命令:
另外需要提到的一点是,随着电子邮件的普及,广告邮件与钓鱼链接的垃圾邮件日益严重。由于SMTP本身没有验证发送者的功能,通过"POP before SMTP"或者"SMTP认证(SMTP Authentication)"等功能进行认证,以此防止冒充发送者。
并且很多除了自己本域的邮件服务器以外,很多供应商已将网络设置为不与其他网络的25号端口进行通信。
书中同样列出了许多应答的3位数字,限于篇幅问题,此处也不再一一列出。
SMTP的不利之处就在于它支持的是发送端主机的行为,而不是根据接收端的请求发送邮件。这样就会导致,接收端的人们无法在开机时收到关机时被发送的邮件。
为了解决该问题,引入了POP(Post Office Protocol)协议,该协议用于接收电子邮件,发送端的邮件根据SMTP协议将被转发给一直处于插电状态的POP服务器,客户端再根据POP协议从POP服务器接受对方发来的邮件。这个过程中,为了防止他人盗窃邮件内容,还要进行用户验证。
POP与SMTP一样,也是在客户端和服务器端建了一个TCP连接完成相应操作,其命令同样是较短的ASCII码字符串,应答更是简单,只有两种:正常情况下为"+OK",发送错误或异常的情况下为"-ERR"。
下图则展示了POP的工作机制:
IMAP(Internet Message Access Protocol,交互邮件访问协议)
与POP类似,其也用于接收电子邮件,在POP中邮件有客户端进行管理,而在IMAP中邮件则由服务器进行管理。
使用IMAP时,可以不必从服务器上下载所有邮件,也可以阅读。正由于其是在IMAP服务器端处理MIME信息,所以可以实现某一封邮件含有10个附件时只下载其中的第7个附件的功能(POP中无法下载某个特定的附件,要想确认附件就得下载所有)。这样做在带宽较窄的线路上起着相当重要的作用。
而且IMAP可以在服务器上对“已读/未读”信息和邮件分类进行管理,因此即使在不同的计算机上打开邮箱,也可以保持同步。
本篇小结
本篇介绍了应用协议中具有代表性的几个协议。基本都是通过TCP建立连接。
首先为远程登录时使用的TELNET
协议和SSH(Secure SHell)
协议。
TELNET利用TCP的一条连接,向远端主机发送文字命令并在主机上执行。服务分为仿真终端(NVT,Network Virtual Terminal)功能,即模仿类似终端功能,以及协商选项功能,即开启一些选项的功能。
通常TELNET与目标主机的TCP23号端口连接,TCP端口号=21时可以连接到FTP应用,=25时可以连接到SMTP,=80时可以连接到HTTP,=110时可以连接到POP3。
SSH是一种加密的远程登录系统,较为安全,还可以使用端口转发功能(特定端口号收到的消息转发到特定IP地址和端口号码的一种机制)。值得一提的是,VPN就使用到了该技术。
之后是FTP(File Transform Protocol)
文件传输协议,在两练的计算机之间进行文件传输时时用到的协议,由上文可以知道,FTP需要基于远程登录才能进行相应的操作。
FTP使用两条TCP连接,一条用于控制,一条用于数据传输。
控制用连接占用TCP21号端口,用于ASCII码字符串请求发送和接收应答(3位数字)。
数据连接占用TCP20号端口(也可以修改为其他值),是在控制用连接发送传输数据的相关请求后建立起来的,例如文件GET(RETR)、PUT(STOR)以及文件一览(LIST)等操作,当数据传送完毕后,这条连接就会被断开。值得一提的是,两条连接方向相反,若使用NAT连接外部FTP服务器,则需要使用PASV命修改连接方向。
不仅FTP,之后我们介绍的SMTP协议也是ASCII码字符串行协议。对于这种类型,换行操作非常重要,因为命令和应答消息要通过换行区分,而参数则使用空格区分。换行由“CR”(ASCII十进制数 = 13)和“LF”(ASCII十进制数 = 10)两个控制符号组成。
电子邮件使用到的协议叫做SMTP(Simple Mail Transfer Protocol)
,其建立在FTP之上,传输层同样使用了TCP。这个协议需要和POP3(Post Office Protocol 3)
一起来讲。
早期的SMTP协议,正是由于使用了TCP连接,如果对端不在线,就无法连接,更不必谈发送邮件了。为了解决该问题,就使用到了POP3协议,即使用一种功能相当于“邮局”的服务器,通过该服务器,实现邮件的收发功能。
另外一提,早期的电子邮件只能发送文本内容,后期被扩展到MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展类型),该类型包括:
非ASCII字符文本;非文本格式附件(二进制、声音、图像等);由多部分(multiple parts)组成的消息体;包含非ASCII字符的头信息(Header information)。
MIME基本上首部 + 正文
格式组成,多个MIME可以合并,各个部分都属于该格式。
SMTP使用TCP25号端口,客户端以ASCII码字符串形式发出请求,服务端则同样返回一个3位数字的应答。SMTP以".“作为邮件正文的结束符,每个指令和应答的最后都必须追加换行指令(CR、LF)。
另外需要提到的一点是,使用POP
协议,即“POP before SMTP”或者“SMTP认证”等功能,可以防止别用有心者冒充发送者或者盗窃邮件。
POP(Post Office Protocol)
协议就用于接收电子邮件,发送端的邮件根据SMTP协议将被转发给一直处于插电状态的POP服务器,客户端再根据POP协议从POP服务器接受对方发来的邮件,为了防止他人盗窃邮件内容,需要进行用户验证。
POP同样使用TCP建立连接,命令同样是ASCII码字符串,应答却简单,只有两种:正常情况下为"+OK",发送错误或异常的情况下为"-ERR"。
但使用POP的不方便之处在于,需要从服务器上下载所有邮件,有附件时也要下载全部附件。
IMAP(Internet Message Access Protocol,交互邮件访问协议)
。目前已经发展到第四版。
与POP类似,其也用于接收电子邮件,在POP中邮件有客户端进行管理,而在IMAP中邮件则由服务器进行管理。使用IMAP时,可以不必从服务器上下载所有邮件,也可以阅读某封邮件;或者当一封邮件中有多个附件,可以不下载全部附件,只下载其中一个。
而且IMAP可以在服务器上对“已读/未读”信息和邮件分类进行管理,因此即使在不同的计算机上打开邮箱,也可以保持同步。
到此为止,我们本篇介绍了众多基于TCP的协议,一下进行一个汇总:
协议名 | 端口号 | 功能 |
---|---|---|
TELNET | 23 | 远程登录 |
FTP | 21(控制) 20(数据) | 文件传输 |
SMTP | 25 | 发送电子邮件 |
POP3 | 110 | 接收电子邮件,客户端控制 |
IMAP | 143 | 接收电子邮件,服务器控制 |