第六章 应用层
6.1应用层总览、网络应用模型
- 基本概念
- 网络应用模型
- C/S
- P2P
- C/S 与 P2P 的混合结构
- 应用程序相关
- DNS
- 文件传输FTP
- 万维网WWW
- 电子邮件
- 应用层里,主要相关的就是进程,比如QQ微信。
协议
协议的作用
应用层对应用程序的通信提供服务。
应用层协议定义:
应用进程交换的报文类型,请求还是响应?
各种报文类型的语法,如报文中的各个字段及其详细描述。
字段的语义,即包含在字段中的信息的含义。
进程何时、如何发送报文,以及对报文进行响应的规则。
应用层的重要协议:
- FTP:文件传输、访问和管理
- SMTP、POP3、IMAP:电子邮件
- HTTP:虚拟终端
- DNS:查询服务和远程作业登录
网络应用模型/网络体系结构
- 客户/服务器模型(Client/Server)
- P2P模型(Peer-to-peer)
- C/S 与 P2P 的混合结构
客户/服务器(C/S)模型
应用:Web,文件传输FTP,远程登录,电子邮件
例如QQ消息发送过程:A----服务器----B
服务器:提供计算服务的设备
- 永久提供服务,服务器保持开启
- 永久性访问地址/域名
- (可以专门设立一个服务器,也可以安装软件使得我们的主机成为一台服务器)
客户机:请求计算服务的主机。
- 1.与服务器通信,使用服务器提供的服务
- 2.间歇性接入网络
- 3.可能使用动态IP地址
- 4.不与其他客户机直接通信
P2P模型
- 不存在永远在线的服务器
- 每个主机既可以提供服务,也可以请求服务【两面派】
- 任意端系统/节点之间可以直接通讯
- 节点间歇性接入网络
- 节点可能改变IP地址
- 可扩展性好【当涌入大量主机,依然OK】
- 网络健壮性强【就算其中某一个坏掉了,其他的依然OK】
- 优点:自扩展性
- 缺点:难以管理
应用:区块链 比特币
简单来说,区块链就是去中心化的分布式账本。去中心化,就是没有中心,或者说每个人都可以是中心,这是和传统的中心化方式不同的。分布式账本,意味着数据的存储不只是在每一个节点上,而是每一个节点会复制并共享整个账本的数据。
比特币是一种点对点形式(P2P)的数字货币,P2P是种去中心化的形式。通过P2P模式的去中心化的方式和本身特殊的算法可以保证无法被人制造出来。比特币使用很多P2P网络中的节点构成的分布式数据库以此来确定并记录所有的交易行为,并使用密匙以保证货币流通中的安全性,基于密码学的设计不会存在没有持有比特币的人支付或者转移比特币。这就确保了比特币的所有权与交易的匿名性。
C/S 与 P2P 的混合结构
应用:即时讯息
两个聊天用户之间是P2P
注册、查询通过服务器
用户上线时要在中心服务器上进行注册
用户与中心服务器联系以找出在线伙伴
网络体系结构与应用程序体系结构之间有什么区别?
网络体系结构是ISO创建的OSI,
应用程序体系结构,是server-client结构或p2p体系结构。
6.2域名解析系统 DNS
作用
将输入在浏览器的域名转化为IP地址。
【毕竟人记的那一串字母电脑是看不懂的,电脑看的懂的那一串数字人又记不住。】
域名详解
例如域名:www.baidu.com
从左到右,以每个点为分割,分别为三级域名,二级域名,顶级域名。
顶级域名
国家顶级域名: cn,us,uk
通用顶级域名: com,net,org,gov,int(国际),aero(航空),museum,travel
基础结构域名/反向域名:arpa(用于反向解析,即将IP转化到域名)
二级域名
类别域名: ac,com,edu,gov,mil,net,org
行政区域名: 用于我国各省、自治区、直辖市 bj,js
自己注册的域名:baidu
域名服务器
域名解析过程
主角:本地域名服务器
分类
- 递归查询(靠别人帮忙找)
- 迭代查询(靠自己到处找)
高速缓存
高速缓存:最近使用过的域名,会被记录,以加速下次的查找
- 首先,我已经访问过这个网站
- 访问本地域名
- 找到了对应IP,直接返回给主机
- 没有找到,但是本地域名会指出下一步去那个服务器找。
作用,优点:
- 加速请求【直接跳过了根域名服务器】
- 缩短报文
- 当然,高速缓存是需要经常更新的
6.3文件传输协议 FTP
以下两个协议都是用于拷贝:上传、下载。
文件传送协议FTP(File Transfer Protocol)
- 用TCP【可靠】
- FTP是基于客户/服务器(C/S)的协议。
- 可以让用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。
简单文件传送协议 TFTP(Trivial File Transfer Protocol)
-
很小,易于实现,用UDP【不可靠】
-
占用代码块小,适于微机
-
以上两类协议可提供不同种类主机系统(硬、软件体系等都可以不同)之间的文件传输能力。
FTP服务器和用户端
FTP客户端:连接FTP服务器,遵循FTP协议与服务器传送文件的电脑
FTP服务器:依照 FTP 协议提供服务,进行文件传送的计算机
FTP服务器的进程,有一个主进程和n个从进程。【就像去理发的时候,门口有一个迎宾的人(引导作用)会问你主要是要剪头发还是烫头发,然后再让给你从n个托尼老师(负责各种功能)中选一个】
FTP工作原理
FTP使用TCP实现可靠传输。
过程
- 用户在界面登录,
- 客户端通过控制进程,使用TCP控制连接端口21,发送传输请求
- 服务器端响应请求,TCP数据传输端口20,传输文件
过程扩写
- FTP客户首先发起建立1个与FTP服务器端口号21之间的TCP控制连接,指定TCP作为传输层协议
- 客户在建立的控制连接上获得身份认证
- 客户在建立的控制连接上发送命令来浏览远程主机的目录
- 当服务器接收到1个文件传输命令时, 在服务器端口号20创建1个与客户的TCP数据连接
- 1个文件传输后,服务器结束这个TCP数据连接
注意事项
- 控制连接与数据连接的差异
- 控制连接始终保持
- 数据连接保持一会【传输完了就关闭】
- 是否使用TCP 20端口建立数据连接与传输模式有关
- 主动方式使用TCP 20端口
- 被动方式由服务器和客户端自行协商决定( 端口>1024)
匿名FTP服务器
互连网中有很大一部分 FTP 服务器被称为(Anonymous)“匿名”FTP服务器。
用户使用特 殊的用户名“anonymous”登录FTP服务,就可访问远程主机上公开的文件。
这类服务器的目的是向公众提供文件拷贝服务,因为公众数量太大,若注册容易造成不必要的负担,故不要求用户事先在该服务器进行登记注册,也不用取得FTP服务器的授权。
FTP传输模式
- 文本模式:ASCII模式,以文本序列传输数据
- 二进制模式:Binary模式,以二进制序列传输数据。
6.4 电子邮件
- 信息格式
- 用户代理
- 组成结构
- 邮件服务器
- 协议
- 协议
- SMTP
- POP3、IMAP
- MIME
电子邮件系统工作详解
- 发件人通过SMTP(依靠TCP)传输到发送方的邮件服务器
- 发送方邮件服务器通过SMTP(依靠TCP)发到接收方邮件服务器
- 收件人通过POP3(依靠TCP)读取邮件
简单邮件传送协议SMTP
作用
SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。
用到了TCP,是持久连接,且要求邮件消息必须是7-bit ASCII
SMTP客户:负责发送邮件的SMTP进程
SMTP服务器:负责接收邮件的进程
1、SMTP
SMTP通信三个阶段:
连接建立——邮件传送——连接释放
与HTTP的比较:
都有ASCII 命令/应答交互、状态码
- HTTP: 拉协议
- 用户使用HTTP从服务器拉取信息。其TCP连接是由想得到文件的机器发起。
- HTTP: 每个对象封装在它各自的HTTP响应消息中发送
- SMTP: 推协议
- 发送邮件服务器把文件推向接收邮件服务器,其TCP连接是由要发送文件的机器发起。
- SMTP: 一个邮件内各个对象置于同一个邮件消息的多部分发送
2、MIME
SMTP的缺点:
- 不能传送(.exe)可执行文件或者其他二进制对象。
- 仅限于传送7位ASCII码,不能传送其他非英语国家的文字
- SMTP服务器会拒绝超过一定长度的邮件
所以诞生了MIME
多用途因特网邮件扩展
使得传输内容丰富多彩:使电子邮件系统可以支持声音、图像、视频、 多种国家语言等等。
3、邮局协议POP3
工作方式
- 下载并删除,用户读取邮件后,服务器不再保存
- 下载并保留(在服务器)
特点
- 用户无法在邮件服务器上远程创建文件夹
- 换客户端后不能再读邮件
- POP3的会话是无状态的
4、网际报文存取协议IMAP
- 与POP一样,但更复杂,不过也是用于让用户在接收方服务器上读取邮件。
- 当用户Pc上的IMAP客户程序打开IMAP服务器的邮箱时,用户可以看到邮箱的首部,若用户需要打开某个邮件,该邮件才上传到用户的计算机上。
- IMAP可以让用户在不同的地方使用不同的计算机随时上网阅读处理邮件。
- 还允许只读取邮件中的某一个部分(先看正文,有WiFi的时候再下载附件)。
6.5 基于万维网(Web)的电子邮件
-
最大的特点:方便
-
发送和读取都使用HTTP
例:关于电子邮件应用描述正确的是( AD )。
- 邮件服务器之间转发电子邮件可以采用SMTP协议√
- 邮件服务器之间转发电子邮件可以采用POP3协议X
- 发件人可以直接将电子邮件从本机发送到收件人的邮件服务器X
- 发件人可以采用web的方式发送电子邮件√
万维网概述
万维网www (World wide web)是一个大规模的、联机式的信息储藏所/资料空间,是无数个网络站点和网页的集合。
万维网以客户/服务器方式工作,用户使用的浏览器就是万维网客户程序,万维网文档所驻留的主机运行服务器程序。 万维网使用超文本标记语言HTML,使得万维网页面设计者可以很方便地从一个界面的链接转到另一个界面,并能 够在自己的屏幕上显示出来
如何确定文件位置?
统一资源定位符URL(Uniform Resource Location) :对资源唯一标识(文字、视频、音频...) URL不区分大小写
URL一般形式:
<协议>://<主机>:<端口>/<路径> http://www.baidu.com:80/
使用:
用户通过点击超链接(http://www.baidu.com)获取资源,这些资源通过超文本传输协议(HTTP)传送给使用者。
6.6 超文本传输协议HTTP
C/S模式: client/server
HTTP协议定义了浏览器(万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给 浏览器。
HTTP协议的特点
- HTTP采用TCP作为运输层协议,但HTTP协议本身是无连接的(通信双方在交换HTTP报文之前不需要先建立HTTP连 接)。
- HTTP协议是无状态的。【不会记住客户上一次去了哪】
但是在实际工作中,一些万维网站点常常希望能够识别用户。
COOKIE 跟踪用户
Cookie:允许Web站点跟踪、识别用户;服务器可以限制用户访问,或把内容与用户身份关联。可以跟踪会话,也可以保存用户喜好或者保存用户名密码(是存储在用户主机中的文本文件,记录一段时间内用户的访问记录。)
一些商家以便于通过这些来提供“个性化服务”
包括四个部分:
在HTTP响应报文中有一个cookie 首部行
在HTTP请求报文中有一个cookie 首部行
用户主机中保留有一个 cookie 文件并由浏览器管理
Web站点的后端数据库保存cookie。cookie保存在客户端
例
举例:
Susan总是从相同的PC访问因特网,她首次访问一个特定的电子商务站点,当起始HTTP请求到达站点时,站点产生一个独特的ID,并为ID在后端数据库中生成一个表项。
Cookies的 4 个重要方面
•在HTTP响应报文中有一个cookie 首部行
•在HTTP请求报文中有一个cookie 首部行
•用户主机中保留有一个 cookie 文件并由浏览器管理
•Web站点的后端数据库保存cookie
描述Cookie技术的作用:
- 标识用户
- 维护购物车列表
- 推荐商品
- 在无状态的HTTP之上建立用户会话层(Web e-mail)
- 不适合游动用户
HTTP的连接方式
-
非持久连接 Close
-
每个TCP连接上只传送一个对象,下载多个对象需要建立多个TCP连接,所以要下载十个文件就要十次。1个HTML文件, 和10个jpeg图像,那就要11次
-
HTTP/1.0
-
每个对象需要2个RTT
OS必须为每个TCP连接分配主机资源
大量客户的并发TCP连接形成服务器的严重负担
-
-
持久连接 Keep-alive
-
服务器发送响应消息后保持连接。同一客户/服务器的后续HTTP 消息继续在该连接上传送
-
一个TCP连接上可以传送多个对象
-
HTTP/1.1
-
流水线方式么?
-
非流水线【如传输四个文件,须一个一个地发送请求】
-
客户先前响应消息收到,才发出新的请求消息
每个引用对象经历1个RTT
-
-
流水线【如传输四个文件,四个请求如流水依次发送】
-
HTTP/1.1默认使用
客户遇到1个引用对象就发送请求消息
所有引用对象只经历1个RTT
-
-
-
HTTP的报文
HTTP报文是面向文本的,因此在报文中的每一个字段都是一些ASCII码串。(易于人读格式)
两类
-
请求报文
-
相应报文
请求报文
- GET:请求指定的页面信息,并返回实体主体。
- POST:指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改。
- HEAD:类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
- PUT从客户端向服务器传送的数据取代指定的文档的内容。
响应报文
文件在实体主体中被上载到URL字段指定的路径
DELETE
删除URL字段指定的文件
!! 响应码
- 200 OK 请求成功,所请求信息在响应消息中返回
- 301 Moved Permanently 所请求的对象已永久迁移,新的URL在本响应消息的(location: )头部指出
- 400 Bad Request 该请求不能被服务器解读
- 404 Not Found服务器上不存在所请求文档
- 505 HTTP Version Not Supported服务器不支持请求报文使用的HTTP版本
HTTP3
目标:通过UDP增加每个对象的错误和拥塞控制(更多流水线)的安全性
通过单个TCP连接的HTTP/2意味着:
从数据包丢失中恢复仍然使所有对象传输停止
像HTTP 1.1中一样,浏览器具有打开多个并行TCP连接的动机,以减少停顿,提高整体吞吐量
普通TCP连接上没有安全性
HTTP2的目标
HTTP1.1: 单个TCP连接中引入多个流水线GET请求
服务器对GET请求进行有序响应(FCFS:先到先服务调度)
使用FCFS时,较小目标对象必须等待大目标对象先行传输( head-of-line (HOL) blocking )
丢失恢复(重传丢失的TCP报文段)使对象传输停滞
例如
HTTP 1.1: 客户请求1个大对象(比如视频文件)和99个小对象。当一个大文件占99%的时间传输,但是剩下的99个只占1%的时间,没办法,大的个子大,小的只能委屈乖乖排队。
HTTP/2: 对象分为帧,帧传输交错。就可以避免1.1的情况,小的直接过去了组装。
6.7 内容分发网络(CDN)
CDN是内容分发网的简称,Content Distribution Network。
现今几乎所有的视频流公司都利用CDN存储视频或Web内容,包括文档、图片和音频的副本。
常用于视频流:Internet 带宽的主要消耗者(Youtube、Netfix)
Netflix, YouTube 分别消耗了 37%, 16% 的住宅ISP 流量
需求产生
- 如何应对(Youtube)十亿的用户的访问
- 如何从海量的视频中,挑选出某个用户想要的内容
单个服务器(X)
如果打造单个超级视频服务器,可能遇到问题,太多了
- 该服务器故障
- 单点故障
- 单点网络拥塞
- 远距离用户的访问路径很长
- 输出链路上发送同一视频的多份重复拷贝
CDN!
将多份拷贝存储在地理上分散的不同站点来提供服务(CDN)
深入:
- 将CDN服务器部署在众多的接入网络中
- 离终端用户近一点(方便用户,不方便维护者)
邀请做客:
- 在少量(例如10个)靠近接入网的关键位置(例如IXP),建造大集群,邀请到ISP做客
- 离终端用户远一点
流程
上图假设一个内容提供商NetCinema雇佣了第三方内容提供商KingCDN来分发视频
在NetCinema的Web网页上,它的每个视频都被指派了一个URL
如我们要访问video.netcinema.com/23425235 ,接下来将会发生图中的6个步骤:
- 用户访问www.NetCinema.com , 其返回一个video.netcinema.com/23425235 ;
- 用户主机再访问这个返回的video.netcinema.com/23425235 时,该用户的主机发送了一个对于video.netcinema.com的DNS请求
- 用户的本地DNS服务器(LDNS)将该DNS请求中继到一个用户NetCinema的权限DNS服务器,该服务器看到是video,就将DNS请求移交给KingCDN,NetCinema权威DNS服务器不返回IP地址,而是返回一个KingCDN域的主机名,如123.kingcdn.com
- 当LDNS拿到KingCDN域的主机名,又去请求KingCDN权威DNS服务器,KingCDN权威DNS服务器这时返回的才是KindCDN服务器的IP地址
- LDNS把KindCDN服务器的IP地址返回给用户
- 用户拿到KindCDN服务器的IP地址后,就发起连接请求,并获取资源
自此,整个流程结束。
6.8 Web 缓存 (代理服务器)
用户配置浏览器: Web 访问经由缓存,所有HTTP请求指向缓存
- 若对象在缓存中:缓存器返回对象
- 若对象不在缓存中:缓存器向起始服务器发出请求,接收对象后转发给客户机
代理服务器
-
Web缓存器既是服务器又是客户机
-
会在响应头部告知是否有缓存代理
为什么需要Web缓存器?
- 减少对客户机请求的响应时间
- 减少内部网络与接入链路上的通信量
- 能从整体上大大降低因特网上的Web流量
web缓存 如何减少客户机请求的响应时间
计算总时延。
假设有两个网络:
- 机构内部网络:是一个高速的局域网,其路由器与因特网上的路由器通过一条15Mbps的链路连接。
- 源服务器:与因特网相连,遍布全球。
已知条件
- 每个资源对象平均长度 = 1Mb
- 局域网浏览器对源服务器上对象的平均访问速率= 15个/sec
- 因特网时延 (从因特网路由器转发HTTP请求报文,到收到其响应报文的时间平均) = 2 sec
- 机构内的HTTP报文很小,故局域网内所产生的时延忽略
总延时计算方法
- 浏览器从请求一个对象到接收到的时间,总延时 = 因特网时延 (2s)+接入链路时延 +局域网时延
流量强度对比(比特到达率/推出率)
对于局域网内部 0.15
- 流量强度 = (15个请求/s)×(1Mb/请求)/(100Mbit/s) = 0.15
- 流量强度为0.15的通信量最多数十毫秒的时延,可忽略
接入链路时延 1
- 流量强度 = (15个请求/s)×(1Mb/请求)/(15Mbit/s) = 1
- 流量强度接近1,链路时延非常大或无限增长
总延时
- 总延时 = 因特网时延 + 接入链路时延 + 局域网时延
- = 2s + 数分钟 + 毫秒
数分钟了!!请求时间长,用户难以接受。
解决办法1:增加链路的速率
增加接入链路的速率,让它成为100Mb/s
结论:
- 局域网上的流量强度 = 15%
- 链路上的流量强度 = 15%
- 总时延 = 因特网时延 + 接入链路时延 + 局域网时延 = 2 秒 + 毫秒 + 毫秒
- 这种方案需要较大的投资,不划算
解决办法2:安装缓存器
假设缓存器命中率为0.4(二八定律)
局域网时延
- 客户机和缓存器位于同一局域网, 40%的请求几乎会立即得到响应,这部分时延为 0.01s (1Mb/100Mbps)。
- 剩下的60%请求需要通过访问起始服务器才能满足。
接入链路时延
- 只有 60% 的请求对象通过接入链路传送,流量强度从 1.0 减小到 0.6
- 通常,在 15Mbps 链路上,当流量强度小于 0.8 时,时延很小,可忽略(几十毫秒)
总延时
总的平均延时 = 因特网时延+接入链路时延+局域网时延 = 0.6×(0.01s+2s) + 0.4×(0.01s) = 1.21s
描述安装缓存器后网页访问的过程,并提出可能存在的网页过期的问题。
高速缓存:
- 减少响应时间;
- 存放在缓存中的对象拷贝可能是旧的,即保存在起始Web服务器中的对象可能已经被修改。
条件GET目的:
- 证实缓存器中的对象是否为最新
- 缓存器:在请求报文中包含对象最后修改时间——
If-modified-since: <date>
- Web服务器回发响应报文:包括对象的最后修改时间——
Last-modified:<date>
- 如果对象是最新的则响应报文中不包含对象
6.05 进程通信
进程
进程:运行在端系统中的程序
进程间通信方式
- 同一主机上:两个进程通过内部进程通信机制进行通信
- 不同主机上:进程通过交换报文相互通信
分类
客户进程——发起通信的进程
服务器进程——等待联系的进程
注意点
具有P2P体系结构的应用程序既有客户进程又有服务器进程。
明确客户机和服务器代表的是一种功能实体,而不是计算机。
提出问题:网络应用程序如何利用传输层实现网络通信?
进程与计算机网络的接口:
套接字又叫做应用程序编程接口,API
网络网络层和传输层之间的接口:套接字。
进程通过它的套接字在网络上发送和接收报文
进程把网络层产生的传输报文通过套接字推出到传输层,然后一步步传输到目的地址。
那么,为实现网络通信,如何标识通信双方的位置呢?
进程寻址
网络中有多个主机,主机上的进程可以有多个,每个主机上有多个进程。
为了一个进程能接收报文,它需要一个标识——主机上的进程标识包括:(IP地址,端口号)
6.09 应用层协议
一个应用层协议要包含什么
- 报文类型
- 如请求报文、应答报文
- 报文类型的语法
- 报文中的各个字段及其详细描述
- 报文语义
- 即包含在字段中的信息的含义
- 规则
- 进程何时、如何发送报文及对报文进行响应
两类协议
公共领域协议
由RFC文档定义可供大家使用
例如:HTTP,SMTP
专用协议
例如: Skype
一个应用需要什么样的传输服务?
分析应用层的服务需求,探讨不同服务需求的特性
- 数据完整性
- 一些应用 (如:实时音频)能容忍一定程度的数据丢失
- 另一些应用(如:文件传输,telnet)需要100%可靠的数据传输
- 定时
- 一些应用(如:因特网电话、多方游戏)要求低时延
- 带宽和吞吐量
- 一些应用(如:多媒体)必须要达到所需带宽
- 另一些应用(弹性应用)根据需要充分利用可供使用的带宽
- 安全
- 加密,数据完整性等
因特网运输协议提供的服务
TCP服务
- 面向连接的服务:在客户机程序和服务器程序之间必须建立连接
- 可靠的传输服务: 接收和发送进程间
- 流量控制: 发送方不会淹没接收方
- 拥塞控制: 网络出现拥塞时抑制发送进程
- 没有提供:时延保证,最小带宽保证,安全性
UDP 服务
- 不可靠数据传输
- 没有提供:建立连接,可靠性,流量控制,拥塞控制,时延和带宽保证
对于想快速处理从远程客户到服务器的事务,应该使用UDP还是TCP?为什么?
UDP。
- 使用UDP,事务可以在一次往返时间(RTT)内完成——客户端将事务请求发送到UDP套接字,服务器将响应发送回客户端UDP套接字。
- 对于TCP,至少需要两个RTT—一个用于建立TCP连接,另一个用于客户机发送请求,服务器发送回响应。
举例应用和协议
应用 | 应用层协议 | 下面的传输协议 |
---|---|---|
电子邮件 | SMTP [RFC 2821] | TCP |
远程终端访问 | Telnet [RFC 854] | TCP |
Web | HTTP [RFC 2616] | TCP |
文件传输 | FTP [RFC 959] | TCP |
流媒体 | 通常专用 (e.g. RealNetworks) | TCP or UDP |
因特网电话 | 通常专用 (e.g., Skype) | 典型用 UDP |
TCP安全
TCP与UDP:没有加密、网络明文传输,如用户名和口令信息等
SSL(Security Socket Layer)
- 是TLS的前身
- 提供加密的TCP连接
- 保证数据完整性
- 端点认证
- 应用使用SSL库调用TCP服务接口、lSSL提供套接字API