应用层概述

应用层对应用程序的通信提供服务。

应用层协议定义:

  • 应用进程交换的报文类型(请求/响应)
  • 各种报文类型的语法,如报文中的各个字段及其详细描述。
  • 字段的语义,即包含在字段中的信息的含义。
  • 进程何时、如何发送报文,以及对报文进行响应的规则。

应用层的功能:文件传输、访问和管理;电子邮件;虚拟终端;查询服务和远程作业登录

应用层的重要协议:FTP、SMTP、POP3、DNS


网络应用模型

客户/服务器模型(Client/Server)



应用层实现 arecord 应用层举例_服务器


服务器:提供计算服务的设备。

1、永久提供服务。

2、永久性访问地址/域名。

客户机:请求计算服务的主机。

1、与服务器通信,使用服务器提供的服务。

2、间歇性接入网络。

3、可能使用动态IP地址。

4、不与其他客户机直接通信。

应用:Web、文件传输FTP、远程登录、电子邮件。

P2P模型(Peer-to-peer)



应用层实现 arecord 应用层举例_域名服务器_02


不存在永远在线的服务器

每个主机既可以提供服务,也可以请求服务。

任意端系统/结点之间可以直接通讯。

结点间歇性接入网络。

结点可能改变IP地址。

可拓展性好,网络健壮性强。


DNS 域名系统

Domain Name System

DNS系统采用客户/服务器模型,其协议运行在UDP之上,使用 53

域名

级别最低的域名写在最左边,级别最高的顶级域名写在最右边。

顶级域名(Top Level Domain,TLD)

1、国家顶级域名。国家和某些地区的域名,如“.cn”表示中国,“.us”表示美国。

2、通用顶级域名。常见的有“.com”(公司)、“.net”(网络服务机构)、“.org”(非营利性组织)和“.gov”(国家或政府部门)等。

3、基础结构域名。这种域名只有一个,即 arpa,用于反向域名解析,因此又称反向域名。



应用层实现 arecord 应用层举例_服务器_03


DNS服务器

根域名服务器

最高层次的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的IP地址。

不管是哪个本地域名服务器,若要对因特网上任何一个域名进行解析,只要自己无法解析,就首先要求助于根域名服务器。

因特网上有 13 个根域名服务器。

通常它并不直接把待查询的域名直接转换成IP地址,而是告诉本地域名服务器下一步应当找哪个顶级域名服务器。

顶级域名服务器

负责管理在该顶级域名服务器注册的所有二级域名。

权限域名服务器

每台主机都必须在权限域名服务器处等登记。

权限域名服务器总能将其管辖的主机名转换为该主机的IP地址。

本地域名服务器

当一个主机发出DNS查询请求时,这个查询请求报文就发给本地域名服务器。


域名解析过程(递归查询&迭代查询)

域名解析是指把域名映射成为 IP 地址或把 IP 地址映射成域名的过程。

前者称为正向解析,后者称为反向解析。

应用层实现 arecord 应用层举例_服务器_04

为了提高DNS的查询效率,在域名服务器中广泛使用了高速缓存。


文件传输协议 FTP

文件传送协议(File Transfer Protocol):提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。

FTP 是基于客户/服务器(C/S)的协议,使用TCP可靠的传输服务。

用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。

依照FTP协议提供服务,进行文件传送的计算机就是 FTP服务器。

连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。

FTP工作原理

FTP服务器进程由两大部分组成:一个主进程,负责接收新的请求;另外有若干从属进程,负责处理单个请求

工作步骤如下:

1、打开熟知端口 21 (控制端口),使客户进程能够连接上。

2、等待客户进程发连接请求。

3、启动从属进程来处理客户进程发来的请求。主进程与从属进程并发执行,从属进程对客户进程的请求处理完毕后即终止。

4、回到等待状态,继续接收其他客户进程的请求。

控制连接和数据连接

FTP在工作时使用两个并行的TCP连接:一个是控制连接(端口号21),一个是数据连接(端口号20)。

控制进程和数据传送进程都属于从属进程。



应用层实现 arecord 应用层举例_域名服务器_05

  • 控制连接在整个会话期间一直保持打开状态。
  • 数据连接在文件传送完毕之后会关闭。

数据连接有两种传输模式:主动模式 PORT 和 被动模式 PASV。

主动方式使用 TCP 20端口,被动方式由服务器和客户端自行协商决定(端口 > 1024)。


电子邮件

电子邮件系统的组成结构

1、用户代理(User Agent,UA)

用户与电子邮件系统的接口。

用户代理向用户提供一个很友好的接口来发送和接收邮件。

用户代理应当具有撰写、显示和邮件处理的功能。

通常情况下,用户代理是一个运行在PC上的程序,常见的有 Outlook、Foxmail。

2、邮件服务器

发送和接收文件,同时向发信人报告邮件传送的情况。

采用客户/服务器方式工作,必须能够同时充当客户和服务器。

3、邮件发送协议和读取协议

邮件发送协议用于用户代理向邮件服务器发送邮件或在邮件服务器之间发送邮件,如SMTP。

邮件读取协议用于用户代理从邮件服务器读取邮件,如POP3。



应用层实现 arecord 应用层举例_域名服务器_06

电子邮件格式



应用层实现 arecord 应用层举例_应用层实现 arecord_07

多用途网际邮件扩充 MIME

由于SMTP只能传送一定长度的 ASCII 码,许多其他非英语国家的文字就无法传送,且无法传送可执行文件及其他二进制对象,因此提出了 多用途网络邮件扩充 MIME。

MIME 继续使用SMTP的格式,但增加了邮件主体的结构,并定义了传送非 ASCII 码的编码规则。

使电子邮件系统可以支持声音、图像、视频多种国家语言。

主要包括以下三部分:

1、5个新的邮件首部字段,包括 MIME 版本、内容描述、内容表示、传送编码和内容类型。

2、定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化。

3、定义了传送编码,可对任何内容格式进行了转换,而不会被邮件系统改变。

SMTP

简单邮件传送协议(Simple Mail Transfer Protocol,SMTP)是一种提供可靠且有效的电子邮件传输的协议。

规定了在两个相互通信的SMTP进程之间应如何交换信息。

负责发送邮件的SMTP进程就是SMTP客户,负责接收邮件的进程就是SMTP服务器。

SMTP使用TCP连接,端口号为25。

SMTP通信有以下三个阶段:1、连接建立 2、邮件传送 3、连接释放


应用层实现 arecord 应用层举例_域名服务器_08

SMTP的缺点:

1、SMTP不能传送可执行文件或者其他二进制对象。

2、SMTP仅限于传送7位ASCII码,不能传送其他非英语国家的文字。

3、SMTP服务器会拒绝超过一定长度的邮件。

POP3

邮局协议(Post Office Protocol,POP)是一个非常简单但功能有限的邮件读取协议。

POP 使用客户/服务器的工作方式,在传输层使用TCP,端口号为110。

两种工作方式:1、下载并保留(在服务器)2、下载并删除。

因特网报文存取协议 IMAP



应用层实现 arecord 应用层举例_HTTP_09

基于万维网的电子邮件



应用层实现 arecord 应用层举例_应用层实现 arecord_10


万维网(WWW)

万维网(World Wide Web,WWW)是一个分布式的、联机式的信息存储空间,

在这个空间中:一样有用的事物称为一样 “资源”,并由一个全域“统一资源定位符”(URL)标识。



应用层实现 arecord 应用层举例_域名服务器_11

用户通过点击超链接(http://www.baidu.com)获取资源,这些资源通过“超文本传输协议(HTTP)传送给使用者。

万维网以“客户/服务器方式工作,用户使用的浏览器就是万维网客户程序,万维网文档所驻留的主机运行服务器程序。

万维网使用超文本标记语言

超文本传输协议HTTP


应用层实现 arecord 应用层举例_应用层实现 arecord_12

HTTP协议的特点:

1、HTTP是无状态的。

2、HTTP采用TCP作为传输层协议,但HTTP协议本身是无连接的(通信双方在交换HTTP报文之前不需要先建立HTTP连接)。

3、HTTP的连接方式分为持久连接(流水线、非流水线)【HTTP/1.1支持】和 非持久连接。

对于非持久连接

每个网页元素对象的传输都需要单独建立一个TCP连接。

请求一个万维网文档所需的时间是该文档的传输时间加上两倍往返时间RTT(一个RTT用于TCP连接,另一个RTT用于请求和接收文档)。

每个对象引用都导致 2xRTT的开销,此外每次建立新的TCP连接都要分配缓存和变量,使万维网服务器的负担很重。

对于持久连接

指万维网服务器在发送响应后仍然保持这条连接,使同一个客户和该服务器可以继续在这条连接上传送后续的HTTP请求和响应报文。

应用层实现 arecord 应用层举例_应用层实现 arecord_13

对于非流水线方式,客户在收到前一个响应后才能发出下一个请求,服务器发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源。

HTTP/1.1的默认方式是使用流水线的持久连接,这种情况下,客户每遇到一个对象引用就立即发出一个请求,因而客户可以逐个地连续发出对各个引用对象的请求。所有引用的对象共计经历1个RTT延迟,提高效率。

HTTP的报文结构

HTTP是面向文本的,因此报文种的每个字段都是一些ASCII码串,并且每个字段的长度都是不确定的。

  • 请求报文:从客户向服务器发送的请求报文。
  • 响应报文:从服务器到客户的回答。


应用层实现 arecord 应用层举例_HTTP_14

CR表示回车,LF表示换行。

状态码:

1xx表示通知信息的,如请求收到了或正在处理。

2xx表示成功,如接受或知道了。

3xx表示重定向,如要完成请求还必须采取进一步的行动。

4xx表示客户的差错,如请求中有错误的语法或不能完成。

en">响应报文:从服务器到客户的回答。



应用层实现 arecord 应用层举例_HTTP_14

CR表示回车,LF表示换行。

状态码:

1xx表示通知信息的,如请求收到了或正在处理。

2xx表示成功,如接受或知道了。

3xx表示重定向,如要完成请求还必须采取进一步的行动。

4xx表示客户的差错,如请求中有错误的语法或不能完成。

5xx表示服务器的差错,如服务器失效无法完成请求。