第 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 的技术.
来源: http://www.bubuko.com/infodetail-3464998.html