应用层

网络应用原理

网络应用体系结构

常见的应用体系结构

客户-服务器体系结构(client-server architecture)

有一个总是打开的主机(server),服务与许多其他称为客户端(client)的主机通信。客户端向服务器发送请求,服务器向客户端发送响应。

  • client之间不互相通信
  • 服务器具有固定的周知的地址

常见的应用程序包括Web,FTP,Telnet和电子邮件

在这种体系架构下比较考验服务器的性能,因为服务器需要处理大量的请求。

常见的解决方案是采用大量的数据中心(data center)进行创建虚拟服务器

P2P体系结构(peer-to-peer architecture)

没有固定的服务器,而是由许多对等的主机组成。对等主机既是客户端也是服务器。

对等方一般来说是用户的台式机或者笔记本电脑。

流行的例子是BitTorrent

进程通信

两个在不同端的进程通过跨越计算机网络交换报文(message)进行通信

发送进程生成并向网络中发送报文,接收进程接收报文并可能响应报文。

  1. 客户和服务器进程之间的通信

    网络应用程序由成对的进程组成,这些进程通过网络相互发送message

    例如.

    1. client浏览器和web服务器交换message

    2. p2p中,文件从一个对等方传输到另一个对等方

    我们通常把其中一个进程称为client,另一个进程称为server
    对于web来说,浏览器是client,web服务器是server
    对于p2p来说,上传文件的是server,下载文件的是client

    定义如下:

    在一对进程之间的通信会话场景中,发起通信的(即在该会话开始和时发起与其他进程的联系)的进程被标识为client,而等待联系的进程被标识为server

  2. 进程与计算机网络之间的接口

进程通过socket的软件接口向网络发送报文,socket是进程与网络之间的API

  1. 进程寻址

    在一台主机上运行的进程为了向另一台主机上运行的进程发送packet,接受进程需要有一个地址用来标识自己。

    需要两种信息:

    1. 主机地址: 在因特网中,主机由IP地址标识
    2. 目的主机中指定接受进程的标识符。实际实现中,用port number来标识进程

可供应用程序使用的运输服务

可靠数据传输

packet在网络中可能会丢失。为了保证数据的可靠传输,需要在应用层实现可靠数据传输。

如果一个协议确保由应用程序的一端发送的数据正确并完全地交付給应用程序的另一端,那么这个协议就提供了可靠数据传输服务

不过一些网络应用程序并不需要可靠数据传输,例如音频和视频流应用程序,因为这些应用程序可以容忍少量的数据丢失。它们也可以叫做loss-tolerant application

吞吐量

具有高吞吐量的应用程序需要一个高带宽的网络。例如,视频流应用程序需要高吞吐量的网络。

具有吞吐量要求的应用程序可以被称为bandwidth-sensitive application

而对于一些应用程序,如电子邮件,吞吐量并不是一个重要的因素。这些应用程序可以被称为elastic application

定时

运输层协议也能提供定时保证,例如,发送方注入socket的每个比特到达接收方的socket不迟于100ms。

这种服务对交互式实时应用程序很重要,如在线多人游戏

安全性

例如,在发送主机中,运输协议能够加密由发送进程发送的所有数据,接收主机中,运输协议能够在交给接收进程之前解密数据。防止数据以某种方式被窃听。

因特网提供的运输服务

TCP

TCP服务模型包括面向连接的服务,可靠数据传输服务。

  • 面向连接的服务:在通信之前,发送方和接收方必须建立连接。连接建立后,两个进程之间的通信是全双工的,即双方都可以发送和接收数据。当通信结束后,连接必须显式地终止。

  • 可靠数据传输服务:TCP确保数据正确,按顺序,没有丢失,没有重复,没有失序地交付给接收方。

TCP还有拥塞控制机制,以防止网络拥塞。

UDP

UDP是无连接的,不提供可靠数据传输服务,仅提供最低限度的服务。

应用层协议

应用层协议(application-layer protocol) 定义了在不同端系统上的应用程序进程如何相互传递message或者数据。

大致定义了以下几个方面:

  • 交换的message类型,例如请求和响应
  • 各种messgae类型的语法,例如message中的字段和字段是如何描绘的
  • 字段的语义
  • 确定一个进程何时以及如何发送报文,以及对报文的响应规则

Web和HTTP

传统的无线电广播和电视只能迫使用户只能收听,收看内容提供者提供的内容。而互联网则是用户主动请求内容。用户需要时,可以从互联网上获取任何内容。

HTTP 概述

HTTP是超文本传输协议(HyperText Transfer Protocol)的缩写,是Web的基础。

HTTP通常由两个程序实现: 一个client程序和一个server程序

当用户请求一个Web页面时,浏览器向服务器发出对该页面中所包含的对象的HTTP请求message,服务器接受到请求并用包含请求对象的HTTP响应message进行响应。

HTTP 采用 TCP作为他的支撑运输协议,保证了HTTP请求报文和响应报文能够可靠地在client和server之间传输。

注意:

服务器向客户发送被请求的文件,但是在服务器端并不存储客户的信息,这是因为HTTP是一个无状态协议(stateless protocol)

非持久连接和持久连接

在大部分情况下,客户和服务器在很长的一段时间里面会进行通信,在此期间,客户和服务器之间会交换多个HTTP请求和响应。

那么这个多个HTTP请求和相应有两种方式进行传输,一种是每个HTTP请求/响应对都使用一个新的TCP连接,这种方式称为非持久连接(non-persistent connection)。另一种方式是使用一个TCP连接来传输多个HTTP请求和响应,这种方式称为持久连接(persistent connection)

非持久连接

每个TCP连接只传输一个HTTP请求和响应对

HTTP/1.0 默认使用非持久连接

缺点:

  1. 必须为每一个HTTP请求建立一个新的TCP连接,在客户和服务器中都要分配TCP的缓冲区和保持TCP变量,这样会增加网络的拥塞
  2. 每个TCP连接都需要进行三次握手和四次挥手,这样会增加网络的延迟。每一个对象经受两倍的RTT时延,一个RTT用于建立连接,另一个RTT用于请求和接收对象。

持久连接

在采用HTTP/1.1的情况下,持久连接是默认的

在一个持久连接中,一个TCP连接可以传输多个HTTP请求和响应对

HTTP报文格式

HTTP请求报文

给一个例子

1
2
3
4
5
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
  • 第一行叫做请求行(request line),包含了请求方法(GET),请求的URL(/somedir/page.html)和HTTP的版本(HTTP/1.1)
  • 接下来是若干行叫做首部行(header line),每一行包含了一个首部字段名和一个字段值,首部行以一个空行结束
  • “Host:www.someschool.edu"首部行指定了请求的服务器的主机名
  • “Connection:close”首部行指定了客户端要求服务器在发送完响应后关闭连接,也就是说采用非持久连接
  • “User-agent:Mozilla/5.0”首部行包含了客户端的信息,这里指的是浏览器的信息
  • “Accept-language:fr”首部行指定了客户端接受的语言,这里是法语
  • 如果请求报文中包含了实体主体,那么实体主体会跟在首部行之后,中间用一个空行分隔,一般会在POST请求中包含实体主体

HTTP响应报文

给一个例子

1
2
3
4
5
6
7
8
9
HTTP/1.1 200 OK
Connection: close
Date: Tue, 09 Aug 2024 16:28:14 GMT
Server: Apache/1.3.27 (Unix)
Last-Modified: Sat, 10 Dec 2024 18:27:45 GMT
Content-Length: 6821
Content-Type: text/html

(data data data)
  • 第一行叫做状态行(status line),包含了HTTP的版本(HTTP/1.1),状态码(200)和状态码的状态信息(OK)
  • 接下来是若干行叫做首部行(header line),每一行包含了一个首部字段名和一个字段值,首部行以一个空行结束
  • “Connection:close”首部行指定了服务器要求客户端在接收完响应后关闭连接
  • “Date:Tue, 09 Aug 2024 16:28:14 GMT”首部行指定了响应报文的创建时间.
  • “Server:Apache/1.3.27 (Unix)”首部行指定了服务器的信息
  • “Last-Modified:Sat, 10 Dec 2024 18:27:45 GMT”首部行指定了请求的对象的最后修改时间
  • “Content-Length:6821”首部行指定了实体主体的长度
  • “Content-Type:text/html”首部行指定了实体主体的类型

常见的状态码有:

  • 200 OK: 请求成功
  • 301 Moved Permanently: 资源被永久移动
  • 400 Bad Request: 请求报文存在语法错误
  • 404 Not Found: 服务器无法找到请求的资源
  • 505 HTTP Version Not Supported: 服务器不支持请求的HTTP版本

Cookies

HTTP是一个无状态协议,服务器不会保存客户的信息。但是有时候服务器需要保存客户的信息,例如,用户在购物网站上购买商品,服务器需要保存用户的购物车信息。

为了解决这个问题,引入了Cookies技术

cookie技术有4个组件

  1. 在HTTP响应报文中的一个cookie首部行

  2. 在HTTP请求报文中的一个cookie首部行

  3. 在客户端主机上的一个cookie文件,由浏览器管理

  4. 位于web站点的一个后端数据库

  1. 第一次访问amazon,发送一个http请求

  2. 服务器接受请求,发现没有cookie,生成一个cookie,然后在响应报文中添加一个set-cookie首部行

  3. 浏览器接受响应报文,发现set-cookie首部行,将cookie保存在cookie文件中

  4. 第二次访问amazon,发送一个http请求,请求报文中包含了cookie首部行

  5. 服务器接受请求,发现cookie首部行,从cookie文件中找到cookie,然后从后端数据库中找到用户的相关信息

所以cookie可以在无状态的HTTP协议中实现一个用户会话层

Web缓存

Web缓存器(Web cache)也叫代理服务器(proxy server),是一个网络实体,它的目的是通过保存已经访问过的web页面的副本来减少响应时间。