趣谈网络协议-应用层(P2P协议)
一、FTP
1. 概述
FTP:文件传输协议,使用两个TCP连接来传输文件
- 控制连接:客户端主动发起连接,服务端被动打开21端口。改连接将客户端命令传送给服务器,并回传服务器应答(list-获取文件目录;reter-取一个文件;store-存一个文件)
- 数据连接:当有文件进行传输时,创建数据连接用以传输数据
2. FTP两种工作模式
FTP工作模式:主动模式(PORT)和被动模式(PASV)
主动模式:
- 客户端随机打开大于1024的端口N,向服务器21端口发起连接,同时客户端监听N+1端口,并通过21端口向服务器发送"port N+1"命令
- 服务器将自己的数据端口20连接到客户端指定端口N+1
被动模式:
- 客户端打开任意端口N(大于 1024)和 N+1
- N端口连接服务器21端口,并发送PASV 命令。服务端开启端口P,服务端21端口返回“227 entering passive mode”消息,消息包含服务器开放用来传输数据的端口P
- 客户端收到消息取得端口号之后,会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。
二、P2P
1. 概述
FTP问题:难以解决一服务器的带宽压力
P2P(peer-to-peer)特点:
- 资源分散存储在多个设备中
- 下载文件时,需要获得已经存储了文件的peer,和这些peer建立点对点连接。一旦下载了文件,当前机器也成了peer的一员。旁边的机器也会从当前机器中下载文件。因此p2p软件一般有下载流量,也有上传流量
2. 种子(.torrent)文件
.torrent 文件:下载文件时,获取有哪些peer有该文件数据
.torrent 文件组成:announce(tracker URL)和文件信息
文件信息:
- info区:该种子有几个文件、文件有多长、目录结构,以及目录和文件的名字
- Name字段:顶层目录名字
- 每个段大小:BitTorrent(简称 BT)协议把一个文件分成很多个小段,然后分段下载。
- 段哈希值:将整个种子中,每个段的 SHA-1 哈希值拼在一起。
P2P下载流程:
- BT客户端解析.torrent文件,得到tracker地址,连接tracker服务器
- tracker服务器响应下载者,将其他下载者的IP地址提供给下载者
- 下载者连接其他下载者,两者告知对方自己已经有的数据块,交换对方没有的数据块
- 下载者每得到一个块,需要计算出下载快的HASH验证码,与.torrent 文件中的对比。若哈希值一致,则说明数据正确,否则需要重新下载该数据块
上述P2P下载流程的特点:
- 下载过程非中心化
- 加入P2P网络时,需要依赖tracker(tracker服务器是用来登记有哪些用户在请求哪些资源)
3. 去中心化网络
DHT去中心化网络:
- 目的:使得tracker去中心化
- 特点:每个加入这个 DHT 网络的人,都要负责存储这个网络里的资源信息和其他成员的联系信息
Kademlia协议:
- 每个BitTorrent启动,会承担两个角色,分别是peer(监听TCP 端口以上传和下载文件)、DHT node(监听一个UDP 的端口,加入DHT 的网络)
- DHT 网络里面,每一个 DHT node 都有一个 ID,DHT node 都有责任掌握一些知识,也就是文件索引,也即它应该知道某些文件是保存在哪些节点上。每个DHT node不会知道全局信息
Kademlia协议指令:
- PING:测试结点是否在线
- STORE:要求一个节点存储一份数据
- FIND_NODE:给定节点 ID 查找一个节点
- FIND_VALUE:根据文件哈希值(160bitID)查找保存了文件的结点
4. 哈希值
作用:通过哈希算法计算出每个DHT node保存的文件索引
DTH哈希算法特点:
- 每个文件可以计算出一个哈希值,而 DHT node 的 ID 是和哈希值相同长度的串
- 如果一个文件计算出一个哈希值,则和这个哈希值一样的那个 DHT node,就有责任知道从哪里下载这个文件,即便它自己没保存这个文件。
- 除了一模一样的DHT node 应该知道文件存储位置,ID 和这个哈希值非常接近的 N 个 DHT node 也应该知道
DTH哈希算法计算流程:
- 种子.torrent 文件里面存储的 node 的地址,这些 node 在 DHT 网络里
- 新加入的节点node new通过种子文件获取上述node,找到一个可用的node,加入DHT网络
- node new计算文件1的哈希值,通过hash值获取与该哈希值相近的node id,获取下载方式
- node new通过DHT 网络获取文件下载索引,通过索引获取存有真实数据的结点node b
- node new与node b建立peer连接,下载文件。
- node new下载文件后,本地也有该文件,因此需要告知node c以及和node c的ID相近的结点(索引节点),将node new加入node c索引(索引表征含有真实数据的结点)
哈希算法node ID相似度计算方法:通过异或计算
3. DHT网络组织方式与查找方法
DHT网络组织方式:按距离分层。假设基础结点为node1,则与node1异或值为 00001的结点归为“k-bucket 1”;异或值为00010 和 00011的结点为“k-bucket 2”;倒数第 i 位开始不同,与基础节点的距离范围为[2^(i-1), 2^i),归为“k-bucket i”
DHT网络查找其他节点方法:
- 假设在node A(00110)查找目标结点10000,计算异或值,得到结果10110。由异或结果可知,目标结点所在的类别为k-bucket 5
- node A查找k-bucket 5中是否存在目标结点,存在则返回;不存在则在k-bucket 5随机找一个节点(假设为node c),node c与目标结点距离在2^4内。按同样的方法查找,请求C,在C找计算异或值,定位bucket,找相似结点,直到找到目标结点
- 该查找机制通过折半来缩小范围,最坏情况下,时间复杂度为log2(N)(总结点数量为N)
各结点DHT网络结构更新方法:
- 每个bucket中,结点ID按最后一次接触的时间倒序排列
- 每次执行Kademlia协议指令时更新结构
- 当一个节点node new与本节点接触时,检查它是否已经在 k-bucket 中。若结点不在bucket中,且该结点DHT网络信息存储空间已经满了,则ping一下bucket中最旧的结点,若ping通了,则更新最旧的结点的接触时间,将其挪到队列最底端,抛弃node new;否则抛弃最旧的结点,将node new加入bucket
趣谈网络协议-应用层(P2P协议)相关推荐
- 华为18级工程师三年心血终成趣谈网络协议文档(附大牛讲解)
华为18级工程师三年心血终成趣谈网络协议文档(附大牛讲解) 程序员高级码农II 2020-09-25 07:23:00 前言 虽然在大学的时候大家都学过网络协议 ,但是肯定感觉网络协议的知识点非常多 ...
- 面试华为必备:华为18级大牛呕心沥血三年整理的 趣谈网络协议
前言 华为是一个热门的互联网大厂,华为每年都要进很多新人,对于新人来说,那些高大上的技术是用不到的,反倒是非常需要这些基础的文档,有这些新手进步会快很多,搞清楚TCP IP协议栈,其他的学起来也就容易 ...
- 趣谈网络协议1-为什么学习网络协议
来自极客时间<趣谈网络协议> 学习过程遇见问题:一看觉得懂,一问就打鼓,一用就糊涂. 1.为什么要学习网络协议 一般编译过程: 词法分析: 词法分析是编译的第一阶段.词法分析器的主要任务是 ...
- 华为19级工程师三年心血终成趣谈网络协议文档(附清华大牛视频讲解和课件)
前言 虽然在大学的时候大家都学过网络协议 ,但是肯定感觉网络协议的知识点非常多 ,非常复杂.学的时候就浑浑噩噩,真正到了实践中更是糊里糊涂,一旦工作中遇到了网络问题,除了会简单地 ping 几下 ,基 ...
- 华为18级工程师三年心血终成趣谈网络协议文档(附讲解)
前言 虽然在大学的时候大家都学过网络协议 ,但是肯定感觉网络协议的知识点非常多 ,非常复杂.学的时候就浑浑噩噩,真正到了实践中更是糊里糊涂,一旦工作中遇到了网络问题,除了会简单地 ping 几下 ,基 ...
- 趣谈网络协议笔记-二(第十七讲)
趣谈网络协议笔记-二(第十七讲) P2P协议:我下小电影,99%急死你 自勉 逃离舒适区! 正文 一. P2P协议 整个篇章讲的就是这两个协议之间的区别.P2P协议就是迅雷下载数据时所用的协议, 众所 ...
- 华为研究院19级研究员几年心得终成趣谈网络协议文档
苦且绕不过去.经过多次放弃之后,我发现在我的职业生涯中,网络这一关无论如何也绕不过去.本来觉得写Java程序时可以依赖别人的库,所以就不用关心这么多底层的技术了,但是到后来才发现,服务数量一多,吞吐量 ...
- 华为研究院高级研究员几年心得终得趣谈网络协议文档,附资深架构师讲解
苦且绕不过去.经过多次放弃之后,我发现在我的职业生涯中,网络这一关无论如何也绕不过去.本来觉得写Java程序时可以依赖别人的库,所以就不用关心这么多底层的技术了,但是到后来才发现,服务数量一多,吞吐量 ...
- 《趣谈网络协议》学习笔记 DAY03
内容摘录自极客时间课程<趣谈网络协议>,如有侵权,请及时联系删除. 目录 软件定义网络SDN OpenFlow和OpenvSwitch实现SDN OpenFlow协议 OpenvSwitc ...
- 趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层
趣谈网络协议-第二模块-底层网络知识详解:2最重要的传输层 1:第10讲 | UDP协议:因性善而简单,难免碰到"城会玩" TCP 和 UDP 有哪些区别? UDP 包头是什么样的 ...
最新文章
- 小心陷阱:二维动态内存的不连续性
- Linux安装gitbook
- EF Core中关于System.Linq.Dynamic.Core的使用(转载)
- Django + Uwsgi + Nginx 的生产环境部署项目知识点
- java 求集合真子集_【每日打卡】新高一数学必修打卡第二天教学视频—集合的基本运算...
- 大道至简第七第八章读后感
- 工业上 计算机控制系统分为哪两大类,控制仪表及装置——考试复习题
- WebNN 人物检测、人脸识别、超分辨率、图像字幕、情感分析、噪声抑制
- c#明华rf读卡器_深圳明华URF-R330读卡器 M1卡读写程序(C#版)
- Haar特征分类器和AdaBoost算法
- Ruckus 7372 Multimedia Hotzone Wireless AP 配置
- python井字棋_python之井字棋游戏
- 固态硬盘系统经常假死_win10系统更换固态硬盘经常假死的解决方法
- burpsuite https 社区版_BurpSuit添加CA证书拦截HTTPS通信
- Android 针对华为手机调用裁剪出现圆形裁剪框的处理
- 2017 Github优秀开源项目整理
- 证券业数据大集中及其风险控制分析
- python语音识别库kaldi_Kaldi 语音识别基础教程
- 免费edu邮箱申请注册地址
- mysql 怎么同时删除两张表的数据库,mysql怎样删除多个表格数据库数据_数据库
热门文章
- 一行代码实现F11的功能,即让浏览器窗口全屏
- id: cannot find name for group ID 528
- 115CSS3+JS:胶卷式放映
- 上兴远控流量分析报告
- (数据结构)线性表(总结)——链式存储结构与顺序储存结构的优缺点
- 史上最拉跨的导线平差程序 2.0(by C#)
- 利用Python制作王者战力查询以及皮肤查看软件
- mysql 视图 多个 select_MySQL中Update、select联用操作单表、多表,及视图与临时表的区别...
- 大咖直播 | 大连理工赵纪军教授:人工智能算法用于团簇研究和势函数拟合
- dw读取access中的图片_DreamWeaver入门必看:ACCESS数据库(三)