一、网络应用体系结构
2.1 客户机/服务器结构(Client-Server,C/S)
服务器
- 7*24提供服务
- 永久性访问地址/域名
- 利用大量的服务器实现可扩展性
客户机
- 与服务器通信,使用服务器提供的服务
- 间隙性接入网络
- 可能使用动态IP地址
- 不会与其他客户机直接通信
2.2 点对点结构(Peer-to-peer,P2P)
-
没有永久的在线服务器
-
任意端系统/节点之间可以直接通信
-
节点间歇性接入网络
-
结点可能改变IP
-
优点:高度可伸缩
-
缺点:难以管理
2.3 混合结构(Hybrid)
将p2p 和 C/S 结构混合在一起的结构
利用两者的优点、规避两者的缺点
Napster
- 文件传输使用P2P结构
- 文件搜索使用C/S结构—集中式
- 每个节点想中央登记自己的内容
- 每个节点向中央查询请求,查找感兴趣的内容
二、网路应用的进程通信
进程:主机上运行的程序
2.1 套接字Socket
进程使用Socket发送接受消息
-
传输基础设施向进程提供API
- 传输协议的选择
- 参数的设置
-
不同主机上的进程通信,每个进程必须拥有标识符
-
标记寻址主机----IP地址
-
端口号 port number
-
每个需要通信的进程都需要分配一个端口号
- HTTP Server:80
- Mail Server: 25
进程的标识符 - IP + 端口
网络应用都应该遵循应用层协议
公开的协议 - 有RFC(Request For Comments)定义 TCP/IP的RFC
- 允许互操作
- HTTP、SMTP RFC的集合
2.2 应用层协议的内容
- 消息的类型(type)
- 请求消息
- 响应消息
- 消息的语法(syntax)格式
- 哪些字段
- 字段如何描述
- 字段的语义semantics
- 字段中信息含义
- 规则rules
三、网络应用的需求与传输层服务
- 数据丢失data lose / 可靠性 reliability
- 时间timing 延迟delay
- 带宽bandwidth
四、Web
World Wide Web
- 网页
- 网页互相链接
网页web page包含多个对象object
- 对象:HTML、JPEG、视频、动态脚本
- 基本HTML:包含对其他对象引用的链接
对象的寻址(addressing)
- URL(Uniform Resource Locator):统一资源定位器 RFC1738
- Schema://host:port/path
4.1 HTTP
超文本传输协议 HyperText Transfer Protocol
C/S结构
- 客户–Browser:请求、接受、展示Web对象
- 服务器–Web Server:响应客户的请求,发送对象
HTTP版本:
-
1.0 RFC1945
-
1.1 RFC2068
-
使用TCP传输服务
- Server 80 等待客户机请求
- 浏览器发起到Server的TCP连接(创建Socket)
- Server 接受来自浏览器的TCP连接
- 浏览器和服务器 交换HTTP消息
- 关闭TCP
-
无状态(stateless)
- 服务器不维护任何有关客户端过去所发请求的消息
4.1.1 HTTP连接类型
4.1.1.1 非持久性连接 Nonpersistent HTTP
每个TCP连接最多允许传输一个对象
HTTP 1.0中使用非持久性连接
RTT(Round Trip Time)
非持久性连接需要的时间:
非持久性连接的问题:
- 每个对象都需要2个Rtt
- OS需要对每个TCP连接开销资源
- 浏览器会并行打开多个TCP连接,给服务器造成影响
4.1.1.2 持久性连接 Persistent HTTP
每个TCP连接允许传输多个对象
HTTP 1.1默认使用
- 发送相应后,服务器保持TCP连接的打开
- 后续的HTTP消息可以通过这个连接发送
无流水pipelining的持久性连接
- 客户端收到前一个相应后才发送新的请求
- 每个对象需要1个RTT(开头创建对象还需要1个RTT)
有流水的持久性连接
- HTTP1.1默认选项
- 不用等待前一个对象收到就可以直接发送下一个请求
- 理论收到所有引用对象只需要1个RTT
4.1.2 HTTP消息格式
4.1.2.1 请求消息
请求消息 request
响应消息 response
上传数据的方法
-
POST方法
- 网页需要填写的表格form
- 在请求消息的消息体entity body中上传客户端的输入
-
URL方法
- 输入消息通过requset行的URL字段上传
www.somesite.com/animalsearch?monkeys&banana
- 输入消息通过requset行的URL字段上传
方法的类型
- HTTP1.0
- GET
- POST
- HEAD:请Server不要将所请求的对象放入响应消息中
- HTTP 1.1
- GET POST HEAD
- PUT:将消息体中的文件上传到URL字段所指定的路径
- DELETE:删除URL字段所指定的文件
4.1.2.2 响应消息
状态行的代码
- 200 OK
- 301 Moved Permenently
- 400 Bad Request
- 404 Not Found
- 505 HTTP Version Not Supported
4.2 Cookie
HTTP是无状态的
如何掌握历史的链接行为
eg:登录 购物车
Cookie:网站为了辨别用户身份、进行Session跟踪二存储在用户本地终端上的数据(通常经过加密)
Cookie组件:
- HTTP响应消息的cookie头部行
- HTTP请求消息的cookie头部行
- 保存在客户端主机上的cookie文件、浏览器管理
- Web服务器端的后台数据
Cookie的作用:
- 身份认证
- 购物车
- 推荐
- Web Email
- …
4.3 Web缓存技术
在不访问Server的情况下,满足HTTP请求
- 缩短响应时间
- 减少机构组织流量
- 在大范围内Internet实现有效的内容分发
正向代理Proxy:
反向代理:
透明代理:透明代理隐藏在网络内部,对用户和服务器透明,不需要特殊配置便可以使用代理服务。透明代理通常被用于流量控制、内容过滤等场景。例如,GFW就可以通过透明代理屏蔽某些IP地址或者URL
五、P2P
Peer to Peer
- 没有服务器
- 任意节点直接可以通信
- 节点阶段性接入Internet
- 节点可能更换IP
5.1 BitTorrent
虽然BitTorrent具有高效、快速、安全的有点,但是因为一些缺点被很多网站禁止:
- 版权侵犯:传播盗版影视
- 安全问题:去中心化特性容易被黑客利用,篡改Torrent问题件恶意植入病毒
- 传输质量:不能保证文件传输质量和完整性,文件下载一部分无法完成
5.2 索引
P2P系统的索引:信息到节点位置(IP+port)的映射
文件共享(电驴)
- 利用索引动态跟踪节点锁共享的文件的位置
- 节点需要告诉索引自己有哪些文件
- 节点搜索索引,从而能够获知哪些文件
即时消息(QQ)
- 索引负责讲用户映射到位置
- 当用户开启IM应用,需要知道索引它的位置
- 节点检索索引,确定用户的IP
5.2.1 集中式索引
- 节点加入时:通知中央服务器IP 内容
集中式索引缺点:
- 单点失效
- 性能瓶颈
- 版权问题
5.2.2 洪泛式查询 Query flooding
- 完全分布式架构
- 每个节点只对自己共享的文件进行索引
- 节点X & Y 若有TCP连接,那么构成边(虚拟链路)
- 所有活动节点构成网络
- 节点一般邻居< 10个
- 查询命中的话,反向路径发回查询节点
Gnutella采用这种
5.2.3 层次式覆盖网络
集中式 和 洪泛式 结合
分为 超级节点 普通节点
- 节点和超级节点之间维持TCP连接
- 超级节点之间维持TCP连接
- 超级节点跟踪子节点的内容
- 索引分布在每个超级节点上