首页 > 其他分享 >P2P协议的传输艺术

P2P协议的传输艺术

时间:2023-09-17 19:31:39浏览次数:37  
标签:协议 FTP 端口 连接 传输 P2P 服务器 节点 客户端

FTP 采用两个 TCP 连接来传输一个文件。

  • 控制连接:服务器以被动的方式,打开众所周知用于 FTP 的端口 21,客户端则主动发起连接。该连接将命令从客户端传给服务器,并传回服务器的应答。常用的命令有:list——获取文件目录;reter——取一个文件;store——存一个文件。
  • 数据连接:每当一个文件在客户端与服务器之间传输时,就创建一个数据连接。FTP 的两种工作模式。

每传输一个文件,都要建立一个全新的数据连接。FTP 有两种工作模式,分别是主动模式(PORT)和被动模式(PASV),这些都是站在 FTP 服务器的角度来说的。

主动模式下,客户端随机打开一个大于 1024 的端口 N,向服务器的命令端口 21 发起连接,同时开放 N+1 端口监听,并向服务器发出 “port N+1” 命令,由服务器从自己的数据端口 20,主动连接到客户端指定的数据端口 N+1。

被动模式下,当开启一个 FTP 连接时,客户端打开两个任意的本地端口 N(大于 1024)和 N+1。第一个端口连接服务器的 21 端口,提交 PASV 命令。然后,服务器会开启一个任意的端口 P(大于 1024),返回“227 entering passive mode”消息,里面有 FTP 服务器开放的用来进行数据传输的端口。客户端收到消息取得端口号之后,会通过 N+1 号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。

DHT(Distributed Hash Table)的去中心化网络。每个加入这个 DHT 网络的人,都要负责存储这个网络里的资源信息和其他成员的联系信息,相当于所有人一起构成了一个庞大的分布式存储数据库。

任何一个 BitTorrent 启动之后,它都有两个角色。一个是 peer,监听一个 TCP 端口,用来上传和下载文件,这个角色表明,我这里有某个文件。另一个角色 DHT node,监听一个 UDP 的端口,通过这个角色,这个节点加入了一个 DHT 的网络。

P2P协议的传输艺术_网络协议

在 DHT 网络中,朋友之间怎么沟通呢?

Kademlia 算法中,每个节点只有 4 个指令。

  • PING:测试一个节点是否在线,还活着没,相当于打个电话,看还能打通不。
  • STORE:要求一个节点存储一份数据,既然加入了组织,有义务保存一份数据。
  • FIND_NODE:根据节点 ID 查找一个节点,就是给一个 160 位的 ID,通过上面朋友圈的方式找到那个节点。
  • FIND_VALUE:根据 KEY 查找一个数据,实则上跟 FIND_NODE 非常类似。KEY 就是文件对应的 160 位的 ID,就是要找到保存了文件的节点。

DHT 网络中,朋友圈如何更新呢?

  • 每个 bucket 里的节点,都按最后一次接触的时间倒序排列,这就相当于,朋友圈里面最近联系过的人往往是最熟的。
  • 每次执行四个指令中的任意一个都会触发更新。
  • 当一个节点与自己接触时,检查它是否已经在 k-bucket 中,也就是说是否已经在朋友圈。如果在,那么将它挪到 k-bucket 列表的最底,也就是最新的位置,刚联系过,就置顶一下,方便以后多联系;如果不在,新的联系人要不要加到通讯录里面呢?假设通讯录已满的情况,PING 一下列表最上面,也即最旧的一个节点。如果 PING 通了,将旧节点挪到列表最底,并丢弃新节点,老朋友还是留一下;如果 PING 不通,删除旧节点,并将新节点加入列表,这人联系不上了,删了吧。



标签:协议,FTP,端口,连接,传输,P2P,服务器,节点,客户端
From: https://blog.51cto.com/key3feng/7503827

相关文章

  • vim插件使用python编写+AXI非对齐传输如何发送+verdi配置搜索顺序+verible和verilator
    vim插件使用python编写虽然vim有自己的一套语法格式,但是学习成本放着呢,语言那么多,啥都学哪学的过来嘛。不过vim确实是支持python的,但是是python2,而不是python3,因此语法上的一些问题要兼容下。这个是官方手册,正确而可靠的部分。https://vimdoc.sourceforge.net/htmldoc/if_pyth......
  • TCP/IP协议栈速览
    TCP/IP协议栈速览TCP/IP协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成自己的需求。由于我们大......
  • 网络协议学习地图分享
    最近在回顾网络知识点的时候,发现华为数通有关报文格式及网络协议地图神仙网站,这里涵盖了各个协议层及每个协议层对应的协议内容,最人性的化的一点是点击每个单独的协议可以跳转到该协议详细报文格式页面,有对应的说明和解释,对初学者或者巩固者等都有很大的帮助;当然该内容也支持华为的......
  • DHCP动态主机配置协议
    组网场景:   无中继场景(客户端直接和服务器相连接)   有中继场景(客户端不直接和服务器相连接,中间还有其他路由器)(主流)DHCP下方方式:   接口下放(无中继)   全局下放(无中继,多了手动地址池)   中继下放(有中继)DHCP四个阶段:  发现阶段,发现网络中的DHCP服务器  提供......
  • Modbus协议详解3:数据帧格式 - RTU帧 & ASCII帧的区别
    Modbus既然是一种通信协议,那它就应该有规定的通信格式用于在设备之间的指令接收与识别。本文就着重讲讲Modbus协议的RTU帧和ASCII帧。Modbus帧在串行链路上的格式如下:在上图的格式中:1)地址域:指代的是子节点地址。合法的子节点地址为 0 – 247。 每个子设备被赋予 1 – 247 ......
  • 网络协议的重要性与应用:理解进程间通信和网络分层结构(上)
    进程间通信有多种方式,包括管道、消息队列、共享内存和信号等。然而,如果不同设备上的进程需要进行通信,就只能通过网络来实现。由于设备的多样性,为了兼容各种设备,就需要一个统一通用的网络协议。学习网络协议的关键是了解其分层结构。之前在计算机基础专栏已经提到过网络分层的好处......
  • 应用层-常见协议
    应用层概述:TCP/IP模型的最高层直接为应用程序提供网络服务 常用的应用层协议:DNSHTTPSMPT与POP3/IMAPTelnetFTP与TFTP DNS协议: DNS(DomainNameSystem域名解析系统)建立IP地址与域名之间的映射关系将域名解析为IP地址将IP地址解析为域名DSN解析过程:......
  • 零拷贝并非万能解决方案:重新定义数据传输的效率极限
    PageCache有什么作用?在我们前面讲解零拷贝的内容时,我们了解到一个重要的概念,即内核缓冲区。那么,你可能会好奇内核缓冲区到底是什么?这个专有名词就是PageCache,也被称为磁盘高速缓存。也可以看下windows下的缓存区:如图所示:零拷贝进一步提升性能的原因在于PageCache技术的使用。......
  • 《安富莱嵌入式周报》第312期:开源磁场照相机,仿生神经元PCB,开源无线耳机,手机系统PalmOS
    更新一期视频教程:BSP视频教程第26期:CAN/CANFD/CANopen专题,CANFD整个运行机制精讲,图文并茂,配合综合实战演练(2023-05-15)视频版:https://www.bilibili.com/video/BV1zL41167Ti 1、基于开放系统组装协议OSAP实现的简化硬件设计项目软件开源:https://github.com/modular-things/modular-t......
  • visual 调试问题 提示:”通常每个套接字地址(协议/网络地址/端口)只允许使用一次".
    错误指示:通信端口被占用了,导致通信无法进行。有可能是已经启动了一个程序,还有一种可能是端口被别人占用了查看启动程序的端口使用情况:比如端口:801.netstat-aon|findstr“80”查看占用8086端口的进程 2.查找占用端口句柄的程序:tasklist|findstr18244 3.任务管理......