TCP/IP 8 应用层协议
第8章 应用层协议
8.1 TCP/IP应用层协议主要是指OSI参考模型中的第5层、第6层、第7层上半部分的协议。(会话层,表示层,应用层)
应用层协议定义:
利用网络的应用程序有很多,包括web浏览器、电子邮件、远程登陆、文件传输、网络管理等。能够让这些应用进行特定通信处理的正是应用协议。
TCP和IP等下层协议是不依赖于上层应用类型、适用性非常广的协议。而应用协议则是为了实现某种应用而设计和创造的协议。
应用协议与协议的分层:
应用可以直接享用传输层以下的基础部分。因为开发者只要关心选用哪种应用协议、如何开发即可,而不必担心应用中的数据该以何种方式发送到目标主机等问题。这也是得益于网络层的功劳。
8.2 远程登录
远程登录是为了实现TSS(分时系统)环境,是将主机和终端的关系应用到计算机网络上的一个结果。TSS中通常有一个处理能力非常强的主机。围绕着这台主机的是处理能力没有那么强的多个终端机器。这些终端通过专线与主机相连。
从自己的本地计算机登录到网络另一端计算功能的应用就叫做远程登录。
远程登录主要使用TELNET和SSH两种协议。
8.2.1 TELNET
TELNET利用TCP的一条连接,通过这一条连接向主机发送文件命令并在主机上执行。本地用户好像直接与远端主机内部的shell相连似的,直接在本地进行操作。
TELNET可以分为两类基本服务。一是仿真终端功能,二是协商选项机制。
TELNET经常用于登录路由器或高性能交换机等网络设备进行相应的设置。
通过TELNET登录主机或路由器等设备时需要将自己的登录用户名和密码注册到服务端。
选项:
TELNET中除了处理用户所输入的文字外,还提供选项的交互和协商功能。例如,为实现仿真终端(NVT,network virtual terminal)所用到的界面控制信息就是通过选项功能发送出去的。
TELNET可用行模式或透明模式两种模式的设置,也是通过TELNET客户端与TELNET服务端之间的选项功能进行设置的。
行模式:客户端每从键盘输入一个换行,就将该行的数据作为1整行发送给服务端。
透明模式:客户端每输入一个字符都要发送给服务端。
TELNET客户端:
使用telnet命令,telnet 主机名 TCP端口号。所以(telnet 主机名 21)等同于(ftp 主机名)
8.2.2 SSH
SSH是加密的远程登录系统。TELNET中登录时无需输入密码就可以发送,容易造成通信窃听和非法入侵的危险。使用SSH后可以加密通信内容。即使信息被窃听也无法破解所发送的密码、具体命令以及命令返回的结果是什么。
SSH还包括很多非常方便的功能:
1)可以使用更强的认证机制
2)可以转发文件
3)可以使用端口转发功能
端口转发是指将特定端口号所收到的消息转发到特定的IP地址和端口号码的一种机制。由于经过SSH连接的那部分内容被加密,确保了信息安全,提供了更为灵活的通信。
使用端口转发的情况下,SSH客户端程序、SSH服务端程序都起着一个网关的作用。
8.3 文件传输
FTP是在两个相连的计算机之间进行文件传输时使用的协议。FTP中也需要在登录到对方的计算机后才能进行相应的操作。
互联网上有一种FTP服务器是允许任何人进行访问的,这种服务器叫做匿名服务器。登录这些服务器时使用匿名或ftp都可以。
FTP的工作机制概要:
FTP是通过怎样的机制才得以实现文件传输的呢?它使用两条TCP连接:一条用来控制,另一条用于数据(文件)的传输。
用于控制的TCP连接主要在FTP的控制部分使用。例如登陆用户名和密码的验证、发送文件的名称、发送方式的设置。利用这个连接,可以通过ASCII码字符串发送请求和接收应答。在这个连接上无法发送数据,数据需要一个专门的TCP进行连接。
FTP控制用的连接使用的是TCP 21号端口。在TCP 21号端口上进行文件GET、PUT、以及文件一览等操作时,每次都会建立一个用于数据传输的TCP连接。数据的传输和文件一览表的传输正是在这个新建的连接上进行。当数据传送完毕之后,传输数据的这条连接也会被断开,然后会在控制用的连接上继续进行命令或应答的处理。
控制用的连接,在用户要求断开之前会一直保持连接状态。不过,绝大多数FTP服务器都会对长时间没有任何新命令输入的用户的连接强制断开。
数据传输用的TCP连接通常使用端口20。不过可以用PORT命令修改为其它的值。出于安全的考虑,普遍在数据传输用的端口号中使用随机数进行分配。
通过ASCII码字符串进行的交互处理:
FTP中请求命令中使用着“RETR”等ASCII码字符串。而针对这些命令的应答则使用如“200”等3位数字的ASCII码字符串。TCP/IP的应用协议中有很多使用这种ASCII码字符串的协议。
对于ASCII码字符串型的协议来说换行具有重要意义。很多情况下,一行字符串表示表示一个命令或一个应答,而空白则用来标识与参数之间的分割符。即,命令和应答消息通过换行区分、参数用空格区分。换行由“CR”和“LF"两个控制符号组成。
8.4 电子邮件
8.4.1 电子邮件的工作机制
提供电子邮件服务的协议叫做SMTP。SMTP为了实现高效发送邮件内容,在其传输层使用了TCP协议。
早期采用发送端发起与接收端直接建立TCP连接发送数据。不过这样会有些问题,主机不是一直打开的,不同子网中的私有IP主机不能直接通信等。
后来引进了一种一直会连接电源的邮件服务器。发送和接收端通过邮件服务器进行收发邮件。接收端从邮件服务器接收邮件时使用POP3协议。
电子邮件的机制由3部分组成,它们分别是邮件地址、数据格式以及发送协议。
8.4.2 邮件地址
使用电子邮件时需要拥有的地址叫做邮件地址。它相当于通信地址和姓名。
互联网中电子邮件地址的格式如下:
名称@通信地址
现在,电子邮件的发送地址由DNS进行管理。DNS中注册有邮件地址及其作为发送地址时对应的邮件服务器的域名。这些映射信息被称作MX记录。
8.4.3 MIME
过去很长一段时间里,互联网的电子邮件只能处理文本格式的邮件。不过现在,电子邮件所能发送的数据类型已被扩展到MIME,可以发送静态图像、动画、声音、程序等各种形式的数据。鉴于MIME规定了应用消息的格式,因此在OSI参考模型中它相当于第6层表示层。
MIME基本上由首部和正文(数据)两部分组成。首部不能是空行,因为一旦出现空行,其后的部分将被视为正文(数据)。如果MIME首部的”Content-Type"中指定“Multipart/Mixed",并以”boundary=“后面字符作为分隔符,那么可以将多个MIME消息组合成为一个MIME消息。这就叫做multipart。即各个部分都由MIME首部和正文(数据)组成。
”Content-Type"定义了紧随首部信息的数据类型。以IP首部为例,它就相当于协议字段。它可以表示文本、图像、动画等很多类型。
8.4.4 SMTP
SMTP是发送电子邮件的协议。它使用的是TCP的25好端口。SMTP建立一个TCP连接以后,在这个连接上进行控制和应答以及数据的发送。客户端以文本的形式发出请求,服务端返回一个3位数字的应答。
每个指令和应答的最后都必须追加换行指令(CR、LF)。
当允许使用TELNET登录SMTP服务器时,可以用:telnet 服务器名或其IP地址 25
8.4.5 POP
前一节提到的SMTP是发送邮件的协议,即SMTP是想要发送邮件的计算机向接收邮件的计算机发送电子邮件的一种协议。
个人电脑长期处于关闭状态,用户使用时才开机。这种情况下,人们希望一开机就能接收到邮件。然而SMTP没有这种处理机制。SMTP的一个不利之处就在于它支持的是发送端主机的行为,而不是根据接收端的请求发送邮件。
为了解决这个问题,就引入了POP协议。该协议是一种用于接收电子邮件的协议。发送端的邮件根据SMTP协议将被转发给一直处于插电状态的POP服务器。客户端再根据POP协议从POP服务器接受对方发来的邮件。在这个过程中,为了防止他人盗窃邮件内容,还要进行用户验证。
POP与SMTP一样,也是在其客户端与服务器之间通过建立一个TCP连接完成相应操作。POP的具体命令都是较短的ASCII码字符串,应答有“+OK”和“-ERR"两种。
当允许使用TELNET登录POP服务器时,可以用:telnet POP服务器名或其IP地址 110
8.4.6 IMAP
IMAP与POP类似,也是接收电子邮件的协议。在POP中邮件由客户端进行管理,而在IMAP中邮件则由服务器进行管理。
使用IMAP时,可以不必从服务器上下载所有的邮件也可以阅读。由于IMAP是在服务端处理MIME信息,所以它可以实现当某一封邮件含有10个附件时”只下载其中的第7个附件“的功能。这在带宽较窄的线路上起着非常重要的作用。而且IMAP在服务器上对”已读/未读“信息和邮件分类进行管理,因此,即使在不同的计算机上打开邮箱,也能保持同步,使用起来非常方便。使用IMAP,在服务器上保存和管理邮件信息,就如同在自己本地客户端的某个闪存中管理自己的信息一样简单。
IMAP为使用多种异构终端的人们提供了非常便利的环境。
8.5 WWW
万维网(WWW,world wide web)是将互联网中的信息以超文本形式展现的系统。也叫做web。可以显示WWW信息的客户端软件叫做web浏览器。
借助浏览器,人们不需要考虑该信息保存在哪个服务器,只需要轻轻点击鼠标就可以访问页面上的链接并打开相关信息。
8.5.2 WWW基本概念
WWW定义了3个重要的概念,分别是访问信息的手段与位置(URI,uniform resource identifier)、信息的表现形式(HTML,超文本标记语言)以及信息转发(HTTP,超文本传输协议)等操作。
8.5.3 URI
统一资源标识,用于标识资源。URI是一种可以用于WWW之外的高效的识别码,它被用于主页地址、电子邮件、电话号码等各种组合中。
URL(uniform resource locator)统一资源定位,用来标识互联网中资源(文件)的具体位置。但是URI不局限于标识互联网资源,它可以作为所有资源的识别码。
URI的http方案的具体格式如下:
http://主机名/路径
http://主机名:端口号/路径
http://主机名:端口号/路径?访问内容#部分信息
其中主机名标识域名或IP地址,端口号标识传输端口号。http默认端口号为80。路径是指主机上该信息的位置,访问内容标识要传给CGI的信息,部分信息表示页面当中的位置等。
这种表示方法可以唯一地标识互联网中特定的数据。不过,由于用http方案展现的数据随时都有可能发生变化,所以即使将自己喜欢的页面的URI记住,也不能保证下次是否还能访问到该页。
8.5.4 HTML
HTML是记述web页的一种语言(数据格式)。它可以指定浏览器中显示的文字、文字的大小和颜色。此外,不仅可以对图像或动画进行相关设置,还可以设置音频内容。
HTML具有纯文本的功能。在页面中不仅可以为文字或图像附加链接,当用户点击那些链接时还可以呈现该链接所指示的内容。绝大多数互联网的web页,都以链接的形式指向关联的其它信息。逐一点开这些链接就可以了解信息。
HTML也可以说是WWW通用的数据表现协议。即使是在异构的计算机上,只要是可以用HTML展现的数据,那么效果基本上是一致的。如果把它对应到OSI参考模型,那么可以认为HTML属于WWW的表示层。不过,鉴于现代计算机网络的表示层尚未万全准备就绪,根据操作系统和所用软件的不同,最终表现出来的效果可能有细微差别。
8.5.5 HTTP
当用户在浏览器的地址栏里输入所要访问web页面的URI以后,HTTP的处理即会开始。HTTP中默认使用80端口。它的工作机制,首先是客户端向服务器的80端口建立一个TCP链接,然后在这个TCP连接上进行请求和应答以及数据报文的发送。
HTTP中常用的有两个版本,一个HTTP1.0,另一个是HTTP1.1。在HTTP1.0中每一个命令和应答都会触发一次TCP连接的建立和断开。而从HTTP1.1开始,允许在一个TCP连接上发送多个命令和应答。由此,大量地减少了TCP连接的建立和断开操作,从而提高了效率。
当允许HTTP服务器和TELNET连接时,可以以如下形式登录HTTP服务器后,再以手动形式执行HTTP的命令。
telnet 服务器名或其IP地址 80
8.5.6 JavaScript、CGI、Cookie
JavaScript:Web的基本要素为URI、HTML和HTTP。然而仅有这些还无法更改与条件相符的动态内容。JavaScript是一种嵌入在HTML中的编程语言,作为客户端程序可以运行于多种类型的浏览器中。这些浏览器将嵌入JavaScript的HTML下载后,其对应的JavaScript程序就可以在客户端得到执行。
CGI:CGI是web服务器调用外部程序时所使用的一种服务端应用的规范。
一般的web通信中,只是按照客户端请求将保存在web服务器硬盘中的数据转发而已。这种情况下客户端每次收获的信息也是同样(静态)的内容。而引入CGI以后客户端请求会触发web服务器端运行另一个程序,客户端所输入的数据也会传给这个外部程序。该程序运行结束后将生成的HTML和其它数据再返回给客户端。
利用CGI可以针对用户的操作返回给客户端有各种各样变化(动态)的信息。论坛和网上购物系统中就经常使用CGI调用外部程序或访问数据库。
Cookie:web应用为了获取用户信息使用一个叫做Cookie的机制。web服务器用Cookie在客户端保存信息(多为”用户名“和”登录名“等信息)。Cookie常被用于保存登录信息或网络购物中放入购物车的商品信息。
从web服务器检查Cookie可以确认是否为同一对端的通信。从而存放于购物车里的商品信息就不必要在保存到服务器了。
8.6 网络管理
TCP/IP中网络管理中可以使用SNMP收集必要的信息。它是一款基于UDP/IP的协议。
8.7 其它应用层协议
8.7.1 多媒体通信协议
8.7.2 P2P
互联网上电子邮件的通信,普遍属于一台服务器对应多个客户端的C/S模式,即1对N的通信形态。
与之不同,网络上的终端或主机不经服务器直接1对1相互通信的情况叫做P2P(peer to peer)。这就好比使用无线收发器进行一对一通话。P2P中主机具备客户端和服务端两方面的功能,以对等的关系相互提供服务。
IP电话中也有使用P2P的例子。使用P2P后,可以分散音频数据给网络带来的负荷,实现更高效的应用。例如互联网电话Skype就采用了P2P的功能。
除了IP点化外,其它实现互联网的文件传输应用如BitTorrent协议或一部分群组软件等,也使用到了P2P的技术。