应用层
1.网络应用的体系结构
网络应用:百度、QQ、email、迅雷、支付宝、微信、百度云、淘宝网、网易。
体系结构:
(1)客户机/服务器结构(Client-Server,C/S)
服务器:
7*24小时提供服务
永久性访问地址/域名
利用大量服务器实现可扩展性
客户机:
与服务器通信,使用服务器提供的服务
间歇性的接入网络
可能使用动态IP地址
不会与其他客户机直接通信
例子:Web
![image.png](https://i.loli.net/2021/11/12/Wyd5468XE97D3vS.png)
(2)点对点结构(Peer-to-peer,P2P)
没有永远在线的服务器
任意端系统/节点之间可以直接通讯
节点间歇性接入网络,可能改变IP地址
优点:高度可伸缩; 缺点:难于管理
(3)混合结构(Hybrid)
利用前两者的优点,规避两者的缺点。
Napster:文件传输使用P2P结构;文件的搜索采用C/S结构——集中式
网络应用进程通信:
网络应用的基础:进程间的通信
进程:主机上运行的程序
同一主机的进程之间的通信方式:进程间通信机制,操作系统提供。不同主机:消息交换(报文交换)
客户机进程:发起通信的进程
服务器进程:等待通信请求的进程
套接字:Socket
进程间通信利用socket发送/接收消息实现
类似于寄信:
发送方将消息送到门外邮箱
发送方依赖(门外的)传输基础设施将消息传到接收方所在的主机,并送到接收方的门外
接收方从门外获取消息
传输基础设施向进程提供API:
传输协议的选择;参数的设置
如何寻址进程
不同主机上的进程间通信,每个进程必须拥有标识符
如何寻址主机——IP地址
Q:主机的IP地址是否足以定位进程?
A:否。同一主机上可能同时有多个进程需要通信。
端口号/Port number
为主机上每个需要通信的进程分配一个端口号
HTTP Server:80
Mail Server:25
进程的标识符=IP地址+端口号
应用层协议
网络应用需要遵顼应用层协议
公开协议:
由RFC(Request For Comments)定义
允许互操作
HTTP、SMTP……
私有协议:
多数P2P文件共享应用
协议内容
消息的类型:请求消息、响应消息。
消息的语法(Syntax)/格式:消息中有哪些字段(field)、字段如何描述
字段的语义(semantics):字段中信息的含义
规则(rules):进程何时发送/响应消息
2.网络应用的服务需求
数据丢失(data loss)/可靠性(reliability)
- 某些网络应用能够容忍一定的数据丢失:网络电话
- 某些网络应用要求100%可靠的数据传输:文件传输,telnet
时间(timing)/延迟(delay)
- 有些应用只有在延迟足够低时才“有效”
- 网络电话/网络游戏
带宽(bandwith)
- 某些应用只有在带宽达到最低要求时才“有效”:网络视频
- 某些应用能够适应任何带宽——弹性应用:email
典型网络应用对传输服务的需求:
3.Internet传输层服务模型
Internet提供的传输服务
典型网络应用所使用的传输层服务
4.特定网络应用及协议
Web应用
关于Web
World Wide Web:Tim Berners-Lee
- 网页
- 网页互相链接
网页(Web Page)包含多个对象(objects)
- 对象:HTML文件、JPEG图片、视频文件、动态脚本等
- 基本HTML文件:包含对其他对象引用的链接
对象的寻址(addressing)
URL(Uniform Resoure Locator):统一资源定位器
Scheme://host:port/path
HTTP
HTTP协议:万维网应用遵循超文本传输协议(HyperText Transfer Protocol)
C/S结构
- 客户——Browser:请求、接收、展示Web对象
- 服务器——Web Server:响应客户的请求,发送对象。(Apache Web Server)
HTTP版本:1.0:RFC1945,1.1:RFC2068
使用TCP传输服务:
- 服务器在80端口等待客户的请求
- 浏览器发起到服务器的TCP连接(创建套接字Socket)
- 服务器接受来自浏览器的TCP连接
- 浏览器(HTTP客户端)与Web服务器(HTTP服务器)交换HTTP消息
- 关闭TCP连接
无状态(stateless):服务器不维护任何有关客户端过去所发请求的信息
有状态的协议更复杂:需要维护状态(历史信息)、如果客户或服务器失效,会产生状态的不一致,解决这种问题代价高
HTTP连接
非持久性连接(Nonpersistent HTTP):每个TCP连接最多允许传输一个对象;HTTP 1.0版本使用非持久性连接。
响应时间分析与建模
RTT(Round Trip Time):从客户端发送一个很小的数据包到服务器并返回所经历的时间
响应时间(Response time)
发起、建立TCP连接:1个RTT
发送HTTP请求消息到HTTP响应消息的前几个字节到达:1个RTT
响应消息中所含文件/对象传输时间
Total = 2RTT + 文件发送时间
非持久性连接存在一些问题:
每个对象需要2个RTT
操作系统需要为每个TCP连接开销资源(overhead)
- 持久性连接(persistent HTTP):每个TCP连接最多允许传输多个对象;HTTP 1.1版本默认使用持久性连接
发送响应后,服务器保持TCP连接的打开
后续的HTTP消息可以通过这个连接发送
- 无流水(pipelining)的持久性连接
- 客户端只有收到前一个响应后才发送新的请求
- 每个被引用的对象耗时1个RTT
- 带有流水机制的持久性连接
- HTTP 1.1的默认选项
- 客户端只要遇到一个引用对象就尽快发出请求
- 理想请求下,收到所有的引用对象只需耗时约1个RTT
HTTP消息格式
- 请求消息
- ASCII码:人直接可读
上传输入的方法:
POST方法:网页经常需要填写表格(form)/在请求消息的消息体(entity body)中上传客户端的输入
URL方法:使用GET方法/输入信息通过request行的URL字段上传
- 响应消息
Cookie技术
HTTP协议无状态,很多应用需要服务器掌握客户端的状态,如:网上购物
- 某些网站为了辨别用户身份、进行session跟踪而储存在用户本地终端上的数据(通常经过加密)。
Cookie的组件
- HTTP响应消息的cookie头部行
- HTTP请求消息的cookie头部行
- 保存在客户端主机上的cookie文件,由浏览器管理
- Web服务器端的后台数据
Cookie的原理
Cookie的作用
- 身份认证
- 购物车
- 推荐
- Web e-mail ……
Cookie技术存在一定的隐私问题
Web缓存/代理服务器技术
功能:在不访问服务器的前提下满足客户端的HTTP请求
为什么要发明这种技术?
- 缩短客户请求的响应时间
- 减少机构。组织的流量
- 在大范围内(Internet)实现有效的内容分发
关于该技术
用户设定浏览器通过缓存进行Web访问
浏览器向缓存/代理服务器发送所有的HTTP请求
- 如果所请求对象在缓存中,缓存返回对象
- 否则,缓存服务器向原始服务器发送HTTP请求,获取对象,然后返回给客户端并保存该对象
缓存既充当客户端,也充当服务器
一般由ISP(Internet服务提供商)假设
条件性GET方法
Email应用
构成组件
- 邮件客户端(user agent)
- 邮件服务器
- SMTP协议(Simple Mail Transfer Protocol)
邮件客户端
- 读、写Email消息
- 与服务器交互,收、发Email消息
- Outlook,Foxmail,Thunderbird
- Web客户端
邮件服务器
- 邮箱:存储发给该用户的Email
- 消息队列(message queue):存储等待发送的Email
SMTP协议
- 邮件服务器之间传递消息所使用的协议
- 客户端:发送消息的服务器
- 服务器:接受消息的服务器
采取TCP进行email消息的可靠传输
端口25
传输过程的三个阶段:握手->消息的传输->关闭
命令/响应交互模式:
命令(command):ASCII文本
响应(response):状态代码和语句
Email消息只能包含7位ASCII码
- 使用持久性连接
- 消息必须由7位ASCII码构成
- SMTP服务器利用CRLF.CRLF确定消息的结束
SMTP vs HTTP
SMTP:退式(push) HTTP:拉式(pull)
都使用命令/响应交互模式
命令和状态代码都是ASCII码
HTTP:每个对象封装在独立的响应消息中
SMTP:多个对象在由多个部分构成的消息中发送
消息格式
多媒体扩展
邮件访问协议:从服务器获取邮件
POP:Post Office Protocol
- 认证/授权(客户端<–>服务器)和下载
- ……
IMAP:Internet Mail Access Protocol
HTTP:163,QQ Mail等
DNS应用
DNS(Domain Name System):解决Internet上主机/路由器的识别问题
- IP地址
- 域名:www.baidu.com
如何解决域名和IP地址之间的映射?
- 域名解析系统DNS
- 多层命名服务器构成的分布式数据库
- 应用层协议:完成名字的解析
- internet核心功能,用应用层协议实现
- 网络边界复杂
DNS服务
- 域名向IP地址的翻译
- 主机别名
- 邮件服务器别名
- 负载均衡:Web服务器
为什么不适应集中式的DNS?
- 单点失败问题
- 流量问题
- 距离问题
- 维护性问题
分布式层次式数据库
本地域名解析服务器:
- 不严格属于层级体系
- 每个ISP有一个本地域名服务器
- 默认域名解析服务器
- 当主机进行DNS查询时,查询被发送到本地域名服务器
- 作为代理(proxy),将查询转发给(层级式)域名服务器解析系统
DNS记录缓存和更新
- 只要域名解析服务器获得域名—IP映射,即缓存这一映射
- 一段时间过后,缓存条目失效(删除)
- 本地域名服务器一般会缓存顶级域名服务器的映射
- 因此根域名服务器不会被经常访问
DNS记录和消息格式
DNS协议
- 查询(query)和回复(reply)消息
- 消息格式相同