创建一个网络应用的核心,是编写一个分布式程序,使其可以运行在不同的端系统上,并能通过网络相互通信。(例如,web服务器软件与浏览器软件)
应用程序只运行在终端上(只在端系统上开发应用),应用程序员不需要为网络核心设备编写程序,我们默认可以调用一些API,这极大地方便了网络应用的开发和快速部署。
我们不需要为网络核心设备编写程序的原因:一方面会浪费大量的时间与精力,另一方面网络的核心设备我们是不接触不到的。
在开发一个应用程序之前,首先要决定采用什么样的网络应用架构,网络应用架构规定了在各个端系统上组织应用程序的方法,目前有两种主流的网络应用架构:
服务器(server):
客户(client):
客户只与服务器通信,客户之间不通信
客户-服务器架构 | P2P架构 | ||
---|---|---|---|
资源集中: | 资源(服务)只在某些固定的终端上提供 | 资源分散: | 任何终端都可以提供资源(服务) |
优点: | 资源发现简单 | 优点: | 易于扩容、均衡网络流量 |
缺点: | 集中式计算带来的问题,如服务端扩容压力、网络流量不均衡、响应延迟长 | 缺点: | 资源发现困难,社会问题(版权、安全性等) |
进程: 主机上运行的程序.
在同一台主机中,由操作系统来提供进程之间的通信。在不同的主机上,通过交换报文进行通信。在一次确定的通信会话中,总能标示一方为客户进程,另一方为服务器进程:
套接字(socket):进程与网络的接口(应用程序和网络之间的一扇门)。
套接字是应用层和传输层的接口,也是应用程序和网络之间的API。
每个进程需要一个标识,以便其它进程能够找到它,那么进程如何该如何标识自己?可以用进程所在主机的地址来标识进程吗?
答案是不能,因为同一个主机上可能运行着许多进程,我们用端口号来区分同一个主机上的不同进程
进程标识包括:
端口号的例子:HTTP server使用端口80,Mail server使用端口25
在创建一个应用程序时,开发者需要选定一种传输服务。
因特网提供2种传输服务,分别用TCP和UDP协议实现。
Web采用客户-服务器模式:
HTTP协议:定义了浏览器和web服务器之间的通信规则。
HTTP的主要版本:HTTP 1.0(RFC 1945)和 HTTP 1.1(RFC 2068)
HTTP为什么要使用TCP服务:Web服务器并不保留客户所请求的信息,HTTP协议是无状态的,为了发送文件的稳定。
HTTP使用TCP服务过程:
主要区别:在一个TCP连接上只能传输一个对象还是能传输多个对象。
内容获取过程:
假设用户输入以下URL:http://www.someSchool.edu/someDepartment/home.index (包含文本及10个Jpeg图像)
非持久HTTP的响应时间:
RTT (Round-Trip Time):一个小分组从客户发送到服务器,再返回客户的时间。
请求一个对象用时2RTT(忽略对象传输时间),则上面题目中请求一个完整的网页用时22RTT(11个对象)
非持久HTTP 的问题:
获取每个对象需要一次TCP连接,每个TCP连接需要消耗操作系统资源,浏览器需要打开多个TCP连接来获取一个网页。
持久HTTP又分为:
针对上面的问题:
HTTP报文由ASCII文本构成。
HTTP请求报文:
HTTP请求报文:
HTTP方法:
HTTP 响应报文:
HTTP 响应状态代码:
四个组成部分:
例子:Susan第一次访问某个电子商务网站,当HTTP请求报文到达该网站时,网站为其创建:
- 一个ID
- 在后端数据库中为该ID建立一个表项。
Cookies交互的两种方式:
- 服务端:信息保存在服务端的后端数据库,返回ID给客户。
- 客户端:信息发回客户端,保存在cookie文件中,并随请求报文发送给服务器。
代理服务器: 代表原始服务器满足HTTP请求的网络实体,保存最近请求过的对象的拷贝。
用户要设置浏览器:所有HTTP请求首先发往web缓存。
浏览器将HTTP请求发送给web缓存:
- 对象在web缓存中: web缓存返回对象。
- 对象不在web缓存中:web缓存从原始服务器获取对象,缓存在本地,然后返回给客户。
Q:web缓存如何知道对象的原始服务器?
A: HTTP请求头中的host首部行指出了原始服务器
Web cache既是服务器又是客户:
- 对于浏览器来说是服务器。
- 对于原始服务器来说是客户。
Web cache通常由ISP提供,多级ISP可能形成多级web缓存。
Web caching 的作用:
- 减少客户请求的响应时间。
- 减少机构接入链路上的流量。
Cache Example:
原始:
链路升级:
安装Web Cache:
Q:为什么将控制连接与数据连接分开?
A:不会混淆数据与命令/响应,简化协议设计和实现;在传输文件的过程中可以继续执行其它的操作;便于控制传输过程(如客户可以随时终止传输)
Q:为什么用关闭数据连接的方式结束文件传输?
A:允许动态创建文件(不需预先告知文件的大小)