KR20120104341A - 피어?투?피어 네트워크들 내에서 서비스들의 위치를 찾기 위한 방법 및 장치 - Google Patents

피어?투?피어 네트워크들 내에서 서비스들의 위치를 찾기 위한 방법 및 장치 Download PDF

Info

Publication number
KR20120104341A
KR20120104341A KR1020127018264A KR20127018264A KR20120104341A KR 20120104341 A KR20120104341 A KR 20120104341A KR 1020127018264 A KR1020127018264 A KR 1020127018264A KR 20127018264 A KR20127018264 A KR 20127018264A KR 20120104341 A KR20120104341 A KR 20120104341A
Authority
KR
South Korea
Prior art keywords
service
node
search
nodes
network
Prior art date
Application number
KR1020127018264A
Other languages
English (en)
Inventor
토마스 피. 츄
라메쉬 나가라잔
Original Assignee
알까뗄 루슨트
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 알까뗄 루슨트 filed Critical 알까뗄 루슨트
Publication of KR20120104341A publication Critical patent/KR20120104341A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/40Support for services or applications
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1061Peer-to-peer [P2P] networks using node-based peer discovery mechanisms
    • H04L67/1068Discovery involving direct consultation or announcement among potential requesting and potential source peers
    • H04L67/107Discovery involving direct consultation or announcement among potential requesting and potential source peers with limitation or expansion of the discovery scope
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/50Network services
    • H04L67/51Discovery or management thereof, e.g. service location protocol [SLP] or web services
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L67/1061Peer-to-peer [P2P] networks using node-based peer discovery mechanisms
    • H04L67/1065Discovery involving distributed pre-established resource-based relationships among peers, e.g. based on distributed hash tables [DHT] 

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Multimedia (AREA)
  • Computer And Data Communications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Telephonic Communication Services (AREA)

Abstract

코드 네트워크 또는 다른 피어-투-피어 네트워크(P2P) 네트워크와 같이, P2P 네트워크에서 서비스 위치 찾기 능력을 지원하기 위한 능력이 제공된다. 일 실시예에서, P2P 네트워크 내에서 서비스의 위치를 찾기 위한 방법이 제공된다. 상기 P2P 네트워크는 상기 P2P 네트워크 내에 상기 서비스의 위치를 찾기 위한 방법을 실행하는 타겟 노드를 포함하는, 복수의 노드들을 포함한다. 상기 타겟 노드는 상기 P2P 네트워크의 각각의 복수의 노드들을 식별하는 복수의 엔트리들을 포함하는 탐색 표를 포함한다. 상기 방법은 상기 P2P 네트워크 내에 상기 서비스를 탐색하기 위한 요청을 탐색하는 단계 및 상기 탐색 표의 노드들 중 적어도 하나를 향해 서비스 탐색 요청을 개시하는 단계를 포함한다. 상기 서비스 탐색 요청은 상기 서비스를 지원하는 상기 P2P 네트워크의 적어도 하나의 노드를 식별하기 위한 요청이다. 상기 서비스 탐색 요청은 상기 서비스를 나타내는 정보 및 상기 서비스 탐색 요청을 수신하는 노드에 의해 이용하기 위한 탐색 범위를 포함한다.

Description

피어?투?피어 네트워크들 내에서 서비스들의 위치를 찾기 위한 방법 및 장치{METHOD AND APPARATUS FOR LOCATING SERVICES WITHIN PEER-TO-PEER NETWORKS}
관련 출원들에 대한 상호-참조
본 출원은 그 전체가 여기에 참조로서 통합되는 "피어-투-피어 네트워크를 분해하고 분해된 피어-투-피어 네트워크를 이용하기 위한 방법 및 장치(METHOD AND APPARATUS FOR DECOMPOSING A PEER-TO-PEER NETWORK AND USING A DECOMPOSED PEER-TO-PEER NETWORK)"로 제목이 붙여진, 2009년 12월 17일에 출원된 미국 특허 출원 번호 제12/640,049호[대리인 문서 번호. ALU/805520]와 관계가 있다.
본 발명은 피어-투-피어(P2P) 네트워크에 관한 것으로, 보다 상세하게는 전적으로는 아니지만 P2P 네트워크들 내에서 서비스들의 위치를 찾는 것에 관한 것이다.
파일 공유는 얼마 동안 집중적인 연구 및 그래스 루츠 이용(grass roots usage)의 초점이 되어 왔다. 파일 공유는 상세하게는 상기 목적을 위해 설계되고 이와 연관된 파일 공유 프로토콜들을 가진 상이한 파일 공유 시스템들로서 구현된 파일 공유 방식들에 의해 가능해졌다. 다수의 상이한 파일 공유 시스템들이 냅스터로 시작하여, 그 후 그누텔라(gnutella), 카자아(Kazaa), 당나귀(eDonkey), 위니(Winny), 및 비트토렌트(BitTorrent)와 같이, 다수의 상이한 파일 공유 시스템들의 생성을 통해 진행하여 구현되어왔다. 이들 파일 공유 시스템들 외에, Share and Perfect Dark와 같은 새로운 시스템들이 또한 개발되었다. 총괄하여, 이들 파일 시스템들 및 연관된 프로토콜들은 피어-투-피어(P2P) 파일 공유 시스템들/프로토콜들 또는 간단히 P2P 파일 공유 애플리케이션들로서 불리운다. 더욱이, P2P 파일 공유 애플리케이션들 외에, 상기 P2P 파일 공유 애플리케이션들과 건축학적으로 상이한 새로운 클래스의 P2P 애플리케이션들, 즉 P2P 텔레비전(P2PTV)이 나오고 있다.
P2P 파일 공유의 대중성은 최근 트래픽 연구들에서 명확하다. 예를 들면, 미국 내의 수백만 광대역 이용자들의, 엘라코야 네트워크들(Ellacoya Networks)에 의한 최근의 트래픽 연구는 볼륨으로 주요 트래픽 유형들의 장애가 다음과 같음을 나타낸다: 웹(HTTP) - 46%; 피어-투-피어(P2P) - 37%; 비-HTTP 스트리밍 비디오 - 3%; 게임 - 2%; VoIP(voice-over-IP) - 1%; 기타 - 1%. 많은 양의 HTTP 트래픽에 대한 주 원인은 유투브로부터의 트래픽과 같은, 내장된 비디오 스트리밍 트래픽이고, 이것은 상기 언급된 연구에서의 총 트래픽의 9.8%를 차지한다). 그러나, P2P 파일 공유는 여전히 상기 트래픽의 큰 퍼센티지를 책임지고 있으며, P2PTV의 출연으로, 트래픽의 양은 급격하게 증가할 것으로 예상된다.
대다수의 기존의 P2P 애플리케이션들은 파일 공유를 수반하지만, 그러나 파일 공유를 수반하는 다수의 상기 기존의 P2P 애플리케이션들은 적어도 초기에 완전히 피어-투-피어가 아니었다. 오히려, 대부분의 기존의 P2P 애플리케이션들은 초기에 상기 P2P 네트워크의 구성원들 간에 활동을 조정하기 위해 중앙 서버를 이용하였다. 예를 들면, 비트토렌트에서, 상이한 가지들의 정보의 다운로딩이 피어-투-피어인 동안, 비트토렌트에서 트랙커(tracker)로서 불리우는 중앙 집중형 서버는 상기 비트토렌트 애플리케이션의 활동을 조정하기 위해 이용된다. 유사하게, 예를 들면, 파일 공유를 수반하는 많은 다른 P2P 애플리케이션들은 또한 냅스터 및 당나귀와 같이, 유사한 특성들을 가진다. 그러나, 중앙 서버의 이용은 또한 기존의 P2P 애플리케이션들이 혼잡 및 장애들에 취약하게 만들고 또한 기존의 P2P 애플리케이션들을 보안 위협들에 대한 매력적인 타겟으로 만든다.
그러나, 불리하게도, 기존의 P2P 애플리케이션들이 파일 공유를 지원하는 반면, 기존의 P2P 애플리케이션들은 서비스를 탐색하기 위한 능력을 지원하지 않는다.
일 실시예에서, P2P 네트워크 내에서 서비스의 위치를 찾기 위한 방법이 제공된다. 상기 P2P 네트워크는 상기 P2P 네트워크 내에 상기 서비스의 위치를 찾기 위한 방법을 실행하는 타겟 노드를 포함한, 복수의 노드들을 포함한다. 상기 타겟 노드는 상기 P2P 네트워크의 각각의 복수의 노드들을 식별하는 복수의 엔트리들을 포함하는 탐색 표를 포함한다. 상기 방법은 상기 P2P 네트워크 내에서 상기 서비스를 탐색하기 위한 요청을 검출하는 단계 및 상기 탐색 표의 상기 노드들 중 적어도 하나를 향해, 서비스 탐색 요청을 개시하는 단계를 포함한다. 상기 서비스 탐색 요청은 상기 서비스를 지원하는 상기 P2P 네트워크의 적어도 하나의 노드를 식별하기 위한 요청이다. 상기 서비스 탐색 요청은 상기 서비스를 나타내는 정보 및 상기 서비스 탐색 요청을 수신하는 상기 노드에 의해 이용하기 위한 서비스 범위를 포함한다.
본 명세서의 교시들은 첨부한 도면들과 함께 다음의 상세한 설명을 고려함으로써 쉽게 이해될 수 있다.
종래 기술의 다양한 결점들이 코드 네트워크(Chord network) 또는 다른 적절한 피어-투-피어(P2P) 네트워크와 같이, P2P 네트워크에서 서비스 위치 찾기 능력을 지원하는 실시예들에 의해 해소된다.
도 1은 대표적인 코드 네트워크를 도시한 도면.
도 2는 도 1의 대표적인 코드 네트워크의 노드들 중 하나에 의해 개시된 서비스 위치 탐색에 응답하여 도 1의 대표적인 코드 네트워크 내에서 개시된 서비스 탐색 요청 메시지들을 도시한 도면.
도 3은 서비스 위치 찾기 요청을 개시하는 노드에서 서비스 탐색 요청 메시지를 생성하기 위한 방법의 일 실시예를 도시한 도면.
도 4는 중간 노드에서 서비스 탐색 요청 메시지를 처리하기 위한 방법의 일 실시예를 도시한 도면.
도 5는 중간 노드에서 서비스 탐색 응답 메시지들을 처리하기 위한 방법의 일 실시예를 도시한 도면.
도 6은 대표적인 코드 네트워크에서 서비스를 위한 점진적 서비스 위치 탐색을 실행하는 일 예를 도시하는 대표적인 코드 네트워크를 도시한 도면.
도 7은 도 6의 대표적인 코드 네트워크에서 서비스를 위한 점진적 서비스 위치 탐색을 실행하기 위한 대표적인 탐색 범위를 도시한 도면.
도 8은 정렬된 점진적 서비스 위치 탐색을 이용하여 서비스 위치 찾기 요청을 개시하는 노드에서 서비스 탐색 요청 메시지들을 생성하기 위한 방법의 일 실시예를 도시한 도면.
도 9a 내지 도 9d는 도 1의 대표적인 코드 네트워크에서 서비스를 위한 정렬된 점진적 서비스 위치 탐색을 실행하는 일 예를 도시한, 도 1의 대표적인 코드 네트어크의 노드들 중 하나에 의해 개시된 서비스 위치 탐색에 응답하여 도 1의 대표적인 코드 네트워크 내에서 개시된 서비스 탐색 요청 메시지들을 도시한 도면들.
도 10은 여기에 설명된 기능들을 실행하는데 이용하기에 적절한 범용 컴퓨터의 고-레벨 블록도.
이해를 용이하게 하기 위해, 가능하다면, 동일한 참조 부호들이 도면들에 공통인 동일한 요소들을 지정하기 위해 이용된다.
서비스 위치 찾기 능력은 피어-투-피어(P2P) 네트워크 내에서 서비스의 위치를 찾는데 이용하기 위해 제공된다.
일 실시예에 따른 상기 서비스 위치 찾기 능력은 예로서 상기 서비스를 지원하는 상기 P2P 네트워크의 하나 이상의 다른 노드들을 탐색하기 위해, P2P 네트워크 내의 타겟 노드가 상기 P2P 네트워크 내에 특정 서비스의 위치를 탐색할 수 있게 한다. 상기 서비스 위치 찾기 능력은 서비스 위치 탐색을 실행하기 위해 상기 P2P 네트워크의 노드들의 기존의 탐색 표들을 재이용한다. 타겟 노드에 의해 개시된 서비스 위치 탐색은 서비스 탐색 요청들이 상기 탐색 표의 모든 노드들에 대해 동시에, 상기 서비스의 위치를 찾거나 상기 탐색 표이 소진될 때까지 연속하여 상기 탐색 표의 모든 노드들에 대해, 상기 탐색 표의 노드들의 서브세트에 대해 동시에, 및 그 후 상기 서비스의 위치를 찾거나 상기 탐색 표이 소진될 때까지 연속하여 상기 탐색 표의 임의의 남아있는 노드들에 대해, 및/또는 임의의 다른 적절한 기법들을 이용하여 개시되도록 실행될 수 있다. 상기 서비스 위치 탐색에서, 노드로 전송된 각각의 서비스 탐색 요청은 요청되는 서비스를 나타내는 정보, 상기 서비스 요청을 수신하는 상기 노드에 의해 이용하기 위한 탐색 범위, 및 선택적으로 서비스 특정 정보를 포함한다. 상기 서비스 탐색 요청은 다른 유형들의 정보를 포함할 수 있다. 노드에 의해 개시된 상기 서비스 위치 탐색은 각각의 노드가 기껏해야 M개의 응답 메시지들을 수신하도록 기껏해야 M개의 탐색 메시지들을 생성할 것이고(여기서 M은 상기 P2P 네트워크의 키 공간의 비트들의 크기이다), 그러므로 상기 전체 P2P 네트워크에 걸친 탐색은 어떤 상기 P2P 네트워크의 단일 로드도 탐색 요청 및/또는 응답 메시지들에 의해 오버로드되지 않도록 분배될 것이다. 상기 서비스 위치 탐색 능력은 제 1 P2P 네트워크에서의 노드가 또한 제 2 P2P 네트워크의 노드들인 상기 제 1 P2P 네트워크의 노드들을 식별하기 위해 상기 서비스 위치 찾기 능력을 이용함으로써 상기 제 2 P2P 네트워크에서의 오브젝트를 탐색할 수 있게 한다. 앞서 말한 설명은 단지 상기 서비스 위치 찾기 능력을 도입하기 위해 제공되는 상기 서비스 위치 찾기 능력의 특정 실시예들에 대한 일반적인 설명이고, 따라서 상기 서비스 위치 찾기 능력의 실시예들은 앞서 말한 설명에 의해 제한되는 것으로 의도되지 않음을 이해할 것이다.
상기 서비스 위치 찾기 능력은 주로 특정 유형의 P2P 네트워크, 즉 코드 네트워크의 문맥 내에서 묘사되고 설명된다. 코드 네트워크에서, 상기 코드 네트워크의 노드에 유지되는 탐색 표는 핑거 표(finger table)로서 불리우며, 상기 핑거 표의 각각의 엔트리는 각각 핑거로서 불리운다. 상기 서비스 위치 찾기 능력의 원리들은 다른 유형들의 P2P 네트워크들에 적용될 수 있으며, 따라서 핑거 표들 및 연관된 핑거들에 대한 참조들은 노드들을 식별하는 탐색 표들 및 연관된 엔트리들에 대한 참조들인 것으로서 보다 일반적으로 판독될 수 있다는 것이 이해될 것이다.
도 1은 대표적인 코드 네트워크의 고-레벨 블록도를 묘사한다. 도 1에 묘사된 바와 같이, 코드 네트워크(100)는 링 구성으로 논리적으로 배열되는 복수의 노드들(110)을 포함한다. 상기 노드들(110) 각각은 상기 노드들(110) 가운데 공유될 수 있는 파일들을 저장한다. 상기 노드들(110)은 또한 다른 노드들(110)에 이용가능해질 수 있는 호스트 서비스들일 수 있다. 상기 노드들(110)은 코드 네트워크예를 들면,할 수 있는 임의의 노드들을 포함한다. 예를 들면, 노드들(110)은 컴퓨터들, 전화기들 등을 포함할 수 있다. 상기 노드들(110)은 각각 상기 서비스 위치 찾기 능력의 다양한 기능들을 제공하도록 구성된다.
상기 서비스 위치 찾기 능력을 제공할 때 코드 네트워크(100)의 동작은 먼저 도 1의 대표적인 코드 네트워크와 함께 코드 네트워크들의 일반적인 동작을 고려함으로써 보다 잘 이해될 수 있다.
코드(Chord)에서, 상기 코드 네트워크의 노드들은 패킷-기반 네트워크(예로서, IP 네트워크 또는 임의의 다른 적절한 네트워크와 같은)를 통해 네트워크 접속성을 가지며, 코드는 근본적인 패킷-기반 네트워크 위에 오버레이 네트워크를 형성한다. 코드 네트워크의 노드들은 논리적으로 상기 노드들의 노드 ID들의 순서로 원으로 배열된다. 상기 노드들의 노드 ID들은 해시 함수(hash function)를 이용하여 할당받는다.
코드에서, 상기 코드 네트워크예를 들면,할 수 있는 노드들의 수는 코드 네트워크의 키 공간(어드레스 공간)의 크기에 기초한다. 일반적으로, 상기 키 공간은 M 비트들이고, 여기서 M은 임의의 적절한 수일 수 있다. 예를 들면, 코드 네트워크들에 이용된 통상적인 키 공간은 상기 키 공간의 크기를 2160 또는 ~ 1.45*1048과 동일하게 만드는 160 비트 구현을 이용하여 제공된다. 일관된 해시 함수는 입력들을 160-비트 값들로 매핑하기 위해(즉, 입력들을 상기 키 공간으로 매핑하기 위해) 이용된다. 상기 해시 함수로부터의 출력들은 균일하게 상기 키 공간으로 매핑된다. 보안 해시 함수(Secure Hash Algorithm; SHA-1), 메시지-다이제스트 알고리즘 5(Message-Digest Algorithm 5; MD5) 등과 같은 임의의 적합한 해시 함수가 이용될 수 있음이 이해될 것이다. 상기 키 공간으로 매핑될 때, 상기 해시 함수의 출력들은 상기 코드 네트워크 내의 상기 노드들을 논리적으로 배열하기 위해 이용되는 노드 ID들의 세트를 제공한다.
코드에서, 활성 노드들(상기 코드 네트워크에 참여하는 기존의 노드들) 및 비활성 노드들(상기 코드 네트워크에 참여할 수 있는 잠재적 노드들)은 상기 노드들의 노드 ID들의 순서로 원형으로 논리적으로 배열된다. 코드는 원형으로 랩어라운드(wraparound)를 갖고 증가하는 노드 ID 값들의 방향으로 순서를 부여한다. 상기 코드 네트워크에서, 상기 코드 네트워크의 활성 노드들 간의 접속성은 상기 원들에서의 상기 활성 노드들의 인접한 것들 간의 논리적 접속성이다(비활성 노드들은 상기 코드 네트워크에 접속되지 않기 때문에, 따라서 단지 활성 노드들로서 상기 코드 네트워크에 참여할 수 있는 잠재적인 노드들이다). 이러한 방식으로, 상기 코드 네트워크에서의 타겟 활성 노드의 관점으로부터, 시계 방향으로 상기 원 상의 다음 활성 노드는 상기 타겟 활성 노드의 후속자(successor)이고 시계 반대 방향에서의 상기 원 상의 다음 활성 노드는 상기 타겟 활성 노드의 선행자(predecessor)이다.
도 1에서, 상기 활성 노드들 및 상기 비활성 노드들은 명료함을 위해 디스플레이된다. 도 1에서, 상기 코드 네트워크의 키 공간은 6 비트들이다(또는 노드 ID 0에서 노드 ID 63까지 시계 방향 방식으로, 연속하여 넘버링된 64개의 노드들). 도 1에서, 노드들(0, 2-3, 5-7, 9, 12-13, 16-24, 26, 29-30, 32, 34-35, 37, 41, 43, 45, 49, 51, 53-54, 56-58, 및 62)은 활성이고, 나머지 노드들은 비활성이다. 도 1에서, 코드 네트워크(100)의 상기 활성 노드들 간의 논리적 접속성은 상기 원을 완성하기 위해 노드(0)에 접속되는 노드(62)를 갖고, 노드(0)가 노드(2)에 접속되고, 노드(2)가 노드(3)에 접속되고, 노드(3)가 노드(6)에 접속되는 등을 나타낸다. 코드는 랩어라운드를 갖고 시계 방향으로 증가하는 값들을 이용하여, 상기 원에 순서를 부여하기 때문에, 노드(2)는 노드(0)의 후속자로서 불리우며, 노드 62는 노드(0)의 선행자로서 불리우고, 노드(3)는 노드(2)의 후속자로서 불리우며, 노드(0)는 노드(2)의 선행자로서 불리운다.
여기에 설명된 바와 같이, 코드 네트워크는 파일 공유를 지원하여, 여기서 공유될 각각의 파일은 상기 코드 네트워크의 활성 노드들 중 하나 이상에 저장된다. 코드에서, 파일의 파일명은 상기 코드 네트워크의 노드들을 식별하기 위해 이용되는 동일한 해시 함수를 이용하여, 상기 코드 네트워크의 상기 노드들을 식별하기 위해 이용되는 동일한 키 공간으로 해싱된다. 상기 파일명을 해싱하는 것으로부터의 해싱된 출력은 상기 파일을 위한 파일 식별자이다. 따라서, 예를 들면, 160 비트들의 키 공간을 가진 코드 네트워크를 위해, 상기 코드 네트워크는 잠재적으로 1.45*1048개의 파일들을 수용할 수 있다. 코드에서, 파일은 노드가 활성이라면 상기 파일의 파일 ID에 매칭하는 노드 ID를 가진 노드에 저장되고, 노드가 비활성이라면, 상기 파일은 상기 파일 ID보다 큰 노드 ID를 가진 제 1 활성 노드에 저장된다.
도 1에서, 코드 네트워크(100)는 다음과 같이 저장될 총 64개의 파일들을 수용할 수 있다: 노드(0)는 파일들(0, 63)을 저장하고; 노드(2)는 파일들(1, 2)을 저장하고; 노드(3)는 파일(3)을 저장하고; 노드(5)는 파일들(4, 5)을 저장하고; 노드(6)는 파일(6)을 저장하고; 노드(7)는 파일(7)을 저장하고; 노드(9)는 파일들(8, 9)을 저장하고; 노드(12)는 파일들(10, 11, 12)을 저장하고; 노드(13)는 파일(13)을 저장하고, 노드(16)는 파일들(14, 15, 16)을 저장하고; 노드(17)는 파일(17)을 저장하고; 노드(18)는 파일(18)을 저장하고; 노드(19)는 파일(19)을 저장하고; 노드(20)는 파일(20)을 저장하고; 노드(21)는 파일(21)을 저장하고; 노드(22)는 파일(22)을 저장하고; 노드(23)는 파일(23)을 저장하고; 노드(24)는 파일(24)을 저장하고; 노드(26)는 파일들(25, 26)을 저장하고; 노드(29)는 파일들(27 28, 29)을 저장하고; 노드(30)는 파일(30)을 저장하고; 노드(32)는 파일들(31, 32)을 저장하고; 노드(34)는 파일들(33, 34)을 저장하고; 노드(35)는 파일(35)을 저장하고; 노드(37)는 파일들(36, 37)을 저장하고; 노드(41)는 파일들(38. 39, 40, 41)을 저장하고; 노드(43)는 파일들(42, 43)을 저장하고; 노드(45)는 파일들(44, 45)을 저장하고; 노드(49)는 파일들(46, 47, 48, 49)을 저장하고; 노드(51)는 파일들(50, 51)을 저장하고; 노드(53)는 파일들(52, 53)을 저장하고; 노드(54)는 파일(54)을 저장하고; 노드(56)는 파일들(55, 56)을 저장하고; 노드(57)는 파일(57)을 저장하고; 노드(58)는 파일(58)을 저장하고; 노드(62)는 파일들(59, 60, 61, 62)을 저장한다.
가장 기본적인 구현에서, 단지 주어진 파일의 하나의 카피만이 상기 코드 네트워크에 저장되지만, 상이한 방법들이 상기 코드 네트워크 내에서 하나의 파일의 다수의 카피들을 저장하기 위해 이용될 수 있다(예를 들면, 노드 장애들, 부하-분선 등의 경우에서 탄력성을 위해).
일 실시예에서, 예를 들면, 다수의 버전들의 파일이 합의된 명명 규칙을 이용하여 상기 파일의 다수의 카피들에 대한 할당된 약간 상이한 파일명들에 의해 상기 코드 네트워크에 저장될 수 있다. 예를 들면, 파일의 명칭이 "abc"이라면, "-n"과 같은 확장이 동일한 파일을 나타내는 파일명에 부가될 수 있다. 이 예에서, 상기 파일의 다수의 카피들이 상기 명칭들("abc", "abc-1", "abc-2" 등) 하에 저장될 수 있다. 이러한 방식으로, 상기 "abc" 파일에 대한 다수의 파일명들이 동일하지 않기 때문에, 상이한 파일 명들의 해싱은 상이한 해시 출력들 및 그에 따른 상이한 파일 ID들을 야기할 것이고, 그에 의해 상기 파일의 다수의 카피들이 상기 코드 네트워크의 상이한 노드들에 저장되게 할 것이다.
일 실시예에서, 예를 들면, 파일의 다수의 버전들이 상기 파일명을 이용하여(단일의 일관된 해시 함수가 이용되는 상술된 구현이라기보다는) 상기 파일을 위한 다수의 파일 ID들을 생성하도록 다수의 독립적인 해시 함수들을 이용함으로써 상기 코드 네트워크에 저장될 수 있다. 이 실시예에서, 상기 코드 네트워크로 파일을 시딩(seeding)하는 노드가 상기 해시 함수들을 이용하여 상기 파일의 가능한 파일 ID들의 각각을 결정하고, 상기 파일 ID들을 이용하여 상기 파일의 다수의 카피들을 상기 코드 네트워크에 삽입한다. 이 실시예에서, 상기 코드 네트워크에서 파일을 탐색하는 노드는 상기 파일의 가능한 파일 ID들의 모두를 결정할 것이고(상기 해시 함수들의 각각을 이용하여 상기 파일명을 해싱함으로써) 그 후 상기 결정된 파일 ID들을 연속적으로, 또는 동시에 이용하여 상기 파일을 탐색할 수 있다.
상기 코드 네트워크에서 파일의 다수의 버전들의 저장에 관하여, 파일의 다수의 버전들이 임의의 다른 적합한 방식으로 상기 코드 네트워크에 저장될 수 있다는 것이 이해될 것이다.
여기에 설명된 바와 같이, 코드는 노드들이 파일을 공유할 수 있게 한다. 상기 코드 네트워크의 노드들이 파일들을 공유할 수 있도록 하기 위해, 상기 코드 네트워크의 각각의 노드는 원하는 파일을 얻을 수 있도록 상기 원하는 파일의 위치를 탐색하고 궁극적으로 결정할 수 있도록 요구된다.
코드에서, 각각의 노드는 탐색 표를 유지한다. M-비트 키 공간을 가진 코드 네트워크를 위해, 각각의 노드(N)는 M개의 엔트리들을 가진 탐색 표를 유지할 것이고, 여기서 상기 탐색 표의 엔트리들은 "핑거들"로서 불리운다. 노드(N)를 위한 상기 탐색 표에서, 제 i 핑거는 N으로부터 떨어진 적어도 2i-1인 상기 원상의 제 1 노드를 나타낸다. 일반적으로, 달리 표시되지 않는다면, 상기 용어 "제 i 핑거"는 상기 탐색 표의 상기 제 i 엔트리에 의해 나타내어지는 노드를 나타내기 위해 이용될 것이다. 예를 들면, 코드 네트워크(100)에서, 노드(0)의 제 3 핑거는 노드(5)이다.
총괄적으로, 상기 노드들의 탐색 표들은 상기 코드 네트워크 내의 오브젝트의 위치(들)가 결정될 수 있는 효율적인 전역적 탐색 알고리즘을 제공한다.
도 1에서, 상기 키 공간은 6비트들이고, 따라서 각각의 노드는 그것의 탐색 표에서 6개의 핑거들을 가진다. 도 1에서, 노드(0)에 대한 탐색 표는 다음과 같이 표 1에 표시된 바와 같이 표현될 수 있다.
Figure pct00001
코드에서, 상기 네트워크는 동적이다. 새로운 노드들이 상기 코드 네트워크에 접속하고 기존의 노드들은 상기 코드 네트워크를 떠나기 때문에, 상기 코드 네트워크의 활성 노드들에서의 탐색 표들이 시행될 수 있다. 이와 같이, 코드에서, 각각의 활성 노드(K)는 그것의 연관된 탐색 표를 주기적으로 업데이트할 것이다. 활성 노드(K)는 임의의 적합한 방식으로 그것의 탐색 표를 업데이트할 수 있다. 예를 들면, 활성 노드(K)는 노드(K+2i-1)를 탐색함으로써 그것의 탐색 표를 업데이트할 수 있으며, 이는 이러한 탐색을 실행하는 것으로부터의 결과가 상기 탐색 표의 제 i 핑거의 값일 것이기 때문이다. 코드 네트워크의 활성 노드들은 임의의 적합한 방식으로 그것들의 탐색 표들을 업데이트할 수 있음이 이해될 것이다.
코드에서, 상기 탐색 표 외에, 각각의 노드는 또한 링에서 그것의 후속자 및 그것의 선행자의 아이덴티티들을 저장한다. 이러한 정보는 새로운 노드들이 상기 네트워크에 접속하고 기존의 노드들이 상기 네트워크를 떠날 때, 뿐만 아니라 노드들이 장애로부터 복구될 때와 같이, 링 유지를 위해 이용된다. 몇몇 코드 네트워크들에서, 다수의 동시 발생 노드 장애들이 존재하는 상황에 대해 경계하기 위해, 노드는 링에서 그것의 N개의 후속자들 및 그것의 N개의 선행자들의 아이덴티티들을 저장할 수 있다.
코드에서, 상기 코드 네트워크의 노드들은 상기 코드 네트워크의 다른 노드들을 탐색하고 그로부터 파일들을 획득할 수 있다. 상기 코드 네트워크는 노드들이 상기 코드 네트워크에서의 다른 노드들로부터 이용가능한 파일들을 탐색할 수 있는 탐색 알고리즘을 지원한다. 상기 코드 탐색 알고리즘의 동작은 도 1의 코드 네트워크(100)를 이용한 일 예를 통해 도시될 수 있다. 이 예에서, 노드(2)는 도 1의 코드 네트워크(100)에서 파일(0)을 탐색하길 원한다고 가정한다. 노드(2)는 파일 요청을 전송할 다른 노드들 중 하나를 선택하기 위해 그것의 탐색 표를 액세스할 것이다. 노드(2)의 관점으로부터, 상기 타겟 파일의 파일 ID(즉, 파일(0))는 랩어라운드로 인해 노드(2)의 가장 큰 핑거의 값(즉, 노드(34))보다 크며, 노드(2)는 노드(34)가 파일(0)을 탐색하도록 요청하는 파일 요청을 노드(34)에 전송할 것이다. 노드(34)는 노드(2)로부터 상기 파일 요청을 수신한다. 파일(0)을 저장하지 않기 때문에, 노드(34)는 상기 파일 요청을 포워딩할 다른 노드들 중 하나를 선택하기 위해 그것의 탐색 표를 액세스할 것이다. 노드(34)에서, 상기 탐색 표는 노드들(35, 37, 40, 43, 51, 및 2)을 나타내는, 6개의 핑거들을 포함한다. 파일(0)의 오브젝트 ID는 제 5 및 제 6 핑거들(각각 노드(51) 및 노드(2)) 사이에 있기 때문에, 노드(34)는 상기 탐색 요청을 상기 제 5 핑거(노드(51))에 의해 식별된 노드에 포워딩한다. 노드(51)는 노드(34)로부터 상기 파일 요청을 수신한다. 노드(51)는 그것이 파일(0)을 저장하지 않기 때문에, 상기 파일 요청을 전송할 다른 노드들 중 하나를 선택하기 위해 상기 탐색 표를 액세스할 것이다. 노드(51)에서, 상기 탐색 표는 노드들(53, 53, 56, 62, 3, 및 19)을 나타내는 6개의 핑거들을 포함한다. 파일(0)의 오브젝트 ID는 제 4 및 제 5 핑거들(각각, 노드(62) 및 노드(3)) 사이에 있기 때문에, 노드(51)는 상기 탐색 요청을 상기 제 4 핑거(노드(62))에 의해 식별된 노드에 포워딩한다. 노드(62)는 노드(51)로부터 상기 파일 요청을 수신한다. 노드(62)는 그것이 파일(0)을 저장하지 않기 때문에, 상기 파일 요청을 전송할 다른 노드들 중 하나를 선택하기 위해 그것의 탐색 표를 액세스할 것이다. 노드(62)에서, 상기 탐색 표는 노드들(0, 0, 2, 6, 16, 및 30)을 나타내는, 6개의 핑거들을 포함한다. 파일(0)의 오브젝트 ID는 제 1 및 제 2 핑거들(노드(0)) 모두에서 나타내어지기 때문에, 노드(62)는 노드(0)가 활성이고 상기 탐색 요청을 노드(0)에 포워딩한다는 것을 알고 있다. 상기 탐색 요청을 수신하는 것에 응답하여, 상기 노드(0)는 직접 또는 파일(0)을 가지는 중간 노드들(즉, 노드(62), 노드(51), 노드(34), 및 그 후 노드(0))을 통해 노드(2)에 응답한다. 상기 노드(2)는 그 후 노드(0)로부터 직접 파일(0)을 획득할 수 있다. 따라서, 이 예로부터, 코드에서, 코드 네트워크에서 상기 노드들의 모두가 상기 코드 탐색 알고리즘을 지원하기 위해 협력한다는 것이 명확하다.
코드에서, 노드들이 언제든 상기 코드 네트워크를 연결할 수 있고 상기 코드 네트워크를 떠날 수 있기 때문에, 상기 코드 네트워크는 동적이다. 노드들이 상기 코드 네트워크에 접속하고 떠날 때, 파일들은 노드들 간에 전달된다. 예를 들면, 연결 노드는 적어도 상기 연결 노드의 노드 ID와 동일한 파일 ID를 가진 파일(및, 잠재적으로 또한 다른 파일들)을 저장하기 위한 책임을 떠맡는 반면, 떠나는 노드는 하나 이상의 파일들을 저장하기 위한 책임을 또 다른 노드에 전달할 수 있다. 코드 네트워크를 참여하고 떠나는 것과 연관된 절차들이 이하에 부가적으로 상세히 설명된다.
코드 연결 절차(Chord join procedure)에서, 노드가 코드 네트워크에 접속하기를 원할 때, 연결 노드는 그것의 노드 ID를 결정한다. 상기 연결 노드는 그것의 명칭을 키 값으로 해싱함으로써 그것의 노드 ID를 결정한다. 예를 들면, 상기 노드의 명칭이 node-xyx@company-abc.com이라면, 상기 노드 ID는 SHA-1의 출력(node-xyx@company-abc.com)일 것이고, 여기서, 단순함을 위해 우리는 상기 해시 함수가 SHA-1이라고 가정한다(비록, 임의의 적합한 해싱 함수가 이용될 수 있지만). 이 예에서, 상기 해싱 동작으로부터 결정된 바와 같이, 이러한 노드를 위한 노드 ID를 K라 하자.
상기 코드 연결 절차에서, 상기 연결 노드(K)는 그 후 상기 코드 네트워크의 활성 노드(초기화 노드로서 표기된)를 접촉한다. 처음에는, 이러한 초기화 노드는 중앙 집중 서버인 것처럼 보일 수 있지만, 이것은 다음과 같은 경우가 아니다: (a) 상기 초기화 노드는 상기 코드 네트워크에서 현재 활성인 임의의 노드일 수 있다(예로서, 노드(K1) 및 노드(K2)가 동시에 상기 코드 네트워크에 접속하기를 원한다면, 그것들은 상기 네트워크에 접속하기 위한 그것들 각각의 초기화 노드들로서 서로 다른 활성 노드들을 이용할 수 있으며, 이용할 가능성이 높다) 및 (b) 상기 초기화 노드는 기본적인 능력들 외에 임의의 특별한 능력을 제공할 필요가 없다(즉, 그것은 단지 상기 코드 네트워크에서 임의의 다른 노드처럼 행동할 수 있다). 상기 노드(K)는 임의의 적합한 방식으로 잠재적인 후보 초기화 노드들의 리스트를 획득할 수 있다(예로서, 연결 노드(K)에 대한 하나 이상의 탐색 표들, 후속자 리스트들 및/또는 프로세서 리스트들로부터, 연결 노드(K) 내에 관리상 구성된 정보로부터, 웹 사이트로부터 등). 이 예에서, 상기 초기화 노드의 노드 ID를 L이라 하자.
상기 코드 연결 절차에서, 연결 노드(K)는 그 후 초기화 노드(L)가 연결 노드(K)를 탐색하는 요청을 전송한다(즉, ID = K를 가진 오브젝트를 탐색). 이 점에서, 두 개의 이벤트들이 발생할 수 있다:
(A) 노드(L)는 N의 값을 가진 연결 노드(K)에 응답한다. 노드(N)는 모든 활성 노드들 가운데 연결 노드(K)와 연관된 K보다 큰 노드 ID를 가진, 노드일 것이다. 따라서, 연결 노드(K)가 상기 코드 네트워크를 연결하기 위한 것이라면, 노드(N)는 연결 노드(K)에 대한 후속자 노드여야 한다. 노드(K)는 그 후 노드(N)를 접촉하고, 노드(N)의 선행자 노드의 아이덴티티를 노드(N)에 요청한다. 이 예에서, 노드(N)의 선행자는 노드 N-으로서 표기된다. 상기 노드(N)는 연결 노드(K)에 N-의 값을 제공한다. 이러한 정보에 기초하여, 노드(K)는 그 후 노드(N) 및 노드(N-) 사이의 코드 네트워크로 스스로 삽입해야 한다는 것을 알고 있다.
(B) 노드(L)는 K의 값을 갖고 연결 노드(K)에 응답한다. 이것은 상기 코드 네트워크 내에 이미 활성인 K의 노드 ID를 가진 또 다른 노드가 존재한다는 것을 의미한다. 이러한 경우는 대부분의 코드 네트워크들에서 매우 가능성이 낮지만(예로서, 160 비트 키 공간인 코드 네트워크(100)에서, 이러한 발생 상황의 공산은 1.45*1048에서 1이다), 가능하다. 이러한 상황은 그 자신의 이름을 약간 변경한 연결 노드(K)를 갖고(예로서, 타임스탬프를 부가하고, 숫자를 부가하는 등) 상이한 노드 ID(K'로서 표기된)를 생성하기 위해 상기 새로운 노드 명칭을 이용함으로써 해소될 수 있다. 상기 연결 노드(K')는 새로운 탐색 요청을 초기화 노드(L)(즉, 상기 초기화 노드(L)가 연결 노드(K')를 탐색하는 요청)에 전송함으로써 상기 프로세스를 다시 시작할 수 있다.
상기 코드 연결 절차에서, 상기 연결 노드(K)에 대한 삽입부의 결정에 이어, 처리가 상기 코드 네트워크 내예를 들면, 노드를 삽입하기 위해 실행된다. 상기 연결 노드(K)는 노드(K-)(K의 후보 선행자) 및 노드(K+)(K의 후보 선행자) 사이에 삽입되고, 여기서, 이때, 노드(K)가 상기 네트워크에 접속하기 전에, 노드(K+)는 노드(K-)의 후속자이다. 상기 연결 노드(K)는 그것이 상기 코드 네트워크에 접속하고자 함을 나타내는 후속자 노드(K+)를 접촉한다. 상기 후속자 노드(K+)는 그 후 (1) 그것의 선행자가 노드(K-)임을 연결 노드(K)에 알리고, (2) 노드(K)가 책임을 가져야 하는 임의의 파일들(즉, (K-)+1 내지 K의 파일 ID들을 가진 파일들)을 연결 노드(K)에 전달하기 시작하고, (3) 연결 노드(K)가 상기 코드 네트워크에 접속하는 프로세스에 있음을 그것의 선행자 노드(K-)에 알린다. 상기 파일 전달이 완료된 후, 연결 노드(K)는 선행자 노드(K-)와의 연결을 수립한다. 연결 노드(K) 및 선행자 노드(K-) 사이의 연결이 수립된 후, 연결 노드(K)는 상기 코드 네트워크에 성공적으로 연결하였음을 후속자 노드(K+)에 알린다. 상기 후속자 노드(K+)는 그 후 선행자 노드(K-)와의 연결을 해제하고, 후속자 노드(K+) 및 선행자 노드(K-) 둘 모두는 그것들의 선행자 및 후속자 리스트들을 업데이트한다.
상기 코드 리브 절차(Chord leave procedure)에서, 처리는 상기 리브 노드(K)가 제어된 방식으로 상기 코드 네트워크를 떠날 수 있게 하기 위해 실행된다. 떠나는 상기 노드(K)는 선행자 노드(노드(K-)로서 표기된) 및 그와 연관된 후속자 노드(노드(K+)로 표기된)를 가진다. 상기 리브 노드(K)는 상기 선행자 노드(K-) 및 상기 후속자 노드(K+) 둘 모두를 접촉하고, 그것이 상기 코드 네트워크를 떠나려고 한다는 것을 둘 모두에게 알리고 다른 것의 아이덴티티를 상기 노드들 둘 모두에 제공한다. 상기 리브 노드(K)는 그 후 리브 노드(K)가 현재 상기 코드 네트워크를 대신하여 저장하고 있는 파일들의 모두(즉, K를 포함하여, (K-)+1 및 K 사이의 모든 ID들을 가진 모든 파일들)을 후속자 노드(K+)에 전달한다. 상기 파일들의 전달이 완료된 후, 연결 노드는 선행자 노드(K-) 및 후속자 노드(K+)로부터 접속해제함으로써 상기 코드 네트워크를 떠난다. 노드들(K-, K+)은 그 후 그 사이예를 들면,을 수립한다(그것들 중 하나에 의해 개시될 수 있는). 노드들(K-, K+)은 또한 그것들의 선행자 및 후속자 리스트들을 업데이트한다.
상기 코드 네트워크에 대한 동적 변화들을 가능하게 하기 위한 동적 상기 코드 연결 절차 및 상기 코드 리브 절차의 이용 외에, 코드는 또한 노드 장애들로부터의 복구를 가능하게 하기 위한 코드 복구 절차를 지원한다(즉, 상기 코드 리브 및 코드 연결 절차들은 노드 장애들로부터 복구하기 위해 이용되지 않는다). 코드 네트워크의 노드들은 주기적으로 그것들의 선행자 및 후속자 노드들 각각에 하트비트 메시지들(heartbeat messages)을 전송하고, 그에 의해 상기 코드 네트워크의 노드들이 노드 장애들을 빨리 검출할 수 있게 한다. 일반적으로, 노드로부터의 상기 하트비트 메시지는 상기 하트비트 메시지가 유래하는 노드의 선행자 및 후속자 노드들의 아이덴티티들을 포함할 것이다. 이러한 방식으로, 노드가 그것의 후속자 노드로부터 하트비트 메시지를 수신할 때, 그것은 그것의 후속자 노드의 상기 후속자 노드의 아이덴티티를 알며, 따라서, 노드의 후속자가 실패할 때, 상기 노드는 그것의 후속자 노드의 후속자 노드에 대한 연결을 개시할 수 있고 상기 코드 링이 유지된다. 상기 논의된 바와 같이, 몇몇 코드 네트워크들에서, 노드들은 k개의 선행자들 및 k개의 후속자들의 리스트들을 유지한다. 이러한 경우에, 상기 코드 네트워크는 k-1개의 연속적인 노드들의 장애들로부터 복구할 수 있다. 이러한 경우에, k의 값은 값에 대해서조차, k개의 연속적인 노드들의 장애의 가능성은 매우 작다. 몇몇 이러한 코드 네트워크들에서, k에 대한 값은 2*log2(L)로서 결정될 수 있으며, 여기서 L은 상기 네트워크에서의 활성 노드들의 평균 수이다(즉, 보통 100,000개의 활성 노드들을 가는 코드, k는 ~34일 것이다).
상술된 코드 복구 절차(Chord recovery procedure)는 상기 코드 네트워크가 노드 장애들의 경우에 보수될 수 있게 하지만, 상기 실패한 노드들에 저장되는 파일들은 손실된다. 이러한 문제는 다양한 방식들로 상기 설명된 것 중 적어도 두 개로 해소될 수 있다. 부가적으로, 또 다른 실시예에서, 이러한 문제는 파일들을 획득한 노드들이 자발적으로 상기 파일들을 위한 시드 노드들(seed nodes)이 되게 함으로써 해소된다. 하나의 이러한 실시예에 대한 설명이 따른다. 파일은 원래 상기 코드 네트워크의 멤버에 의해 상기 코드 네트워크에 도입된다(여기서, 상기 멤버 노드는 상기 파일의 시드 노드로서 불리운다). 상기 시드 노드는 상기 파일명(즉, 상기 파일 ID)의 해싱된 값을 획득하고, 상기 파일 ID와 동일한 노드 ID를 가진 노드를 탐색한다. 상기 시드 노드는 상기 파일 ID와 동일하거나 그보다 큰 노드 ID를 가진 상기 코드 네트워크에 제 1 활성 노드의 위치를 찾을 것이다. 상기 시드 노드는 상기 파일을 상기 위치를 찾은 노드에 전송한다. 그 후, 나중에 상기 파일을 획득하는 상기 코드 네트워크의 다른 노드들이 자발적으로 상기 파일을 위한 시드 노드들이 될 수 있다. 파일을 위한 시드 노드는 주기적으로 상기 코드 네트워크에서 상기 파일을 탐색할 것이고, 상기 시드 노드가 상기 파일을 찾는데 실패한다면, 그것은 상기 파일을 상술된 바와 같이 적절한 노드에 전송할 것이다. 이러한 방식으로, "손실된" 파일들이 상기 코드 네트워크에서 복구된다.
여기에 설명된 바와 같이, 파일들을 저장하고 공유하는 것 외에, 코드 네트워크는 또한 서비스들을 지원할 수 있다. 기존의 코드 네트워크들이 단지 파일 공유 서비스들을 지원했다면, 코드 네트워크들은 점차 파일 공유 서비스들 외에 하나 이상의 다른 서비스들을 지원할 수 있다. 서비스는 모든 노드들 또는 노드들의 서브세브로부터 이용가능할 수 있으며, 단지 노드들의 작은 서브세트로부터 이용가능할 수 있다. 서비스는 상기 노드들의 모두 또는 일부에 대해 의무적일 수 있거나, 또는 자유 의사에 따라 상기 노드들에 의해 지원될 수 있다. 서비스를 지원하는 상기 노드(들)는 활성 및 비활성 사이에서 전이할 수 있다. 코드 네트워크들에서 서비스들을 지원하는 것과 연관된 이들 특징들의 각각은 상기 지원하는 서비스의 유형, 상기 코드 네트워크의 구현, 유사한 인자들 중 하나 이상에 기초하여 변화할 수 있다. 코드 네트워크들에서 서비스들의 지원의 가능성을 고려하여, 상기 서비스 위치 찾기 능력은 상기 코드 네트워크 내의 상기 노드들의 각각이 특정 서비스를 제공하는 노드를 탐색하고 매치하게 할 수 있게 한다.
상기 서비스 위치 찾기 능력은 특정 서비스를 지원하는 노드의 위치를 찾기 위해 이용될 때, 적어도 다음 이유들로 유리하다: (1) 그것은 상기 코드 네트워크의 상기 노드들 상에서 유지된 기존의 탐색 표들을 이용한다(즉, 새로운 탐색 표이 상기 노드들에 대해 요구되지 않는다); (2) 상기 탐색이 분배된다(예로서, 서비스를 탐색할 때, 상기 서비스 탐색을 개시하는 개시 노드는 기껏해야 M개의 메시지들을 개시할 것이고(여기서, M은 상기 코드 네트워크의 키 공간의 길이이다) 그에 따라 상기 개시 노드가 압도적인 수의 응답들에 의해 폭주되지 않도록 기껏해야 M개의 응답 메시지들을 수신할 것이다; 및 (3) 상기 서비스 탐색은 순서대로, 단계적으로 실행될 수 있으며, 여기서 각각의 단계는 상기 코드 네트워크에서 교환된 메시지들의 수가 최소화되도록 큰 성공 확률을 갖도록 구성될 수 있다. 상기 서비스 위치 찾기 능력은 또한 (많은 애플리케이션들에서 유용한) 효율적인 방송을 가능하게 하는 이득을 가진다.
코드 네트워크에서 위치 찾기될 수 있는 상기 서비스들은 코드 네트워크에 의해 지원되기에 적절한 임의의 서비스들을 포함한다.
코드 네트워크의 노드들에 의해 지원될 수 있는 제 1 서비스는 노드가 다수의 링크된 코드 네트워크들을 가로질러 파일을 탐색할 수 있는 "크로스-링 탐색(cross-ring searching)" 서비스이다. 일반적으로, 코드 네트워크는 커뮤니티에 대한 관심 있는 파일들이 저장되고 공유되는 관심 있는 커뮤니티를 나타낸다. 노드는 다수의 코드 네트워크들에 속할 수 있다. 이것은 코드 네트워크들예를 들면,할 수 있는 노드들과 연관된 개개의 이용자들이 상이한 관심을 가질 가능성이 높으며, 따라서 적어도 몇몇 노드들은 다수의 세트들의 코드 네트워크들에 속할 가능성이 높다는 이해로부터 명백하다. 노드가 코드 네트워크에서 파일을 탐색할 때, 상기 탐색 노드는, (a) 상기 파일이 상기 네트워크에 결코 저장되지 않는다(예로서, 상기 파일이 새롭게 생성되고 상기 코드 네트워크의 상기 노드들 중 어떤 것도 아직 상기 파일을 획득하지 않았다); (b) 상기 파일은 상기 커뮤니티에 대해 관심이 없을 수 있으며, 따라서 상기 코드 네트워크에 저장되지 않는다; (c) 상기 코드 네트워크에서의 각각의 노드가 상기 코드 네트워크를 대신하여 저장할 수 있는 파일들의 수에 대한 실제적인 제한을 가진다는 사실로 인해(예로서, 드문 경우들에서, 노드 및 그것의 선행자 간의 갭이 너무 크고, 따라서 상기 노드가 상기 파일들 모두를 저장할 수 없다; 예로서, 상기 코드 네트워크의 정책은 통상적으로 더 오래되고 및/또는 덜 인기있는 파일들이 저장될 수 없으며, 따라서 상기 코드 네트워크 내에서 이용가능하지 않을 것임을 특정한다); 및 (d) 노드들의 장애들은 몇몇 파일들이 상기 코드 네트워크 내에서 이용가능하지 않게 야기할 수 있으며; 및 (5) 파일들이 상기 코드 네트워크에서 이용가능하지 않게 야기할 수 있는 임의의 다른 이유들과 같이, 임의의 수의 이유들로 상기 코드 네트워크 내에서 상기 파일의 위치 찾기에 실패할 수 있다, 파일을 탐색하는 코드 네트워크의 노드가 다수의 코드 네트워크들에 속한다면, 상기 노드는 그것이 속하는 상기 코드 네트워크들의 각각에서 상기 파일을 탐색할 수 있다. 코드 네트워크의 노드가 상기 노드가 속하는 상기 코드 네트워크(들)에서 상기 파일의 위치를 찾을 수 없다면, 상기 노드는 그 후 하나 이상의 다른 코드 네트워크들에서 상기 파일을 탐색하고자 할 수 있다. 이 경우에, 상기 노드는 하나 이상의 다른 코드 네트워크들(이미 탐색된 상기 코드 네트워크(들) 외의)에 접속되는 상기 코드 네트워크에 다른 노드들을 탐색하길 원할 수 있다. 하나 이상의 부가적인 코드 네트워크들로의 상기 파일을 위한 탐색의 이러한 확대는 다른 코드 네트워크들에 속하는 상기 코드 네트워크의 노드들이 다수의 코드 네트워크들을 가로질러 상기 파일을 탐색하는데 이용하기 위해 위치를 찾는 크로스-링 탐색 서비스를 이용하여 실행된다.
코드 네트워크의 노드들에 의해 지원될 수 있는 제 2 서비스는 "번역" 서비스이다. 상기 번역 서비스는 언어들 간에 문서들을 번역하기 위한 것일 수 있다. 예를 들면, 상기 코드 네트워크의 노드는 영어에서 독일어로 번역된 문서를 원할 수 있으며, 상기 코드 네트워크에서 상기 노드들의 일부는 이러한 능력을 가질 수 있다. 유사하게는, 상기 코드 네트워크의 노드가 이탈리아어에서 프랑스어로 번역된 문서를 원할 수 있으며, 상기 코드 네트워크에서의 상기 노드들 중 일부가 이러한 능력을 가질 수 있다. 이러한 유형의 서비스를 위해, 노드는 단지 번역 서비스들을 지원하지 않는 노드들이 아닌, 보다 상세하게는, 상기 탐색 노드에 의해 요구된 특정 번역 서비스들(즉, 하나의 언어에서 또 다른 언어로의 번역)을 지원하는 노드들의 위치를 찾도록 시도할 수 있다.
상술된 대표적인 서비스들은 파일 공유 외에, 코드 네트워크들에 의해 지원될 수 있는 많은 상이한 서비스들이 존재한다는 것을 입증한다. 따라서, 비록 코드 네트워크들에서 제공될 수 있는 서비스들의 특정 예들이 상기 서비스 위치 찾기 능력을 설명할 때 명료함을 위해 여기에서 설명되지만, 상기 서비스 위치 찾기 능력은 임의의 특정 서비스를 갖고 이용하기 위해 제한되지 않는다는 것이 이해될 것이다.
상기 서비스 위치 찾기 능력은 코드 네트워크 상의 노드가 특정 서비스를 지원하거나 제공하는 상기 코드 네트워크 상에 하나 이상의 다른 노드들의 위치를 찾을 수 있는 알고리즘을 제공한다.
여기에 설명된 바와 같이, 기존의 코드 네트워크들은 코드 네트워크들 상에서의 노드들이 상기 코드 네트워크 상에서 다른 노드들을 탐색하거나 상기 코드 네트워크에 저장된 파일들을 탐색할 수 있게 한다. 여기에 묘사되고 설명된 상기 서비스 위치 찾기 능력은 코드 네트워크로 하여금 상기 코드 네트워크 내에 새로운 유형의 탐색, 즉 상기 코드 네트워크 상에서의 노드가 상기 코드 네트워크 상에 특정 서비스의 위치를 탐색할 수 있는 서비스 위치 탐색을 지원할 수 있게 한다(즉, 서비스 탐색 요청에서 특정한 바와 같이, 특정 서비스를 지원하는 상기 코드 네트워크 상의 하나 이상의 다른 노드들을 탐색하기 위해).
상기 서비스 위치 찾기 능력의 설명을 간단히 하기 위해, 상기 용어 "탐색"은 달리 구체적으로 표시되거나 설명되지 않는다면, 서비스 위치 탐색을 나타내기 위해 다음 단락들에서 이용될 것이지만; 상기 서비스 위치 찾기 능력이 상기 코드 네트워크의 상기 노드들 상의 기존의 탐색 표들을 이용하기 때문에, 다음 단락들에서 이용된 상기 용어 "탐색 표들"은 여전히 상기 코드 네트워크의 노드들에서 유지된 상기 코드 "핑거" 표들을 나타낸다.
상기 서비스 위치 찾기 능력은 일 예를 이용하여 설명되고, 그 후 상기 코드 네트워크 내에 상기 서비스 위치 찾기 능력을 제공하는데 참여하는 상기 코드 네트워크의 상이한 노드들에서 실행된 처리를 보여주는 방법도들을 이용하여 보다 일반적인 용어들로 표현된다.
도 1에 설명되고 상기에 설명된 바와 같이, 코드 네트워크(100)는 6개의 비트 키 공간(즉, 64개의 어드레스들을 지원하는)을 가지며, 상기 64개의 노드들 중 36개는 활성이다(즉, 노드들(0, 2, 3, 5, 6, 7, 9, 12, 13, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 29, 30, 32, 34, 35, 37. 41, 43, 45, 49, 51, 53, 54, 56, 57, 58, 62). 도 1에 추가로 서술된 바와 같이, 상기 활성 노드들의 서브세트(즉, 노드들(7, 19, 30, 및 51)은 서비스(A)로서 표기되는 서비스를 지원한다(설명적으로, 서비스(A)를 지원하는 상기 활성 노드들의 각각은 서비스(A)를 지원하지 않는 활성 노드들을 갖고 이용되는 것보다 어두운 쉐이딩을 이용하여 표시된다).
일 예로서, 도 1을 참조하여, 노드(0)는 서비스(A)를 지원하는 코드 네트워크(100)의 노드들 중 하나의 위치를 찾고 싶어한다고 가정하자. 상기 예의 설명을 단순화하기 위해, 우리는 상기 탐색을 초기화하는 상기 노드는 노드(0)라고 가정한다(그것은 동일한 프로세스가 단지 상기 코드 네트워크에서 상기 노드들의 모두의 노드 ID들로부터 N의 값을 감함으로써 실행될 수 있는 것처럼, 상기 탐색을 초기화하는 상기 노드가 노드(N)이라면 동일한 논의가 이루어질 수 있기 때문에, 일반성의 손실이 없음을 이해할 것이다). 표 1에서 상기 표시된 바와 같이(이하에서 반복된다), 노드(0)에서 상기 탐색 표는 다음의 정보를 포함한 6개의 엔트리들을 가진다:
[표 1]
Figure pct00002
이 예에서, 노드(0)는 코드 네트워크(100) 내에 서비스(A)의 위치를 찾기 위한 탐색을 개시한다. 노드(0)에 유지된 이러한 탐색 표에 기초하여, 노드(0)는 각각 상기 탐색 표의 M개의 핑거들에 의해 식별된 M개의 노드들에 M개의 탐색 요청 메시지들을 전송함으로써 상기 탐색 위치 찾기 서비스(A)를 개시한다. 제 i 핑거에 대한 상기 탐색 요청 메시지는 다음의 정보를 포함한다: (1) 위치 찾기될 서비스의 표시; 및 (2) 서비스 범위, 즉 상기 제 i 핑거가 탐색해야 하는 노드들의 범위.
위치 찾기될 상기 서비스의 표시는 서비스를 특정하기 위한 임의의 적절한 기준들을 이용하여 특정될 수 있다(예로서, 서비스 식별자, 상기 서비스를 설명하기 위해 이용될 수 있는 하나 이상의 파라미터들 등, 뿐만 아니라 그것의 다양한 조합들과 같이).
상기 제 i 핑거가 탐색해야 하는 노드들의 범위를 식별하는 탐색 범위는 임의의 적절한 방식으로 특정될 수 있다. 상기 탐색 범위를 설명하는데 명료함을 위해, 이용될 표기법[m,n)을 m에서 n까지의 범위를 표기하기 위해 이용되고, 여기서 m은 포함하지만 n은 배제한다.
일 실시예에서, 상기 제 i 핑거를 위해, 상기 탐색 범위는 [제 i 핑거, 제 i+1 핑거)일 것이다. 우리의 예에서, 노드(0)는 탐색 메시지들을 노드(2), 노드(5), 노드(9), 노드(16), 및 노드(32)에 전송할 것이고, 상기 탐색 메시지들은 각각 [2, 5), [5, 9), [9, 16), [16, 32), 및 [32, 0)의 탐색 범위들을 포함할 것이다.
또 다른 실시예에서, 상기 제 i 핑거를 위해, 상기 탐색 범위는 [제 i 핑거, 제 i+1 핑거)로부터 [제 i 핑거, 2i)까지로 추가 감소될 수 있다. 우리의 예에서, 노드(5)의 제 3 핑거를 위해, 상기 탐색 범위는 [5, 9) 대신에 [5, 8)일 것이고, 이는 상기 제 (i+1) 핑거가 2i보다 크거나 동일한 제 1 노드이기 때문이다(즉, 제 2i 및 상기 제 i+1 핑거 사이에 활성 노드들이 없다). 이 실시예는 감소된 범위를 제공하지만, 상기 감소된 범위는 [2i, 제 i+1 핑거]의 범위에 있는 새로운 노드가 노드(0)가 그것의 탐색 표를 업데이트하기 전에 상기 네트워크예를 들면,할 수 있는 드문 경우를 설명하지 않을 것이다. 이러한 잠재적인 문제는 노드(0)의 제 3 핑거를 고려함으로써 이해될 수 있으며, 이것은 노드(0)가 그것의 탐색 표를 업데이트하기 전에 노드(8)가 코드 네트워크(100)예를 들면,하는 이벤트를 나타낸다.
이들 탐색 범위 실시예들의 설명들로부터, 실시예들 모두가 실제로 작동하지만, 상기 [제 i 핑거, 제 i+1 핑거) 탐색 범위에 기초한 실시예는 상기 [제 i 핑거, 2i) 탐색 범위에 기초한 실시예보다 더 강력하다는 것이 명백하다.
상술된 바와 같이, 노드(0)는 서비스 탐색 요청 메시지들을 각각 노드들(2, 5, 9, 16, 및 32)에 전송함으로써 코드 네트워크(100) 내에 서비스(A)의 위치를 찾기 위한 탐색을 개시한다. 노드들(2, 5, 9, 16, 및 32)에 의해 각각 수신된 상기 서비스 탐색 요청 메시지들은 상기 서비스 위치 탐색을 계속하기 위해 처리된다.
노드(0)로부터 상기 서비스 탐색 요청 메시지를 수신할 때, 상기 노드들(2, 5, 9, 16, 및 32)의 각각은 먼저 상기 요청된 서비스가 국소적으로 지원되는지의 여부를 결정한다. 노드(0)로부터 상기 서비스 탐색 요청 메시지를 수신하는 상기 노드들(2, 5, 9, 16, 및 32)의 임의의 것이 상기 서비스가 국소적으로 지원됨을 결정한다면, 상기 노드는 그것이 상기 서비스를 지원한다는 것을 나타내는 서비스 탐색 응답 메시지로 노드(0)에 응답한다. 상기 서비스가 국소적으로 지원되지 않음을 결정하는 노드(0)로부터의 상기 서비스 탐색 요청 메시지를 수신하는 상기 노드들(2, 5, 9, 16, 및 32)의 각각에 대해, 상기 노드는 노드(0)에 의해 요청된 상기 서비스의 위치를 찾기 위한 하나 이상의 다른 노드들로의 하나 이상의 탐색 메시지들을 개시하는지의 여부를 결정하기 위해 처리를 개시한다. 서비스 탐색 요청 메시지를 수신한 노드(서비스가 국소적으로 지원되지 않는)는 상기 수신된 서비스 탐색 요청 메시지에서 특정된 탐색 범위 내에 속하는 그것의 국소적 탐색 표에서의 핑거 또는 핑거들(만약에 있다면)로 서비스 탐색 요청 메시지를 개시할 것이다.
이 예에서, 노드(0)로부터 서비스 탐색 요청 메시지를 수신하는 상기 노드들(2, 5, 9, 16, 및 32) 중 어떤 것도 서비스(A)를 지원하지 않기 때문에, 상기 노드들(2, 5, 9, 16, 및 32)의 각각은 노드(0)에 의해 요청된 서비스(A)의 위치를 찾기 위한 하나 이상의 다른 노드들에 대한 하나 이상의 탐색 메시지들을 개시하는지의 여부를 결정한다.
노드(0)로부터 서비스 탐색 요청 메시지를 수신하는 노드에서 실행된 처리는 노드(0)로부터 상기 서비스 탐색 요청 메시지를 수신하는 상기 노드들 중 하나(즉, 노드들(2, 5, 9, 16, 및 32) 중 하나)에 의해 실행된 처리를 고려함으로써 더 잘 이해될 수 있다.
이 예에서, 노드(0)로부터 상기 서비스 탐색 요청 메시지를 수신할 때 노드(16)에서 실행된 처리를 고려하자. 노드(16)는 [16, 32)의 범위를 갖고 노드(0)로부터 탐색 요청을 수신한다. 상기 표시된 바와 같이, 노드(16)는 먼저 그것이 요청된 서비스를 지원하는지의 여부를 결정한다. 이 예에서, 노드(16)는 서비스(A)를 지원하지 않는다. 노드(16)는 그 후 코드 네트워크(100)의 또 다른 노드(들)로 서비스 탐색 요청 메시지(들)를 개시할지 여부를 결정한다. 노드(16)는 노드(0)로부터 수신된 상기 서비스 탐색 요청 메시지에 포함된 탐색 범위[16, 32)를 이용하고 그것의 국소적 탐색 표를 이용하여 코드 네트워크(100)의 또 다른 노드(들)로 서비스 탐색 요청 메시지(들)를 개시할지 여부를 결정한다. 상기 노드(16)의 탐색 표는 다음과 같이, 표 2에 표시된다.
Figure pct00003
이 예에서, 노드(0)로부터 수신된 상기 서비스 탐색 요청 메시지에 포함된 [16, 32)의 탐색 범위 및 상기 특정된 탐색 표에 기초하여, 노드(16)는 노드들(17, 18, 20, 24)에 대한 서비스 탐색 요청 메시지들을 생성할 것이다. 노드(0)에 의해 개시된 것과 같이, 노드(16)에 의해 개시된 상기 서비스 탐색 요청 메시지들은 (1) 위치 찾기될 서비스의 표시; 및 (2) 서비스 범위, 즉 제 i 핑거가 탐색해야 하는 노드들의 범위를 포함한다. 이 예에서, 노드들(17, 18, 20, 24)에 대해 개시된 상기 서비스 탐색 요청 메시지들 각각은 서비스(A)를 특정하고, 또한 각각 탐색 범위들([17, 18), [18, 20), [20, 24), [23, 32))을 포함한다. 노드(16)는 노드(32)(제 5 핑거) 및 노드(48)(제 6 핑거)에 대한 서비스 탐색 요청 메시지들을 개시하지 않으며, 이는 이들 노드들이 노드(0)로부터 수신된 상기 서비스 탐색 요청 메시지에서 특정된 탐색 범위 외부에 있기 때문이다.
도 2는 도 1의 대표적인 코드 네트워크(100)의 노드(0)에 의해 개시된 서비스 위치 탐색에 응답하여 도 1의 대표적인 코드 네트워크(100) 내에서 개시된 서비스 탐색 요청 메시지들을 묘사한다.
도 2에 묘사된 바와 같이, 서비스 탐색 요청 메시지들은 다음과 같이 코드 네트워크(100) 내에서 전송된다: 노드(0)는 노드들(2, 5, 9, 16, 32)로 메시지들을 전송하고; 노드(2)는 노드(3)로 메시지를 전송하고; 노드(5)는 노드들(6, 7)로 메시지들을 전송하고; 노드(9)는 노드들(12, 13)로 메시지들을 전송하고; 노드(16)는 노드들(17, 18, 20, 24)로 메시지들을 전송하고; 노드(18)는 노드(19)로 메시지를 전송하고; 노드(20)는 노드들(21, 22)로 메시지들을 전송하고; 노드(22)는 노드(23)로 메시지를 전송하고; 노드(24)는 노드들(26, 29)로 메시지들을 전송하고; 노드(29)는 노드(30)로 메시지를 전송하고; 노드(32)는 노드들(34, 37, 41, 49)로 메시지들을 전송하고; 노드(32)는 노드(33)로 메시지를 전송하고; 노드(40)는 노드들(42, 45)로 메시지들을 전송하고; 노드(49)는 노드들(51,53, 56)로 메시지들을 전송하고; 노드(53)는 노드(54)로 메시지를 전송하고; 노드(56)는 노드들(57, 58, 62)로 메시지들을 전송한다.
이러한 방식으로, 노드(0)에 의해 개시되는 서비스(A)에 대한 서비스 위치 찾기 요청은 코드 네트워크(100)의 각각의 노드가 그것이 상기 요청된 서비스를 지원하는지의 여부에 대한 표시를 갖고 응답할 수 있도록(및, 따라서 노드(0)는 서비스(A)를 지원하는 임의의 노드들의 아이덴티티를 알게 될 수 있도록) 코드 네트워크(100) 전역에 걸쳐 전파된다.
상기 설명된 바와 같이, 서비스의 위치를 찾기 위해 상기 코드 네트워크 내에 개시된 각각의 서비스 탐색 요청 메시지는 대응하는 서비스 탐색 응답 메시지의 개시를 초래한다. 상기 서비스 탐색 응답 메시지들은 상기 서비스 위치 탐색이 비롯되는 상기 노드를 향해 전파한다. 이러한 방식으로, 상기 서비스 위치 탐색이 비롯되는 상기 노드는 상기 요청된 서비스를 지원하는 상기 코드 네트워크의 노드(들)를 알게 된다.
서비스 탐색 응답 메시지들의 전파에 대하여, 긍정의 응답 메시지들 및 부정의 응답 메시지들의 전파가 상이하게 처리된다.
업스트림 노드로부터 서비스 탐색 요청 메시지를 수신하는 주어진 다운스트림 노드에서, 긍정의 응답 메시지가 상기 주어진 다운스트림으로부터 상기 업스트림 노드를 향해 즉시 전파된다. 예를 들면, 이것은 그것이 상기 요청된 서비스를 국소적으로 지원하는 상기 주어진 다운스트림 노드에 의한 결정에 응답할 수 있거나, 또는 상기 다운스트림 노드의 더욱 아래쪽의 노드(즉, 상기 주어진 다운 스트림 노드가 서비스 탐색 요청 메시지를 개시하는 다운스트림 노드)로부터 긍정의 응답 메시지를 수신하는 상기 주어진 다운스트림 노드에 응답할 수 있다.
업스트림 노드로부터 서비스 탐색 요청 메시지를 수신하는 주어진 다운스트림 노드에서, 부정의 응답 메시지가 상기 주어진 다운스트림 노드가 서비스 탐색 요청 메시지(들)를 개시하는 각각의 다운스트림 노드(들)로부터 응답 메시지들을 대기한 후에만 상기 주어진 다운스트림으로부터 상기 업스트림 노드를 향해 전파된다. 이러한 방식으로, 상기 주어진 다운스트림 노드는 그것의 다운스트림 노드(들)로부터의 응답을 상기 업스트림 노드가 전송되는 단일 응답 메시지에 통합할 수 있다.
서비스 탐색 응답 메시지들의 전파는 도 1 및 도 2의 대표적인 코드 네트워크를 고려함으로써 더 양호하게 이해될 수 있다.
이 예에서, 노드(19)가 노드(18)로부터 서비스 탐색 요청 메시지를 수신할 때, 노드(19)는 그것이 서비스(A)를 지원한다는 것을 나타내는 노드(18)에 즉시 응답하고, 노드(18)는 차례로 상기 응답을 상기 노드(0)로 다시 전달할 노드(16)에 이러한 응답을 즉시 전달할 것이다.
이 예에서, 노드(9)가 노드(0)로부터 서비스 탐색 요청 메시지를 수신할 때, 노드(9)는 노드들(12, 13)에 각각 두 개의 서비스 탐색 요청 메시지들을 전송하는데, 이는 노드(9) 자체가 서비스(A)를 지원하지 않기 때문이다. 여기에서, 노드(9)가 노드(13)로부터 부정 응답을 수신하기 전에 노드(12)로부터 부정의 응답을 수신한다고 가정할 때, 노드(9)는 노드(13)로부터 응답을 기다리는 동안 노드(12)로부터 부정의 응답을 저장할 것이다. 그 후, 노드(13)로부터 상기 부정의 응답을 수신하자마자, 노드(9)는 노드들(12, 13)로부터의 상기 두 개의 부정의 응답들을 단일의 부정의 응답으로 통합할 것이고 상기 단일 부정 응답을 노드(0)에 전송할 것이다.
여기에서 묘사되고 설명된 상기 서비스 위치 찾기 능력에서, 메시지들에 대한 참조들은(및, 보다 상세하게는, 응답 메시지들) 일반적으로 애플리케이션 레벨 메시지들에 대한 참조들이다. 이러한 구별에 대한 필요성은 노드(N)가 노드(J)로 메시지를 전송할 때, 노드(J)는 보통 그것이 메시지를 수신하였음을 노드(N)에 나타내기 위해 노드(N)에 수식확인으로 응답할 것임을 고려함으로써 이해될 것이다. 노드(N)가 얼마 후 상기 수신확인을 수신하지 않았다면, 노드(N)는 상기 메시지를 재전송할 것이다(예로서, 최대 특정 수의 시도들까지). 여기에 묘사되고 설명된 상기 서비스 위치 찾기 능력에서, 이러한 수신확인 프로세스는 백그라운드 프로세스인 것으로 가정되고, 상기 서비스 위치 찾기 능력의 설명을 간략화히기 위해 여기에서는 무시된다. 달리 말하면, 여기에 참조된 상기 서비스 탐색 응답 메시지들은 상기 코드 네트워크 내에서 구동할 수 있거나 구동할 없는 상기 백그라운드 프로세스의 수신확인들이 아니다.
상기 서비스 위치 찾기 능력의 실시예들에 대한 양호한 이해를 제공하기 위해, 상기 서비스 위치 찾기 능력을 제공할 때 발신 노드 및 중간 노드들에 의해 실행된 상기 처리는 도 3 내지 도 5에 관하여 묘사되고 설명된다.
도 3은 발신 노드에서 서비스 탐색 요청 메시지를 생성하기 위한 방법의 일 실시예를 묘사한다.
단계(302)에서, 방법(300)이 시작된다.
단계(304)에서, 상기 발신 노드는 서비스 위치 찾기 요청을 검출한다. 상기 서비스 위치 찾기 요청은 P2P 네트워크 내에서 상기 서비스의 위치(들)를 식별하기 위해(예로서, 상기 서비스를 지원하는 상기 P2P 네트워크의 하나 이상의 노드들을 식별하기 위해), 상기 P2P 네트워크 내에서 서비스를 탐색하기 위한 요청이다.
상기 서비스 위치 찾기 요청은 상기 발신 노드에서 요구되거나 원하는 서비스를 식별한다. 상기 서비스 위치 찾기 요청은 임의의 적절한 방식으로 검출될 수 있으며, 이것은 상기 서비스 위치 찾기 요청이 상기 발신 노드에서 개시되는 방식에 의존할 수 있다. 상기 서비스 위치 찾기 요청은 수동으로(예로서, 상기 발신 노드의 이용자에 의해) 또는 자동으로(예로서, 트리거 상태를 검출하는 것에 응답하여 상기 발신 노드에 의해) 개시될 수 있다.
단계(306)에서, 상기 발신 노드는 상기 서비스를 위한 서비스 위치 탐색을 개시한다. 상기 서비스 위치 탐색은 상기 P2P 네트워크 내에서 상기 서비스의 위치(들)를 식별하기 위해 상기 P2P 네트워크 내에서 서비스를 탐색하기 위한 프로세스이다.
상기 서비스 위치 탐색은 상기 발신 노드에서 유지된 탐색 표를 이용하여 개시될 수 있다. 상기 서비스 위치 탐색은 상기 발신 노드 상에서 유지된 상기 탐색 표의 하나 이상의 노드들로 서비스 탐색 요청을 개시함으로써 개시될 수 있다. 상기 발신 노드는 상기 탐색 표의 상기 노드들 중 하나 이상을 향해 하나 이상의 서비스 탐색 요청 메시지들을 전파함으로써 상기 서비스 탐색 요청을 개시할 수 있다.
상기 발신 노드에 의해 생성되고 전파된 서비스 탐색 요청 메시지는 상기 기원 노드가 상기 요청된 서비스를 지원하는 상기 P2P 네트워크의 적어도 하나의 노드의 위치를 찾을 수 있게 하는데 이용하도록 적응된다.
상기 서비스 탐색 요청 메시지는 상기 서비스 탐색 요청 메시지에 응답하기 위해 상기 서비스 탐색 요청 메시지를 수신하는 노드들에 의한 이용을 위해 상기 발신 노드의 노드 ID를 포함한다.
상기 서비스 탐색 요청 메시지는 동일한 서비스 위치 탐색의 요청 메시지들 및 응답 메시지들을 매칭시키기 위한 상기 서비스 탐색 요청 메시지를 수신하는 노드 및 상기 발신 노드에 의한 이용을 위해, 상기 서비스 탐색 요청 메시지의 메시지 ID를 포함한다.
상기 서비스 탐색 요청 메시지는 상기 요청된 서비스를 식별하는데 이용하기 위해 적응된 서비스 식별 정보를 포함한다. 예를 들면, 상기 서비스 식별 정보는 상기 서비스를 식별하는 서비스 ID, 서비스 설명 정보(예로서, 상기 서비스를 식별하는데 이용하기 위해 적응되고 및/또는 상기 서비스를 설명하는 하나 이상의 파라미터들, 속성들, 및/또는 기준들) 등 중 하나 이상을 포함할 수 있다.
상기 서비스 탐색 요청 메시지는 상기 서비스 탐색 요청 메시지가 개시되는 노드에 의한 이용을 위해 상기 발신 노드에 의해 특정된 탐색 범위를 포함한다. 상기 탐색 범위는 [K1, K2)로서 표시되고, 여기서 K2는 상기 탐색 범위의 가장 큰 값이고 K1은 상기 탐색 범위의 가장 작은 값이다. 상기 서비스 탐색 요청 메시지의 탐색 범위는 상기 발신 노드에 의해 개시된 서비스 위치 탐색의 유형(예로서, 전체 네트워크 탐색, 단계적 네트워크 탐색, 점진적 네트워크 탐색 등)에 의존할 수 있다.
상기 서비스 탐색 요청 메시지 내에 포함된 정보는 상이할 수 있음이 이해되 것이다(예로서, 보다 적은 정보가 포함될 수 있고, 보다 많은 정보가 포함될 수 있고, 상이한 정보가 포함될 수 있는 등).
상기 발신 노드가 상기 서비스 위치 탐색을 개시하는 방식(즉, 상기 발신 노드에 의해 개시된 서비스 탐색 요청 메시지들의 수, 및 상기 서비스 탐색 요청 메시지들의 타이밍)은 실행되는 서비스 위치 탐색의 유형(예로서, 전체 네트워크 탐색, 단계적 네트워크 탐색, 점진적 네트워크 탐색 등)에 의존한다.
전체 네트워크 탐색이 상기 발신 노드에 의해 개시되는 일 실시예에서, 서비스 탐색 요청 메시지들은 상기 발신 노드로부터 상기 핑거 표에서의 핑거들의 각각을 향해 동시에 전파된다.
단계적 네트워크 탐색이 상기 발신 노드에 의해 개시되는 일 실시예에서, 서비스 탐색 요청 메시지들은 상기 발신 노드로부터 상기 핑거 표에서의 하나 이상의 핑거들을 향해 연속하여 전파된다. 단계적 네트워크 탐색의 이용은 여기에 묘사되고 설명된 다른 도면들과 함께 도 6 및 도 7에 대한 참조에 의해 보다 양호하게 이해될 수 있다.
점진적 네트워크 탐색이 상기 발신 노드에 의해 개시되는, 일 실시예에서, 서비스 탐색 요청 메시지들은 상기 발신 노드로부터 초기 탐색으로서 상기 핑거 표에서의 핑거들의 서브세트를 향해 동시에, 그리고 하나 이상의 후속 탐색들로서 상기 핑거 표에서의 하나 이상의 후속 핑거들을 향해 연속하여 전파된다. 점진적 네트워크 탐색의 이용은 여기에 묘사되고 설명된 다른 도면들과 함께 도 8 및 도 9에 대한 참조에 의해 보다 양호하게 이해될 수 있다.
단계(308)에서, 방법(300)이 종료된다.
비록 종료로서 묘사되고 설명되었지만, 상기 발신 노드에 의한 상기 서비스 위치 탐색의 개시에 이어, 상기 발신 노드는 그 후 상기 발신 노드에 의해 개시된 상기 하나 이상의 서비스 탐색 요청 메시지들에 응답하여 상기 발신 노드에 의해 수신된 하나 이상의 서비스 탐색 응답 메시지들을 처리하기 위한 처리를 개시함으로써 상기 서비스 위치 탐색을 지지하여 계속해서 처리할 수 있다.
여기에서는 주로 연속적으로 실행되는 것으로서 묘사되고 설명되었지만, 방법(300)의 단계들의 적어도 일부는 동시에 또는 도 3에 대하여 묘사되고 설명된 것과 상이한 순서로 실행될 수 있다. 주로 중간 노드에서 서비스 탐색 요청 메시지 생성을 실행하기 위한 프로세스 로직의 특정 구현에 대하여 여기에 묘사되고 설명되었지만, 중간 노드에서의 서비스 탐색 요청 메시지 생성을 실행하기 위한 프로세스 로직은 여기에 묘사되고 설명된 상기 서비스 위치 찾기 능력을 여전히 지원하면서 다양한 다른 방식들로 구현될 수 있다는 것이 이해될 것이다.
도 4는 중간 노드에서 서비스 탐색 요청 메시지를 처리하기 위한 방법의 일 실시예를 묘사한다.
단계(402)에서, 방법(400)이 시작된다.
단계(404)에서, 상기 중간 노드(노드(J)로서 표시됨)는 업스트림 노드(노드(N)로서 표시됨)로부터 서비스 탐색 요청 메시지를 수신하고, 이것은 서비스 위치 탐색의 개시자 또는 업스트림 중간 노드일 수 있다.
상기 서비스 탐색 요청 메시지는 상기 요청된 서비스를 탐색하기에 적합한 임의의 정보를 포함한다.
상기 서비스 탐색 요청 메시지는 상기 서비스 탐색 요청 메시지의 발신자(즉, 업스트림 노드(N))의 노드 ID를 포함한다.
상기 서비스 탐색 요청 메시지는 상기 서비스 탐색 요청 메시지의 메시지 ID를 포함한다.
상기 서비스 탐색 요청 메시지는 상기 요청된 서비스를 식별하는데 이용하기 위해 적응된 서비스 식별 정보를 포함한다. 예를 들면, 상기 서비스 식별 정보는 상기 서비스를 식별하는 서비스 ID, 서비스 디스크립션 정보(예로서, 상기 서비스를 설명하고 및/또는 상기 서비스를 식별하는데 이용하기 위해 적응되는 하나 이상의 파라미터들, 속성들, 및/또는 기준들) 등 중 하나 이상을 포함할 수 있다.
상기 서비스 탐색 요청 메시지는 상기 중간 노드(J)를 위한 업스트림 노드(N)에 의해 특정된 탐색 범위를 포함한다. 상기 탐색 범위는 [K1, K2)로서 표시되고, 여기서 K2는 상기 탐색 범위의 가장 큰 값이고 K1은 상기 탐색 범위의 가장 작은 값이다.
상이한 정보가 상기 서비스 탐색 요청 메시지 내에 포함될 수 있다는 것이 이해될 것이다.
단계(406)에서, 상기 중간 노드(J)가 상기 요청된 서비스를 지원하는지의 여부에 대한 결정이 이루어진다. 이러한 결정은 임의의 적절한 방식으로(예로서, 상기 서비스 식별 정보의 적어도 일부를 중간 노드(J)에서 이용가능한 정보에 비교함으로써) 실행될 수 있다.
중간 노드(J)가 상기 요청된 서비스를 지원한다면, 방법(400)이 단계(408)로 진행한다(이 점에서, 상기 중간 노드(J)는 업스트림 노드(N)에 대한 긍정의 서비스 탐색 응답 메시지를 개시한다).
중간 노드(J)가 상기 요청된 서비스를 지원하지 않는다면, 방법(400)은 단계(410)로 진행한다(이 점에서, 상기 중간 노드(J)는 상기 서비스 탐색 요청 메시지의 탐색 범위 내에서 상기 네트워크의 다른 노드들로 상기 서비스 위치 탐색을 확대할지 여부를 결정하기 위한 부가적인 처리를 개시한다).
단계(408)에서, 상기 중간 노드(J)는 상기 업스트림 노드(N)에 대한 긍정의 서비스 탐색 응답 메시지를 전송한다. 상기 서비스 탐색 응답 메시지는 상기 요청된 서비스가 상기 중간 노드(J)에 의해 지원되고 상기 발신 노드가 중간 노드(J)로부터 상기 서비스를 요청할 수 있게 함을 상기 발신 노드에 알리는데 이용하기에 적합한 임의의 정보를 포함할 수 있다. 예를 들면, 상기 서비스 탐색 응답 메시지는 상기 중간 노드(J)의 식별자, 상기 메시지가 업스트림 노드(N)로부터의 서비스 탐색 요청 메시지에 대한 응답이라는 표시(예로서, 상기 서비스 탐색 요청 메시지의 메시지 ID), 중간 노드(J)가 상기 요청된 서비스를 지원한다는 표시, 중간 노드(J)로부터 서비스를 요청하는데 상기 발신 노드에 의해 이용하기 위한 중간 노드(J)를 위한 네트워크 접촉 정보(예로서, IP 어드레스, 포트 번호 등) 등을 포함할 수 있다. 상기 서비스 탐색 응답 메시지는 상이한 정보를 포함할 수 있다는 것이 이해될 것이다. 단계(408)로부터, 방법(400)은 단계(434)로 진행하고, 여기서 방법(400)은 종료된다.
단계(410)에서, 상기 중간 노드(J)는 그것의 탐색 표의 제 1 핑거를 식별한다.
도 4에 묘사된 바와 같이, 단계(410)와 함께 또는 임의의 다른 적절한 시간에, 중간 노드(J)는 또한 상기 서비스 위치 탐색을 상기 네트워크의 다른 노드들로 확대할지 여부를 결정하기 위한 부가적인 처리를 실행하는데 이용하기 위한 초기화 함수들을 실행할 수 있다. 예를 들면, 상기 중간 노드(j)는 1과 동일한 핑거 카운터(i)를 초기화할 수 있으며, 제 1 핑거 변수(F1)를 중간 노드(j)의 제 1 핑거와 동일하게 설정하고(즉, F1 = 제 1 핑거), 제 2 핑거 변수(F2)를 NULL과 동일하게 설정하고, 탐색 리스트를 NULL과 동일하게 설정한다(여기서, 상기 탐색 리스트는 중간 노드(J)가 업스트림 노드(N)로부터 수신된 상기 서비스 탐색 요청 메시지를 대신하여 서비스 탐색 요청 메시지를 전송하는 노드들의 리스트이고, 이것은 중간 노드(J)에 의해 개시된 임의의 서비스 탐색 요청 메시지들에 대한 응답들을 관리하기 위해 이용될 수 있다). 보다 적고, 보다 많고, 및/또는 상이한 변수들, 리스트들, 및/또는 유사한 파라미터들이 이용될 수 있고 및/또는 임의의 다른 적절한 방식으로 초기화될 수 있다는 것이 이해될 것이다.
단계(412)에서, 상기 탐색 범위의 가장 큰 값(K2)이 상기 중간 노드(J)의 제 1 핑거(F1)보다 큰지 여부에 대한 결정이 이루어진다. 상기 중간 노드(J)는 그것의 제 1 핑거가 상기 탐색 범위의 밖에 있는지의 여부를 검사한다. K2가 F1보다 크지 않다면, 방법(400)은 단계(414)로 진행한다. K2가 F1보다 크다면, 방법(400)은 단계(416)로 진행한다.
단계(414)에서, 상기 중간 노드(J)는 부정의 서비스 탐색 응답 메시지를 업스트림 노드(N)로 전송한다. 이 경우에, 어떤 서비스 탐색 요청 메시지도 중간 노드(J)에 의해 생성되지 않는다. 상기 서비스 탐색 응답 메시지는 서비스(A)를 지원하는 [F1, F2)의 범위에 있는 노드가 없다는 것을 업스트림 노드(N)에 알리는데 이용하기에 적합한 임의의 정보를 포함할 수 있다. 단계(412)로부터, 방법(400)은 단계(434)로 진행하고, 여기서 방법(400)이 종료된다.
단계(416)에서, 상기 중간 노드(J)는 그것의 탐색 표의 제 (i+1) 핑거를 식별한다. 방법(400)을 통한 제 1 패스에서, 이것은 중간 노드(J)의 탐색 표의 제 2 핑거이다.
단계(418)에서, 상기 탐색 범위의 가장 큰 값(K2)이 상기 중간 노드(J)의 제 (i+1) 핑거(F2)보다 큰지 여부에 대한 결정이 이루어진다. 상기 중간 노드(J)는 그것의 제 (i+1) 핑거가 상기 탐색 범위의 밖에 있는지의 여부를 검사한다.
K2가 F2보다 크다면, 방법(400)은 단계(428)로 진행한다(즉, 상기 메시지의 탐색 범위는 (F1, K2)로 감소되고, 중간 노드(J)에 의해 생성되는 결과적인 서비스 탐색 요청 메시지는 업스트림 노드(N)로부터 수신된 상기 서비스 탐색 요청 메시지에 응답하여 중간 노드(J)에 의해 생성될 마지막이다).
K2가 F2보다 크지 않다면, 방법(400)은 단계(420)로 진행한다(즉, 중간 노드(J)에 의해 생성되는 결과적인 서비스 탐색 요청 메시지는 업스트림 노드(N)로부터 수신된 서비스 탐색 요청 메시지에 응답하여 중간 노드(J)에 의해 생성되는 마지막 서비스 탐색 요청 메시지이다).
단계(420)에서, 중간 노드(J)는 (F1, F2)의 탐색 범위를 가진 노드(F1)로 서비스 탐색 요청 메시지를 전송한다. 이 점에서, F1 및 F2 모두는 K2보다 작으며, 따라서 탐색 범위([F1, F2))는 상기 탐색 범위([K1, K2)) 내에 있다. 상기 서비스 탐색 요청 메시지는 여기에 설명된 바와 같이, 통상적으로 서비스 탐색 요청 메시지에 포함된 정보를 포함한다.
단계(422)에서, 중간 노드(J)는 중간 노드(J)에 의해 개시된 임의의 서비스 탐색 요청 메시지들에 대한 응답들을 관리하기 위해 중간 노드(J)에 의해 이용하기 위한, 상기 탐색 리스트에 노드(F1)를 부가한다.
단계(424)에서, 중간 노드(J)는 상기 제 1 핑거 변수(F1)를 상기 제 2 핑거 변수(F2)에 동일하도록 업데이트하고 상기 핑거 카운터를 증분시킨다(i = i+1)
단계(426)에서, 핑거 카운터(i)가 M보다 크거나 동일하지 여부에 대한 결정이 이루어진다(여기서, 2M은 키 공간의 크기이고 M은 중간 노드(J) 상의 상기 핑거 표의 크기이다).
상기 핑거 카운터(i)는 M보다 크거나 동일하지 않으며, 방법(400)은 단계(416)로 리턴한다.
상기 핑거 카운터(i)가 M보다 크거나 동일하다면, 방법(400)은 단계(428)로 진행한다(즉, F1은 마지막 핑거이고, 중간 노드(J)에 의해 생성되는 결과적인 서비스 탐색 요청 메시지는 업스트림 노드(N)로부터 수신된 상기 서비스 탐색 요청 메시지에 응답하여 중간 노드(J)에 의해 생성되는 마지막이다).
단계(428)에서, 중간 노드(J)는 [F1, F2)의 탐색 범위를 갖는 노드(F1)에 서비스 탐색 요청 메시지를 전송한다. 상기 서비스 탐색 요청 메시지는 여기에 설명된 바와 같이, 서비스 탐색 요청 메시지 내에 통상적으로 포함된 정보를 포함한다.
단계(430)에서, 중간 노드(J)는 중간 노드(J)에 의해 개시된 임의의 서비스 탐색 요청 메시지들에 대한 응답들을 관리하기 위해 중간 노드(J)에 의한 이용을 위해, 상기 탐색 리스트에 노드(F1)를 부가한다.
단계(432)에서, 중간 노드(J)는 시간을 시작하고, 중간 노드(J)에 의해 개시된 하나 이상의 서비스 탐색 요청 메시지들에 응답하여 중간 노드(J)에 의해 수신될 하나 이상의 서비스 탐색 응답 메시지들을 대기한다.
단계(434)에서, 방법(400)이 종료된다.
방법(400)의 실행이 중간 노드(J)에 의해 하나 이상의 서비스 탐색 요청 메시지들의 개시를 초래하는, 종료로서 묘사되고 설명되었지만, 중간 노드(J)는 중간 노드(J)에 의해 개시된 하나 이상의 서비스 탐색 요청 메시지들에 응답하여 중간 노드(J)에 의해 수신된 하나 이상의 서비스 탐색 응답 메시지들을 처리하기 위한 처리를 개시함으로써(예로서, 도 5에 대하여 묘사되고 설명된 방법(500)을 실행함으로써) 상기 발신 노드에 의해 개시된 상기 서비스 위치 찾기 요청을 지지하여 계속해서 처리를 실행할 수 있다.
주로 연속하여 실행되는 것으로서 여기에 묘사되고 설명되었지만, 방법(400)의 단계들의 적어도 일부는 동시에 또는 도 3에 대하여 묘사되고 설명된 것과 상이한 순서로 실행될 수 있다. 중간 노드에서 서비스 탐색 요청 메시지 생성을 실행하기 위한 프로세스 로직의 특정 구현에 대하여 여기에 주로 묘사되고 설명되었지만, 중간 노드에서 서비스 탐색 요청 메시지 생성을 실행하기 위한 프로세스 로직은 여기에 묘사되고 설명된 상기 서비스 위치 찾기 능력을 여전히 지원하면서 다양한 다른 방식들로 구현될 수 있다는 것이 이해될 것이다.
도 5는 중간 노드(노드(J)로서 표시되는)에서 서비스 탐색 응답 메시지들을 처리하기 위한 방법의 일 실시예를 묘사한다. 상기 중간 노드(J)는 하나 이상의 부가적인 서비스 탐색 요청 메시지들을 하나 이상의 다운스트림 노드들로 전송하도록 중간 노드(J)를 트리거링한 서비스 탐색 요청 메시지를 중간 노드(J)가 수신한 업스트림 노드로 서비스 탐색 응답 메시지를 제공하기 위해 서비스 탐색 응답 메시지들을 처리하기 위한 방법을 실행한다.
단계(502)에서, 방법(500)이 시작된다.
단계(504)에서, 중간 노드(J)는 하나 이상의 서비스 탐색 응답 메시지들을 대기한다. 중간 노드(J)에 의해 개시된 하나 이상의 서비스 탐색 요청 메시지들에 응답하여 상기 중간 노드(J)에 의해(예로서, 도 4에 대하여 묘사되고 설명되는 방법(400)을 실행함으로써) 상기 서비스 탐색 응답 메시지(들)가 예상된다.
단계(506)에서, 중간 노드(J)는 서비스 탐색 응답 메시지가 다운스트림 노드로부터 수신되었는지의 여부를 결정한다.
서비스 탐색 응답 메시지가 다운스트림 노드로부터 수신된다면, 방법(500)은 단계(510)로 진행한다(이 점에서, 서비스 탐색 응답 메시지의 처리가 시작된다).
서비스 탐색 응답 메시지가 다운스트림으로부터 수신되지 않는다면, 방법(500)은 단계(508)로 진행한다.
단계(508)에서, 타이머가 만료되었는지의 여부에 대한 결정이 이루어진다. 상기 타이머는 임의의 적절한 방식으로 중간 노드(J)에 의해 설정될 수 있다(예로서, 방법(500)의 실행시 초기화 단계처럼, 방법(400)의 실행의 일부처럼, 또는 임의의 다른 적절한 방식으로). 상기 타이머는 임의의 적절한 시간 길이로 설정될 수 있다.
상기 타이머가 만료되지 않았다면, 방법(500)은 단계(504)로 리턴하고 단계(504)에서 단계(506)(즉, 상기 중간 노드(J)가 하나 이상의 다운스트림 노드들로부터 하나 이상의 서비스 탐색 응답 메시지들을 대기하는 대기 상태로)로 진행한다.
상기 타이머가 만료되었다면, 방법(500)은 단계(522)로 진행한다(이 점에서, 중간 노드(J)는 상기 업스트림 노드에 대한 부정의 서비스 탐색 응답 메시지를 개시하는데, 이는 중간 노드(J)가 할당된 시간 길이 내에서 다운스트림 노드들로부터 아직 처리되지 않은 모든 서비스 탐색 응답 메시지들을 수신하지 않았기 때문이다).
단계들(504, 506, 508)에 대하여, 이러한 기능은 다른 방식들로 구현될 수 있다는 것이 이해될 것이다. 예를 들면, 서비스 탐색 응답 메시지가 수신되었는지의 여부를 결정하고(단계(506)) 타이머가 만료되었는지의 여부를 결정하는(단계(508)) 명시적인 단계들이 방법(500) 내에서 실행되기보다는, 훨씬 적은 것이 특정 시퀀스로 방법(500) 내에서 실행되고, 방법(500)은 서비스 탐색 응답 메시지가 수신됨을 검출할 때까지(이 점에서 방법(500)은 단계(510)로 진행한다) 또는 상기 타이머가 만료됨을 검출할 때까지(이 점에서 방법(500)은 단계(522)로 진행한다) 여전히 대기 상태(즉 단계(504))에 남아있을 수 있다는 것이 이해될 것이다. 예를 들면, 상기 방법(400) 내에서 명시적인 단계로서 상기 타이머를 모니터링하기보다는, 처리가 실행되는 방법(500)에서의 포인트에 상관없이, 상기 타이머가 만료되는 상기 중간 노드(J)에 의한 검출이 방법(500)으로 하여금 단계(522)로 진행하게 할 수 있도록 백그라운드 프로세스로서 실행될 수 있다(예로서, 직접 또는 완곡하게). 이러한 기능은 다른 방식들로 구현될 수 있다는 것이 이해될 것이다.
단계(510)에서, 상기 수신된 서비스 탐색 응답 메시지가 정당한지 여부에 대한 결정이 이루어진다. 상기 수신된 서비스 탐색 응답 메시지의 정당성은 임의의 적절한 방식으로 결정될 수 있다. 예를 들면, 일 실시예에서, 상기 수신된 서비스 탐색 응답 메시지의 정당성은 상기 서비스 탐색 응답 메시지가 중간 노드(J)로부터의 서비스 탐색 요청 메시지에 응답하여 제공됨을 검증하기 위해 상기 수신된 서비스 탐색 응답 메시지 내에 포함된 요청 ID를 검사함으로써 결정된다.
상기 서비스 탐색 응답 메시지가 정당하지 않다면, 방법(500)은 단계(512)로 진행한다.
상기 서비스 탐색 응답 메시지가 정당하다면, 방법(500)은 단계(514)로 진행한다.
단계(512)에서, 중간 노드(J)는 상기 수신된 서비스 탐색 응답 메시지를 무시한다. 단계(512)로부터, 방법(500)은 단계(504)로 리턴한다(즉, 중간 노드(J)는 하나 이상의 서비스 탐색 응답 메시지들을 계속해서 대기한다).
단계(514)에서, 상기 수신된 서비스 탐색 응답 메시지가 긍정인지(즉, 상기 요청된 서비스를 지원하는 노드의 위치를 찾았다) 또는 부정인지(즉, 상기 요청된 서비스를 지원하는 노드의 위치가 찾아지지 않았다) 여부에 대한 결정이 이루어진다.
상기 서비스 탐색 응답 메시지가 긍정이면, 방법(500)은 단계(516)로 진행한다.
상기 서비스 탐색 응답 메시지가 부정이면, 방법(500)은 단계(518)로 진행한다.
단계(516)에서, 중간 노드(J)는 긍정의 서비스 탐색 응답 메시지를 상기 업스트림 노드에 전송한다.
상기 서비스 탐색 응답 메시지는 상기 업스트림 노드에 상기 요청된 서비스를 지원하는 것으로서 식별되는 상기 노드의 표시를 제공하는데 이용하기에 적합한 임의의 정보를 포함할 수 있다. 예를 들면, 상기 서비스 탐색 응답 메시지는 상기 중간 노드(J)의 식별자, 상기 메시지가 상기 업스트림 노드로부터 서비스 탐색 요청 메시지에 대한 응답이라는 표시(예로서, 상기 서비스 탐색 요청 메시지의 메시지 ID), 상기 요청된 서비스를 지원하는 노드의 표시, 상기 요청된 서비스를 지원하는 노드로부터 상기 서비스를 요청할 때 상기 발신 노드에 의해 이용하기 위한 상기 요청된 서비스를 지원하는 노드에 대한 네트워크 접촉 정보(예로서, IP 어드레스, 포트 번호 등) 등을 포함할 수 있다. 상기 서비스 탐색 응답 메시지는 상이한 정보를 포함할 수 있다는 것을 이해할 것이다. 단계(516)로부터, 방법(500)은 단계(524)로 진행하고, 여기서 방법(500)이 종료된다.
단계(518)에서, 중간 노드(J)는 탐색 리스트로부터 상기 소스 노드를 제거한다. 상기 소스 노드는 중간 노드(J)에 의해 수신된 상기 서비스 탐색 응답 메시지의 소스이다. 상기 탐색 리스트는 중간 노드(J)가 방법(400)에 대하여 설명된 바와 같이, 중간 노드(J)에 의해 개시된 임의의 서비스 탐색 요청 메시지에 대한 응답들을 관리하기 위해 중간 노드(J)에 의해 이용되는 서비스 탐색 응답 메시지를 예상하는 하나 이상의 노드들의 리스트이다.
단계(520)에서, 상기 탐색 리스트가 NULL인지 여부에 대한 결정이 이루어진다. 이것은 중간 노드(J)에 의해 수신될 것으로 예상된 상기 서비스 탐색 응답 메시지들의 모두가 사실상 수신되었는지의 여부에 대한 결정이다(연관된 서비스 탐색 응답 메시지가 중간 노드(J)로부터 상기 업스트림 노드로 전송될 수 있도록).
상기 탐색 리스트가 NULL이면(즉, 모든 예측된 서비스 탐색 응답 메시지들이 수신되었다), 방법(500)은 단계(522)로 진행한다.
상기 탐색 리스트가 NULL이 아니면(즉, 예상된 서비스 탐색 응답 메시지들 모두가 수신되지 않았다), 방법(500)은 단계(504)로 리턴하고 단계(504)로부터 단계(506)로(즉, 상기 중간 노드(J)가 하나 이상의 다운스트림 노드들로부터 하나 이상의 서비스 탐색 응답 메시지들을 여전히 대기하는 대기 상태로) 진행한다.
단계(522)에서, 중간 노드(J)는 부정의 서비스 탐색 응답 메시지를 상기 업스트림 노드에 전송한다.
상기 서비스 탐색 응답 메시지는 중간 노드(J)가 상기 요청된 서비스를 지원하지 않고, 상기 업스트림 노드 대신에 중간 노드(J)에 의해 접촉된 다운스트림 노드들 중 어떤 것도 상기 요청된 서비스를 지원하지 않는다는 표시를 상기 업스트림 노드에 제공할 때 이용하기에 적합한 임의의 정보를 포함할 수 있다. 단계(522)로부터, 방법(500)은 단계(524)로 진행하고, 여기서 방법(500)은 종료된다.
단계(524)에서, 방법(500)이 종료된다.
여기에서는 연속하여 실행되는 것으로서 주로 묘사되고 설명되지만, 방법(500)의 단계들 중 적어도 일부는 동시에, 또는 도 5에 대하여 묘사되고 설명된 것과 상이한 순서로 실행될 수 있다. 중간 노드에서 서비스 탐색 응답 메시지 처리를 실행하기 위한 프로세스 로직의 특정 구현에 대하여 여기에서 주로 묘사되고 설명되었지만, 중간 노드에서 서비스 탐색 응답 메시지 처리를 위한 프로세스 로직은 여기에 묘사되고 설명된 서비스 위치 찾기 능력을 여전히 지원하면서 다양한 다른 방식들로 구현될 수 있다는 것이 이해될 것이다.
여기에 표시된 바와 같이, 도 5는 주로 중간 노드에서 실행된 서비스 탐색 응답 메시지 처리 쪽으로 향해져 있다. 그러나, 도 5는 또한 발신 노드, 즉 상기 서비스를 위한 상기 서비스 위치 찾기 요청을 개시하는 노드에서 실행된 서비스 탐색 응답 메시지 처리를 특정하도록 적응될 수 있다. 발신 노드에 대하여, 방법(500)은 단계들(516, 522)을 제거함으로써 적응된다. 단계(516) 및 단계(522)에 대하여, 이들 단계들은 상기 발신 노드가 상기 서비스 위치 찾기 요청의 소스인 이래 발신 노드에 대해 불필요하다(즉, 상기 발신 노드는 응답을 전송할 필요성이 없다). 단계(516)의 제거에 대하여, 단계(514)로부터, 방법(500)이 단계(524)로 진행할 수 있거나(예로서, 일단 발신 노드가 상기 요청된 서비스를 지원하는 노드들 중 하나를 식별하면, 상기 발신 노드는 상기 요청된 서비스를 지원하는 임의의 다른 노드들이 존재하는지의 여부를 상관하지 않는다) 또는 여전히 미해결된 것이 있는지(예로서, 상기 발신 노드가 상기 요청된 서비스를 지원하는 상기 네트워크의 모든 노드들의 리스트를 원할 수 있는) 부가적인 서비스 탐색 응답 메시지들에 대해 계속해서 모니터링할 수 있다. 단계(508)(타이머가 만료되는) 및 단계(520)(탐색 리스트가 NULL인)로부터 단계(522)의 제거에 대하여, 방법(500)은 단계(524)로 진행한다.
상술된 바와 같이 서비스 위치 탐색에서: (1) 코드 네트워크의 키 공간이 M개의 비트들이라면, 상기 서비스 위치 탐색의 소스는 기껏해야 M개의 서비스 탐색 요청 메시지들을 발송하고 기껏해야 M개의 서비스 탐색 응답 메시지들을 수신할 것이고, 상기 중간 노드들은 훨씬 적은 요청 메시지들을 발송하고 훨씬 적은 응답 메시지들을 수신하고, 상기 코드 네트워크의 노드들 중 어떤 것도 메시지들로 오버로드되지 않도록 하고, (2) 업스트림 노드로부터 다운스트림 노드로 전송된 서비스 탐색 요청 메시지는 하나 이상의 부가적인 서비스 탐색 요청 메시지들이 상기 다운스트림 노드에서 생성되게 할 수 있어서, 상기 서비스를 위한 서비스 위치 탐색이, 최대 기껏해야 M-1개의 단계들 또는 스테이지들까지, 하나 이상의 단계들 또는 스테이지들에 걸쳐 분배될 수 있는 탐색들의 시퀀스를 생성할 수 있도록 한다. 이로부터, 상술된 바와 같이 서비스 위치 탐색에서, 서비스 위치 찾기 요청시 상기 코드 네트워크에 K개의 활성 노드들이 존재한다면, 상기 서비스 위치 찾기 요청은, 상기 서비스 위치 탐색 프로세스가 결국(상기 서비스 위치 찾기 요청의 소스를 배제한) 코드 네트워크의 각각의 노드로 하나의 서비스 탐색 요청 메시지를 전달하기 때문에 상기 코드 네트워크에서 K-1개의 메시지들을 생성할 것이다. 이들 메시지들은 상기 노드들 중 어떤 것도 상기 메시지들에 의해 오버로딩되지 않도록 상기 노드들 모두에 걸쳐 분배되지만, 일반적으로, K는 큰 수이고, 따라서 서비스의 위치를 찾기 위해 상기 코드 네트워크에서 생성된 메시지들의 수를 감소시키는 것이 바람직할 것이다.
일 실시예에서, 서비스의 위치를 찾기 위해 상기 코드 네트워크에서 생성된 메시지들의 수는 상기 서비스를 위한 탐색들이 상기 원의 모든 부분들에 대해 동시에 상기 서비스를 위한 탐색들을 개시하기보다는, 상기 원의 일부들에서 단계적으로 연속하여 개시되는 점진적 탐색을 실행함으로써 감소될 수 있다. 이러한 유형의 서비스 위치 탐색은 여기에서 점진적 서비스 위치 탐색으로서 불리운다.
상기 점진적 서비스 위치 탐색은 먼저 서비스의 위치를 찾기 위해 상기 코드 네트워크에서 생성된 메시지들의 수를 감소시키기 위한 하나의 방법은 초기 검색에서, 전체 원 대신에, 원의 일부만을 검색하는 것임을 고려함으로써 보다 양호하게 이해될 수 있다. 이 경우에, 전체 원은 검색되지 않기 때문에, 이러한 검색은 요청된 서비스를 제공하는 노드의 위치를 찾을 수 없다. 이러한 경우에, 상기 원의 일부에 대한 검색이 성공적인 확률은 서비스의 위치를 찾기 위해 개시된 메시지들의 수에 대하여(즉, 상기 원 내의 탐색 범위의 크기에 대하여) 균형이 유지될 수 있다. 이 경우에, 상기 탐색 범위의 크기는 다음과 같이 결정될 수 있다.
상기 탐색 범위의 크기가 작은 탐색 실패율을 보장하기 위해 결정될 수 있는 방식이 일 예를 고려함으로써 더욱 양호하게 이해될 수 있다. 이 예에서, 키 공간을 2M이라 하고, 평균하여, 상기 서비스를 제공하는 상기 네트워크에서 보통 2K 활성 노드들이 존재한다고 가정하자. 이들 가정들에 기초하여, 특정 노드-ID를 위한 서비스를 제공하는 활성 노드가 존재하는 확률은 α= 2K/2M = 2-(M-K)이다. 이 예에서, 노드(0)는 [1,L)의 초기 탐색 범위 내에서 서비스(A)를 탐색한다고 추가로 가정하자. 상기 범위([1,L))내의 어떤 노드도 서비스(A)를 제공하지 않을 확률은 (1-α)L-1이다. 이 예에서, 원하는 탐색 실패율은 예를 들면, 2% 미만(비록, 임의의 원하는 탐색 실패율이 이용될 수 있지만)이라고 하고, 이것은 식((1-α)L-1 < 1/50)을 초래한다. 이러한 식을 이용하고, 상기 식의 양측들의 로그(베이스 e)를 취하면, 적들: (L-1)*In(1-α) <- In(50), 여기서, In(1-α) = -α - α2/2 - α3/3 - α4/4 등. 일반적으로, α는 매우 작은 수이고, 따라서 고차 항들은 대수롭지 않으며 무시될 수 있다. 따라서, 상기 식은 다음과 같이 근사될 수 있다: -(L-1)*α < -In(50), 또는 L > (3.91)*1/α + 1, 보다 간단하게는, L > (3.91)*1/α(1을 무시).
상기 탐색 범위의 크기가 작은 탐색 실패율을 보장하기 위해 결정될 수 있는 방식은 또한 보다 설명적인 예를 고려함으로써 양호하게 이해될 수 있다. 이 예에서, 160비트들의 키 공간을 가진 코드 네트워크를 고려하자. 평균하여, 서비스(A)를 제공하는 상기 활성 노드들 가운데 보통 210(또는 1024)개의 노드들이 존재하는 상기 네트워크에 100,000개의 활성 노드들이 존재한다고 가정하자(즉, 상기 활성 노드들의 ~1%). 이 경우에 α=2-150이고, L은 (3.91)*2150보다 크게 되도록 선택된다. L=4*2150 = 2152이라고 하자. 이러한 L의 선택을 갖고, 초기 탐색은 상기 원의 2152/2160 = 1/28 - 1/256 부분을 커버할 것이다. 따라서, 이 예에서, 상기 초기 탐색은 98% 성공 가능성을 가질 것인 반면, 상기 서비스의 위치를 찾기 위해 상기 네트워크에서 교환된 메시지들의 수는 256의 인자에 의해 감소된다(즉, 평균하여 상기 초기 서비스 범위에서의 노드들의 수는 대략 400개이고, 따라서 상기 초기 탐색은 그 외 상기 초기 탐색이 전체 코드 네트워크에 걸친다면 생성될 100,000개의 탐색 메시지들이라기보다는, 단지 약 400개의 탐색 메시지들만을 생성한다.
상술된 바와 같이, 상기 초기 탐색이 단지 상기 서비스를 지원하는 노드의 위치를 찾는데 실패할 가능성이 희박하기 쉽다. 상기 초기 탐색이 상기 서비스를 지원하는 노드의 위치를 찾는데 실패할 경우에, 상기 서비스 위치 탐색의 소스는 그 후 상기 원의 제 2 부분에 대한 제 2 검색을 개시할 수 있다(예로서, 상기 예에서, 노드(0)는 범위([L, 2L))를 갖고 제 2 서비스 위치 탐색을 개시할 것이다). 상기 제 2 탐색이 상기 서비스를 지원하는 노드의 위치를 찾는데 실패한다면, 상기 서비스 위치 탐색의 소스는 그 후 상기 원의 제 3 부분에 대한 제 3 검색을 개시할 수 있다(예로서, 상기 예에서, 노드(0)는 범위([2L, 3L))를 갖고 제 3 서비스 위치 탐색을 개시할 것이다). 따라서, 상기 소스 노드는 서비스를 지원하는 노드의 위치가 찾아지거나 전체 원이 상기 서비스를 지원하는 노드의 위치를 찾지 않고 탐색될 때까지 상기 코드 네트워크의 원의 복수의 부분들의 각각을 계속해서 탐색할 수 있으며, 그에 의해 상기 서비스를 지원하는 노드의 위치를 찾기 위해 상기 코드 네트워크 내에서 교환된 메시지들의 수를 상당히 감소시킬 수 있는 점진적 서비스 위치 탐색을 제공할 수 있다.
상기 설명된 점진적 서비스 위치 탐색 실시예에서, 상기 탐색 아크들(arcs)(및, 그에 따른 탐색 범위들)의 엔드포인트들은 L, 2L, 3L, 4L 등이다. 이것은 도 6에 묘사된다.
도 6은 대표적인 코드 네트워크에서 서비스를 위한 점진적 서비스 위치 탐색을 실행하는 일 예를 도시하는, 대표적인 코드 네트워크를 묘사한다. 코드 네트워크(600)에서, 키 공간은 6비트들(즉, 64개의 ID들)이고, 상기 점진적 서비스 위치 탐색의 각각의 스테이지를 위한 탐색 범위의 크기는 8개의 노드들이다.
상술된 점진적 서비스 위치 탐색 실시예에서, 상기 탐색 아크들의 엔드포인트들은 L, 2L, 3L, 4L 등이고, 이것은 상기 서비스 위치 찾기 요청을 개시하는 상기 소스 노드에서 유지된 상기 탐색 표과 호환될 수 없다(즉, 그것들은 상기 소스 노드에서 유지된 상기 탐색 표의 핑거들이 아니다). 그 결과, 상기 아크들 중 하나에 걸쳐 탐색을 실행할 때(예로서, [n*L, (n+1)*L)에 걸쳐), 다수의 서비스 위치 탐색 메시지들이 생성될 필요가 있을 수 있다. 이것은 도 7에 묘사된다.
도 7은 도 6의 대표적인 코드 네트워크에서 서비스를 위한 점진적 서비스 위치 탐색을 실행하기 위한 대표적인 탐색 범위를 묘사한다. 도 7에 묘사된 바와 같이, 제 (k+1) 핑거는 상기 탐색 범위(즉, n*L < 제 (k+1) 핑거 < (N+1)*L)에 속하고, 상기 제 k 핑거 및 상기 제 (k+2) 핑거 둘 모두는 상기 탐색 범위 밖에 있다. 이 경우에, 상기 아크에 걸쳐 서비스 위치 탐색을 실행하기 위해, 상기 소스 노드는 다음과 같이 두 개의 서비스 탐색 요청 메시지들을 생성할 것이다: (a) 하나의 탐색 요청이 (n*L, 제 (k+1) 핑거)의 탐색 범위를 갖고 제 k 핑거에 전송되고, (b) 하나의 탐색 요청이 [(제 (k+1) 핑거, (N+1)*L)의 탐색 범위를 갖고 제 (k+1) 핑거에 전송된다.
일 실시예에서, 상기 점진적 서비스 위치 탐색은 상기 점진적 서비스 위치 탐색이 상기 소스 노드의 탐색 표과 일직선이도록 수정될 수 있으며, 그에 의해 아크를 통한 탐색이 다수의 서비스 탐색 요청 메시지들을 요구하는 상황을 방지한다.
정렬된 점진적 서비스 위치 탐색의 대표적인 실시예가 도 8 및 도 9에 대하여 묘사되고 설명된다.
도 8은 정렬된 점진적 서비스 위치 탐색을 이용하여 서비스 위치 찾기 요청을 개시하는 노드에서 서비스 탐색 요청 메시지를 생성하기 위한 방법의 일 실시예를 묘사한다.
단계(802)에서, 방법(800)이 시작된다.
단계(804)에서, 상기 노드는 상기 서비스를 지원하는 활성 노드들(L로서 표시되는)의 추정된 평균수를 결정한다.
상기 서비스를 지원하는 활성 노드들의 추정된 평균 수는 이러한 정보의 임의의 적절한 소스로부터(예로서, 상기 노드의 로컬 메모리로부터, 웹 서버로부터 등) 결정될 수 있다.
서비스를 지원하는 활성 노드들의 평균 수는 임의의 적절한 방식으로 추정될 수 있다. 일 실시예에서, 서비스를 지원하는 활성 노드들의 평균 수는 도 1 내지 도 6에 대하여 묘사되고 설명되는 서비스 위치 탐색 알고리즘의 수정된 버전을 이용하여 추정될 수 있다. 도 1 내지 도 6에 대하여 설명된 상기 서비스 위치 탐색 알고리즘에서, 중간 노드는 그것이 다운스트림 노드로부터 수신되자마자 업스트림 노드로 긍정의 응답 메시지를 포워딩한다. 일 실시예에서, 도 1 내지 도 6에 대하여 묘사되고 설명된 상기 서비스 위치 탐색 알고리즘은 서비스 탐색 요청 메시지들을 개시한 다운스트림 노드들 중 하나로부터 제 1 긍정의 응답을 수신하자마자 상기 업스트림 노드로 긍정의 응답을 즉시 포워딩하기보다는, 각각의 중간 노드는 그것이 서비스 탐색 요청 메시지들을 개시한 모든 다운스트림 노드들로부터 모든 응답 메시지들을 대기하고 그 후 통합된 응답(상기 서비스를 지원하는 상기 다운스트림 노드들의 총 수, 및 이들 노드들 중 적어도 하나의 노드 ID 및 IP 어드레스를 포함하는)을 상기 업스트림 노드에 포워딩하도록 변경될 수 있다. 상기 중간 노드들은 임의의 적절한 방식으로 이러한 변경된 처리를 실행하도록 지시받을 수 있다. 일 실시예에서, 예를 들면, 새로운 표시자가 서비스를 지원하는 활성 노드들의 평균 수를 추정하기 위한 처리를 실행할지 여부에 대해 상기 중간 노드들에 알리기 위해 상기 서비스 탐색 요청 메시지들에 부가될 수 있다. 이러한 일 실시예에서, 상기 새로운 표시자는 특정 서비스를 위한 적어도 제 1의 몇몇 검색들을 위해 참(TRUE)으로 설정될 수 있으며, 따라서 상기 소스 노드는 상기 노드가 서비스를 지원하는 활성 노드들의 평균 수의 추정치를 그로부터 결정할 수 있도록 서비스를 지원하는 활성 노드들의 수의 적어도 몇몇 추정치들을 수신한다. 상기 새로운 표시자는 그 후 상기 중가 노드들이 상기 서비스를 위한 모든 요청을 위한 수정된 처리를 실행하도록 요구되지 않도록 거짓(FALSE)으로 설정될 수 있다. 추가적인 일 실시예에서, 상기 서비스를 지원하는 활성 노드들의 평균 수의 추정치는 참으로 설정된 새로운 표시자를 갖고 도 1 내지 도 6에 대하여 설명된 상기 서비스 위치 탐색 알고리즘을 이용하여 상기 서비스에 대한 서비스 위치 탐색을 주기적으로 실행함으로써 주기적으로 업데이트될 수 있다. 서비스를 지원하는 활성 노드들의 평균 수의 추정치를 결정한 후, 상기 노드는 그 후 상기 점진적 서비스 위치 탐색 능력들을 이용하여 상기 서비스에 대한 후속 탐색들을 실행하도록 서비스를 지원하는 활성 노드들의 평균 수의 추정치를 이용할 수 있다. 더욱이, 상술된 실시예들 외에, 상술된 실시예들의 많은 변형들이 이용될 수 있다. 예를 들면, 발신 노드로부터 상기 네트워크의 일부로의 탐색 메시지들은 상기 표시자를 참으로 설정할 수 있는 반면, 상기 표시자는 나머지 부분을 위해 거짓으로 설정된다. 이 예에서, 참으로 설정된 상기 표시자를 가진 상기 탐색 메시지들로부터의 응답들은 상기 서비스르 지원하는 활성 노드들의 평균 수를 추정하기 위해 이용될 수 있지만, 보다 적은 정확도를 갖고, 거짓으로 설정된 상기 표시자를 가진 탐색 메시지들이 긍정의 응답들을 대기하지 않기 때문에 보다 빠른 응답을 생성할 것이다. 많은 다른 방법들이 또한 가능하다는 것이 이해될 것이다. 일반적으로, 상이한 방법들 간의 차이들은 추정의 정확도, 알고리즘의 복잡도, 응답 시간, 생성된 메시지들의 수 간에 트레이드-오프들(trade-offs)을 포함한다.
단계(806)에서, 상기 노드는 상기 서비스에 대한 초기 탐색을 위한 핑거들의 수를 결정한다(K로서 표시되는). 상기 초기 탐색을 위한 핑거들의 수는 상기 서비스를 지원하는 활성 노드들의 평균 수를 이용하여 결정된다. 상기 초기 탐색을 위한 핑거들의 수는 식((L-1)*In(1-a) < In(1/b))로부터의 L에 대해 풀음(solve)으로써 결정되고, 여기서 (i) a는 노드 ID가 상기 서비스를 지원하는 활성 노드를 가질 확률이고, (ii) b는 상기 탐색이 부정적인 확률이고, (iii) L은 탐색 범위이다.
단계(808)에서, 상기 노드는 서비스 탐색 요청 메시지들을 상기 노드에서 유지된 상기 탐색 표의 첫 K개의 핑거들에 전송한다. 서비스 탐색 요청 메시지는 상기 서비스 탐색 요청 메시지의 ID, 상기 요청된 서비스를 식별하는데 이용하기 위해 적응된 서비스 식별 정보, 탐색 범위 등과 같이, 상기 요청된 서비스를 탐색하는데 이용하기에 적합한 임의의 정보를 포함한다. 제 i 핑거에 대한 탐색 범위는 [제 i 핑거, 제 (i+1) 핑거)이고, 여기서 i= 1,..., K이다. 상이한 정보가 상기 서비스 탐색 요청 메시지 내에 포함될 수 있다는 것이 이해될 것이다.
단계(810)에서, 상기 서비스를 지원하는 노드가 식별되었는지의 여부에 대한 결정이 이루어진다(즉, 단계(808)로부터의 초기 서비스 탐색 요청 메시지들에 기초하여, 및 선택적으로, 단계(816)로부터의 하나 이상의 후속 서비스 탐색 요청 메시지들). 상기 서비스를 지원하는 노드가 식별되었다면, 방법(800)은 단계(818)로 진행하고, 이 포인트에서 방법(800)이 종료된다. 상기 서비스를 지원하는 노드가 식별되지 않았다면, 방법(800)은 단계(812)로 진행한다.
단계(812)에서, 상기 탐색 표에서의 최종 핑거가 선택되었는지의 여부(즉, K = M인지 여부)에 대한 결정이 이루어진다. 상기 탐색 표에서의 최종 핑거가 선택되었다면, 방법(800)은 단계(818)로 진행하고, 이 포인트에서 방법(800)은 종료된다. 상기 탐색 표에서의 최종 핑거가 선택되지 않았다면, 방법(800)은 단계(814)로 진행한다.
단계(814)에서, K의 값은 증분된다. 단계(816)에서, 상기 노드는 서비스 탐색 요청 메시지를 상기 노드에서 유지된 상기 탐색 표의 제 K 핑거에 전송한다. 단계(816)로부터, 방법(800)은 단계(810)로 리턴하고, 이 포인트에서, 상기 서비스를 지원하는 노드가 상기 점진적 탐색의 현재 스테이지 동안 식별되었는지의 여부에 대한 결정이 이루어진다.
상기 서비스를 지원하는 노드가 식별되거나 상기 탐색 표의 모든 핑거들이 처리된 후 상기 서비스를 지원하는 어떤 노드도 식별되지 않을 때 들어가지는, 단계(816)에서, 방법(800)이 종료된다.
도 8에 대하여, 일 실시예에서, 제 (i+1) 핑거가 제 i 핑거와 동일하다면, 서비스 탐색 요청 메시지는 제 (i+1) 핑거에 대해 전송되지 않으며(초기 탐색에서 중복 메시지들을 상기 핑거들에 전송하는 것을 회피하기 위해), 그에 의해 다수의 서비스 탐색 요청 메시지들이 동일한 노드에 전송되는 것을 방지한다.
주로 연속하여 실행되는 것으로서 여기에 묘사되고 설명되었지만, 방법(800)의 단계들의 적어도 일부는 동시에, 또는 도 8에 대하여 묘사되고 설명된 것과 상이한 순서로 실행될 수 있다. 주로 중간 노드에서 서비스 탐색 요청 메시지 생성을 실행하기 위한 프로세스 로직의 특정 구현에 대하여 여기에 묘사되고 설명되었지만, 중간 노드에서 서비스 탐색 요청 메시지 생성을 실행하기 위한 프로세스 로직은 여전히 여기에 묘사되고 설명된 상기 서비스 위치 찾기 능력을 지원하면서 다양한 다른 방식들로 구현될 수 있다는 것이 이해될 것이다.
도 9a 내지 도 9d는 도 1의 대표적인 코드 네트워크에서의 서비스를 위한 배열된 점진적 서비스 위치 탐색을 실행하는 일 예를 도시하는, 도 1의 대표적인 코드 네트워크의 노드들 중 하나에 의해 개시된 서비스 위치 탐색에 응답하여 도 1의 대표적인 코드 네트워크 내에서 개시된 서비스 탐색 요청 메시지들을 묘사한다.
도 9a 내지 도 9d의 예에서, 노드(0)는 서비스 위치 찾기 요청을 개시한다. 상기 요청된 서비스를 지원하는 활성 노드들의 추정된 평균 수는 8과 동일하고(L=23=8), 이것은 상기 서비스를 위한 초기 탐색이 노드(0)의 탐색 표의 첫 3개의 핑거들, 즉 노드들(2, 2, 및 5)을 포함할 것임을 나타낸다. 따라서, 서비스 탐색 요청 메시지들은 각각 [2, 5) 및 [5, 9)의 탐색 범위들을 갖고 노드들(2, 5)로 전송된다(노드(9)는 제 4 핑거이다). 노드(0)에 의한 초기 탐색은 도 9a에 도시되고, 상기 서비스 탐색 요청 메시지들은 노드들(2, 5)에 전송되고 노드(2)는 서비스 탐색 요청 메시지를 노드(3)로 전송하고, 노드(5)는 서비스 탐색 요청 메시지들을 노드들(6, 7)로 전송한다. 이 예에서, 노드(7)는 상기 요청된 서비스를 지원하는 활성 노드이고, 따라서 노드(0)는 상기 초기 검색에서 상기 요청된 서비스를 지원하는 노드의 위치를 찾을 것이고, 상기 정렬된 점진적 서비스 위치 탐색이 완료될 것이다.
도 9a 내지 도 9d의 예에서, 그러나, 예시적인 목적들을 위해, 노드(7)는 상기 서비스를 지원하지 않으며, 따라서 상기 초기 검색이 실패한 것으로 가정하자. 상기 초기 검색이 실패하였음을 결정할 때, 그 후, 노드(0)는 그것의 탐색 표에서의 다음 핑거, 즉 노드(9)로 상기 서비스를 위한 후속 탐색을 개시한다. 따라서, 서비스 탐색 요청 메시지는 [9, 16)의 탐색 범위를 갖고 노드(9)로 전송된다. 노드(0)에 의한 이러한 후속 탐색은 도 9b에 도시되고, 상기 서비스 탐색 요청 메시지는 노드(9)로 전송되고 노드(9)는 서비스 탐색 요청 메시지들을 노드들(12, 13)로 전송한다. 이 예에서, 상기 요청된 서비스를 지원하는 상기 범위([9, 16)) 내에 활성 노드들이 존재하지 않으며, 따라서 상기 정렬된 점진적 서비스 위치 탐색은 계속될 것이다.
도 9a 내지 도 9d의 예에서, 상기 제 1 후속 탐색이 실패하였음을 결정할 때, 노드(0)는 그 후 그것의 탐색 표에서의 다음 핑거, 즉 노드(16)로 상기 서비스를 위한 제 2 후속 탐색을 개시한다. 따라서, 서비스 탐색 요청 메시지는 [16, 32)의 범위를 갖고 노드(16)로 전송된다. 노드(0)에 의한 이러한 후속 탐색은 도 9c에 도시되고, 상기 서비스 탐색 요청 메시지는 노드(16)에 전송되고, 노드(16)는 서비스 탐색 요청 메시지들을 노드들(17, 18, 20, 24)에 전송한다(뿐만 아니라, 이들 노드들은 부가적인 서비스 탐색 요청 메시지들을 전파한다). 이 예에서, 노드(19)는 상기 요청된 서비스를 지원하는 활성 노드이고, 따라서 노드(0)는 상기 초기 탐색에서 상기 요청된 서비스를 지원하는 노드의 위치를 찾을 것이고, 상기 정렬된 점진적 서비스 위치 탐색이 완료될 수 있다.
도 9a 내지 도 9d의 예에서, 그러나, 예시적인 목적들을 위해, 노드(19)는 상기 서비스를 지원하지 않으며, 따라서 상기 제 2 후속 탐색이 실패하였다고 가정하자. 상기 제 2 후속 탐색이 실패하였음을 결정할 때, 노드(0)는 그 후 그것의 탐색 표에서의 다음 핑거, 즉 노드(32)로 상기 서비스를 위한 제 3 후속 탐색을 개시한다. 따라서, 서비스 탐색 요청 메시지는 [32, 0)의 탐색 범위를 갖고, 노드(32)로 전송된다. 노드(0)에 의한 이러한 후속 탐색은 도 9d에 도시되고, 상기 서비스 탐색 요청 메시지는 노드(32)로 전송되고 노드(32)는 서비스 탐색 요청 메시지들을 노드들(34, 37, 40, 49)에 전송한다(뿐만 아니라 이들 노드들은 부가적인 서비스 탐색 요청 메시지들을 전파한다), 이 예에서, 노드(51)는 상기 요청된 서비스를 지원하는 활성 노드이고, 따라서 노드(0)는 상기 초기 검색에서 상기 요청된 서비스를 지원하는 노드의 위치를 찾을 것이고, 상기 정렬된 점진적 서비스 위치 탐색이 완료될 것이다.
상기 정렬된 점진적 서비스 위치 탐색에서, 다수의 서비스 탐색 요청 메시지들이 상기 초기 단계에서 상기 발신 노드에 의해 전송되지만, 단일 서비스 탐색 요청 메시지가 후속 단계들의 각각에서 상기 발신 노드에 의해 송신된다. 이것은 도 8의 대표적인 방법 및 도 9a 내지 도 9d의 예로부터 명백하다. 일반적으로, 첫 두 개의 탐색들을 위한 탐색 범위들은 각각 L개의 노드 ID들을 커버하고, 그 후, 상기 후속 탐색들의 탐색 범위는 모든 단계에서 두 배이다(예로서, 제 3 탐색은 대략 2*L개의 노드 ID들을 커버하고, 상기 제 4 탐색은 대략 4*L개의 노드 - ID들을 커버한다).
여기에 설명된 바와 같이, 점진적 서비스 위치 탐색은 요청된 서비스를 지원하는 노드의 위치를 찾기 위한 상기 코드 네트워크 내에서 교환된 메시지들의 수를 감소시키기 위한 하나의 적절한 방법이다.
일 실시예에서, 요청된 서비스를 지원하는 노드의 위치를 찾기 위한 코드 네트워크 내에서 교환된 메시지들의 수는 상기 네트워크의 노드들에서, 상기 요청된 비스를 지원하는 노드들로서 이전에 식별된 하나 이상의 노드들의 노드 ID들을 캐싱함으로써 감소될 수 있다. 이 실시예에서, 상기 노드의 소스 노드의 관점으로부터, 상기 요청된 서비스를 지원하는 노드들로서 상기 소스 노드에 의해 이전 식별된 하나 이상의 노드들의 노드 ID들은 상기 소스 노드로서 캐싱될 수 있다. 이 실시예에서, 상기 서비스를 탐색할 때, 상기 탐색 메시지는 상기 소스 노드가 기꺼이 캐싱된 정보를 수용한다는 것을 나타내기 위해 설정될 수 있으며, 따라서 노드가 이러한 탐색 요청을 수신할 때, 상기 노드는 그 후 그것의 캐시로부터의 노드 ID(들)를(을) 갖고 대응할 수 있다. 이러한 방식으로, 탐색 메시지들의 수가 감소되고 응답 시간은 더 빨라지지만, 상기 캐싱된 정보가 오래될 위험이 있다. 일 실시예에서, 오래된 정보를 회피하기 위해, 마지막 X의 시간량 내에 캐싱된 노드 ID들만이 응답에 포함될 것이고, 여기서 X의 시간량은 필요한 대로 또는 원하는 대로 구성될 수 있다(예로서, 마지막 30분들, 마지막 4시간들, 마지막 날 등).
일 실시예에서, 요청된 서비스를 지원하는 노드의 위치를 찾기 위한 코드 네트워크 내에서 교환된 메시지들의 수는 어던 노드들이 어떤 서비스들을 지원하는지에 관한 정보를 교환하기 위해 상기 코드 네트워크의 노드들 간에 교환되는 하트비트 메시지들을 피기백(piggyback)함으로써 감소될 수 있다. 여기에 설명된 바와 같이, 상기 코드 네트워크에서의 노드는 그것의 선행자 및 후속자 노드들로 하트비트 메시지들을 주기적으로 전송한다. 노드에 의해 그것의 선행자로 전송된 상기 하트비트 메시지들은 상기 노드의 후속자(또는 K개의 후속자들)의 노드 ID(들)를(을) 포함하고, 유사하게는, 노드에 의해 그것의 후속자로 전송된 상기 하트비트 메시지는 상기 노드의 상기 선행자(또는 K개의 선행자들)의 노드 ID(들)를(을) 포함한다. 이 실시예에서, 선행자/후속자 정보 외에, 노드에 의해 전송된 상기 하트비트 메시지는 상기 노드에 의해 지원된 임의의 메시지들을 나타내는 정보를 포함할 것이고, 그에 의해 상기 노드들의 각각이 그것의 이웃들의 서비스 능력들을 알도록 할 수 있다. 이러한 방식으로, 상기 코드 네트워크에 서비스의 위치를 찾기 위해 교환될 필요가 있는 메시지들의 수는 감소된다.
상기에 설명된 바와 같이, 코드 네트워크에 의해 지원될 수 있는 하나의 서비스는 크로스-링 탐색 서비스이다. 상기 크로스-링 탐색 서비스는 타겟 노드가 상기 타겟 노드가 구성원이 아닌 하나 이상의 다른 코드 네트워크들 상에서 오브젝트를 탐색하기 위한 요청을 개시할 수 있게 한다.
일반적으로, 코드 네트워크의 구성원들은 특정 유형의 음악, 특정 유형의 비디오들, 학문 조사 토픽들 등과 같이, 몇몇 공통 관심사(들)와 관련되는 파일들을 공유하기를 좋아하는 커뮤니티를 형성한다. 이용자는 많은 관심사들을 가질 수 있으며, 따라서 그 또는 그녀의 노드는 동시에 다수의 코드 네트워크들에 가입할 수 있다. 파일을 탐색하는 노드가 그것이 속하는 상기 코드 네트워크(들)에 상기 파일의 위치를 찾는데 실패하였다면, 상기 노드는 하나 이상의 부가적인 코드 네트워크들로 상기 파일에 대한 탐색을 확장시키고자 할 수 있으며, 이것은 상기 크로스-링 탐색 서비스를 이용하여 달성될 수 있다.
상기 크로스-링 탐색 서비스를 이용하여, 상기 파일을 탐색하는 발신 노드는 그것이 하나 이상의 다른 코드 네트워크들에 속하는 임의의 노드(들)의 위치를 찾기 위해 구성원인 상기 코드 네트워크(들)를 탐색할 것이다. 상기 발신 노드는 탐색 요청을 개시한다. 상기 탐색 요청에서, 상기 발신 노드는 상기 서비스가 크로스-링 탐색 서비스임을 특정한다. 상기 탐색 요청은 부가적인 서비스 특정 정보를 포함할 수 있다.
상기 부가적인 서비스 특정 정보는 비-탐색 리스트를 포함할 수 있으며, 이것은 상기 발신 노드가 이미 상기 파일을 탐색한 코드 네트워크들의 코드 네트워크 ID들의 리스트이다. 이 경우에, 이러한 요청에 응답할 때, 이들 코드 네트워크들은 무시되어야 한다(즉, 상기 탐색 요청을 수신한 노드는 상기 노드가 상기 비-탐색 리스트에 표시된 상기 코드 네트워크(들) 이외의 코드 네트워크(들)의 구성원이라면 단지 긍정의 응답을 전송할 것이다).
상기 부가적인 서비스 특정 정보는 특정-탐색 리스트를 포함할 수 있으며, 이것은 상기 발신 노드가 상기 파일을 탐색하고 싶어하는 코드 네트워크들의 코드 네트워크 ID들의 리스트이다. 이 경우에, 이러한 요청에 응답할 때, 이들 코드 네트워크들 이외의 모든 코드 네트워크들은 무시되어야 한다(즉, 상기 탐색 요청을 수신하는 노드는 단지 상기 노드가 상기 특정-탐색 리스트에 표시된 상기 코드 네트워크들 중 하나의 구성원인 경우 긍정의 응답을 전송할 것이다).
상기 크로스-링 탐색 서비스를 이용할 때, 상기 파일을 탐색하는 발신 노드는 상기 탐색 요청에 응답하여 탐색 응답들을 수신할 것이다. 이 경우에, 임의의 긍정의 탐색 응답은 상기 긍정의 탐색 응답을 트리거링한 상기 코드 네트워크(들)의 상기 코드 네트워크 ID(들)를(을) 포함한다. 긍정의 탐색 응답을 수신할 때, 상기 발신 노드는 임의의 적절한 방식으로 상기 식별된 코드 네트워크(들)로부터 상기 파일을 획득하려고 시도할 수 있다.
일 실시예에서, 긍정의 탐색 응답을 수신할 때, 상기 발신 노드는 상기 식별된 코드 네트워크(들)에 접속함으로써 상기 식별된 코드 네트워크(들)로부터 파일을 획득하려고 시도할 수 있다. 이 경우에, 상기 코드 네트워크(들)에 접속할 때, 상기 발신 노드는 그 후 상기 연결된 코드 네트워크(들) 내에서의 상기 파일에 대한 탐색을 개시할 수 있다.
일 실시예에서, 긍정의 탐색 응답을 수신할 때, 상기 발신 노드는 상기 긍정의 탐색 응답으로 응답되는 노드가 상기 발신 노드 대신에 상기 식별된 코드 네트워크(들) 내에서 상기 파일에 대한 탐색을 개시하도록 요청할 수 있다. 이것은 상기 발신 노드가 상기 식별된 코드 네트워크(들)에 접속하기 위한 권한을 가지지 않는 경우, 상기 발신 노드가 상기 식별된 코드 네트워크(들)에 접속하고 떠나기 위해 요구된 리소스를 가지지 않거나 이를 바치도록 원하지 않는 경우(즉, 노드가 코드 네트워크에 접속할 때, 내포된 가정은 상기 노드가 상기 코드 네트워크 대신에 다수의 파일들을 저장할 것이고, 코드 네트워크에 접속하고 떠나는 것은 시간이 걸리며 파일들과 같은 네트워크 리소스들은 노드들 사이에서 전달된다), 상기 발신 노드가 상기 식별된 코드 네트워크에 기술적으로 연결할 수 없는 경우(예로서, 상기 발신 노드가 IPv4-전용 노드이고 상기 식별된 코드 네트워크(들)는 IPv6 코드 네트워크인 경우 또는 상기 발신 노드가 IPv6 전용 노드이고 상기 식별된 코드 네 트워크(들)가(이) IPv4 네트워크인 경우) 등과 같은 상기 발신 노드가 상기 식별된 코드 네트워크(들)에 접속할 수 없거나 연결하기를 꺼려하는 경우에 유용할 수 있다. 상기 발신 노드는 상기 긍정의 탐색 응답을 갖고 응답되는 상기 노드가 탐색 요청 메시지를 상기 긍정의 탐색 응답을 갖고 응답되는 상기 노드에 전송함으로써 상기 발신 노드 대신에 상기 식별된 코드 네트워크(들) 내에서 상기 파일에 대한 탐색을 개시하도록 요청할 수 있다. 이러한 경우에, 상기 발신 노드에 의해 전송된 상기 탐색 요청 메시지는 상기 발신 노드가 탐색하는 파일의 전체 명칭을 포함하는데, 이는 상기 식별된 코드 네트워크(들)가(이) 상이한 키 공간을 가질 수 있고/있거나 상기 발신 노드의 코드 네트워크와 상이한 해시 함수를 이용할 수 있기 때문이다. 상기 파일이 상기 식별된 코드 네트워크(들) 내에서 위치를 찾을 수 없다면, 상기 발신 노드는 부정의 탐색 응답을 수신한다. 상기 파일이 상기 식별된 코드 네트워크(들) 내에서 찾아진다면, 상기 파일을 저장하는 노드는 상기 파일을 상기 발신 노드로 포워딩한다. 상기 파일은 상기 발신 노드의 상기 코드 네트워크에 저장될 수 있거나 저장될 수 없다.
주로 상기 서비스 위치 찾기 능력이 특정 유형의 P2P 네트워크, 즉 코드 네트워크 내에서 구현되는 실시예들에 대하여 여기에 묘사되고 설명되지만, 상기 P2P 서비스 위치 찾기 능력은 상기 서비스 탐색 능력을 지원하기에 적합한 임의의 다른 유형의 P2P 네트워크들 내에서 구현될 수 있다.
일 실시예에서, 상기 서비스 위치 찾기 능력은 상기 서비스 위치 찾기 능력이 일반적으로 DHT-기반 P2P 네트워크들에서 이용하기에 적합하도록 적응될 수 있다. 이러한 일 실시예에서, 상기 서비스 매칭 능력이 제공되는 상기 P2P 네트워크는 잘-구성된 기하학적 구조(예로서, 코드를 위해, 상기 기하학적 구조는 원형이다)를 가지며, "영역"의 개념은 이러한 기하학적 구조로부터 규정될 수 있다(예로서, 코드를 위해, 상기 "영역"은 상기 원의 아크이다). 상기 DHT-기반 P2P 네트워크의 소스 노드가 서비스 위치 탐색을 개시할 때, 상기 소스 노드는 서비스 탐색 요청을 그것의 라우팅 표에서의 노드들에 전송하고, 노드로 전송된 각각의 서비스 탐색 요청은 상기 탐색이 상기 서비스 탐색 요청을 수신하는 노드에 제한되어야 하는 영역에 대한 설명을 포함한다. 중간자가 서비스 탐색 요청을 수신할 때, 상기 중간 노드들은 그것이 상기 요청된 서비스를 지원하는 노드를 국소적으로 인식하는지의 여부를 결정한다(예로서, 그것은 그 자체, 그것의 선행자, 그것의 후속자, 상기 중간 노드에서 이용가능한 캐싱된 정보로부터의 하나 이상의 노드들 등, 뿐만 아니라 그것의 조합들을 식별할 수 있다). 상기 중간 노드가 상기 요청된 서비스를 지원하는 노드를 국소적으로 식별한다면, 상기 중간 노드는 긍정의 응답을 갖고 응답한다. 상기 중간 노드가 상기 요청된 서비스를 지원하는 노드를 국소적으로 식별할 수 없다면, 상기 중간 노드는 그 자신의 라우팅 표에 기초하여 상기 서비스 탐색 요청을 전파한다. 상기 중가 노드에 의한 상기 서비스 탐색 요청의 전파는 상기 중간 노드에 의해 수신된 상기 서비스 탐색 요청 내에 포함된 정보 및 상기 중간 노드의 라우팅 표로부터의 정보에 의해 제한되는 범위를 가진다. 서비스를 매치하기 위해 이용된 서비스 탐색 요청들의 탐색 범위들은 상기 탐색의 효율성을 향상시키기 위해, 탐색 범위들 간의 중첩이 최소화되도록 적응될 수 있지만, 특정 경우들에서 상기 중첩이 탐색 범위 설명 요건들을 단순화한다면 적어도 몇몇 중첩이 바람직할 수 있다. 서비스 위치 찾기 능력의 이러한 일반화된 구현에서, 코드 네트워크들에 대하여 여기에 묘사되고 설명되는 많은 다른 능력들이 또한 이용될 수 있다(예로서, 상기 탐색이 하나의 영역에 제한될 때 성공적인 탐색의 확률을 추정하기 위해, 점진적 탐색들을 실행하기 위해서 등, 뿐만 아니라 그것들의 조합들).
서비스 위치 찾기 능력이 제공되는 실시예들에 대하여 여기에 묘사되고 설명되었지만, 여기에 묘사되고 설명된 상기 서비스 위치 찾기 능력은 P2P 네트워크들 내에 정보를 분배하기 위한 정보 분배 능력을 제공하도록 적응될 수 있다는 것이 이해될 것이다. 이러한 실시예들에서, 상기 서비스 위치 탐색 능력의 문맥 내에서 여기에 설명되는 상기 서비스 탐색 요청 메시지들은 상기 정보 분배 능력에서 정보 분배 메시지들로서 이용하기 위해 적응될 수 있다. 이러한 실시예들에서, 상기 정보 분배 능력은 정보가 상기 P2P 네트워크의 모든 노드들, 상기 P2P 네트워크의 노드들의 하나 이상의 범위들, 하나 이상의 기준들을 만족하는 상기 P2P 네트워크의 하나 이상의 노드들 등, 뿐만 아니라 그것의 다양한 조합들로 분배될 수 있도록 구현될 수 있다.
도 10은 여기에 설명된 기능들을 실행하는데 이용하기에 적합한 컴퓨터의 고-레벨 블록도를 묘사한다. 도 10에 묘사된 바와 같이, 컴퓨터(1000)는 프로세서 소자(1002)(예로서, 중앙 처리 유닛(CPU) 또는 다른 적절한 프로세서(들)), 메모리(1004)(예로서, 랜덤 액세스 메모리(RAM), 판독 전용 메모리(ROM) 등), 서비스 위치 탐색 모듈/프로세스(1005), 및 다양한 입력/출력 디바이스들(1006)(예로서, 이용자 입력 디바이스(키보드, 키패드, 마우스 등과 같은), 이용자 출력 디바이스(디스플레이, 스피커 등과 같은), 입력 포트, 출력 포트, 수신기, 송신기, 및 저장 디바이스들(예로서, 테이프 드라이브, 플로피 드라이브, 하드 디스크 드라이브, 콤팩트 디스크 드라이브 등)을 포함한다.
여기에 묘사되고 설명된 기능들은 예로서, 범용 컴퓨터, 하나 이상의 애플리케이션 특정 집적 회로들(ASIC), 및/또는 임의의 다른 하드웨어 동등물들을 이용한, 소프트웨어로 및/또는 소프트웨어 및 하드웨어의 조합으로 구현될 수 있다는 것이 주의되어야 한다. 일 실시예에서, 서비스 위치 탐색 프로세스(1005)는 상기 에 논의된 바와 같이 상기 기능들을 시행하기 위해 메모리(1004)에 로딩되고 프로세서(1002)에 의해 실행될 수 있다. 이와 같이, 서비스 위치 탐색 프로세스(1005)(연관된 데이터 구조들을 포함하는)는 컴퓨터 판독가능한 저장 매체 또는 캐리어, 예로서, RAM 메모리, 자기 또는 광학 드라이브 또는 디스켓 등에 저장될 수 있다.
소프트웨어로서 구현되는 여기에 논의된 상기 기능들의 일부들이 임의의 적절한 방식으로(예로서, 상기 노드들의 제조 동안 제공되고, 관리상으로 상기 노드에 로딩되고, 웹 서버 또는 다른 적절한 소스로부터 다운로딩되는 등 뿐만 아니라 그것의 다양한 조합들) 피어-투-피어 네트워크의 노드들 상에서 구성될 수 있다는 것이 고려된다. 소프트웨어 방법들로서 여기에 논의된 단계들의 일부는 예를 들면, 다양한 방법 단계들을 실행하기 위해 상기 프로세서와 협력하는 회로와 같이, 하드웨어 내에 구현될 수 있다는 것이 고려된다. 여기에 설명된 상기 기능들/소자들의 일부들이 컴퓨터에 의해 처리될 때, 여기에 설명된 상기 방법들 및/또는 기술들이 호출되거나 그렇지 않고 제공되도록 상기 컴퓨터의 동작을 적응시키는 컴퓨터 프로그램 제품으로서 구현될 수 있다.
본 발명의 양태들은 청구항들에 특정된다. 본 발명의 이들 및 다른 양태들은 다음의 번호가 붙은 조항들에서 특정된다.
1. 복수의 노드들을 포함하는 피어-투-피어(P2P) 네트워크 내에서 서비스를 탐색하기 위한 방법은:
상기 P2P 네트워크의 타겟 노드에서, 상기 P2P2 네트워크 내에서 서비스를 탐색하기 위한 요청을 검출하는 단계로서, 상기 타겟 노드는 상기 P2P 네트워크의 각각의 복수의 노드들을 식별하는 복수의 엔트리들을 포함하는 탐색 표를 포함하는, 상기 검출 단계; 및
상기 탐색 표에서 식별된 상기 노드들 중 적어도 하나를 향해 서비스 탐색 요청을 개시하는 단계로서, 상기 서비스 탐색 요청은 상기 서비스를 지원하는 상기 P2P 네트워크의 적어도 하나의 노드를 식별하기 위한 요청이고, 상기 서비스 탐색 요청은 상기 서비스를 나타내는 정보 및 상기 서비스 탐색 요청이 개시되는 상기 노드에 의해 이용하기 위한 탐색 범위를 포함하는, 상기 개시 단계를 포함한다.
2. 조항 1의 방법에서, 상기 서비스 탐색 요청은 상기 탐색 표의 상기 노드들의 모두를 향해 동시에 개시된다.
3. 조항 1의 방법에서, 상기 서비스 탐색 요청은 상기 서비스를 지원하는 적어도 하나의 노드가 식별되거나 상기 P2P 네트워크의 상기 노드들 중 어떤 것도 상기 서비스를 지원하지 않는다는 결정이 이루어질 때까지 상기 탐색 표의 상기 노드들을 향해 연속하여 개시된다.
4. 조항 3의 방법에서, 서비스 탐색 요청은 상기 탐색 표의 제 i 노드로부터 부정의 탐색 응답을 수신하는 것에 응답하여 상기 탐색 표의 제 (i+1) 노드를 향해 개시된다.
5. 조항 1의 방법에서, 상기 서비스 탐색 요청은 상기 탐색 표의 상기 노드들의 서브세트를 향해 동시에 개시되고, 상기 탐색 표의 노드들의 서브세트는 상기 탐색 표의 첫 K개의 엔트리들에서 식별된 노드들을 포함한다.
6. 조항 5의 방법은,
긍정의 탐색 응답이 상기 탐색 표의 노드들의 서브세트의 노드들 중 적어도 하나로부터 수신된다면, 상기 서비스를 위한 요청을 개시하는 단계; 및
긍정의 탐색 응답이 상기 탐색 표의 노드들의 서브세트의 노드들 중 적어도 하나로부터 수신되지 않는다면:
상기 탐색 표의 노드들의 서브세트에 있지 않은 상기 탐색 표의 다음 엔트리와 연관된 다음 노드를 향해, 상기 P2P 네트워크 내에 상기 서비스의 위치를 찾기 위한 후속 서비스 탐색 요청을 개시하는 단계를 추가로 포함한다.
7. 조항 5의 방법은:
상기 서비스를 지원하는 상기 P2P 네트워크의 추정된 평균 수의 노드들을 이용하여 상기 탐색 표의 노드들의 서브세트를 식별하는 단계를 추가로 포함한다.
8. 조항 7의 방법에서, 상기 탐색 표의 노드들의 서브세트는 L에 대해, 식((L-1)*In(1-a)<In(1/b)를 풀음으로써 식별되고, (i) a는 노드 ID가 상기 서비스를 지원하는 활성 노드를 가질 확률이고, (ii) b는 상기 탐색이 부정적인 확률이고, (iii) L은 탐색 범위이다.
9. 조항 7의 방법에서, 상기 서비스를 지원하는 상기 P2P 네트워크의 상기 추정된 평균 수의 노드들은 상기 노드의 로컬 메모리로부터 또는 웹 서버로부터 결정된다.
10. 조항 7의 방법에서, 상기 서비스를 지원하는 상기 P2P 네트워크의 상기 추정된 평균 수의 노드들은,
상기 탐색 표의 노드들의 각각을 향해, 상기 서비스를 지원하는 상기 P2P의 노드들의 각각의 타겟 노드에 의한 식별을 가능하게 하도록 구성된 각각의 서비스 탐색 요청 메시지를 개시하는 단계; 및
상기 탐색 표의 상기 노드들의 각각으로부터, 상기 서비스를 지원하는 상기 P2P 네트워크의 노드들의 수를 도출할 때 이용하기 위해 적응된 정보 또는 서비스를 지원하는 노드들인 것으로서 상기 노드에 의해 식별된 상기 P2P 네트워크의 노드들의 수의 표시를 포함하는 각각의 서비스 탐색 응답 메시지를 수신하는 단계; 및
상기 서비스를 지원하는 상기 P2P 네트워크의 추정된 수의 노드들을 계산하기 위해 상기 서비스 탐색 응답 메시지들을 처리하는 단계로서, 상기 서비스를 지원하는 상기 P2P 네트워크의 상기 추정된 수의 노드들은 상기 서비스를 지원하는 상기 P2P 네트워크의 상기 추정된 평균 수의 노드들을 결정할 때 이용하기 위해 적응되는, 상기 처리 단계를 포함하는 방법에 의해 추정된다.
11. 조항 1의 방법은:
상기 서비스 탐색 요청이 개시되는 상기 탐색 표의 상기 노드들 중 적어도 하나의 각각으로부터, 상기 노드가 상기 서비스를 지원하는지 또는 상기 서비스를 지원하는 식별된 또 다른 노드를 가지는지의 여부를 나타내는 탐색 응답을 수신하는 단계를 추가로 포함한다.
12. 조항 1의 방법은:
상기 타겟 노드가 상기 서비스를 지원하는 노드가 위치됨을 나타내는 긍정의 탐색 응답을 수신할 때, 상기 타겟 노드로부터 상기 서비스를 지원하는 상기 노드를 향해 상기 서비스를 위한 요청을 개시하는 단계를 추가로 포함한다.
13. 조항 12의 방법에서, 상기 긍정의 탐색 응답은 상기 서비스를 지원하는 상기 노드의 노드 식별자 및 상기 서비스를 지원하는 상기 노드의 IP 어드레스를 포함한다.
14. 조항 1의 방법에서, 상기 서비스는 부가적인 P2P 네트워크의 구성원인 상기 P2P 네트워크의 적어도 하나의 다른 노드를 식별하기 위한 크로스-링 탐색 서비스이다.
15. 조항 14의 방법은:
상기 타겟 노드가 부가적인 P2P 네트워크의 구성원인 노드의 위치가 찾아짐을 나타내는 긍정의 탐색 응답을 수신할 때,
상기 타겟 노드로부터, 상기 부가적인 P2P 네트워크에 접속하기 위해 상기 타겟 노드를 위한 프로세스를 개시하는 단계; 및
상기 타겟 노드로부터, 상기 부가적인 P2P 네트워크의 구성원인 상기 노드를 향해, 상기 부가적인 P2P 네트워크 내에서 오브젝트에 대한 탐색을 개시하기 위해 상기 부가적인 P2P 네트워크의 구성원인 노드에 대한 요청을 개시하는 단계 중 적어도 하나를 실행하는 단계를 추가로 포함한다.
16. 복수의 노드들을 포함하는 피어-투-피어(P2P) 네트워크 내에서 서비스를 탐색하기 위한 장치는:
상기 P2P 네트워크의 각각의 복수의 노드들을 식별하는 복수의 엔트리들을 포함하는 탐색 표를 저장하기 위한 메모리; 및
프로세서로서,
상기 P2P 네트워크 내에서 서비스를 탐색하기 위한 요청을 검출하고,
상기 탐색 표에서 식별된 상기 노드들 중 적어도 하나를 향해 서비스 탐색 요청을 개시하는 것으로서, 상기 서비스 탐색 요청은 상기 서비스를 지원하는 상기 P2P 네트워크의 적어도 하나의 노드를 식별하기 위한 요청이고, 상기 서비스 탐색 요청은 상기 서비스를 나타내는 정보 및 상기 서비스 탐색 요청이 개시되는 상기 노드에 의해 이용하기 위한 탐색 범위를 포함하는, 상기 서비스 탐색 요청을 개시하도록 구성된, 상기 프로세서를 포함한다.
17. 복수의 노드들을 포함하는 피어-투-피어(P2P) 네트워크 내에서 서비스의 위치를 찾기 위한 방법은:
상기 P2P 네트워크의 타겟 노드에서, 서비스 탐색 요청을 수신하는 단계로서, 상기 서비스 탐색 요청은 요청되는 상기 서비스를 나타내는 정보 및 상기 타겟 노드를 위한 탐색 범위를 포함하는, 상기 수신 단계;
상기 요청되는 서비스를 나타내는 상기 정보의 적어도 일부를 이용하여, 상기 타겟 노드가 상기 서비스를 지원하는지의 여부를 결정하는 단계;
상기 타겟 노드가 상기 서비스를 지원한다는 결정이 이루어질 때, 상기 서비스가 상기 타겟 노드에 의해 지원된다는 것을 나타내는 서비스 탐색 응답 메시지를 상기 타겟 노드로부터 개시하는 단계; 및
상기 타겟 노드가 상기 서비스를 지원하지 않는다는 결정이 이루어질 때, 상기 타겟 노드로부터 상기 P2P 네트워크의 적어도 하나의 다른 노드를 향해 서비스 탐색 요청을 개시할지 여부를 결정하는 단계를 포함한다.
18. 조항 17의 방법에서, 상기 타겟 노드로부터 상기 P2P 네트워크의 적어도 하나의 다른 노드를 향해 서비스 탐색 요청을 개시하기 위한 결정이 이루어지지 않을 때, 상기 방법은:
상기 타겟 노드로부터, 상기 서비스를 지원하는 노드가 상기 탐색 범위를 이용하여 상기 타겟 노드에 의해 위치를 찾을 수 없음을 나타내는 부정의 응답 메시지를 개시하는 단계를 추가로 포함한다.
19. 조항 17의 방법에서, 상기 P2P 네트워크의 적어도 하나의 다른 노드를 향해 서비스 탐색 요청을 개시하도록 결정이 이루어질 때, 상기 방법은:
상기 타겟 노드에 의해 개시될 새로운 서비스 탐색 요청을 위한 탐색 범위를 결정하는 단계로서, 상기 탐색 범위는 상기 타겟 노드에서 수신된 상기 서비스 탐색 요청에 포함된 상기 탐색 범위 및 상기 타겟 노드 상에 저장된 탐색 범위를 이용하여 결정되는, 상기 결정 단계; 및
상기 타겟 노드로부터 새로운 서비스 탐색 요청을 개시하는 단계로서, 상기 새로운 서비스 탐색 요청은 상기 요청된 서비스를 나타내는 정보 및 상기 새로운 서비스 탐색 요청을 위해 결정된 상기 탐색 범위를 포함하는, 상기 개시 단계를 추가로 포함한다.
20. 조항 17의 방법에서, 상기 P2P 네트워크의 적어도 하나의 다른 노드를 향해 서비스 탐색 요청을 개시할지 여부를 결정하는 단계는:
상기 타겟 노드의 탐색 표의 임의의 엔트리들이 상기 타겟 노드에서 수신된 상기 서비스 탐색 요청의 탐색 범위 내에 속하는 노드들을 식별하는지의 여부를 결정하는 단계; 및
상기 타겟 노드의 탐색 표의 엔트리들이 상기 서비스 탐색 요청의 상기 탐색 범위에 속하는 노드들을 식별하지 않는다면, 상기 타겟 노드는 임의의 서비스 탐색 요청들을 개시할 필요가 없다고 결정하는 단계; 및
상기 타겟 노드의 상기 탐색 표의 적어도 하나의 엔트리가 상기 서비스 탐색 요청의 탐색 범위에 속하는 적어도 하나의 노드를 식별한다면, 상기 타겟 노드로부터 상기 서비스 탐색 요청의 탐색 범위에 속하는 상기 타겟 노드의 탐색 표의 적어도 하나의 엔트리의 각각의 적어도 하나의 노드를 향해 적어도 하나의 서비스 탐색 요청을 개시하는 단계를 포함한다.
21. 조항 17의 방법에서, 상기 P2P 네트워크의 적어도 하나의 다른 노드를 향해 서비스 탐색 요청을 개시하도록 결정이 이루어질 때, 상기 방법은:
상기 P2P 네트워크의 다른 노드를 향해 상기 타겟 노드에 의해 개시된 서비스 탐색 요청과 연관된 서비스 탐색 응답을 수신하는 단계;
상기 서비스 탐색 응답이 정당한 응답이 아니라면, 상기 서비스 탐색 응답을 무시하고 적어도 하나의 부가적인 서비스 탐색 응답을 계속해서 대기하는 단계;
상기 서비스 탐색 응답이 정당한 응답이라면, 상기 서비스 탐색 응답이 긍정의 응답인지 또는 부정의 응답인지를 결정하는 단계;
상기 서비스 탐색 응답이 긍정의 응답이라면, 상기 타겟 노드로부터 상기 서비스 탐색 요청이 수신된 노드를 향해 긍정의 서비스 탐색 응답을 개시하는 단계;
상기 서비스 탐색 응답이 부정의 응답이라면, 모든 예상된 서비스 탐색 응답 메시지들이 상기 타겟 노드에 의해 수신되었는지의 여부를 결정하는 단계;
상기 예상된 서비스 탐색 응답 메시지들의 모두가 상기 타겟 노드에 의해 수신되지 않았다면, 적어도 하나의 부가적인 서비스 탐색 응답을 계속해서 대기하는 단계; 및
상기 예상된 서비스 탐색 응답 메시지들의 모두가 상기 타겟 노드에 의해 수신되었다면, 상기 타겟 노드로부터 상기 서비스 탐색 요청이 수신되는 노드를 향해 부정의 서비스 탐색 응답을 개시하는 단계를 추가로 포함한다.
22. 복수의 노드들을 포함하는 피어-투-피어(P2P) 네트워크 내에서 서비스의 위치를 찾기 위한 장치는:
상기 P2P 네트워크의 타겟 노드에서, 서비스 탐색 요청을 수신하기 위한 수단으로서, 상기 서비스 탐색 요청은 상기 서비스를 나타내는 하나 이상의 기준들 및 상기 타겟 노드를 위한 탐색 범위를 포함하는, 상기 수신 수단;
상기 하나 이상의 서비스 탐색 기준들의 적어도 일부를 이용하여, 상기 타겟 노드가 상기 서비스를 지원하는지의 여부를 결정하기 위한 수단;
상기 타겟 노드가 상기 서비스를 지원한다는 결정이 이루어질 때, 상기 서비스가 상기 타겟 노드에 의해 지원됨을 나타내는 서비스 탐색 응답 메시지를 상기 타겟 노드로부터 개시하기 위한 수단; 및
상기 타겟 노드가 상기 서비스를 지원하지 않는다는 결정이 이루어질 때, 상기 타겟 노드로부터 상기 P2P 네트워크의 적어도 하나의 다른 노드를 향해 서비스 탐색 요청을 개시할지 여부를 결정하기 위한 수단을 포함한다.
비록 본 발명의 교시들을 포함하는 다양한 실시예들이 여기에 상세히 도시되고 설명되었지만, 이 기술분야의 숙련자들은 이들 교시들을 계속해서 포함하는 많은 다른 변경된 실시예들을 쉽게 고안할 수 있다.
100: 코드 네트워크 110: 복수의 노드들
1000: 컴퓨터 1002: 프로세서 소자
1004: 메모리 1006: 입력/출력 디바이스들
1005: 서비스 위치 탐색 모듈/프로세스

Claims (10)

  1. 복수의 노드들을 포함하는 피어-투-피어(P2P) 네트워크 내에서 서비스를 탐색하기 위한 방법에 있어서:
    상기 P2P 네트워크의 타겟 노드에서, 상기 P2P 네트워크 내에서 서비스를 탐색하기 위한 요청을 검출하는 단계로서, 상기 타겟 노드는 상기 P2P 네트워크의 각각의 복수의 노드들을 식별하는 복수의 엔트리들을 포함하는 탐색 표를 포함하는, 상기 검출 단계; 및
    상기 탐색 표에서 식별된 상기 노드들 중 적어도 하나를 향해 서비스 탐색 요청을 개시하는 단계로서, 상기 서비스 탐색 요청은 상기 서비스를 지원하는 상기 P2P 네트워크의 적어도 하나의 노드를 식별하기 위한 요청이고, 상기 서비스 탐색 요청은 상기 서비스를 나타내는 정보 및 상기 서비스 탐색 요청이 개시되는 상기 노드에 의해 이용하기 위한 탐색 범위를 포함하는, 상기 개시 단계를 포함하는, 서비스 탐색 방법.
  2. 제 1 항에 있어서,
    상기 서비스 탐색 요청은 상기 탐색 표의 상기 노드들의 모두를 향해 동시에 개시되는, 서비스 탐색 방법.
  3. 제 1 항에 있어서,
    상기 서비스 탐색 요청은 상기 서비스를 지원하는 적어도 하나의 노드가 식별되거나 상기 P2P 네트워크의 상기 노드들 중 어떤 것도 상기 서비스를 지원하지 않는다는 결정이 이루어질 때까지 상기 탐색 표의 상기 노드들을 향해 연속하여 개시되는, 서비스 탐색 방법.
  4. 제 1 항에 있어서,
    상기 서비스 탐색 요청은 상기 탐색 표의 상기 노드들의 서브세트를 향해 동시에 개시되고, 상기 탐색 표의 노드들의 서브세트는 상기 탐색 표의 첫 K개의 엔트리들에서 식별된 노드들을 포함하는, 서비스 탐색 방법.
  5. 제 4 항에 있어서,
    긍정의 탐색 응답이 상기 탐색 표의 노드들의 서브세트의 노드들 중 적어도 하나로부터 수신된다면, 상기 서비스를 위한 요청을 개시하는 단계; 및
    긍정의 탐색 응답이 상기 탐색 표의 노드들의 서브세트의 노드들 중 적어도 하나로부터 수신되지 않는다면:
    상기 탐색 표의 노드들의 서브세트에 있지 않은 상기 탐색 표의 다음 엔트리와 연관된 다음 노드를 향해, 상기 P2P 네트워크 내에 상기 서비스의 위치를 찾기 위한 후속 서비스 탐색 요청을 개시하는 단계를 추가로 포함하는, 서비스 탐색 방법.
  6. 제 4 항에 있어서,
    상기 서비스를 지원하는 상기 P2P 네트워크의 추정된 평균 수의 노드들을 이용하여 상기 탐색 표의 노드들의 서브세트를 식별하는 단계를 추가로 포함하는, 서비스 탐색 방법.
  7. 제 1 항에 있어서,
    상기 서비스 탐색 요청이 개시되는 상기 탐색 표의 노드들 중 적어도 하나의 각각으로부터, 상기 노드가 상기 서비스를 지원하는지 또는 상기 서비스를 지원하는 식별된 또 다른 노드를 가지는지를 나타내는 탐색 응답을 수신하는 단계를 추가로 포함하는, 서비스 탐색 방법.
  8. 제 1 항에 있어서,
    상기 타겟 노드가 상기 서비스를 지원하는 노드가 위치된다는 것을 나타내는 긍정의 탐색 응답을 수신할 때, 상기 타겟 노드로부터 상기 서비스를 지원하는 상기 노드를 향해 상기 서비스를 위한 요청을 개시하는 단계를 추가로 포함하는, 서비스 탐색 방법.
  9. 복수의 노드들을 포함하는 피어-투-피어(P2P) 네트워크 내에서 서비스를 탐색하기 위한 장치에 있어서:
    상기 P2P 네트워크의 각각의 복수의 노드들을 식별하는 복수의 엔트리들을 포함하는 탐색 표를 저장하기 위한 메모리; 및
    프로세서로서,
    상기 P2P 네트워크 내에서 서비스를 탐색하기 위한 요청을 검출하고,
    상기 탐색 표에서 식별된 상기 노드들 중 적어도 하나를 향해 서비스 탐색 요청을 개시하도록 구성된, 상기 프로세서를 포함하고,
    상기 서비스 탐색 요청은 상기 서비스를 지원하는 상기 P2P 네트워크의 적어도 하나의 노드를 식별하기 위한 요청이고, 상기 서비스 탐색 요청은 상기 서비스를 나타내는 정보 및 상기 서비스 탐색 요청이 개시되는 상기 노드에 의해 이용하기 위한 탐색 범위를 포함하는, 서비스 탐색 장치.
  10. 복수의 노드들을 포함하는 피어-투-피어(P2P) 네트워크 내에서 서비스의 위치를 찾기 위한 방법에 있어서:
    상기 P2P 네트워크의 타겟 노드에서, 서비스 탐색 요청을 수신하는 단계로서, 상기 서비스 탐색 요청은 요청되는 상기 서비스를 나타내는 정보 및 상기 타겟 노드를 위한 탐색 범위를 포함하는, 상기 수신 단계;
    상기 요청되는 서비스를 나타내는 상기 정보의 적어도 일부를 이용하여, 상기 타겟 노드가 상기 서비스를 지원하는지의 여부를 결정하는 단계;
    상기 타겟 노드가 상기 서비스를 지원한다는 결정이 이루어질 때, 상기 서비스가 상기 타겟 노드에 의해 지원된다는 것을 나타내는 서비스 탐색 응답 메시지를 상기 타겟 노드로부터 개시하는 단계; 및
    상기 타겟 노드가 상기 서비스를 지원하지 않는다는 결정이 이루어질 때, 상기 타겟 노드로부터 상기 P2P 네트워크의 적어도 하나의 다른 노드를 향해 서비스 탐색 요청을 개시할지 여부를 결정하는 단계를 포함하는, 서비스 위치 찾기 방법.
KR1020127018264A 2009-12-17 2010-12-01 피어?투?피어 네트워크들 내에서 서비스들의 위치를 찾기 위한 방법 및 장치 KR20120104341A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/640,072 US10084856B2 (en) 2009-12-17 2009-12-17 Method and apparatus for locating services within peer-to-peer networks
US12/640,072 2009-12-17

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020147008205A Division KR101433702B1 (ko) 2009-12-17 2010-12-01 피어―투―피어 네트워크들 내에서 서비스들의 위치를 찾기 위한 방법 및 장치

Publications (1)

Publication Number Publication Date
KR20120104341A true KR20120104341A (ko) 2012-09-20

Family

ID=43530576

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020127018264A KR20120104341A (ko) 2009-12-17 2010-12-01 피어?투?피어 네트워크들 내에서 서비스들의 위치를 찾기 위한 방법 및 장치
KR1020147008205A KR101433702B1 (ko) 2009-12-17 2010-12-01 피어―투―피어 네트워크들 내에서 서비스들의 위치를 찾기 위한 방법 및 장치

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020147008205A KR101433702B1 (ko) 2009-12-17 2010-12-01 피어―투―피어 네트워크들 내에서 서비스들의 위치를 찾기 위한 방법 및 장치

Country Status (6)

Country Link
US (1) US10084856B2 (ko)
EP (1) EP2514175A1 (ko)
JP (1) JP5567683B2 (ko)
KR (2) KR20120104341A (ko)
CN (1) CN102668513B (ko)
WO (1) WO2011084272A1 (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2015080461A1 (ko) * 2013-11-29 2015-06-04 주식회사 케이티 M2m 환경에서 사용 가능한 장치를 검색하는 방법 및 장치
KR101534555B1 (ko) * 2013-06-25 2015-07-08 숭실대학교산학협력단 원형 메시 오버레이 생성 및 유지 방법
WO2019022583A1 (ko) * 2017-07-28 2019-01-31 전자부품연구원 위치 정보 기반의 특정 타입 디바이스 데이터 조회 방법
US10206090B2 (en) 2013-11-29 2019-02-12 Kt Corporation Method and device for searching for available device in M2M environment

Families Citing this family (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9298732B2 (en) * 2010-09-29 2016-03-29 Red Hat, Inc. Searching cloud-based distributed storage resources using a set of expendable probes
US8443086B2 (en) * 2011-06-22 2013-05-14 National Chiao Tung University Decentralized structured peer-to-peer network and load balancing methods thereof
GB2500720A (en) * 2012-03-30 2013-10-02 Nec Corp Providing security information to establish secure communications over a device-to-device (D2D) communication link
US9069761B2 (en) 2012-05-25 2015-06-30 Cisco Technology, Inc. Service-aware distributed hash table routing
US9658841B2 (en) * 2012-08-30 2017-05-23 Avaya Inc. System and method for efficient software replication
CN103973460B (zh) * 2013-01-30 2017-06-27 华为终端有限公司 用于实现网络意图的方法及装置
WO2014186593A1 (en) * 2013-05-15 2014-11-20 Intel Corporation Techniques to support power-saving background device discovery in a wireless communications system
JP6131907B2 (ja) 2014-04-24 2017-05-24 カシオ計算機株式会社 分散データベース、データ共有方法、プログラム、装置
JP6697158B2 (ja) * 2016-06-10 2020-05-20 富士通株式会社 情報管理プログラム、情報管理方法、及び情報管理装置
CN106202303B (zh) * 2016-06-30 2019-09-10 南京邮电大学 一种Chord路由表压缩方法及优化文件查找方法
CN106571973A (zh) * 2016-09-28 2017-04-19 杭州鸿雁智能科技有限公司 心跳包超时管理方法及系统
CN106681794B (zh) * 2016-12-07 2020-04-10 长春市三昧动漫设计有限公司 基于兴趣行为的分布式虚拟环境缓存管理方法
CN108055651A (zh) * 2017-11-14 2018-05-18 华中科技大学 一种基于d2d技术的移动终端设备心跳包转发方法
CN109962942B (zh) * 2017-12-22 2022-06-07 天翼云科技有限公司 副本更新方法和装置以及计算机可读存储介质
CN116346892A (zh) * 2021-12-24 2023-06-27 上海诺基亚贝尔股份有限公司 用于服务提供的方法、设备、装置和介质

Family Cites Families (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1000000A (en) * 1910-04-25 1911-08-08 Francis H Holton Vehicle-tire.
US5819258A (en) 1997-03-07 1998-10-06 Digital Equipment Corporation Method and apparatus for automatically generating hierarchical categories from large document collections
US7020698B2 (en) * 2000-05-31 2006-03-28 Lucent Technologies Inc. System and method for locating a closest server in response to a client domain name request
US6961723B2 (en) * 2001-05-04 2005-11-01 Sun Microsystems, Inc. System and method for determining relevancy of query responses in a distributed network search mechanism
DE10143754A1 (de) 2001-09-06 2003-04-03 Siemens Ag Skalierbares Peer-to-Peer-Netzwerk mit einem Verzeichnisdienst
US7213047B2 (en) * 2002-10-31 2007-05-01 Sun Microsystems, Inc. Peer trust evaluation using mobile agents in peer-to-peer networks
US7831367B2 (en) * 2002-11-21 2010-11-09 Lucas Automotive Gmbh System for influencing the speed of a motor vehicle
JP2004258994A (ja) 2003-02-26 2004-09-16 Nippon Telegr & Teleph Corp <Ntt> P2pネットワークにおける動的なファイル検索方法、端末、プログラム、および記録媒体
US7805448B2 (en) * 2003-04-18 2010-09-28 Hewlett-Packard Development Company, L.P. Storing attribute values of computing resources in a peer-to-peer network
US7558875B2 (en) 2003-09-15 2009-07-07 Microsoft Corporation Measurement-based construction of locality-aware overlay networks
US7779415B2 (en) 2003-11-21 2010-08-17 International Business Machines Corporation Adaptive load distribution in managing dynamic and transient data for distributed applications
US7975035B2 (en) 2003-12-01 2011-07-05 International Business Machines Corporation Method and apparatus to support application and network awareness of collaborative applications using multi-attribute clustering
US20080281950A1 (en) * 2004-03-08 2008-11-13 First Oversi Ltd Method and Device for Peer to Peer File Sharing
US9160571B2 (en) * 2004-03-11 2015-10-13 Hewlett-Packard Development Company, L.P. Requesting a service from a multicast network
US7487239B2 (en) * 2004-03-25 2009-02-03 International Business Machines Corporation Composite resource models
CA2566984A1 (en) * 2004-05-18 2005-12-01 British Telecommunications Public Limited Company Peer-to-peer networks
JP4334424B2 (ja) * 2004-07-09 2009-09-30 富士通株式会社 ネットワークのリソース,サービス発見方法及び中継ノード装置
US8014321B2 (en) 2004-10-22 2011-09-06 Microsoft Corporation Rendezvousing resource requests with corresponding resources
US20070288638A1 (en) * 2006-04-03 2007-12-13 British Columbia, University Of Methods and distributed systems for data location and delivery
US7516116B2 (en) * 2006-04-07 2009-04-07 Microsoft Corporation Range and cover queries in overlay networks
US9507778B2 (en) 2006-05-19 2016-11-29 Yahoo! Inc. Summarization of media object collections
US8131971B2 (en) * 2006-06-20 2012-03-06 Patentvc Ltd. Methods and systems for push-to-storage
WO2008041173A2 (en) * 2006-10-02 2008-04-10 Nokia Corporation Method system and devices for network sharing or searching of resources
CN101207531A (zh) 2006-12-21 2008-06-25 浙江工业大学 一种可跨越多级子网的p2p覆盖网建立方法及系统
US9015342B2 (en) * 2007-01-22 2015-04-21 Xerox Corporation Two-level structured overlay design for cluster management in a peer-to-peer network
US20080275969A1 (en) * 2007-02-02 2008-11-06 Blaksley Ventures 108, Llc System and method for managing a plurality of network clusters
JP4306740B2 (ja) 2007-02-21 2009-08-05 ソニー株式会社 オーバレイネットワークシステム及びサービス提供プログラム
CN101257396B (zh) 2007-03-02 2010-12-08 中国科学院声学研究所 一种基于p2p技术的多域内容分发系统及相应的方法
JP2008234563A (ja) 2007-03-23 2008-10-02 Nec Corp オーバレイ管理装置、オーバレイ管理システム、オーバレイ管理方法およびオーバレイ管理用プログラム
US7978631B1 (en) * 2007-05-31 2011-07-12 Oracle America, Inc. Method and apparatus for encoding and mapping of virtual addresses for clusters
US8238237B2 (en) * 2007-06-18 2012-08-07 Sony Computer Entertainment Inc. Load balancing distribution of data to multiple recipients on a peer-to-peer network
US7802009B2 (en) 2007-06-26 2010-09-21 Microsoft Corporation Automatic reverse engineering of message formats from network traces
CN101374087A (zh) 2007-08-20 2009-02-25 华为技术有限公司 一种移动自组网络、节点及其区域划分方法
US8041773B2 (en) * 2007-09-24 2011-10-18 The Research Foundation Of State University Of New York Automatic clustering for self-organizing grids
CN101159755A (zh) * 2007-11-07 2008-04-09 中兴通讯股份有限公司 移动搜索系统及移动搜索方法
JP5151511B2 (ja) * 2008-01-30 2013-02-27 ソニー株式会社 検索サービス提供システム及び検索サービス提供方法
CN100537201C (zh) 2008-04-09 2009-09-09 宁波朗格世明汽车部件有限公司 用废旧pvc料制造汽车脚踏垫的方法
CN101394423B (zh) 2008-09-27 2012-07-18 中兴通讯股份有限公司 一种媒体定位、搜索方法和系统
EP2342684B1 (en) * 2008-10-23 2024-05-29 Ab Initio Technology LLC Fuzzy data operations
US8144611B2 (en) * 2009-02-10 2012-03-27 Microsoft Corporation Network coordinate systems using IP information
US9235623B2 (en) * 2009-04-16 2016-01-12 Tibco Software, Inc. Policy-based storage structure distribution
CN102668505B (zh) * 2009-10-21 2015-02-18 瑞典爱立信有限公司 用于定位对等网络中的服务的方法和设备
US8838690B2 (en) * 2009-11-03 2014-09-16 Telecom Italia S.P.A. Caching of digital contents in P2P networks
WO2011054375A1 (en) * 2009-11-03 2011-05-12 Telecom Italia S.P.A. Sharing of digital contents in p2p networks exploiting localization data
CA2855710C (en) * 2011-11-15 2020-03-10 Ab Initio Technology Llc Data clustering based on variant token networks
US9268589B2 (en) * 2011-12-09 2016-02-23 Yahoo! Inc. Method and system for deploying multiple distributed application stacks on a target machine

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101534555B1 (ko) * 2013-06-25 2015-07-08 숭실대학교산학협력단 원형 메시 오버레이 생성 및 유지 방법
WO2015080461A1 (ko) * 2013-11-29 2015-06-04 주식회사 케이티 M2m 환경에서 사용 가능한 장치를 검색하는 방법 및 장치
US10206090B2 (en) 2013-11-29 2019-02-12 Kt Corporation Method and device for searching for available device in M2M environment
WO2019022583A1 (ko) * 2017-07-28 2019-01-31 전자부품연구원 위치 정보 기반의 특정 타입 디바이스 데이터 조회 방법

Also Published As

Publication number Publication date
US20110153634A1 (en) 2011-06-23
KR101433702B1 (ko) 2014-08-27
US10084856B2 (en) 2018-09-25
EP2514175A1 (en) 2012-10-24
CN102668513B (zh) 2016-03-23
KR20140044948A (ko) 2014-04-15
JP5567683B2 (ja) 2014-08-06
JP2013514733A (ja) 2013-04-25
CN102668513A (zh) 2012-09-12
WO2011084272A1 (en) 2011-07-14

Similar Documents

Publication Publication Date Title
KR101433702B1 (ko) 피어―투―피어 네트워크들 내에서 서비스들의 위치를 찾기 위한 방법 및 장치
Lua et al. A survey and comparison of peer-to-peer overlay network schemes
KR101481874B1 (ko) 피어-투-피어 네트워크를 분해하고 분해된 피어-투-피어 네트워크를 사용하기 위한 방법 및 장치
US7644182B2 (en) Reconfiguring a multicast tree
JP4806203B2 (ja) ピアツーピアネットワークにおけるルーティング
US20050080858A1 (en) System and method for searching a peer-to-peer network
US20050108368A1 (en) Method and apparatus for representing data available in a peer-to-peer network using bloom-filters
EP2139205B1 (en) Method of redundant data storage
Karbhari et al. Bootstrapping in gnutella: A measurement study
KR20090034829A (ko) 랑데뷰 연합 내에서의 근접지간 통신을 위한 방법, 컴퓨터 판독가능 매체 및 컴퓨터 프로그램 제품
KR20090034322A (ko) 랑데뷰 연합 내에서의 근접지간 통신을 위한 방법, 컴퓨터 판독가능 저장 매체 및 컴퓨터 프로그램 제품
El Dick et al. Building a peer-to-peer content distribution network with high performance, scalability and robustness
Shen et al. A proximity-aware interest-clustered P2P file sharing system
Shi et al. Popularity adaptive search in hybrid P2P systems
JP4923115B2 (ja) 自己組織型分散オーバーレイ・ネットワークにおいてオブジェクトへの参照を分散させる方法、コンピュータプログラム、及びノード、並びに自己組織型分散オーバーレイ・ネットワーク
Kapoor et al. Survey of various search mechanisms in unstructured peer-to-peer networks
Brands et al. Taxonomy of p2p applications
Nhat Searching in P2P networks: a survey
Cowan S4h: A Peer-to-Peer Search Engine with Explicit Trust
Ktari et al. Symmetric replication for efficient flooding in DHTs
Bonnel et al. Search in p2p triangular mesh by space filling trees
Mary et al. Peer-to-Peer Overlays: Issues and Trends
Fonseca Search strategies in unstructured overlays
JP2009134347A (ja) 情報検索方法、情報検索装置、情報検索応答装置及びコンピュータプログラム
Hu Restructuring peer-to-peer networks

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
A107 Divisional application of patent