loading...

36应用层

6.1 应用层基本概念

尽管传输层、网络层、数据链路层、物理层已经打通了网络中各个设备之间的通信,但还需要建立额外的协议以区分不同功能的网络

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

应用程协议定义了以下内容:

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

应用层功能:

  • 文件传输、访问和管理
  • 电子邮件
  • 虚拟终端
  • 查询服务和远程作业登录

应用层重要协议:FTP,STMP、POP3,HTTP,DNS

6.1.1 网络应用模型

客户/服务器模型

Client/Server,简称C/S

  • 服务器为提供计算服务的设备:
    • 服务器要求永久提供服务,并且提供永久可访问的访问地址/域名
  • 客户机为请求计算服务的主机
    • 客户机与服务器通信,使用服务器提供的服务
    • 客户机间歇性接入网络,可能使用动态IP地址,且不与其他客户机直接通信

C/S模型应用场景主要是Web、文件传输FTP、远程登陆、电子邮件


客户/服务器模型实例:百度网盘
img

  • 客户机使用百度网盘客户端与百度网盘服务器建立通信,只有通过百度网盘服务器才能访问自己的网盘文件
  • 服务器本质上就是一台性能很强的主机

C/S模型特点:

  • 客户、服务器低位不平台
  • 客户之间不直接通信
  • 如果服务器损坏,会影响全局的服务
  • 服务器的负载比较大

点对点网络模型/对等模型

Peer-to-peer,简称P2P

  • P2P模型中不存在永远在线的服务器,每个主机既可以提供服务,也可以请求服务
  • 任意端系统/节点之间可以直接通信
  • 节点间歇性接入网络,节点可能改变IP地址
  • P2P模型可扩展性好,网路健壮性强

P2P模型实例:BT种子下载

  • 假设网络中需要共享一个文件,主机A中有该文件,并已启动了P2P客户端
  • 主机A可通过P2P网络向主机B传输该文件,使得主机B中也具备了该文件
  • 假设此时主机C也需要下载该文件,会从网络中所有具有该文件的主机上进行下载,即主机A、主机B同时向主机C传输文件,以提供翻倍的传输速度

P2P模型特点:

  • 主机之间地位平等,主机之间可以直接通信
  • 单个节点损坏不影响全局,且各节点可以分摊负载

6.2 域名服务系统DNS

域名:

  • IP地址本身有限,所有单位申请来的IP地址都是随机的,因此单凭IP地址无法表示特定意义,也不方便记忆,因此提出了使用域名的方式来代替IP地址
  • 如,www.baidu.comyz.chsi.com.cn
  • 域名不区分大小写,可使用部分字符符号如-

域名中存在级别,自左向右从低到高,四级域名 - 三级域名 - 二级域名 - 顶级域名 - 根
img

  • 不同级别域名使用.进行分割。在顶级域名后,一般省略了一个.,这其实就是根
  • 顶级域名主要包括国家顶级域名、通用顶级域名、基础结构域名/反向域名
    • 国家顶级域名如cn,us,uk
    • 通用顶级域名如com,net,org,gov,int,aero,museum,travel
    • 基础结构域名/反向域名,只有arpa,该域名专用于域名解析
  • 二级域名包括类别域名、行政区域名
    • 类别域名如ac,com,edu,gov,mil,net,org
    • 行政区域名bj,js,用于国家内不同区域的划分

域名服务器/DNS服务器

DNS服务的作用:将域名解析为IP地址

域名服务器/DNS服务器:用于提供DNS服务的一台主机,DNS服务默认端口为UDP 53端口

域名服务器分类以下几类:
img

  • 根域名服务器
    • 存放所有二级域名的服务器,会返回顶级域名服务器的IP地址
    • 根域名服务器不唯一,根域名服务器的域名也不唯一
  • 顶级域名服务器
    • 管理该顶级域名服务器注册的所有二级域名
  • 权限域名服务器
    • 负责一个区的域名服务器
    • 区表示权限域名服务器负责的管辖范围
    • 如,某公司申请了顶级域名com下的一个域名abc.com,那么所有xxx.abc.com域名都在abc.com的域下
      • 由于该公司业务扩展,将abc.com域进行进一步的分区,如分出了y.abc.com
      • 那么y.abc.com和abc.com就处于同个域,但是不同区,两者地位相同
      • 即这两个区都可以在com顶级域名服务器中查询到,但属于不通的权限域名服务器

除了以上域名服务器外,还有一种本地域名服务器
img

  • 当一个主机发出DNS查询请求时,查询请求报文就发送给本地域名服务器
  • 相比访问权限域名服务器、顶级域名服务器之类,效率更高,本地域名服务器存放了近期网络中最常用的域名映射关系
  • 只有当本地域名服务器中查不到,才会向上级域名服务器中查询

域名解析过程

域名逐级查询过程是从高级域名向低级域名逐级匹配的方式进行的

  • 根域名服务器如果在内部查询不到,会根据查询的域名信息的一级域名,获取顶级域名服务器地址
  • 随后到顶级域名服务器中查询,如果仍旧找不到,会再根据二级域名,获取区域域名服务器地址
  • 在区域域名服务器中查找到对应的IP后返回,如果仍旧找不到返回无法解析

递归查询:靠别人
img

  • 主机进行域名解析时,先向本地域名服务器查询,如果查不到,直接查询根域名服务器
  • 如果根域名服务器中查询不到,随后交给根域名服务器逐级查询顶级域名服务器、权限域名服务器
  • 直到查到最后域名对应的主机IP,返回给根域名服务器,然后根域名服务器将查询到的IP返回给本地域名服务器

迭代查询:靠自己
img

  • 主机进行域名查询时,先向本地域名服务器查询,如果查不到,也是直接查询根域名服务器
  • 如果根域名服务器中查不到,则本地域名服务器根据根域名服务器提供的信息,到顶级域名服务器中查询
  • 同理,本地域名服务器再根据顶级域名服务器提供信息查询权限域名服务器,直到查到最后域名对应的主机IP直接返回主机

域名解析的过程往往是很慢的,因此在主机本地会对近期访问的域名进行高速缓存并定期更新,以加快站点的访问效率

6.3 文件传输协议FTP

简单文件传送协议TFTP,Trivial File Transfer Protocol:

  • 是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务
  • 基于UDP协议实现,只能从文件服务器上获得或写入文件,不能列出目录,不进行认证
    • 能够用于有UDP协议但是没有TCP的环境,TFTP所占内容要比FTP协议小得多
    • 对于那些不具备磁盘来存储系统软件的自举硬件设备来说TFTP特别有用

文件传送协议FTP,File Transfer Protocol:

  • 提供不同种类主机系统(硬、软件体系可以不同)之间的文件传输能力
  • FTP基于C/S协议,使用TCP实现可靠传输
    • 用户通过一个客户机程序连接至远程计算机上运行的服务器程序
    • FTP服务器:依照FTP提供服务,进行文件传送的计算机
    • FTP客户端:连接FTP服务器,遵循FTP协议与服务求传送文件

Windows系统内一般会附带FTP客户端软件实现基础功能

6.3.1 FTP工作原理

FTP需要提供ftp地址,支持用户名&密码登录,以及匿名登录

  • 匿名登录:
    • 互连网中有很大一部分FTP服务器被称为匿名(Anonymous)FTP服务器
    • 这类服务器的目的是向公众提供文件拷贝服务,不要求用户事先在服务器进行登记注册,也不用取得FTP服务器的授权
    • Anonymous你们文件传输能够是用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户
    • 用户使用特殊的用户名anonymous登录FTP服务,就可以访问远程主机上公开的文件

FTP服务器中的服务器进程主要分为主进程和从属进程

  • 主进程一般只有一个,有若干个从属进程
  • 服务器主进程会打开TCP的一个熟知端口,FTP服务器端口为21

img

  • 图中服务端的控制进程、数据传送进程都是从属进程
  • FTP服务器的21端口会一直保持打开,监听FTP客户端的FTP请求;当FTP服务建立控制连接后,才会打开数据连接端口
  • 客户端先通过客户端程序的控制进程请求FTP服务器的控制进程,即访问21端口
  • 服务器控制进程收到请求后,会创建数据传送进程,并打开20端口,服务器与客户端的数据传送过程通过20端口进行
    • 在客户端请求FTP的过程中,控制连接始终保持,数据连接只在数据传输过程才会保持
  • 数据连接端口不一定是TCP 20,与TCP的传输模式有关
    img
    • 主动方式:
      • FTP数据连接采用TCP 20端口
    • 被动方式:
      • FTP数据连接使用的端口由服务器和客户端自行协商决定,端口号一般大于1024

TCP传输模式:

  • 文本模式:
    • ASCII模式,以文本序列传输数据
  • 二进制模式:
    • Binary模式,以二进制序列传输数据

6.4 电子邮件服务

电子邮件信息格式:信封 + 内容

  • 信封,一般为收件邮箱地址
  • 内容:首部 + 主体
    • 首部:首部需要填写收件人地址以及邮件的主题/标题,填写后会自动生成如下格式
    From: 111@163.com
    To: abc@163.com
    Subject: Hello!
    Date: 2018-08-11
    
    • 主体就是电子邮件的内容

6.4.1 电子邮件系统

img

  • 邮件服务器之间的通信,发送方和接收方身份可以互换,每个邮件服务器都可以提供发送和接收功能

用户主机中的邮件客户端充当用户代理,通过SMTP发送到邮件服务器中
img

  • 邮件服务器充当邮件缓存,邮件服务器之间也通过SMTP相互传输,并继续充当缓存
  • 当接收方用户代理在线且空闲时,通过POP3协议从邮件服务器中读取邮件
  • 以上过程均基于TCP连接,保证发送、接收过程可靠

6.4.2 电子邮件协议

传统电子邮件协议包括SMTP、POP3、IMAP以及基于HTTP的邮件

现在绝大多数用户都采用基于万维网的电子邮件进行邮件的接收、发送。发送方通过HTTP协议向邮件服务器直接发送,接收方也通过HTTP协议从邮件服务器中读取邮件

SMTP

简单邮件传送协议SMTP:

  • SMTP协议规定了两个相互通信的SMTP进程之间硬如何交换信息
  • 负责发送邮件的SMTP进程就是SMTP的客户端,服务接收邮件的进程就是SMTP的服务器
  • SMTP规定了14条命令和21中应答信息
    • 命令由几个字母组成,应答信息由3位数据代码和简单文字说明
  • SMTP基于TCP连接,采用C/S模式,使用TCP 25端口

SMTP通信三个阶段:

  • 连接建立
    • 发送方和发送方邮件服务器建立连接,并将邮件发送给发送方邮件服务器,发送方邮件服务器将邮件存入缓存
    • 发送方邮件服务器定期会扫描缓存中是否有邮件,如果有邮件会尝试向接收方邮件服务器发送
      • 发送方邮件服务器通过SMTP与接收方邮件服务器建立TCP连接,接收方会像发送方返回应答信息220 Service ready,告知发送方可以接收邮件
      • 发送方邮件服务器收到应答信息,会向接收方服务器发送HELLO命令,且携带邮件发送方的主机名
      • 接收方邮件服务器收到HELLO命令后,若有能力接收,则应答250 OK;反之,应答421 Service not available
      • 如果发送方在一段时间内无法将缓存中的邮件发送给接收方邮件服务器,则会通知发送方发送失败
  • 邮件传送
    A: MAIL FROM: <wangdao@163.com>
    B: 250 OK 或 B: 451/452/500/...           #SMTP服务器回复是否已准备好接收邮件,可以接收则返回250
    ...                                       #SMTP服务器最终回复250表示准备好
    A: RCPT TO: <mooc@163.com>                #RCPT表示收件人地址,允许多条RCPT命令,即群发
    B: 250 OK 或 B: 550 No such user here     #SMTP服务器确认是否存在该用户,如果存在则返回250
    A: DATA                                   #如果用户存在,则SMTP服务器将开始传输邮件内容
    B: 354 start mail input;end with <CR><LF>.<CR><LF>     #SMTP服务器同意接收邮件,并且说明传输结束标志为<CR><LF>.<CR><LF>
    A: Date...                                #开始传输邮件内容
    B: 250 OK                                 #SMTP服务器接收结束
    
  • 连接释放
    • 邮件发送结束,SMTP客户发送QUIT命令,SMTP服务器返回221,表示同意释放TCP连接

通用因特网邮件扩充MIME:

  • SMTP缺点:
    • SMTP不能传送可执行文件或者其他二进制对象
    • SMTP仅限于传送7位ASCII码,不能传送其他非英语国家的文字
    • SMTP服务器会拒绝一定长度的邮件
  • MIME可以时电子邮件系统支持声音、图像、视频以及多种国家语言等等,使得传输内容丰富多彩
  • 转换过程如下:
    img

MIME最初是一种互联网标准,主要用于邮件系统中,现在逐步用于浏览器中

  • 服务器在发送多媒体数据时,会将MIME标识符插入在发送的数据中,以告知浏览器其发送的数据类型
  • 浏览器根据多媒体数据类型启用对应类型的插件,从而读取相应的文件

POP3

邮局协议POP3:

  • POP3指邮局协议版本3,基于TCP连接,使用C/S模式,使用TCP 110端口
  • 只发生在接收邮件服务器和接收方用户代理之间

POP3工作方式:

  • 下载并保留(保留在接收邮件服务器)
  • 下载并删除

IMAP

网际报文存取协议IMAP:

  • IMAP协议比POP协议复杂,当用户PC上的IMAP客户程序打开IMAP服务器的邮件,用户可以看到邮件的首部
  • 若用户需要打开某个邮件,该邮件才上传到用户的计算机上
  • IMAP允许用户叜不同地方使用不通的计算机随时上网阅读处理邮件,还允许只读邮件的某一部分
    • 如先看正文,不下载邮件的附件

6.5 万维网WWW与超文本传输协议HTTP

6.5.1 万维网WWW

万维网WWW,World Wide Web:

  • 一个全球范围的、分布式、联机式的信息存储空间,各种"资源"通过HTTP协议传送给用户

万维网包括三部分:

  • 统一资源定位符URL:
    • 用于指向万维网中的某个特定资源
    • URL = <协议>://<主机>:<端口>/<路径>
      • 其中,端口、路径可以省略,因为有默认值
      • 如Web服务器默认的80,8080端口,默认首页index.html
    • 如,http://www.bilibili.comhttp://www.dilidili.com/肯德基.png
  • 超文本传输协议HTTP:
    • 应用层协议,基于TCP连接
    • HTTP协议定义了HTTP请求报文、HTTP响应报文两种数据结构
  • 超文本标记语言HTML:
    • 一种文档结构的标记语言,使用一些约定的标记对页面上各种信息(包括文字、图像、视频等)、格式进行描述

6.5.2 访问网站过程

网页 = 1个html文件 + n个网页元素

  • 网页元素如图片、视频等文件
  • html 文件中会说明要引用哪些元素(指明存储路径)

html文件:

  • 一个网页的文本信息的交互控件(如输入框、按钮)都是在html中说明的
  • html中可以引用图片、视频等元素

本地网页打开过程:

  • 打开一个html文件
  • 浏览器根据html文件中的信息以及引用渲染出网页的样子

访问万维网上站点的过程:
img

  • 用户输入网址/域名
  • 浏览器通过DNS服务器查询域名对应的IP地址,浏览器会将查询结果"域名→IP"缓存在本地
    • 主机会构造DNS请求报文,向下封装成UDP数据报,再向下封装成IP数据报,MAC地址如果在ARP表中直接可以查询,则直接封装成MAC帧
    • 主机将该IP分组/MAC帧发送到DNS服务器的UDP 53端口,该DNS服务器就是本地域名服务器
    • 本地域名服务器如果可以查询到该网址对应的IP地址,则将该映射关系封装为DNS相应报文,并逐层向下封装
  • 浏览器与<Web服务器IP地址:80端口>建立TCP连接
    • Web服务器使用80或者8080端口向外提供Web服务
  • 浏览器在握手3中携带HTTP请求报文
    • HTTP请求报文中可以指明要访问哪个html网⻚,从而通知服务器应该左什么样的响应,即返回什么样的页面
    • 一般Web服务,按照站点根地址访问会返回站点默认html页面
  • 服务器返回HTTP响应报文,并携带html文件
  • 用户主机收到html文件后,经过浏览器渲染,将html内容以及引用的网页元素一同下载并展示出来
    • 根据HTTP的工作方式,决定是否需要进行多组HTTP请求、响应
    • 每个网页元素本质上都是文件,每个文件的获取都需要经过一组HTTP请求&响应
    • 只有先获取html文件,才能直到其他被引用的网页元素的URL

6.5.3 HTTP协议工作方式

HTTP/1.0默认采用废除蓄连接

HTTP/1.1默认采用持续连接

  • 除非再HTTP请求报文中设置参数Connection: Close

HTTP的请求报文一般比较小,可以忽略封装后TCP报文的传输时延;而HTTP响应报文一般比较大,必须考虑封装后TCP报文段的传输时延

非持续连接

非持续连接HTTP:

  • 每建立依次TCP连接,仅完成一组HTTP请求&响应
  • 可以通过并行TCP连接,加快获取网页元素的速度

img

  • 握手3中可以携带HTTP请求报文,指明需要哪个访问的页面
  • 用户主机得到html文件后,浏览器发现引用了三个网页元素,则发送三次HTTP请求报文分别获取这三个网页元素
  • 获取html文件后获取网页元素,发送HTTP请求报文不需要等前一个TCP连接完全释放才能进行
    • 只要经过三次握手以及用户主机顺利收到响应报文后,就可以直接发起新的TCP连接
      • 甚至并行发起新的TCP连接
    • 非连续HTTP每请求一个文件至少需要2RTT

持续连接

持续连接HTTP:

  • 每建立依次TCP连接,可以完成多组HTTP请求u&响应
  • 非流水线:
    • 只有上一次HTTP请求收到响应后,才可以发出下一次HTTP请求
  • 流水线:
    • 可以连续发出多个HTTP请求
  • 不论是非流水线还是流水线,只要是持续连接的HTTP
    • 在用户主机从Web服务器下载完html页面以及所有引用的网页元素后,并不会直接断开TCP连接,而会保留一段时间
    • 保持时间与Web服务器持续时间参数设置有关

持续连接 + 非流水线
img

  • 用户主机与Web服务器建立TCP连接获取html文件后,不会直接断开TCP连接
  • 浏览器解析到需要引用网页元素,则在保持的TCP连接中继续发送HTTP请求报文,下载网页元素
  • 非流水线要求每次只能请求一个,并且等本次网页元素响应完成才能发起对下一个网页元素的HTTP请求报文

持续连接 + 流水线
img

  • 用户主机与Web服务器建立TCP连接获取html文件后,不会直接断开TCP连接
  • 浏览器解析到需要引用网页元素,则在保持的TCP连接中继续发送HTTP请求报文,下载网页元素
  • 流水线允许可以连续发送多个HTTP请求报文,则连续发送三个HTTP请求报文获取所有引用的网页元素

6.5.4 HTTP协议报文格式

img
请求报文:

  • CRLF为回车换号符号,实质是一个ASCII字符
  • 首部行包含的字段实际上就是该方法执行所需要的参数,URL其实也是这个方法的参数之一
  • 实体主题通常是空的,只有少数场景会使用该部分
    • 如,进行文件上传时,会把文件以二进制流的形式填入实体主体中

GET方法一般用于从服务器中拉取资源,而POST方法一般用于向服务器提交信息,如账号密码登录

响应报文:

  • 当服务器收到GET请求报文时,会在响应报文的实体主体中插入请求的资源二进制流数据
  • 当服务器收到HEAD请求报文时,响应报文中实体主体部分不会填入任何数据,只返回首部信息,即除实体主体以外的响应报文
    • 一般HEAD报文会在进行GET请求前先发送,询问服务器是否有URL所指的资源

状态码一般为3位,可根据首位数字来判断状态码反馈的大致信息:

  • 1xx:反馈信息
  • 2xx:表示请求成功
  • 3xx:资源请求重定位
  • 4xx:客户端请求存在错误
  • 5xx:服务器服务发生错误

HTTP报文示例

img
Request Headers表示该HTTP报文请求报文首部

  • 第一行:
    • 第一个部分为方法,空格分割
    • 第二个部分是请求资源的URL,如果只有一个路径表示在站点所在主机请求资源,跨站点资源会附带协议、地址、端口等信息,空格分隔
    • 第三个部分为协议,要么HTTP/1.0,要么HTTP/1.1
  • 随后的行都是首部字段,即请求参数
    • Connection: keep-alive表示该HTTP请求请求为持续连接
    • Host: www.baidu.com表示该HTTP请求报文请求的主机域名为百度

Response Header表示该HTTP报文响应报文首部

  • 第一行:
    • 第一个字段为协议,同请求报文,空格分割
    • 第二个为状态码,404表示当前请求资源不存在,空格分割
    • 第三个字段是对状态码的解释描述

Cookie是服务器发送给用户浏览器并保存在本地的一小块数据

  • 用户浏览器首次访问某个Web站点并请求资源时,该站点服务器会在后台生成一个Cookie,并在响应报文的首部字段中假如cookie,一同发送给用户
  • 用户浏览器收到响应报文后,会将cookie信息存在浏览器本地缓存,并在随后与该站点进行的连接均在请求报文中添加该Cookie
  • 通常,cookie用于告知服务端两个请求是否来自于同一个浏览器,例如用于账号登录状态的保持

cookie早期常用于客户端数据的存储

  • 因为当时在HTTP使用场景下,没有其他合适的存储信息的方法,cookie成为了唯一的存储手段
  • 但是由于服务器使用cookie进行用户的区别,浏览器每次请求都必须携带cookie数据,带来了额外的性能开销(尤其是移动环境)
  • 现代HTTP推荐使用专门的存储API,如Web storage API或者IndexeDB

img

  • Cookie通常有效期,且由服务器后台管理
    • 服务器生成的Cookie识别码相当于给网站的方可制作一张临时身份证,一段时间后会国企
    • Cookie识别码需要分别缓存在Web服务器、客户端
  • 如果HTTP请求中包含Cookie字段,说明该主机曾经访问过该站点
posted @ 2024-11-05 22:05  GK_Jerry  阅读(40)  评论(0)    收藏  举报