36 张图详解应用层协议(网络世界的最强王者)

应用层

我们前面介绍过 TCP/IP 模型的下三层,分别是网络接入层、网络层和传输层。它们都是为应用层服务的,传输应用层的各种数据,现在我们就来看看最高层的应用层

在 TCP/IP 模型中,应用层提供的服务相当于 OSI 模型的应用层、表示层和会话层的服务总和。不仅包含了background:red'>管理通信连接的会话层功能、数据格式转换的表示层功能,还包括主机间交互的应用层功能。

应用层的目的是向应用程序提供网络接口,直接向用户提供服务。于下层的网络协议,应用协议要常见得多,可能大家都听过 background:red'>HTTPbackground:red'>HTTPS 、SSH 等应用层协议。

TCP/IP 模型中应用层位于传输层之上,传输层的端口号用于标识数据所对应的应用层协议。也就是说,有端口号的协议都是应用层协议。应用协议是终端设备之间的应用通信规则。应用之间交互的信息叫消息,应用协议定义这些消息的格式以及消息的控制或background:red'>作的规则。

应用协议的通信方式可分为两类:

  • background:red'>服务器和客户端模型
  • P2P 模型

background:red'>服务器和客户端模型中,始终公开固定 IP 地址的主机为其它主机的应用程序提供服务,请求服务的主机之间不会互相通信。这些为其它主机提供服务的终端设备称为background:red'>服务器,那些请求服务的主机则称为客户端。大多数应用层协议,都是这种模型。

P2P 模型中,没有特定的background:red'>服务器或客户端,这些设备上安装的应用程序,可以在主机间建立对等连接,既可以提供服务,也可以接受服务。通常是大流量的应用程序采用 P2P 模型,如:下载器等。

开发应用程序时,为了实现相应的功能和目的,可以使用现有的应用协议,也可以自己定义一个新的应用协议。同时,应用程序可以直接使用传输层以下的网络传输服务,开发者只需要关心选择哪种应用协议、如何开发即可,而不用考虑数据是如何传输到目的地。这也是 TCP/IP 分层模型的特点。

应用程序有很多,包括 Web 浏览器、电子邮件、远程登录、文件传输、网络background:red'>管理等。这些应用程序都会使用应用协议进行通信,应用协议正是为了实现应用程序的功能而设计和创造的。

远程登录

网络设备的background:red'>管理方式,分为本地background:red'>管理和远程background:red'>管理远程background:red'>管理是从本地主机登录到网络对端设备,向网络对端的设备发送background:red'>管理数据,以实现设备background:red'>管理background:red'>方式。通过远程background:red'>管理,不仅可以直接使用主机上的应用,还可以对主机进行参数设置。远程登录主要使用 Telnet 和 SSH 两种协议background:red'>管理网络设备。

女神叫大刘去她公司修理网络,大刘都不用去女神的公司,直接远程登录解决问题。

Telnet

在实际工作中,除了个别无法远程background:red'>管理设备外,大多会采用远程background:red'>管理方式,来background:red'>管理设备的配置文件和background:red'>系background:red'>统文件。对本地background:red'>管理,远程background:red'>管理不受物理位置background:red'>限制,连上网络就可以对世界另一端的设备进行background:red'>控,更省去了插拔设备线缆、终端设置的过程,可以通过一个远程应用同时background:red'>管理大量的网络设备。

Telnet 协议定义了一台设备通过 IP 网络向远端设备发起明文background:red'>管理连接的通信标准,可以在一台设备上通过 Telnet 协议与一台远端设备建立background:red'>管理连接,并对远端设备实施配置和监控,这种方式的体验与本地登录设备并无区别。发起background:red'>管理的设备为 Telnet 客户端,被background:red'>管理的设备是 Telnet background:red'>服务器。因此,Telnet 协议是一个典型的background:red'>服务器和客户端模型的应用层协议。

Telnet 协议通过 TCP 协议建立background:red'>服务器和客户端的一条连接,并通过这条连接向background:red'>服务器发送用户名、密码和命令。Telnet 协议使用的是 TCP 23 端口,表示客户端在发起 Telnet 连接时,默认连接background:red'>服务器的 TCP 23 号端口。

当 Telnet 客户端输入命令后,这些命令通过 TCP 连接发送到 23 号端口,background:red'>监听请求的守护进程 Telnetd 收到后,将命令发送给 Shell ,Shell 为background:red'>background:red'>系background:red'>统进行命令解释,然后background:red'>background:red'>系background:red'>统执行 Telnet 客户端发出的命令。同理,background:red'>background:red'>系background:red'>统按照相反的顺序,将命令执行的结果发回给 Telnet 客户端。

Telnet 协议实现了远程命令传输,但是客户端和background:red'>服务器跨越不可background:red'>的公共网络时,在命令传输过程中可以截获 Telnet 通信的所有数据,然后使用截获的用户名和密码来通过 Telnet background:red'>服务器的身份认证,并登录到设备上对配置文件进行修改。

Telnet 协议存在重大安全隐患,不推荐在实验室之外的环境使用。

SSH

SSH 协议全程是安全外壳协议,目的就是为了取代 Telnet ,SSH 是加密的远程登录协议,提供更加安全的远程登录服务。使用 SSH 后会加密通信内容。即使信息被截获,由于无法解密,也无法了解数据的background:red'>真正内容。

SSH 协议常用版本是 SSHv2,SSH 客户端通过 SSHv2 协议与 SSH background:red'>服务器建立一条 TCP 的加密信道,建立这条安全信道的方式是让客户端使用background:red'>服务器的 RSA 公钥来验证 SSH background:red'>服务器的身份。SSH 协议默认使用 TCP 22 端口

如果客户端成功验证了background:red'>服务器的身份,它们之间就会创建出一个会话密钥,并用双方协商出来的加密算法和会话密钥,对这个信道传输的数据进行加密。这样,两台设备之间就建立了一条安全的信道,使用这条安全信道发送密码,密码以密文的形式传输,通过background:red'>服务器身份认证。SSH 就是通过这种方式建立加密信道,确保 SSH background:red'>服务器,也就是被background:red'>管理设备的 Shell 免遭非法用户background:red'>作。

文件传输

除了远程登录,我们还需要从远端设备传输文件,文件传输协议提供的应用服务可以满足我们的需求。FTP是网络上文件传输的标准协议,FTP 使用 TCP作为传输协议,支持用户的登录认证访问权限的控制。另一种常见的文件传输协议是 TFTP协议,TFTP 是一种简单的文件传输协议,不支持用户的登录认证,也没有复杂的命令。TFTP 使用 UDP作为传输协议,并有重传机制。

FTP

FTP用于background:red'>服务器和客户端之间传输文件,是 IP 网络上传输文件的通用协议。FTP 采用客户端和background:red'>服务器模式,使用 TCP协议提供可background:red'>传输。FTP 可以对登录background:red'>服务器用户名和密码进行验证,允许客户端指定文件的传输类型,并且可以设置文件的传输权限

FTP 使用两条 TCP 连接实现文件传输。一条是 FTP 控制连接,用来控制background:red'>管理;另一条是 FTP 数据连接,用于数据传输。FTP 控制连接用于传输 FTP 控制命令和命令执行的应答信息,如登录用户名和密码的验证、发送文件的名称、发送方式的设置。这条连接在整个 FTP 会话过程中一直保持打开,通过 ASCII 码字符串发送请求和接收应答。在控制连接上无法发送数据,而 FTP 数据连接用于文件和文件列表的传输,仅在需要传输数据时建立数据连接,数据传输完毕后终止。

FTP 控制连接使用的是 TCP 21 号端口,也是 FTP background:red'>服务器的侦听端口,等待客户端的连接。在 TCP 21 号端口进行文件 GET( RETR )、PUT( STOR ),以及文件表( LIST )等background:red'>作时,每次都会建立一个用于数据传输的数据连接。数据和文件表的传输正式在这个数据连接上进行的。

数据连接的 TCP 连接通常使用端口 20。也可以使用 PORT 命令修改为其它值。

相同的一个文件,不同的background:red'>background:red'>系background:red'>统可能有不同的存储方式。为了确保文件能够准确的传送给对方,常用 2 中传输模式

  • ASCII 模式
  • ASCII 模式是默认的文件传输模式。发送方把本地文件转换成标准的 ASCII 码,然后在网络中传输;接收方收到文件后,根据自己的文件存储方式,把它转换成本地文件。ASCII 文件传输模式通常用于传输文本文件。
  • 二进制流模式
  • 二进制流模式也称为图像文件传输模式。发送方不做任何转换,把文件按照特流的方式进行传输。二进制文件类型通常用于传送程序文件。

在 FTP 数据连接过程中,有两种数据传输方式主动方式被动方式

FTP 主动传输方式,也称为 PORT方式。采用主动方式建立数据连接时,FTP 客户端会通过 FTP 控制连接向 FTP background:red'>服务器发送 PORT 命令,PORT 命令携带参数:A1 、A2 、A3 、A4 、P1 、P2 ,其中 A1 、A2 、A3 、A4 表示需要建立数据连接的主机 IP 地址,而 P1 和 P2 表示客户端用于传输数据的临时端口号,临时端口号的数值为 256*P1+P2 。当需要传输数据时,background:red'>服务器通过 TCP 端口号 20 与客户端提供的临时端口建立数据传输通道,完成数据传输。在整个过程中,由于background:red'>服务器在建立数据连接时主动发起连接,因此被称为主动模式

如果客户端在防火墙内部,主动方式可能会有问题,因为客户端的端口号是随机的,防火墙并不知道。默认安全策略,防火墙只会允许外部主机访问部分内部已知端口,阻断对内部随机端口的访问,从而无法建立 FTP 数据连接。这时,就需要使用 FTP 被动方式来进行文件传输。

被动方式也被称为 PASV方式。FTP 控制通道建立后,希望通过被动方式建立数据传输通道的 FTP 客户端会利用控制通道向 FTP background:red'>服务器发送 PASV 命令,告诉background:red'>服务器进入被动方式传输。background:red'>服务器选择临时端口号并告知客户端,命令参数和主动传输方式一致。当需要传输数据时,客户端主动与background:red'>服务器的临时端口建立数据传输通道,并完成数据传输。在整个过程中,background:red'>服务器是被动接收客户端的数据连接,所以被称为被动模式

采用被动方式时,两个连接都由客户端发起。一般防火墙不会background:red'>限制内部的客户端发起的连接,这样就解决了主动方式下的问题。

TFTP

TFTP也是用于background:red'>服务器和客户端之间传输文件的,对 FTP ,TFTP 没有复杂的交互接口和认证控制,适用于不需要复杂交互的网络环境

TFTP 采用客户端和background:red'>服务器模式,使用 UDP协议传输,background:red'>服务器使用端口号 69 侦听 TFTP 连接。由于 UDP 不能提供可background:red'>的数据传输,因此 TFTP 使用超时重传机制确保数据正确发送。TFTP 只能提供简单的文件传输能力,包括文件的上传和下载。不支持文件目录功能,也不能对用户的身份进行验证和授权。

TFTP 协议传输是由客户端发起的。当需要下载文件时,客户端向 TFTP background:red'>服务器发送一个读请求,然后从background:red'>服务器接收数据,并向background:red'>服务器发送确认;当需要上传文件时,由客户端向background:red'>服务器发送一个写请求,然后向background:red'>服务器发送数据,并接收background:red'>服务器的确认。

与 FTP 类似,TFTP 传输文件有两种模式netascii 模式octet 模式。octet 传输模式对应 FTP 的二进制流模式,用于传输程序文件;netascii 模式对应 FTP 的 ASCII 模式,用于传输文本文件。

TFTP 进行文件传输时,将传输文件看成是由多个连续的文件块组成。每一个 TFTP 数据报文中包含一个文件块,同时对应一个文件块编号。每次发完一个文件块后,就等待对方的确认,确认时指明块编号。发送方发完数据后,如果在规定时间内没收到对端的确认,那么发送方就会重新发送数据。发送确认的一方如果在规定时间内没收到下一个文件块数据,则重发确认报文。这种方式可以确保文件的传送不会因某一个数据的丢失而失败。

每次 TFTP 发送的数据报文中包含的文件块大小固定为 512 字节,如果文件长度恰好是 512 字节的整数倍,那么在文件传送完毕后,发送方还必须在最后发送一个不包含数据的报文,用来表示文件传输完毕。如果文件长度不是 512 字节的整数倍,那么最后传送的数据报文包含的文件块肯定小于 512 字节,正好作为文件结束的标志。

电子邮件

电子邮件,顾名思义,就是指网络上的邮政。通过电子邮件,可以发送文字内容图片,还可以发送报表数据等所有计算机可以存储的信息。电子邮件不受距离background:red'>限制,可以与世界上任一的互联网用户互相background:red'>联系。由于使用简易、投递迅速、易于保存、不受距离background:red'>限制等特点,使得电子邮件已经成为人们普遍使用的一种应用。

大刘向女神发的第一封邮件。

通信架构

电子邮件在几十年的发展过程中出现了明显的变化,从原始的发送方电脑直接向接收方电脑发送电子邮件,演变成收发双方都使用邮件background:red'>服务器代为收发邮件。通过这种方式,电子邮件通信不再依赖接收方当前是否在线,而电子邮件的通信过程由简单的发送方到接收方,演变成发送方电脑到发送方邮件background:red'>服务器发送方邮件background:red'>服务器到接收方邮件background:red'>服务器,以及接收方邮件background:red'>服务器到接收方电脑的三个通信过程。并且参与通信的四方都不是直接相连,而是分别background:red'>background:red'>独立连接到互联网中。这个架构中,邮件发送方和接收方使用的电脑称为用户代理

邮件地址

使用电子邮件时,需要拥有一个地址,这个地址叫做邮件地址,也叫邮箱地址。它相当于通信地址和姓名。我的电子邮件如下:

networkfox@background:red'>qqbackground:red'>.com

networkfox 表示用户的名称,同一个通信地址内,名称必须是唯一的,不能出现重复;@ 表示分隔符background:red'>qq.com用户邮箱的邮件接收background:red'>服务器的域名

电子邮件的发送地址DNSbackground:red'>管理。DNS 中注册了邮件地址和对应邮件background:red'>服务器的域名。这些映射信息被称为 MX 记录如:background:red'>qq.com 的 MX 记录中指定了 mail.background:red'>qq.com。那么任何发送给 background:red'>qq.com 结尾的邮件都被发送到 mail.background:red'>qq.com background:red'>服务器。就这样,根据 MX 记录中指定的邮件background:red'>服务器,可以background:red'>管理不同邮件地址与特定邮件background:red'>服务器之间的映射关系。

SMTP 协议

提供电子邮件服务的协议叫做 SMTPSMTP 用于收发双方的邮件background:red'>服务器之间,而不是用户代理和邮件background:red'>服务器之间的通信方式。在实际使用中,发送方用户代理与发送方background:red'>服务器之间也常采用 SMTP 协议。

SMTP 为了实现高效发送邮件内容,在传输层使用了 TCP 协议端口号是 25。在一台邮件background:red'>服务器向另一台邮件background:red'>服务器发送邮件时,首先向对方的 TCP 25 端口发起一条连接。然后利用这条 TCP 连接发送控制消息和数据。

尽管 SMTP 协议的逻辑简单,也足以顺利完成邮件的传输工作,但难免存在一些安全缺陷:

  • SMTP 传输的邮件是明文的形式,没有提供数据加密机制,可以看到邮件传输的具体内容,用户信息的机密性无法得到保障。
  • SMTP 没有提供任何认证机制,即使使用了伪造的发件人邮件地址也无法识别,会出现冒名顶替的安全问题。

漫天的广告邮件和包含钓鱼链接的垃圾邮件成为益严重的问题。为了修正 SMTP 出现的问题,IETF 定义了扩展的 SMTP ,即 ESMTP 。ESMTP提供的扩展功能中包括认证机制加密机制等。

在整个邮件传输的过程中,SMTP/ESMTP 协议定义了邮件background:red'>服务器之间的消息传输方式。在接收background:red'>服务器收到电子邮件后,接收方(用户代理)是如何访问邮件则需要其它的协议来处理。

POP3 协议

电子邮件通过 SMTP 协议到达接收方background:red'>服务器,个人电脑不可能长期处于开机状态,用户希望一开机就能收到邮件,然而 SMTP 没有这种功能。

为了解决这个问题,就引入了 POP3 协议。POP3协议是用于接收电子邮件的协议。发送端的邮件使用 SMTP 协议将电子邮件转发给一直在线的 POP3 background:red'>服务器。客户端再根据 POP3 协议从 POP3 background:red'>服务器接收邮件。这个过程中,为了防止别人盗取邮件内容,还要进行用户认证。

POP3 协议和 SMTP 协议一样,是基于 TCP 的应用层协议,使用 TCP 110 端口连接邮件background:red'>服务器。接收方的邮件客户端程序首先使用 TCP 连接到 POP3 background:red'>服务器的 TCP 端口 110 ;再进行用户认证邮件列表查询邮件下载邮件删除background:red'>作;background:red'>作完成后,客户端与邮件background:red'>服务器之间再断开 TCP 连接。

POP3 仅负责邮件的下载,邮件从客户端上传到邮件background:red'>服务器SMTP 协议完成。

IMAP 协议

POP3 协议的邮件客户端能够在邮件background:red'>服务器上执行的background:red'>作很少,而且邮件要下载到客户端本地,而不保留在邮件background:red'>服务器,实际使用时很不方便。目前使用更广泛的接收电子邮件的协议是 IMAP在 IMAP 中邮件则由background:red'>服务器进行background:red'>管理

使用 IMAP 时,不必从background:red'>服务器上下载所有的邮件也可以查看。由于 IMAP 是在background:red'>服务器端处理 MIME 信息,它可以实现邮件附件的选择性下载功能。如:一封邮件有 5 个附件时,可以只下载其中的 3 个附件。IMAP 还会在background:red'>服务器上对 “ 已读/未读 ” 信息和邮件分类进行background:red'>管理,所以在不同的电脑上打开邮箱,也能保持同步,使用起来非常方便。

background:red'>WWW

万维网background:red'>WWW)是将互联网的信息以超文本形式展现的background:red'>系background:red'>统,也叫做 Web。可以显示 background:red'>WWW 信息的客户端软件叫做 Web 浏览器,有时简称为浏览器。目前常用的 Web 浏览器包括微软的 Internet Explorer 、谷歌公司的 Google Chrome 、腾讯公司的 QQ 浏览器以及 Apple 公司的 Safari 等。

使用浏览器,我们不需要关心信息保存在哪个background:red'>服务器,只需轻轻点击鼠标,就可以访问页面上的链接并打开相关信息。

通过浏览器进行访问后,显示在浏览器上的内容叫做 Web。访问一个网站时看到的第一个页面称为首页(又称为主页)。很多公司的主页地址形式如下:

background:red'>http://www.公司名称.combackground:red'>.cn

这类主页中通常有公司概况、产品信息、招聘信息等内容。我们可以点击这些标题的图标或链接,就可以跳转到对应的页面上。这些页面上的信息不仅仅是文字内容,还有图片或动画,甚至是声音或其它程序等各种各样的信息。我们不但可以通过 Web 页获取信息,还可以自己background:red'>制作 Web 页向全世界发布信息。

background:red'>WWW 有 3 个重要的概念,它们分别是访问信息的方式和位置( background:red'>URI)、信息的表现形式( HTML)以及信息传输( background:red'>HTTP)等background:red'>作。

background:red'>URI

background:red'>URI用于标识资源,是一种高效的识别码,被应用于主页地址、电子邮件、background:red'>电话号码等。

background:red'>http://www.rfc-editor.org/rfc/rfc4395.txt

background:red'>http://www.ietf.org:80/index.html

background:red'>http://localhost:321

通常主页地址被叫做 background:red'>URLbackground:red'>URL 常用来表示网络资源的具background:red'>体位置。但是 background:red'>URI 不限于标识互联网资源,可以作为所有资源的标识符。简单说就是 background:red'>URL 是 background:red'>URI 的一个子集。

background:red'>WWW 主要使用 background:red'>httpbackground:red'>https表示 Web 页的位置和访问 Web 页的方法background:red'>http 的具体格式如下:

background:red'>http://主机名/路径

background:red'>http://主机名:端口号/路径

background:red'>http://主机名:端口号/路径?访问内容#部分信息

其中主机名可以用域名或 IP 地址表示,端口号表示传输端口号。省略端口号时,表示使用 background:red'>http 的默认端口 80 。路径是指主机上信息的位置,访问内容表示要传给 CGI 的信息,部分信息表示页面当中的位置等。

这种表示方法可以标识互联网中特定的数据。由于 background:red'>http 展现的数据随时都有可能发生变化,所以记住页面的 background:red'>URI( background:red'>URL ),也不能保证下次能够访问到这个页面。

HTML

HTML是用来描述 Web 页的一种语言。它可以指定浏览器中显示的文字、文字的大小和颜色,还可以对图像、动画或音频进行设置。

在页面中 HTML 不仅可以文字或图片附加链接,点击链接时还可以呈现链接所指的内容。互联网中任何一个 background:red'>WWW background:red'>服务器中的信息都可以以链接的方式展现。

HTML 也可以说是 background:red'>WWW 的数据表现协议。只要是用 HTML 展现的数据,即使是在不同的计算机上,效果基本上是一样的。

background:red'>HTTP

当用户在浏览器的地址栏里输入 Web 页的 background:red'>URL 后,background:red'>HTTP 的处理就开始了。background:red'>HTTP默认使用 80 端口。它的工作机制,首先是客户端向background:red'>服务器的 80 端口建立一个 TCP 连接,然后在这个 TCP 连接上进行请求和应答以及数据报文的发送。

background:red'>HTTP 中常用的有两个版本,一个是 background:red'>HTTP 1.0,另一个是 background:red'>HTTP 1.1。在background:red'>HTTP 1.0 中每一个命令和应答都会触发一次 TCP 连接的建立和断开。而从 background:red'>HTTP 1.1 开始,允许在一个 TCP 连接上发送多个命令和应答,这种方式也叫保持连接( keep-alive )。可以大量减少 TCP 连接的建立和断开background:red'>作,提高传输效率。

网络background:red'>管理应用

很多应用层协议广为人知,是因为我们在常上网的过程中,会大量使用与这些应用协议有关的应用程序,这类应用协议称为终端用户应用协议;另外还有一些应用协议在网络中广泛使用,但我们对它们却少有听闻,最多在网络无background:red'>法正常使用时,才会意识到它们的存在,这类应用层协议称为background:red'>系background:red'>统应用协议

常工作中,网络工程师经常使用到的background:red'>系background:red'>统应用协议有 DHCP 协议和 DNS 协议。

详细内容可以查看往期文章《37 张图详解 DHCP :给你 IP 地址的隐形人》和《36 张图详解 DNS :网络世界的导航》。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至:yztougao@qq.com 举报,一经查实,本站将立刻删除。
(0)

相关推荐

发表回复

登录后才能评论