????????网络应用是计算机网络存在的理由,如果我们不能构想岀任何有用的应用,也就没有 任何必要去设计支持它们的网络协议了。即应用层属于是最上层的,(例如为了去够到树上的苹果,你必须去找一些东西垫着让你能够到,在这里,苹果是目的,而你找的东西比如凳子啥的就是支持,也就是下面的几层)比喻可能不算很恰当,但属于我的理解,如果觉得不对可以直接跳过。
?......
常用的网络应用例子还有很多很多,在这里就不补充了,有兴趣的可以自己去了解一下。
下面介绍的这两个模式都是之前在概述那一章讲过的网络边缘(即主机/端系统)常用的模式之一
从上图我们可以看出右下角的属于服务端,而其余的属于客户端,该服务端是不变的,一直处于那个位置,因此IP地址和端口号是不变的,而客户端可以是变化的,可以是不同的客户端,向该服务端发送请求。但这样会有一个缺点:一台单独的服务器主机跟不上众多客户端请求,负载容易过重,因此一般数据中心都会配备大量主机,从而能创建强大的虚拟服务器。
从上图我们可以看出任何一个主机都可以是服务端或者是客户端,每一个都是对等体,这就是名字的来源,这种的好处就是尽管每个对等体都会因为请求文件产生工作负载,但其也通过向其他对等体分发文件为系统增加服务能力。
进程:在主机上运行的应用程序
作用:①在同一主机内,使用进程间的通信机制通信
? ? ? ? ? ?②在不同主机内,通过交换报文(message)来通信
(在我们上课的时候,便要求我们用Pycharm写服务端和客户端,在不同主机或者自己主机上通信;UDP和TCP都有)
eg:发送一个HTTP报文的目的标识
? ? ? ? ? ? ? ? IP地址:128.111.245.12
? ? ? ? ? ? ? ? 端口号:80(web服务器)
由于觉得这个名字有点不是很能理解,我更愿意将这块知识点称为应用层需要传输层提供什么样的服务(或者是其指标)
讲完了基本的指标,我们接下来就要讲一些具体的例子,具体有什么服务:
ps:那有人就会好奇了,为什么还需要UDP?
之前我们讲的几个指标便是可靠性,吞吐量,延时,安全性。而对于TCP和UDP而言,TCP提供了可靠数据传输,同时TCP也能通过传输层安全协议 Transport Layer Security (TLS) 对TCP连接进行加密,因而较为安全。但还有两个指标我们都没有提及到,便是吞吐量和时延的保证。
从课本上来说,就是(大概理解就是当前的协议没法保证这两指标就是,虽然是要求提供的)
总之,今天的因特网通常能够为时间敏感应用提供满意的服务,但它不能提供任何定时或带宽保证。
从上面给出的这张图是流行的应用层协议,及传输层提供给这些应用层的协议(有点拗口)。传输层协议上面有粗略提及,而在第三章的传输层我们也会重点讲,这里主要讲应用层协议。
应用层协议:定义了运行在端系统的不同应用程序进程如何相互传递报文。下面是应用层协议定义的内容。
按照有无公开可分为两种协议
①公开协议:由RFC文档定义;允许互操作,具有发放性(eg:HTTP,SMTP)
②私有协议:不公开,属于特定组织,厂商特有,具有定制性。(eg:Skype)
首先我们先对这两个概念作基本的解释
HTTP的请求方法常见的有GET,POST,PUT,DELETE,具体的作用和语义在这里就不多说了。(这里不算重点)
这里常见的状态码:200(OK),301,400,404(这个很常见吧),505
之前说过,HTTP请求/响应的交互是无状态的,这简化了服务器的设计,同时让服务器的负担大大减少。然而往往一个服务器也希望能识别用户,因而,HTTP使用了cookie,允许站点对用户跟踪,目前大多商务Web站点都使用了cookie。(简单来说就是比如一些购物软件为了知道你买了什么东西以后好推给你的作用差不多差不多,类似ID)
eg:如上图所示,机构内的浏览器对这些初始服务器的平均访问速率为每秒15个请求(request),假设对象的长度为1Mb,RRT=2s,假设HTTP报文小到可以忽略(约等于传播时间可以忽略不计)
答:我们用之前的学过的La/R来计算,在机构网络之间
(15request/s)× (1Mb/requet)/(100Mbps)=0.15(时延较小)
在公共因特网和机构网络之间
(15request/s)× (1Mb/request)/(15Mbps)= 1(时延巨大)
而对于这个确实时延过大,因而有两种方案可以提高速率
①增加接入链路的速率
假设将15Mbps——>100Mbps
那这样接入链路减少到0.15,那么两台路由器之间的延时也可以忽略了,总的响应时间将大约为请求和响应的时间RTT也就是两秒。
average delay=2s
然而这种情况成本很高,所以我们来考虑另外一种方法
②安装一个Web缓存器
假设缓存命中率为0.4(40%通过缓存请求,60%通过原始服务器)
因此加上缓存器后,原来的15个请求每秒就变成了9个请求每秒。也就是说
(9request/s)× (1Mb/request)/(15Mbps)=? 0.6
当流量强度小于0.8s时候对应的时延比较小,仅为几十毫秒,且加上只有百分之六十要响应
因此最后的平均时延?
average delay=0.4×(≈0)s+0.6×(2s+0.01s)≈1.2s
从这可以看出平均时延比第一种方法的平均时延小很多,从这也可以看出Web缓存器的意义所在
组成部分
典型的报文首部如下(header:冒号前的内容;body:内容)
SMTP: RFC 5321(原RFC821)交换email报文的协议
SMTP: RFC 5322(原RFC822)定义文本报文的格式
SMTP:主要是传送到接收方的邮件服务器【推】,而到了接收方的邮件服务器后,就需要下面这些邮件访问协议了
邮件访问协议:主要方便接收方查看的时候从邮件服务器拉出
POP3(Post Office Protocol Version 3):是一种简单的邮件传输协议,用于将邮件从邮件服务器传送到接收方的用户代理。它包括了用户身份确认、邮件下载和删除等基本操作,并通过TCP连接进行通信,服务无状态,不会保存东西等等【拉pull】
IMAP(Internet Message Access Protocol):与POP3类似,也是一个邮件访问协议,但比POP3功能更丰富和复杂。IMAP服务器将每封邮件与一个文件夹联系起来,允许用户创建文件夹、移动邮件以及在远程文件夹中查询邮件,因此属于有状态。【拉pull】
基于Web的电子邮件:越来越多的用户使用Web浏览器来收发电子邮件,通信通过HTTP进行。当用户打开浏览器,登录远程邮箱后,该电子邮件报文从接收方的邮件服务器发送到浏览器。同时当发送方要从浏览器发送一封邮件,也是依靠的HTTP发送到它的邮件服务器。【总而言之,不管是发送还是阅读,只要从Web浏览器,则用的就说HTTP,而其他都不是用的HTTP】
因特网上的主机有着两个名字:
①主机名:比如网址www.facebook.com
②IP地址(32bit): 比如121.7.106.83(具体会等到第四章再来讨论)
那如何做到给你一个主机名,你能得知它的IP地址呢?
Domain Name System(DNS):域名解析系统
当一个服务器向另一个服务器请求DNS映射并得到回应时,将该DNS映射存储在高速缓存中,用于向之后的相同请求迅速提供查询服务
作用
改善时延
减少在Internet上到处传输的DNS报文数量
本地DNS服务器一般都缓存有顶级域名服务器的IP映射(因此不需要再查询TLD服务器地址)
然而主机可能动态的改变IP地址,导致缓存的DNS无法访问
而当TTL过期后才会去查询新的IP地址(大概就说如果对方主机的IP地址改变,然而我现在缓存的是旧的IP地址,TTL又没过期,导致访问不成功,解决的办法只能是删除旧的记录)
ttl:该记录的生存时间————决定了资源记录应该从缓存中删除的时间
type:
=A:标准映射
name:主机名
value:IP地址
=NS:域——>权威DNS
name:域名(eg:foo.com)
Value:是个知道如何获得该域 中主机IP地址的权威DNS服务器的主机名。
这个记录用于沿着查询链来路由DNS查询。例如(foo.com, dns.foo.com, NS)就是一条类型为NS的记录
=CNAME:主机别名——>规范名
name:某个主机名的别名
value:某个主机的规范名
=MX:邮件服务器别名——>规范名
name:是别名
value:规范名
? ? ??②DNS报文
? ? ? ? ? ?分类:查询报文和回答报文(有着相同的格式)? ???? ??????????????????? ? ? ??
到目前为止本章描述的应用(包括Web,电子邮件,DNS都用的客户-服务器体系结构,依赖于总是打开的服务器;而前面说过,对于P2P体系结构,没有一直打开的服务器,因而在这里我们来讨论一下P2P体系结构。
几乎没有一直运行的服务器
任何端系统都可以通信
既是服务器也是客户端
参与的主机间歇性连接且可以改变IP
例如BitTorrent,迅雷等? ? ? ??
BitToiTent是一种用于文件分发的流行P2P协议。
Alice向4个peer发送块,这些peer向自己提供最大带宽的服务
其它peers被Alice阻塞 (将不会从Alice处获得服务)
每隔10秒钟重新排出前4的peer
每隔30秒,随机选择其它一个peer节点,向这个节点发送文件块
“乐观地疏通”这个peer
新加入的peer可能加入前4的列表(这就解释了刚刚加入的peer怎么获取资源进入P2P体系)
只向排名前4的peer(前20s)和试探性的peer(20-30s)发送文件
挑战: 服务器如何向上百万用户同时发送流化视频内容
(1)由于最后一块课上以及要求并非很重,最后一快知识点有点介绍粗略,有兴趣的可以看看计算机网络-自顶向下方法第七版这本书或者其他途径自行了解一下,如果有啥错误的也麻烦指正??????。
(2)And 如果文章对你有帮助的话,请各位uu顺带点下👍。
(3)本文图片以及一些专业解释来源:《计算机网络-自顶向下方法第七版》