A Day In The File Of An Application
Dominant model:bidirectional(双向的),reliable(可信赖的) byte stream connection字节流
在建立链接之后 双端都可以发送接收数据 也可以主动断开连接
connect reset by peer被对等连接重置 这意味着 网络服务器在网络连接时关闭了连接
服务器也可以拒绝连接 例如 无响应等等
WWW
WWW 万维网使用HTTP的东西工作 HTTP是超文本传输协议
在HTTP中 客户端打开与服务器的连接并向其发送命令 最常见的是Get命令 请求一个page
HTTP被设计为 以文档为中心的程序通信方式 例如打开一个网站 他会发送Get request 到服务区请求 然后服务器得到信息 发送response带一些数字也就是状态码 例如200 请求成功 404 请求资源没有被找到 500 服务器端程序出错 400 客户端请求语法有误 同时也会返回相应的hypertext HTTP使用ASCII码
HTTP的原理很简单 客户端发送请求 服务器读取 处理请求并写入对连接的相应 然后客户端读取响应
BitTorrent
BitTorrent 比特流 内容分发协议
BitTorrent协议解析 - 知乎 (zhihu.com)
BitTorrent是一个程序 允许人们共享和交换大文件 不同于HTTP ,客户端请求从服务器向Web发送文档的网络在BitTorrent中请求来自其他客户的文件
为了使单个客户端可以并行的从许多其他客户端发出请求 BitTorrent破环了文件分段为数据块pieces 当文件还没下完时 这些客户端会被放入swarm中
它和HTTP一样也是reliable steam
当客户想要下载文件时 它首先必须找到一个叫做torrent的文件也就是种子文件,一般来说是通过WWW找到的种子资源 然后下载 ,种子文件描述了想要下载的数据文件的一些信息,它也会告诉BitTorrent的tracker是谁。tracker是一个节点 用于跟踪哪些客户端是该客户端的成员 要加入种子 客户端再次通过HTTP与tracker连接 请求其他客户端的列表 然后就可以与这些客户端之间进行相互通信
Skype
为聊天 语音 视频等等提供服务
Skype是专有系统 没有内部工作原理的任何官方文档
建立 在P2P之间 这种连接的复杂性来自NAT或网络地址转换器的东西
在NAT之后可以建立与Internet的连接 但是在Internet上的其他无法轻易的打开与你的连接
例如上图 绿色可以通过 红色不能 此时Skype就围绕该问题去解决它
它使用Rendezvous集合服务器的服务来实现
当登录Skype时 客户端将打开与控制服务器网络的连接 在这种情况下 客户端B打开与集合服务器的连接 当A呼叫B的时候 将消息传输到Rendezvous上 它将消息转给B 如果B接收服务 它直接与A连接因为B可以连接A 而A不能主动直接连接到B(因为有NAT)
上述的一系列过程 称为反向连接 因为它会反转启动的预期方向的连接
对于NAT 将服务器放在NAT后是一个糟糕的选择 同样对于需要被保护的PC来说放在NAT之后
Skype with MoreComplications
两个客户端都放在NAT之后 如何去连接?
Skype引入了第二种服务器 被称为Relay中继
Relay不能在NAT之后
两个客户端都放在NAT之后 通过Relay连接 都连接到relay 先当与relay转发数据