应用层
P2P应用
架构
文件分发:客户机/服务器 vs P2P
实例:BitTorrent
索引技术
P2P系统的索引:信息到节点位置(IP+端口号)的映射
文件共享(电驴)
- 利用索引动态跟踪节点所共享的文件的位置
- 节点需要告诉索引它拥有哪些文件
- 节点搜索索引,从而获知能够得到哪些文件
即时消息(QQ)
- 索引负责将用户名映射到位置
- 当用户开启IM应用时,需要通知索引它的位置
- 节点检索索引,确定用户的IP地址
集中式索引
内容和文件传输是分布式的,但是内容定位是高度集中式的。
- 单点失效问题
- 性能瓶颈
- 版权问题
洪泛式查询:Query flooding
- 完全分布式架构
- Gnutella采用这种架构
- 每个节点对它共享的文件进行索引,且只对她共享的文件进行索引
覆盖网络
- 节点X与Y之间如果有TCP连接,那么构成一个边
- 所有的活动节点和边构成覆盖网络
- 边:虚拟链路
- 节点一般邻居数少于10个
层次式覆盖网络
案例:Skype
Scoket应用
应用编程接口API
就是应用进程的控制权和操作系统的控制权进行转换的一个系统调用接口。
几种典型的应用编程接口:
- Berkeley UNIX操作系统定义了一种API,称为套接字接口(socket interface),简称套接字(socket)。
- 微软公司在其操作系统中采用了套接字接口API,形成了一个稍微不同的API,并称之为Windows Socket Interface,WINSOCK。
- AT&T为其UNIX系统V定义了一种API,简写为TLI(Transport Layer Interface)。
Socket API
最初设计
- 面向BSD UNIX-Berkley
- 面向TCP/IP协议栈接口
目前
- 事实上的工业标准
- 绝大多数操作系统都支持
Internet网络应用最典型的API接口
通信模型
- 客户/服务器(C/S)
应用进程间通信的抽象机制
Socket抽象
Socket API 函数(没听懂)详解
Socket面向TCP/IP的服务类型
网络字节顺序
- TCP/IP定义了标准的用于协议中的二进制整数表示:网络字节顺序(network byte order)
- 某些Socket API函数的参数需要存储为网络字节顺序(如IP地址、端口号等)
- 可以实现本地字节顺序与网络字节顺序间转换的函数
- htons:本地字节顺序->网络字节顺序(16bits)
- ntohs:网络字节顺序->本地字节顺序(16bits)
- htonl:本地字节顺序->网络字节顺序(32bits)
- ntohl:网络字节顺序->本地字节顺序(32bits)
网络应用的Socket API(TCP)调用的基本流程
解析服务器IP地址
解析服务器端口号
解析协议号
TCP客户端软件流程
UDP客户端软件流程
4种类型的基本服务器
- 循环无连接服务器
- 循环面向连接服务器
- 并发无连接服务器
- 并发面向连接服务器
。。。。。。