应用层

网络应用是计算机网络存在的理由,如果我们不能构想出任何有用的应用,也就没有任何必要去设计支持它们的网络协议了。

网络应用程序体系结构:

客户-服务器体系结构

客户-服务器体系结构当中,有一个24小时打开的主机称为服务器,服务于多个客户(多个主机),最简单的就是Web浏览器向服务器发送的请求,可以把不同的浏览器看作是客户,客户发出请求,服务器接收到请求后再作响应。

注意一点的是:主机是有很多个,但是服务器不一定只有一个,如果服务器只有一个,那么当客户逐渐增加的时候,就会使得服务器过载,所以,需要配置大量的主机才可以减轻每个主机的负载

P2P体系结构

P2P,也就是点对点,无需通过服务器,可以进行两个客户,也就是两台主机之间的直接通信。

 

多数应用程序是由通信进程对组成的,进行通信的实际上是进程,比如浏览器发送请求给服务器,发送的则为客户,接收的则为服务器,就算是再P2P体系当中,两个对等方进行传数据,接收的那方的进程就叫做客户,上传的那方进程就叫做服务器。客户进程要发送请求给服务器进程需要通过一个套接字的软件接口向网络发送报文和从网络接收报文,套接字就是进行网络通信的接口。

TCP/UDP:

TCP:在应用层数据报文发送之前,TCP就会在客户和服务器搭建起连接。一个TCP连接之后,双方就可以在这个连接上进行报文的发送和接收,当结束了发送和接收,我们就需要拆除连接。

UDP:是一种不提供不必要服务的轻量级运输协议,仅仅提供最小的服务,和之前的分组交换差不多,因此UDP在两个进程没有进行连接的时候,UDP协议提供一种不可靠的数据传送服务,为什么叫做不可靠,是因为没有连接,所以不能够保证传出去的数据能够被接收方的进程去接收

应用层的协议:

应用层协议定义了运行在不同端上的应用程序进程如何相互传递报文,其中包括了

1)交换的报文类型,

2)各种报文类型的语法,如报文中的各个字段以及这些字段是怎么描述的

3)字段的语义,即这些字段中包含信息的含义

4)一个进程何时以及如何发送报文,对报文进行响应的规则

WEB和HTTP:

Web应用的协议是HTTP(HyperText Transfer Protocol)超文本传输协议,HTTP由两个程序实现,一个是客户程序,一个是服务器程序,两者通过交换HTTP报文进行通信。

Web页面是由对象组成的,一个对象只是一个文件,比如一个html文件,一个jpeg的图片,一个gif动态视频。如果一个Web页面包含了HTML文本和一张图片,那么这个Web页面就有两个对象

Http是基于TCP协议,Web客户首先需要建立起和Web服务端的连接,HTTP是无状态协议,也就是Web客户端向Web服务端发送两次相同的请求,Web服务端还是会响应两次相同的数据,不会保存关于客户的任何信息。

因为HTTP是基于TCP协议的,所以客户端发送一系列请求,有两种方式,一种是非持续连接:就是每个请求由一个单独的TCP连接发送,第二种是持续性连接,每个请求由同一个单独的TCP进行连接。默认方式是使用持续连接

非持续连接有一些缺点:必须为每一个请求的对象建立和维护一个全新的连接,而发起一个TCP连接,涉及了三次握手,效率很低,并且由于TCP太多,服务器每次握手要进行一个TCP的缓存空间的一个分配,就会给Web服务器带来严重的负担

采用持续连接的情况下,服务器发送相应后保持该TCP连接打开,在相同的客户与服务器的第二次请求和响应中就能够通过相同的连接进行传送

Cookie:

那么我们需要一个东西就是Cookie,那么Cookie是用来弥补HTTP的无连接性的

Cookie就是相当于一个笔记本,每次进行一次请求响应,就记录在一个小本子上,然后即使失忆,看看笔记本就想起来了,Cookie就是充当一个笔记本,进行记录

在我们进行第一次发送请求给服务器的时候,服务器会放回一个Cookie给我们的客户端

然后Cookie的分类,有两种:第一种就是会话Cookie,第二种就是持久Cookie

两个的区别,会话Cookie:首先要知道什么是一个会话:简单来说,当一个浏览器打开到关闭之前,进行的操作就是一次会话

也就是会话Cookie是这样子的,我们的Cookie时间直到我们的浏览器关闭就没了,下次打开就没了Cookie,举个简单实例,你一次登陆了,关闭登陆再去访问你就要重新登陆

那么持久性Cookie是什么,所谓持久性,就是可以人为去定制一段时间,这时候,这段Cookie存放的位置在我们的磁盘里面,写成了一个文件,下次请求的时候,首先去磁盘读取我们的Cookie,然后再去发送请求

Session:

Session是存放在服务器端的,相对于cookie,会给服务器造成压力

当我们第一次发送请求的时候,上述我们提高一个概念,叫做会话,我想到一个更好的例子,那就是打电话,A和B两个人,A问的一句话就是一个请求,B的回答就是一个响应,所以什么是一次话,就是AB打完电话结束了,挂了,就是一次会话,一次会话里面可能存放着很多次请求和响应

 

同样的,在第一次发送请求的时候,服务器会把该客户端的信息记录下来,归成一个表结构,然后这次服务器会返回一个东西,叫做SessionId,这个Id就是用来找到我们刚刚保存的信息的,一一匹配,那么这个SessionId保存在哪里呢?保存在Cookie里面,所以说,如果我们没有Cookie,Session也是不能够正常运行的

Web缓存

Web缓存器也叫做代理服务器,Web缓存器有自己的磁盘存储空间,并在存储空间中保存最近请求过的对象副本。

应用层

FTP:

FTP(File Transfer Protocol)文件传输协议:

应用层

DNS:

因特网的主机需要进行标识,而主机名的标识可以通过主机名或者IP地址,比如www.baidu.com的主机名,127.0.0.1的IP地址,

我们需要一种能过够进行主机名到IP地址转换的目录服务。这就是DNS(Domain Name System)域名系统的任务

DNS是一个由DNS服务器实现的分布式数据库,是一个使得主机能查询分布式数据库的应用层协议,DNS服务器通常是运行BIND软件的UNIX辑器,DNS协议基于UDP上,使用53号端口

简单来说,DNS就是将用户提供的主机名解析为IP地址,浏览器访问的时候发出一个HTTP请求报文到Web服务器,首先把主机名传给DNS应用的客户端,DNS客户端向DNS服务器发出一个包含主机名的请求,DNS服务器会响应该主机名的一个IP地址,然后返回给浏览器,再根据IP地址进行TCP连接

DNS也可以用来负载均衡,繁忙的站点被冗余分布再多台服务器上,每台服务器均运行再不同的端系统上,每个都有着不同的IP地址,DNS数据库中存储IP地址的集合,当客户对映射的主机名字发出一个DNS请求时,该服务器用IP地址的整个集合进行响应。

DNS的服务器有三种:

1)根DNS服务器

2)顶级域DNS服务器

3)权威DNS服务器

DNS缓存:

原理:在一个请求链当中,某DNS服务器接收一个DNS回答的时候,它能够将该回答中的信息缓存在本地存储器当中,我们查询DNS服务器的过程是根据多个节点返回的一个IP地址对去进行反复请求,说的通俗一点就是你要找一个目的地,你问了很多人才知道怎么走,那么下次你就把这条路线,可以直接去寻找,而不用一个一个问

文件分发

文件分发这种应用从单一服务器向大量主机分发一个文件,服务器必须向每一个客户发送该文件的一个副本,这样子服务器就会承受了比较大的负担,而在P2P文件分发当中,每个对等方能够重新分发所有该文件的任何部分,基于BitTorrent(一种用于文件分发的P2P协议)这里有个概念叫做洪流:参与一个特定文件分发的所有对等方的集合叫做洪流,当一个对等方加入洪流的时候,开始接收文件,这个文件会被很多块,慢慢的,第一个对等方就会有块了,那么当它继续下载块的时候,也能够同时给别的对等方提供块,,然后每个对等方在加入洪流之前首先需要在一个追踪器里面去注册自己,并且周期性通知追踪器自己的信息

应用层