Skip to content

0x06 应用层

一、网络应用模型

1.1 客户机/服务器模型

特点:

  • 网络中各计算机地位不平等,整个网络的管理工作由少数服务器担当,网络的管理非常集中和方便
  • 客户机相互之间不直接通信
  • 可扩展性不佳。受服务器硬件和网络带宽的限制,服务器支持的客户机数量有限

1.2 P2P模型

特点:

  • 整个网络中的传输内容不再被保存在中心服务器上,每个结点同时具有下载、上传功能,权利和义务大体对等
  • 减轻了服务器的计算压力,消除了对某个服务器的完全依赖,可以将任务分配到各个结点上大大提高了系统效率和资源利用率
  • 多个客户机之间可以直接共享文档
  • 可扩展性好,传统服务器有响应和带宽的限制
  • 网络健壮性强,单个结点失效不会影响其他结点

缺点:

  • 获得服务的同时还要提供服务,占用较多内存,影响整机速度

二、 域名系统DNS

2.1 DNS概述

功能

  • 把便于人们记忆的具有特定含义的主机名转换为便于机器处理的IP地址
  • 联机分布式的数据库系统

协议与端口

  • 采用客户/服务器模型
  • 基于UDP协议
  • 端口53

2.2 层次域名空间

域名与域划分

  • 采用层次树状结构的命名方法,使得任何一个连接到因特网的主机或路由器,都有一个唯一的层次结构名称
  • 域名规则
  • 以"."隔开的各个部分称为“标号”
  • 英文不区分大小写
  • 除了连字符(-)外不允许使用其他标点符号
  • 每个标号不超过63个字符,多标号组成的完整域名最长不超过255个字符
  • 级别最低的域名在最左边(如www.baidu.com中,www是三级域名),级别最高的域名在最右边(com是顶级域名)
  • 管理
  • 每个域分别由不同的组织进行管理
  • 每个组织可以把域再分成一定数量的子域,再将子域委托给其他组织管理

顶级域名

  1. 国家(地区)顶级域名。如“.cn”表示中国,“.us”表示美国,".uk"表示英国
  2. 通用顶级域名。如“.com”(公司)、".net"(网络服务机构)、".org"(非盈利性组织)、".gov"(国家或政府部门)等
  3. 基础结构域名。只有一个,即“arpa”,用于反向域名解析

2.3 域名服务器

  • 区:一个服务器所负责管辖的范围,而不是以域为单位。一个区内的所有结点必须是能够连通的
  • 每个区有相应的权限域名服务器,用于保存该区中的所有主机域名到IP地址的映射。
  • 每个域名服务器不仅能进行域名到IP地址的解析,还必须具有连向其他域名服务器的信息
  • 没有一台域名服务器具有因特网上所有主机的映射

根域名服务器

所有的根域名服务器都知道所有的顶级域名服务器的IP地址

共有13个根服务器。

根域名服务器不直接完成域名解析,而是只告诉本地域名服务器下一步应当找哪个顶级域名服务器查询。

顶级域名服务器

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

收到DNS查询请求时,给出相应回答

  • 直接完成域名解析,给出IP地址
  • 不给出IP地址,而是给出下一步应当查找的域名服务器的IP地址

授权域名服务器(权限域名服务器)

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

为了可靠性,一台主机最好至少有两个授权域名服务器。

许多域名服务器都同时充当本地域名服务器和授权域名服务器。

收到DNS查询请求时,总能直接完成域名解析,给出IP地址。

本地域名服务器

每个ISP,一所大学,甚至一所大学中的各个系,都可以拥有一个本地域名服务器

当一台主机发出DNS查询请求时,查询请求报文发送给该主机的本地域名服务器

2.4 域名解析过程

正向解析与反向解析

  • 正向解析:将域名映射成IP地址
  • 反向解析:将IP地址映射成域名

纯递归查询

  • 会给根服务器造成过大负载,很少用

  • 流程

请求链:主机→本地域名服务器→根服务器→顶级域名服务器→权限域名服务器

响应链:权限域名服务器→顶级域名服务器→根服务器→本地域名服务器→主机

递归与迭代相结合的查询

  • 主机向本地域名服务器的查询采用递归查询

即,主机向本地域名服务器查询一个域名的IP地址,若本地域名服务器知道,则直接回答IP;否则自己迭代查询得到IP,再向主机回答IP。

  • 本地域名服务器向根域名服务器的查询采用迭代查询

若本地域名服务器不知道对应IP地址,则向根域名服务器发起请求;

根域名服务器回复一个顶级域名服务器IP,本地域名服务器向顶级域名服务器发起请求;

顶级域名服务器回复一个权限域名服务器IP,本地域名服务器向权限域名服务器发起请求;

权限域名服务器回复一个最终IP,本地域名服务器再回复给主机

报文数量

对于一个三级域名的查询,最多产生8个UDP报文。

  1. 主机发给本地域名服务器的请求报文
  2. 本地域名服务器发给域名服务器的请求报文
  3. 域名服务器发给本地域名服务器的响应报文
  4. 本地域名服务器发给顶级域名服务器的请求报文
  5. 顶级域名服务器发给本地域名服务器的响应报文
  6. 本地域名服务器发给权限域名服务器的请求报文
  7. 权限域名服务器发给本地域名服务器的响应报文
  8. 本地域名服务器发给主机的响应报文

高速缓存

当一个DNS服务器接收到DNS查询结果时,将该DNS信息缓存在高速缓存中,以便下一次询问时直接提供IP地址。

高速缓存中的信息有生存期,到期自动丢弃。

三、文件传输协议FTP

3.1 FTP的工作原理

概述

  • FTP是因特网上使用得最广泛的文件传输协议
  • 提供交互式访问,允许客户指明文件类型与格式,允许文件具有存取权限
  • 屏蔽了各计算机系统的细节,适合于在异构网络中的任意计算机之间传送文件

功能

  • 提供不同种类主机系统之间的文件传输能力
  • 用户权限管理的方式提供用户对远程FTP服务器上的文件管理能力
  • 匿名FTP的方式提供公用文件共享的能力

服务与端口

  • 采用客户/服务器的工作方式
  • 使用TCP
  • 控制连接端口号21,数据连接端口号20
  • 一个FTP服务器进程可同时为多个客户进程提供服务

3.2 控制连接与数据连接

FTP在工作时使用2个并行的TCP连接:控制连接和数据连接

控制连接

  • 监听21端口,等待客户连接
  • 用于传输控制信息,都以7位ASCⅡ传送
  • 控制连接在整个会话期间一直保持打开状态

数据连接

  • 数据连接用于连接客户端和服务器的数据传送进程
  • 数据传送进程实际完成文件的传送
  • 主动模式PORT(服务器连接到客户端的开放端口)
  • 客户端连接到服务器的21端口,登录成功后,客户端随机开放一个端口,并通知服务器
  • 服务器收到PORT命令和端口号后,通过20端口与该开放端口连接,发送数据
  • 被动模式PASV(客户端连接到服务器的开放端口)
  • 客户端要读取数据时,发送PASV命令到服务器,服务器随机开放一个端口,并通知客户端
  • 客户端连接到服务器开放的端口进行数据传输

3.3 FTP与NFS

  • 使用FTP修改服务器上的文件,需要将此文件传送到本地主机,再将修改后的文件副本传回服务器,较为耗时
  • 使用NFS修改服务器上的文件,进程只需打开一个远程文件,并在文件的某个特定位置开始读写数据,用户只需要复制一个大文件中一个很小的片段,不需要复制整个大文件

四、电子邮件

4.1 电子邮件系统的构成

用户代理(UA)

  • 用户与电子邮件系统的接口
  • 用户代理至少应当具有撰写、显示和邮件处理的功能
  • 通常情况下,用户代理是一个运行在PC上的程序,如Outlook

邮件服务器

  • 发送和接收邮件,向发信人报告邮件传送的情况
  • 邮件服务器采用客户/服务器方式工作,但必须能够同时充当客户和服务器
  • 发送端邮件服务器的邮件发送协议(如SMTP),只要发现邮件缓存中有待发送的邮件,就向运行在接收端邮件服务器的邮件发送协议(如SMTP)发起TCP连接。所有邮件发送完毕后关闭TCP连接。

邮件发送协议和读取协议

  • 邮件发送协议:SMTP
  • 邮件读取协议:POP3、IMAP

4.2 电子邮件格式与MIME

电子邮件格式

  • 信封
  • 用户写好首部后,邮件系统自动提取信息并写到信封
  • 内容
  • 首部
    • To(必需关键字):可以填入一个或多个收件人的电子邮件地址。电子邮件地址格式规定为:收件人邮箱名@邮箱所在主机的域名,如abc@cdf.com。abc这个名字在cdf.com这个服务器上必须唯一
    • From(必需关键字):通常由邮件系统自动填入
    • Subje(可选关键字):邮件主题
  • 主体
    • 用户自由撰写的邮件内容

MIME

  • SMTP只能传送7位ASCII码邮件,无法支持其他语言,也无法传送可执行文件及其他二进制对象
  • MIME在SMTP的基础上增加了邮件主题的结构,定义了传送非ASCII码的编码规则
  • 内容
  • 5个新的邮件首部字段,包括MIME版本、内容描述、内容标识、传送编码、内容类型
  • 定义了许多邮件内容的格式,对多媒体电子邮件的表示方法进行了标准化
  • 定义了传送编码,可对任意内容格式进行转换,而不会被邮件系统改变

4.3 邮件传输协议

SMTP

  • 负责发送邮件的SMTP进程是SMTP客户,负责接收邮件的SMTP进程是SMTP服务器
  • TCP连接,端口号25
  • SMTP不使用中间的邮件服务器,TCP连接在发送方和接收方两个邮件服务器之间直接建立
  • 通信过程
  • 连接建立:
    1. SMTP客户定期扫描邮件缓存,若发现有待发送邮件,则使用端口号25与SMTP服务器建立TCP连接。
    2. 连接建立后,SMTP服务器发出220 Service ready
    3. SMTP客户回应HELO命令,并附上发送方主机名
  • 邮件传送:
    1. SMTP客户发出MAIL命令,后跟发件人地址。
    2. SMTP服务器回答250 OK。
    3. SMTP客户发送一个或多个RCPT(收件人)命令,后跟收件人地址。
    4. 每一个RCPT命令,服务器都要回答250 OK或550 No such user here。以此检查收件人地址是否正确。
    5. 若收件人地址OK,则SMTP客户发送DATA命令,表示开始传输内容
    6. SMTP回复 354 Start mail input; end with .(回车换行)。
    7. SMTP客户开始传输邮件内容,并用.表示邮件结束
  • 连接释放
    1. 邮件发送完毕后,SMTP客户发送QUIT命令
    2. SMTP服务器回答221(服务关闭),表示服务器同意释放TCP连接

POP3

  • 客户/服务器工作方式
  • 接收方邮件服务器为POP3服务器,用户代理为POP3客户
  • TCP连接,端口号110
  • 在传输层明文传输密码
  • 基于ASCII码,但可以使用MIME发送非ACSII码数据
  • 工作模式
  • 下载并保留:用户读取邮件后,邮件依然保存在邮件服务器上
  • 下载并删除:用户读取邮件后,删除邮件服务器上的邮件

IMAP

  • 比POP3复杂,提供了创建文件夹、在不同文件夹之间移动邮件、在远程文件夹中查询邮件等联机命令
  • 允许用户代理只获取报文的某些部分,如只读取首部。适合低带宽的情况。
  • 需要维护会话用户的状态信息

基于万维网的电子邮件

  • 如Hotmial、Gmail等
  • 用户浏览器与邮件服务器之间的邮件发送或接收使用的是HTTP
  • 仅在不同邮件服务器之间传送邮件时才使用SMTP

五、万维网WWW

5.1 万维网的概念与组成结构

  • 万维网是一个分布式、联机式的信息存储空间(不等于因特网!)

  • 万维网的内核部分构成

  • 统一资源定位符(URL):负责标识万维网上的各种文档,并使每个文档在整个万维网的范围内有唯一的标识符

  • 超文本传输协议(HTTP):应用层协议,使用TCP
  • 超文本标记语言(HTML):一种文档结构的标记语言,描述页面上的各种信息

  • URL的一般形式:

<协议>://<主机>:<端口>/<路径>

  • 协议指获得万维网文档的方式,如http、ftp
  • 主机是存放资源的主机在因特网中的域名或IP地址
  • 端口和路径有时可省略
  • 不区分大小写

5.2 超文本传输协议HTTP

HTTP过程

用户在浏览器地址栏输入网站并回车之后发生的事件顺序:

  1. 浏览器分析链接指向页面的URL(http://www.tsinghua.edu.cn/chn/index.htm)
  2. 浏览器向DNS请求解析域名www.tsinghua.edu.cn
  3. DNS解析出域名对应的IP地址
  4. 浏览器与该服务器建立TCP连接(默认端口80)
  5. 浏览器发出HTTP请求:GET /chn/index.htm
  6. 服务器通过HTTP响应将文件index.htm发送给浏览器
  7. 释放TCP连接
  8. 浏览器解释文件index.htm,并将页面显示给用户

HTTP特点

  • 无连接:通信双方在交换HTTP报文时不需要建立HTTP连接
  • 无状态:同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时相同
  • Cookie:网站服务器为访问用户生成的唯一识别码,添加在HTTP响应报文的"Set-cookie"字段并发回给用户;用户自身也管理了一个特定Cookie文件,收到该报文后,会在文件中添加该网站服务器的主机名和Cookie识别码。当用户继续浏览这个网站时,会在HTTP请求报文中自动添加Cookie发给服务器,服务器根据该Cookie识别用户,从自己数据库中找到相关活动记录,进而执行一些个性化工作
  • 非持久连接与持久连接
  • 非持久连接:对于每个网页元素对象的传输都要单独建立一个TCP连接。每个对象引用都需要2个RTT
  • 持久连接(HTTP1.1默认方式):网站服务器在发送响应后仍保持TCP连接,服务双方继续在该连接上传送后续的HTTP请求和响应报文
    • 非流水线方式:客户收到一个响应报文后才能发下一个请求。每个对象引用都需要1个RTT
    • 流水线方式:客户每遇到一个对象引用就立即发出一个请求,可以连续发送请求。所有对象引用共计只需要1个RTT延迟

HTTP请求报文常用方法

方法 意义
GET 请求读取由URL标识的信息
HEAD 请求读取由URL标识的信息的首部,不会返回请求对象
POST 给服务器添加信息
CONNECT 用于代理服务器