计算机网络W7:P2P/CDN/socket
P2P architecture
对等:所有的节点既可能是client也可能是server。
examples:
- file distribution(Bit Torrent)
- server transmission/client/clients【设一共有NF个bits,最终目的是让每一个client都有一个F】
$\sum u_i$,随着客户端数量的增大,上传负载增大,但是同时server端的服务能力也增大;
$D_{p2p}\ge max{F/u_s,F/d_{min},NF/(u_s+\sum u_i)}$
注意这里的下界是理论上最小的,但是实质上需要思考的是如何并行,可以做到逼近下界。
v.s. CS 架构【数据来源仅仅是server端】
随着客户端数量的增大,上传负载增大,但是负载不会被分担。
P2P file distribution: BitTorrent
peer
哪些可以使用?[可供数据交换]
一个大的数据包被划分成chunk,但是chunk有可能是被损坏的,如何检查chunk是否是完整的?
计算块的哈希值【默克尔的】
如何拿到完整的以后不再贡献带宽,即如何保证不打边撤就走?
IPFS:激励机制,使用激励机制来完成,可以避免节点自私的离开。[星际文件]
结对条件/协议设计条件:索取的时候即一定要付出。
Bit Torrent预防问题3的技术手段:[一报还一报/投桃报李]
- 某个peer维护其拿数据最快的4个邻居节点[跟自己的速率匹配,且是最快的4个伴侣top4],同样,也它的数据也给其邻居节点发送。
- 这4个伴侣会与alice相互交换。
- 即拿数据时结成对子。
当节点的速率发生变化时:
以固定的时间间隔检验是否节点速率发生变化;
每固定的时间间隔随机选4个邻居外的另外一个[测别的邻居],如果好,则进行邻居的迭代与淘汰。
我永远都在寻找与我速率最匹配的4个人。
最稀缺优先
当一块数据我好几个邻居有,别的一块数据只有一个邻居有,这是我会把只有一个邻居有的拿过来。
对于整个网络来说,如果存储了相同的副本,实质上是没有较大意义的。
CDN 视频内容分发网络
- 像素:数据阵列
- 上下帧之间传输的可能只是差异[增量]
DASH协议
Dynamic,Adaptive,Streaming over HTTP
server:
- divides video file into multiple chunks
- Each Chunk stored, encoded at different rates
- manifest file:
client:
- 周期性测量带宽
- 等
what is related to HTTP:
client端
- when to request chunk:缓存机制
- What编码速率(拿什么)
- 哪里去拿:看那个清单
内容分发网
- 深入:视频服务器深入到各个ISP的网络中
- 邀请做客:IXP(internet exchange point)。
- 不是单点的,而是部署在离用户较近的点。
OOT
CDN遇到的challenge
内容服务商
将内容爬下来/建倒排索引(key word)
搜索引擎/爱奇艺等都是内容提供商
socket programming /UDP /TCP
应用进程和传输进程交换的门
传输层的协议:UDP(不可靠的报文:摸着石头过河)/TCP(3次握手,面向连接的可靠的,建桥先)
Socket 编程:不同机器(终端)上的两个进程间的相互通讯
CS机构下,两台机器上两个进程
- client端读取数据发给server
- server端转换成大写
- 大写发给client
- client展示到屏幕
UDP 过程
sender直接通过receiver的IP和端口号进行发送
接收者收到数据发送回去时,IP和端口从收到的报文(sender发送的)中解析出来。
没有连接的知道对方的过程
Client:主动发起连接
1 | from socket import * |
TCP过程
- 建立连接,server端监听
- client 建立TCP连接
- 允许server同时与多个client端进行交互
注意TCP和UDP的差别
- server先建立连接,监听
- server端先运行,一个程序先运行
- client发起连接,server accept,相当于socket建立,连接建立完成
- 通过连接,在连接的socket上发送消息
- 两端都需要关闭。
1 | ##TCPClinet |
一台机器即可以做client也可以做server,利用机器上的网卡交换信息,此时只要约定一个端口号,即在本地完成。
TCP程序一定要让server先运行起来!
也可以运行多个client端,但每个client端要注意区分?
即TCP的一对多。