宏观
我们使用过哪些网络应用?
百度,qq,email,迅雷, alipay, wechat, baidu cloud, taobao
网络应用和单机应用有哪些本质性不同?
需要有网络的基础环境。
网络应用的体系结构
- client - sever
(服务器是对外提供服务的)
7*24,永久性访问地址/域名,利用大量服务器实现可扩展性
客户机不会与其他客户机直接通信 - p2p
没有永远在线的服务器,任意节点都可以直接通讯,节点可以改变ip,可以间歇接入网络(bt文件下载)
优点: 高度可伸缩
缺点: 难管理 - hybrid
混合能够利用两者的优点同时规避两者的缺点。
napster(文件传输用p2p,搜索用cs)
网络应用如何构成
同一主机进程如何通信? 进程间通信机制,操作系统提供
不同主机呢? 消息交换。客户机(发起通信),服务器(等待通信的进程)
利用socket发送接受消息
socket是网络的api
如何寻址进程?
不同主机的进程通信,每个进程必须有标识符
如何寻址呢? 用ip地址。
同一主机可能同时有多个进程需要通信。所以ip地址不够。所以我们还需要有端口号。
为主机上每个需要的通信进程分配一个端口号。
80->http server
25->mail server
进程的标识符: ip+port
应用层协议
网络应用遵循应用层协议
公开协议(允许互操作):rfc,http,smtp
私有协议:多数p2p 文件共享应用
网络应用对传输服务的需求
某些网络应用能够容忍一定的数据丢失:电话
100%可靠: 文件传输
有些应用在延迟足够低才有效,比如网游
带宽限制的:网络视频
能适应任何带宽的: EMAIL
TCP VS UDP
微观
WEB 应用
HTTP 是个无状态的,服务器不维护任何有关客户端历史所发请求的信息。
为什么要用无状态的?有状态的协议更加复杂,需要维护状态,一旦服务器挂了,会产生状态不一致。解决这种不一致代价高。
HTTP连接
先看非持久链接
RTT:从客户端发送一个很小的数据报到服务器并返回所经历的时间。
发起,建立TCP 链接: 1个RTT
发送HTTP请求消息到HTTP响应消息:1个RTT
响应消息中所含的文件传输时间
total = 2 * rtt + 文件发送时间
缺点:
每个对象需要2个RTT。(10个JPG,就需要20个RTT)
操作系统需要尾每个TCP链接开销资源
浏览器会打开多个并行的TCP链接以获取网页所需对象。服务器端压力过大。
这时就需要持久性连接,建立后尽可能多利用。
这个又分为无流水线机制的持久性连接。客户端只有收到前一个响应后才发送新的请求。每个被引用的对象耗时1个RTT。
带有流水机制的持久性连接, HTTP 1.1默认,理想情况下收到所有引用对象只需耗时1个RTT。
HTTP 请求消息
HTTP 响应消息
cookie
为什么需要cookie?
因为http协议无状态,如何保存购物车呢?
有时我们需要记录用户的会话,原有的http协议不够用了,就引入的cookie
网站为了辨别用户身份,进行session跟踪而存储在用户本地的加密数据
缓存/代理服务器
在能够不访问服务器的前提下满足客户端的http请求。
缩短客户请求响应时间
减少机构/组织的流量
大范围内实现有效的内容分发(cdn)。
请求先发给代理服务器,如果内容在缓存服务器有,就把内容直接给用户。如果没有,代理服务器转发到对应的原始的server
一般由isp来架设。
解决方案1,花钱升级
解决方案2, web缓存
如何保证缓存版本 和 远端版本一致呢?
Email 应用
一般有邮件客户端,邮件服务器,和smtp协议
客户端:读写email,与服务器交互。
服务器:存储发给用户的email,消息队列存储等待发送的email
使用tcp 进行email消息的可靠传输
端口25
传输过程的三个阶段:握手,消息的传输,关闭
命令,响应交互模式
命令: ascii文本
响应: 状态代码和语句
email消息只能包含7位ascii码
交互示例
smtp 使用持久性连接,要求消息必须由7位ascii 码构成,smtp服务器利用crlf.crlf确定消息的结束。
email消息格式 与pop3协议
因为消息体只支持ascii码,如何发图片和视频流呢?
mime(多媒体邮件扩展),通过在邮件头部增加额外的行以声明mime的内容类型。
邮件访问协议:从服务器获取邮件。
pop协议(post Office protocol)
imap: internet mail access protocal(更多功能)
http: (基于web email)
pop协议
下载并删除 模式(如果用户换客户端,无法重读该邮件)
下载并保持模式:不同客户端都可以保留消息的拷贝。
pop3是无状态的。
IMAP 协议
POP3协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。
而IMAP提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
同时,IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。
总之,IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件,但 IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。
DNS 应用
DNS的主要作用就是将域名翻译为IP地址。
难点就在于为整个互联网提供服务,全世界有几十亿台机器。要保障不间断的服务。
域名向IP地址翻译,主机别名,邮件服务器别名,负载均衡。
为什么不是用集中式的DNS?
1.单点失败
2.流量问题
3.距离问题
4.维护性问题
从上往下,分别是根服务器,顶级域名服务器,服务器。
如查询www.amazon.com
1.查询跟服务器,找到COM 域名服务器
2.查询COM域名服务器,找到AMAZON.COM域名解析服务器
3.查询AMAZON.COM域名解析服务器,获得WWW.AMAZON.COM IP地址
当本地域名解析服务器无法解析域名时,访问根服务器。(全球有13个根域名服务器)
顶级域名服务器,负责COM,ORG,NET, EDU
权威域名服务器: 组织的域名解析服务器,提供组织内部服务器的解析服务。组织负责维护。
本地域名解析服务器:不严格属于层级体系,每个ISP都有个本地域名服务器。作为代理将查询转发给层级式域名解析服务器系统。
迭代查询
递归查询
递归查询VS迭代查询
本地域名服务器一般会缓存顶级域名服务器的映射,所以根域名服务器不经常被访问。
DNS记录
资源记录(name,value,type,ttl)
如何注册域名
P2P应用
没有服务器,任意端系统可以作为服务器。
传统架构
p2p架构
bitTorrent
p2p 索引技术
p2p系统的索引: 信息到节点位置(ip+port)的映射
文件共享: 利用索引动态跟踪节点所共享文件的位置
集中式索引
单点失效问题,性能瓶颈,版权问题。
分布式索引
混合索引(介于集中式和分布式)