联网应用程序:
可以拥有多台计算机,每台计算机都拥有私人的数据,每个数据都可能由不同的人拥有和控制
本地应用程序:
只能访问本地应用程序上的数据
基本模型:
两台计算机
每台计算机在本地运行一个程序
两个程序通过网络通信
(双向可靠的字节流):
计算机A上运行了程序A,写入通过网络传输的数据,计算机B上的程序B可以读取它
Byte Stream Model 字节流模型
计算机B等待连接(服务器)
计算机A 与 B进行连接
这是A将数据写入连接,通过网络传输,B可以读取,反之也可以
任何一方都可以关闭连接
比如说,浏览器完成从web服务器请求数据的任务之后,可以选择断开连接
服务器也可以主动断开连接,此时浏览器中就会看到错误信息
服务器也可以拒绝连接,此时有可能会提示连接被拒绝,或者浏览器等待很长时间(服务器未发出拒绝回应)
World Wide Web (HTTP)
客户端-服务器模型
http:超文本传输协议
浏览器网址显示http://,标明其在用http通信
以文档为中心的程序通信方式
简述实现过程:
- 客户端打开与服务器的连接并向其发送命令,写入连接发送请求(最常见的是GET命令,请求界面)
- 服务器收到请求(读取)
- 检测请求是否有效、用户是否可以收到访问请求页,并发送响应,写入对连接的响应
- 客户端读取响应
BitTorrent
点对点模型
bittrorrent是一个程序,允许交换和共享大文件
相当于多个客户端互相连接通信,服务器端只提供一个Tracker
为了使单个客户端可以并行的接受许多其他客户端的请求
bittorrent对文件进行切割,分成数据块,再进行传输
当一个客户端从另一个客户端请求下载完整的work时
他会告知其他客户端,存在该work并允许其他客户端下载
这些合作客户的集合称为,群
客户可以加入或者离开群
具体操作方法:
客户想要下载文件的时候,必须找到一个叫做torrent的文件
利用http下载该种子文件,这个文件描述了一下有关客户端想要下载的数据文件的一些信息
tracker:用来对应客户和群,最终客户是哪个群的成员
想要加入种子,客户端必须再次通过http和tracker进行练习,以请求列表
当你用客户端想打开其中一些客户端的连接,并请求文件,其他的客户端也可以反过来请求文件
如果新客户加入群时,也会被告知连接到了你的客户端
这就表明,所连接的并不是类似www一样,一个客户端连接着一个服务器
而是一群密集的客户端都会与你连接,并动态的交换数据
Skype
P2P+CS
简单模式:类似www,但是是两个客户端直接连接
复杂模式:
NAT 网络地址转换器
如果位于NAT之后,可以打开与Internet的连接你,来接受其他的客户端的连接
但是Internet上的其他节点没有办法直接打开NAT之后的连接
Skype要解决这个问题
Rendezvous 集合服务器
原理:
反向连接
假设 客户端A 想跟 在NAT后的客户端B通信
此时直接向客户端B发信息,B是无法接收到的
所以如果B登入了Skype之后,
会自动向Rendezvous发送一个请求,由于B在NAT之后所以可以互相连接
而A发送给Rendezvous一个请求,即请求连接B
Rendezvous则会向B进行转达
B再透过NAT发送连接请求给A,这样形成了反向连接
相当于反转了启动的预期方向
但是如果A也在NAT之后呢?
Relay 中继服务器
这样需要两个客户端在登入之后,分别连接中继
并且在之后的连接中都通过中继互相通信
以上的例子都是,可靠双向字节流
这样允许不同计算机上运行的两个程序互相交流数据
将网络抽象成了简单的读写关系