云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > Emule Kad 网络分析

Emule Kad 网络分析

  • 62 次阅读
  • 3 次下载
  • 2026/1/11 4:43:11

3.2.1 GetInfo相关协议:

KADEMLIA_SEARCH_REQ KADEMLIA_SEARCH_NOTES_REQ KADEMLIA2_SEARCH_KEY_REQ KADEMLIA2_SEARCH_SOURCE_REQ KADEMLIA2_SEARCH_NOTES_REQ

KADEMLIA_SEARCH_RES KADEMLIA_SEARCH_NOTES_RES KADEMLIA2_SEARCH_RES

//UnUsed(老的协议)

3.2.2 Publish 相关协议:

KADEMLIA_PUBLISH_REQ //UnUsed(老的协议) KADEMLIA_PUBLISH_NOTES_REQ KADEMLIA2_PUBLISH_KEY_REQ KADEMLIA2_PUBLISH_SOURCE_REQ KADEMLIA2_PUBLISH_NOTES_REQ

KADEMLIA_PUBLISH_RES KADEMLIA_PUBLISH_NOTES_RES KADEMLIA2_PUBLISH_RES

四、Emule Buddy机制分析

Emule 中的Buddy 机制是为了增进Emule中HihgId-LowId/LowId-LowId的通信,使得一个公网的Peer可以和处于NAT内的Peer之间相互通信,同时加上适当的策略,也可以让两个处于NAT内的Peer之间相互通信。下面是关于Emule Buddy的一些分析结论:

? LowId 发现自己处于NAT内时,则主动开始在Kad网络内寻找Buddy,如果一个

HighId没有为别的LowId做Buddy,则可以成为该LowId的Buddy。 ? LowId 的Buddy 必须是 HighId,反之,HighId的Buddy必须是LowId。 ? 目前,0.47c 版本的Buddy 机制还是一对一。 ? LowId不是在自己的KadId周围附近找Buddy,是在KadId~方向找自己的Buddy,

这样可以增进Kad网络的交互,不会引起小范围内的信息孤岛现象。

? 一个LowId 拿到HighId的Buddy后就可以向Kad网络内发布自己的Peer信息了。 〔发布信息包含: 自己的KadId~,Buddy IP,Buddy Udp Port〕

第一次的FINDBUDY 必须是在程序启动后的五分钟之后,因为之后的FINDBUDDY 是在丢失了 BUDDY 之后进行(但同时)

4.1 网络协议包序列图:

4.2 FindBuddy 过程状态图

4.3 Buddy实现框架代码List:

# LowId(A)

① 发送 KADEMLIA_FINDBUDDY_REQ

CSearch::StorePacket( ) {

Case FINDBUDDY:

//packet param: <128bit Target(Low.A KadId~)> CKademlia::GetUDPListener()->SendPacket(&m_pfileSearchTerms, KADEMLIA_FINDBUDDY_REQ, pFromContact->GetIPAddress(), pFromContact->GetUDPPort()); }

② 接收 KADEMLIA_FINDBUDDY_RES

CKademliaUDPListener::Process_KADEMLIA_FINDBUDDY_RES (const byte *pbyPacketData, uint32 uLenPacket, uint32 uIP, uint16 uUDPPort) {

theApp.clientlist->RequestBuddy(&contact); // now Peer.B Kad State is KS_QUEUED_BUDDY }

③ Low.A TryToConnect to High.B CClietList::Process( ... ) {

cur_client->SetKadState(KS_CONNECTING_BUDDY);// Peer.B KadState Changed to KS_CONNECTING_BUDDY cur_client->TryToConnect(true); // Low.A TryToConnect to High.B }

④ Low.A 连接 High.B 成功

CUpDownClient::ConnectionEstablished() { …

case KS_CONNECTING_BUDDY: SetKadState(KS_CONNECTED_BUDDY); //Peer.B Kad State changed to KS_CONNECTED_BUDDY }

# HighId(B)

① 接收 KADEMLIA_FINDBUDDY_REQ

CKademliaUDPListener::Process_KADEMLIA_FINDBUDDY_REQ (const byte *pbyPacketData, uint32 uLenPacket, uint32 uIP, uint16 uUDPPort) { theApp.clientlist->IncomingBuddy(&contact, &BuddyID); //Peer.A Kad State is KS_INCOMING_BUDDY //回发 KADEMLIA_FINDBUDDY_RES packet //packet param: SendPacket(&fileIO2, KADEMLIA_FINDBUDDY_RES, uIP, uUDPPort); } ②

CUpDownClient::ConectionEstablished( ) { case KS_INCOMING_BUDDY: SetKadState(KS_CONNECTED_BUDDY); //Peer.A Kad State changed to KS_CONNECTED_BUDDY }

五、Emule Kad 数据结构分析

附录1( OPCode List):

关于KAD的Opcodes,Kad1.0个2.0相互对应

// KADEMLIA (opcodes) (udp) #define KADEMLIA_BOOTSTRAP_REQ #define KADEMLIA2_BOOTSTRAP_REQ

#define KADEMLIA_BOOTSTRAP_RES #define KADEMLIA2_BOOTSTRAP_RES

#define KADEMLIA_HELLO_REQ #define KADEMLIA2_HELLO_REQ

#define KADEMLIA_HELLO_RES #define KADEMLIA2_HELLO_RES

#define KADEMLIA_REQ (receiver) 16>

#define KADEMLIA2_REQ

#define KADEMLIA_RES

#define KADEMLIA_SEARCH_REQ [ext] //#define UNUSED

0x31 // Old Opcode, don't use. 0x32 // 0x34 // 0x35 //

0x38 // (

0x3A // (

0x40 // (

0x42 //

#define KADEMLIA_SEARCH_NOTES_REQ #define KADEMLIA2_SEARCH_KEY_REQ #define KADEMLIA2_SEARCH_NOTES_REQ

#define KADEMLIA_SEARCH_RES //#define UNUSED

[16]> *(CNT2))*(CNT1) #define KADEMLIA_SEARCH_NOTES_RES #define KADEMLIA2_SEARCH_RES

#define KADEMLIA_PUBLISH_REQ //#define UNUSED

[16]> *(CNT2))*(CNT1) #define KADEMLIA_PUBLISH_NOTES_REQ [2]> *(CNT2))*(CNT1)

0x30 //

0x28 // *(CNT) 0x29 //

#define KADEMLIA2_RES

0x21 //

0x20 //

0x18 // 0x19 //

0x10 // 0x11 //

0x08 // *(CNT) 0x09 //

0x00 // 0x01 //

0x33 //

#define KADEMLIA2_SEARCH_SOURCE_REQ

[16]> *(CNT2))*(CNT1)

搜索更多关于: Emule Kad 网络分析 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

3.2.1 GetInfo相关协议: KADEMLIA_SEARCH_REQ KADEMLIA_SEARCH_NOTES_REQ KADEMLIA2_SEARCH_KEY_REQ KADEMLIA2_SEARCH_SOURCE_REQ KADEMLIA2_SEARCH_NOTES_REQ KADEMLIA_SEARCH_RES KADEMLIA_SEARCH_NOTES_RES KADEMLIA2_SEARCH_RES //UnUsed(老的协议) 3.2.2 Publish 相关协议: KADEMLIA_PUBLISH_REQ //UnUsed(老的协议) KADEMLIA_PUBLIS

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com