Gnutella节点的结构及进程处理
来源:互联网 发布:单片机蜂鸣器声音频率 编辑:程序博客网 时间:2024/05/22 02:15
Gnutella节点的结构:
在一个Gnutella节点中最多有四类并发的进程存在:连接处理器(Connection)、协调进程(Coordination Instance)、下载进程(Download Instance)和上载进程(Upload Instance)。
连接处理器负责管理所有连接的建立工作,包括自身发起的以及其它节点发起的连接。每个协调进程则负责处理某一条具休的用于握手、查询的连接的活动以及状态。当这个节点需要上载文件或者下载文件时,一条相应的上载连接或下载连接将被建立,该连接的所有活动、状态也将由一个上载进程或下载进程来进行监控。
值得注意的是,在同一时间,节点中有且仅有一个连接处理器,但可能会有0个或者多个协调进程、下载进程或上载进程。
Gnutella节点的连接处理器:
连接处理器共有六个状态:offline、waiting for ack、ping、 online、 search和coonection request。当Gnutella的节点同一个或多个其它节点建立连接时,它的状态就是online。同时连接处理器还存有一个全局变量ccount,用来保存当前的连接数。
Gnutella节点的协调进程:
协调进程有两个状态waiting for message和terminate
当一个用于节点间握手通讯的连接建立起来的时候,一个直辖市进程同时也被创建,用于管理该新连接的所有活动和状态。
协调进程在创建初期处于wait for message状态,在这个状态下,协调进程会收到五种消息,它们分别是Ping、Query(Search)、Pong、QueryHit(Search Result)和Push。
当协调进程收到一个Ping消息时,首先返回一个Pong消息给发来Ping消息的节点,然后判断Ping消息中的TTL字段的值是不是大于0,如果大于零,则将TTL的值递减后转发给其它相邻的节点。在这个过程事,发出Ping消息的节点的全局标志和相应的返回 Pong信息的路由将被记录下来。
当协调进程收到一个Query消息时,该节点会判断其TTL值,对于大于0的,将TTL值递减后转发给其它相邻的节点。然后判断本地是否含有同Query消息匹配文件,如果有则返回相应的QueryHit消息。在这个过程中,发出Ping消息的节点的全局标志和相应的返回 Pong信息的路由将被记录下来。
当协调进程收到一个QueryHit消息时,首先通过消息中带的全局标志判断该消息是否响应了本节点发出的Query消息,如果不是,则按照记录下来的相应的返回QueryHit消息的路由转发该QueryHit消息。
当协调进程收到一个Push消息时,一条新的指向发出Push消息结点的连接将被建立,一个Http的GIV消息将被发送,当新的连接创建完成之后,该新连接将被移交给一个新的上载进程。
对于协调进程管理的连接两端的任意一方中断了连接,该协调进程就进入"terminate"状态
Gnutella节点的下载进程
下载进程具有五个状态:connect to peer、wait for file、download file、download finished、terminate。
当本地节点请求下载远端节点的文件或者远端节点应本地的Push请求发送文件过来时,下载进程就被创建了。
下载进程在创建初期处于connect to peer状态。为了开始下载文件,本地节点发送包含有需要下载文件信息的Http的GET消息,同时将下载进程的状态转化为wait for file。
当连接发生错误时,下载进程的状态会从wait for file直接转变成download finished。如果连接保持,并且开始接收从远端传来的数据,那么下载进程的状态会从wait for file转变为download file。
当文件的内容源源不断的从远端发送过来,下载进程的状态将始终保持为download file,直到所有的文件信息都被传送过来,连接中没有数据包存在,下载进程的状态就转变为download finished。
当本地节点或者远端节点的任意一方中断了连接,该下载进程就转入了terminate状态。
Gnutella节点的上载进程
上载进程具有四个状态:send HTTP header、upload file、upload finished、terminate。
当本地节点接收到远端节点的的Push信息,需要将本地文件传给远端节点时,上载进程就被创建了。
上载进程在创建初期处于send HTTP header状态。当收到远端发出的Http的GET消息,同时将上载进程的状态转化为upload file。
当文件的内容源源不断的从发送给远端,下载进程的状态将始终保持为upload file,直到所有的文件信息都被传送完成,下载进程的状态就转变为upload finished。
当本地节点或者远端节点的任意一方中断了连接,该下载进程就转入了terminate状态。
- Gnutella节点的结构及进程处理
- Gnutella节点的结构及进程处理
- Gnutella 及无结构化(非结构化)P2p的一些总结
- Gnutella的文件传输机制
- Gnutella的文件传输机制
- Gnutella的文件传输机制
- master节点的故障发现及处理
- oracle查询树形结构某层级节点及叶子节点
- 单节点kubernetes的进程
- C语言实现简单的守护进程及信号处理
- linux 僵死进程及处理
- linux 僵死进程及处理
- Oracle的进程结构
- 进程的内存结构
- 进程的层次结构
- LINUX系统中断处理结构及中断函数的实现
- CDN的cache节点(http)结构及工作原理总结(图自画)
- javaScript的DOM节点处理
- 微软Word的又一点不爽
- Weblogic6.0部署和配置WEB应用程序(1)
- Weblogic6.0部署和配置WEB应用程序(2)
- MySql命令
- Weblogic6.0部署和配置WEB应用程序(3)
- Gnutella节点的结构及进程处理
- Access数据库的存储上限
- 新建立了个网站
- NOR和NAND的区别
- Dynamic Generation of Word Document Report in ASP.NET with HTML
- 用 Eclipse、WTP 和 Derby 构建 Web 应用程序
- Delphi与Visual C++
- 关于DEFER
- CSS 知识