第二章知识点回顾
- 1.应用层
- 1.1网络应用架构
- 1.1.1客户-服务器架构
- 1.1.2P2P架构
- 1.1.3两种架构的对比
- 1.2不同终端上的进程通信
- 1.3进程与网络的接口:套接字
- 1.4进程如何标识自己:进程编址
- 1.5因特网提供的传输服务
- 小结
- 1.6Web应用画像
- 1.7 HTTP协议
- 1.7.1HTTP使用TCP服务
- 1.8非持久连接和持久连接
- 1.8.1 非持久HTTP
- 1.8.2非持久HTTP的响应时间
- 1.9持久HTTP
- 1.10HTTP报文格式
- 1.11Web缓存(代理服务器)
1.应用层
- 几个重要的概念:
- 客户-服务器模式
- 对等模式
- 传输层服务
- 进程与传输层接口
- 几个流行的应用层协议:
- HTTP
- FTP
- SMTP / POP3 / IMAP
- DNS
- 开发网络应用程序: socket API
- 创建一个网络应用的核心,是编写一个分布式程序,使其可以:
- 运行在不同的端系统上,并能通过网络相互通信
- 例如,web服务器软件与浏览器软件
- 应用程序只运行在终端上:应用程序员不需要为网络核心设备编写程序“
- 只在端系统上开发应用”是一个非常重要的设计决定:
- 极大地方便了网络应用的开发和快速部署
1.1网络应用架构
- 在开发一个应用程序之前,首先要决定采用什么样的网络应用架构
- 网络应用架构规定了在各个端系统上组织应用程序的方法
- 目前有两种主流的网络应用架构:
- 客户-服务器架构(Client-server)
- 对等架构(Peer-to-peer ,P2P)
1.1.1客户-服务器架构
- 服务器(server):
- 有一台总是在线的主机,上面运行着服务器程序(server)
- 服务器主机(server machine)具有永久的、众所周知的地址
- 客户(client):
- 用户终端上运行一个客户程序(client),需要时与服务器程序通信,请求服务
- 客户机(client machine)使用动态地址,通常不会总是在线
1.1.2P2P架构
- 没有总是在线的服务器主机
- 任意一对端系统(对等方)可以直接通信
- 对等方多为用户自己的计算机,使用动态地址
- 每个对等方既可请求服务,也可提供服务
- 典型的P2P应用:
- BT、迅雷
- Skype
- PPLive
1.1.3两种架构的对比
- 客户-服务器架构:
- 资源集中:
- 资源(服务)只在某些固定的终端上提供
- 优点:资源发现简单
- 缺点:
- 集中式计算带来的问题,如服务端扩容压力、网络流量不均衡、响应延迟长
- 资源集中:
- P2P架构:
- 资源分散:
- 任何终端都可以提供资源(服务)
- 优点:
- 易于扩容、均衡网络流量
- 缺点:
-资源发现困难,社会问题(版权、安全性等)
- 资源分散:
1.2不同终端上的进程通信
- 进程:主机上运行的程序
- 在分布式应用中,不同终端上的进程需要通信
- 进程通信的方法:
- 同一个主机内:进程间通信机制(OS提供)
- 在不同主机上:通过交换报文进行通信
- 在一次确定的通信会话中,总能标示一方为客户进程,另一方为服务器进程:
- 客户进程:主动发起请求的进程
- 服务器进程:接收请求的进程
1.3进程与网络的接口:套接字
- 进程如何将报文送入网络,又如何从网络接收报文?
- 设想在应用程序和网络之间存在一扇门(套接字):
- 发送报文:发送进程将报文推到门外
- 门外的运输设施(因特网)将报文送到接收进程的门口
- 接收报文:接收进程打开门,即可收到报文
- 套接字是应用层和传输层的接口,也是应用程序和网络之间的API
1.4进程如何标识自己:进程编址
- 每个进程需要一个 标识,以便其它进程能够找到它
- Q: 可以用进程所在主机的地址来标识进程吗?
- A: 不能,因为同一个主机上可能运行着许多进程
- 端口号:用于区分同一个主机上的不同进程
- 进程标识包括:
- 主机地址
- 与该进程关联的端口号
- 端口号的例子:
- 众所周知的端口号分配给服务器,成为服务的标识
- 比如,HTTP server使用端口80,Mail server使用端口25
1.5因特网提供的传输服务
- TCP service:
- 面向连接: 保证传输顺序
- 可靠传输:不出错
- 流量控制: 发送进程不会“压垮”接收进程
- 拥塞控制: 网络超载时抑制发送进程
- 不提供: 及时性,最低带宽保证,安全性
- UDP service:
- 通过因特网接收和发送报文
- 不提供: 顺序保证,可靠传输,流量控制,拥塞控制,及时性,最低带宽保证,安全性
小结
- 为创建一个新的网络应用,需要:
- 选择一种网络应用架构:客户-服务器 or P2P
- 选择一种网络服务:TCP or UDP
- 确定一个端口号
- 定义应用层协议
- 编写客户程序和服务器程序(调用套接字接口)
- 网络应用和应用层协议:
- 应用层协议只是网络应用的一部分
- 网络应用还包括客户程序、服务器程序等
- 要求掌握的概念:
- 客户-服务器模型
- 网络应用编程接口
1.6Web应用画像
- 应用层资源:网页(web pages)
- 网络应用架构:
- 客户-服务器架构 客户:浏览器
- 服务器:web服务器
- 要求的网络服务:TCP服务
- 端口号:80
- 应用层协议:HTTP(Hyper Text Transfer Protocol)
1.7 HTTP协议
- Web采用客户-服务器模式
- client: 浏览器请求、接收和显示web对象
- server: Web服务器应客户请求发送对象
- HTTP协议:定义了浏览器和web服务器之间的通信规则
- HTTP 1.0(RFC 1945)和HTTP 1.1(RFC 2068)
1.7.1HTTP使用TCP服务
- 客户发起到服务器 80 端口的 TCP 连接(客户端创建一个套接字)
- 服务器接受来自客户的TCP连接(服务器端创建一个套接字)
- 浏览器和服务器交换HTTP报文 (通过各自的套接字)
- 关闭TCP 连接(关闭各自的套接字)
- HTTP是“无状态的”
- 服务器不保存有关客户请求的任何信息
1.8非持久连接和持久连接
- 非持久 HTTP
- 在一个TCP连接上最多发送一个对象
- HTTP/1.0 使用非持久连接
- 持久 HTTP 在
- 一个TCP连接上可以发送多个对象
- HTTP/1.1 缺省使用持久连接
1.8.1 非持久HTTP
1.8.2非持久HTTP的响应时间
- RTT (Round-Trip Time):
一个小分组从客户发送到服务器,再返回客户的时间 - Response time:
- 建立TCP连接用时一个RTT
- 发送HTTP请求至收到响应的前几个字节用时一个RTT
- 传输文件的时间
- 请求一个网页的时间:
- 请求一个对象用时2RTT(忽略对象传输时间)
- 请求一个完整的网页用时22RTT(11个对象)
1.9持久HTTP
- 非持久HTTP 的问题:
- 获取每个对象需要2个RTT
- 每个TCP连接需要消耗操作系统资源
- 浏览器需要打开多个TCP连接来获取一个网页
- 持久HTTP
- 服务器在发送响应后保持连接
- 同一对客户-服务器之间的后续HTTP报文可以在该连接上传输
- 无流水线方式:
- 客户仅当收到前一个响应后再发送新的请求
- 请求每个对象用时1个RTT
- 请求一个网页用时12RTT
- 流水线方式:
- HTTP/1.1缺省使用该方式客户每解析到一个引用对象就可以发送请求
- 可在一个RTT时间内请求所有引用对象
- 请求一个网页用时约3RTT
1.10HTTP报文格式
- 两类HTTP报文:
- 请求报文:客户发往服务器
- 响应报文:服务器发往客户
- HTTP报文由ASCII文本构成
1.11Web缓存(代理服务器)
- 代理服务器: 代表原始服务器满足HTTP请求的网络实体,保存最近请求过的对象的拷贝。
- 用户设置浏览器:所有HTTP请求首先发往web 缓存
- 浏览器将HTTP请求发送给web缓存: 对象在web缓存中:
- web缓存返回对象
- 对象不在web缓存中:web缓存从原始服务器获取对象,缓存在本地,然后返回给客户
- Q: web缓存如何知道对象的原始服务器?
- A: HTTP请求头中的host首部行指出了原始服务器