计算机网络——应用层
研究网络应用的核心是写出能够写出运行在不同的端系统和通过网络彼此通信的程序。网络核心设备不在应用层起作用,而是在较低层起作用,特别是位于网络层下面的层次。
应用程序体系结构由应用研发者设计,规定了如何在各种端系统上组织该应用程序。
- 客户-服务器体系:客户之间不直接通信,服务器具有固定且周知的地址,客户能够通过向该服务器的IP地址发送分组与其联系。
- 对等P2P结构:应用程序在间断连接的主机对(对等方)之间使用直接通信。具有自扩展性,成本有效,因为它们往往不需要庞大的服务器基础设施和服务器带宽。
在操作系统的术语中,进行通信的实际上是进程而不是程序。应用层关注不同主机上的进程如何通信而不是同一主机。
那么为了向特定的目的地发送请求,则接受进程要有一个地址。为了标识该接收进程,需要定义如下概念
- 主机的地址:采用IP地址标识主机。
- 在目的主机中的接受进程的标识符:由目的地端口号标识。
套接字:源IP地址和目的IP地址以及源端口号和目的端口号的组合称为套接字。其用于标识客户端请求的服务器和服务。
如何传输请求?这取决于我们选择了什么运输层协议(如TCP、UDP)供应用程序使用其运输服务。运输层协议应满足:可靠数据传输、吞吐量、定时和安全性。
我们知道网络进程通过把报文发送进套接字实现互相通信。但是如何构造这些报文?这些报文中各个字段的含义是什么?这些问题由应用层协议来解决。一般来讲,应用层协议定义了
- 交换的报文类型,例如请求报文和响应报文
- 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的
- 字段的语义,即这些字段的信息的含义
- 一个进程何时以及如何发送报文,对报文进行相应的响应
应用层协议只是网络应用的一部分。例如web是一种服务器应用,有文档格式标准(HTML)、web服务器、应用层协议HTTP等。
HTTP协议是web的应用层协议,使用TCP作为运输层协议,一旦连接建立,该浏览器和服务器进程就可以通过套接字接口访问TCP。因为HTTP服务器不保存关于客户的任何信息,所以我们说HTTP是一个无状态协议。
HTTP采用的是使用流水线的持续连接来接收。
- 非持续连接:每访问一个对象就要建立一次TCP连接,TCP连接的三次握手加上HTTP的响应报文总共所需时间是2RTT,文件传送结束后断开TCP连接。
- 持续连接:服务器在发送响应后保持该TCP连接打开,在相同的客户与服务器之间的后续请求和响应报文能够通过相同的连接进行传送。
- 流水线:持续连接的一种方式,客户不需要收到前一个请求的响应后就可以发出新的请求
- 非流水线:客户只在收到前一个请求的响应后才发出新的请求。
- 带内(in band):传输文件的同一个连接中发送请求和响应的首部行(HTTP)。
HTTP请求报文格式如下
HTTP响应报文格式如下
各首部字段及参数种类参见https://www.cnblogs.com/yumo1627129/p/7941220.html
web缓存器,也叫代理服务器,拥有自己的缓存空间。如果接收到请求报文后发现本地已经缓存了该对象副本,则直接用HTTP响应返回报文;如果没有则会打开一个与服务器的TCP连接,请求服务器,在收到服务器的响应后会存储一份副本,最后向客户发送HTTP响应报文。
FTP和HTTP一样都是文件传输协议。FTP使用了两个并行的TCP连接来传输文件,一个是控制连接,一个是数据连接。FTP的数据连接是非持续的连接。