맨위로가기

그누텔라2

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

그누텔라2는 2002년 마이클 스토크스가 발표한 파일 공유 프로토콜로, 기존 그누텔라 프로토콜의 개선을 목표로 개발되었다. 노드를 리프와 허브로 나누어 검색 효율을 높이고, 확장 가능한 바이너리 패킷 형식, SHA-1 해시, 메타데이터 시스템, HTTP 압축 등 다양한 기술을 도입했다. 그누텔라2는 쿼리 플러딩 대신 무작위 보행 방식을 사용하며, 프로토콜 확장성, 검색 알고리즘, 용어 등에서 기존 그누텔라와 차이를 보인다. 주요 클라이언트로는 Adagio, Gnucleus, gtk-gnutella, Shareaza 등이 있다.

더 읽어볼만한 페이지

  • 파일 공유 네트워크 - 냅스터
    냅스터는 1999년부터 2001년까지 운영된 P2P 파일 공유 서비스로, MP3 파일 공유를 용이하게 하여 음악 산업에 큰 영향을 주었으며 저작권 침해 소송으로 서비스가 중단되었으나 현재는 음악 스트리밍 서비스로 운영되고 있다.
  • 파일 공유 네트워크 - WinMX
    WinMX는 한때 인기를 얻었던 P2P 파일 공유 프로그램으로, 독자적인 WinMX 피어 네트워크 프로토콜을 사용했으나 저작권 문제로 서비스가 종료된 후 사용자 커뮤니티를 중심으로 부활 노력이 이어졌다.
그누텔라2
기본 정보
그누텔라2 로고
그누텔라2 로고
개발자여러 개발자
최초 릴리스2002년 11월
최신 버전0.4 (2005년 8월 1일)
상태활동 중단
기술 정보
운영 체제크로스 플랫폼
사용 언어C
종류파일 공유
라이선스GNU 일반 공중 사용 허가서
기타
파생그누텔라

2. 역사

2002년 11월, 마이클 스토크스가 그누텔라 개발자 포럼에 그누텔라2 프로토콜을 발표한 후[2], 개발 배경, 초기 논쟁, 초안 사양 발표와 관련된 내용들이 있었다. 자세한 내용은 하위 섹션을 참고.

2. 1. 개발 배경과 초기 논쟁

2002년 11월, 마이클 스토크스는 그누텔라 개발자 포럼에 그누텔라2 프로토콜을 발표했다. 일부 개발자들은 그누텔라2가 그누텔라 0.6 프로토콜의 덜 깔끔한 부분을 더 우아하게 처리하고 전반적으로 개선하여, 기존 그누텔라와는 완전히 다른 새로운 시작을 목표로 한다고 생각했다.[2] 반면, LimeWire와 BearShare 개발자들을 중심으로 한 일부는 이를 "저렴한 홍보 수단"으로 폄하하며 기술적 장점이 없다고 주장했다. 심지어 "그누텔라2"라는 이름 대신 "마이크의 프로토콜"("MP")이라고 부르기도 했다.[2]

그누텔라2 프로토콜은 연결 시 그누텔라 0.6 사양에 정의된 "GNUTELLA CONNECT/0.6" 핸드셰이크 문자열을 그대로 사용했다.[1] 이는 새로운 네트워크를 부트스트래핑하기 위해 기존 그누텔라 네트워크를 이용하려는 시도로, 그누텔라 개발자들로부터 비판받았다. 반면 그누텔라2 지지자들은 그누텔라와의 하위 호환을 유지하고 기존 그누텔라 클라이언트가 원할 때 그누텔라2를 추가할 수 있도록 하기 위한 의도라고 주장했다.

이러한 입장 차이는 곧 불꽃 튀는 논쟁으로 이어졌고, 양측 모두 자신의 입장을 더욱 굳건히 했다.[3][4][5][6]

2003년 3월 26일, 초안 사양이 발표되었고, 곧 더 상세한 사양이 공개되었다. 많은 기존 그누텔라 클라이언트에서 G2를 지원하지 않았지만, 일부 그누텔라2 클라이언트는 여전히 그누텔라에도 연결되었다. 그누텔라2 지지자들은 이러한 지원 부족이 정치적인 이유 때문이라고 주장한 반면, 그누텔라 지지자들은 급격한 변화에 따른 재작성 비용이 크다고 반박했다.[7]

3. 설계

그누텔라2(Gnutella2)는 노드를 리프와 허브의 두 그룹으로 나누는 설계를 채택하고 있다. 리프는 허브에 연결을 유지하며, 허브는 수백 개의 리프 및 다른 허브와의 연결을 관리한다.[8] 검색 시에는 노드가 허브 목록을 이용하여 연결하므로, 네트워크 부하를 줄이면서도 효율적으로 파일을 검색할 수 있다.

허브는 리프의 파일을 쿼리 라우팅 테이블을 통해 인덱싱하여 대역폭을 절약한다. 또한, 검색에는 TCP 대신 UDP를 광범위하게 사용한다. UDP의 비연결성으로 인한 문제점을 해결하기 위해 신뢰성 플래그를 활용한다.[8]

3. 1. 네트워크 구조

그누텔라2는 노드를 리프와 허브 두 그룹으로 나눈다. 대부분의 리프는 허브에 두 개의 연결을 유지하며,[8] 허브는 수백 개의 리프 연결과 평균 7개의 다른 허브 연결을 수락한다. 검색이 시작되면 노드는 필요한 경우 허브 목록을 얻고, 목록이 소진되거나 미리 정의된 검색 제한에 도달할 때까지 검색된 허브를 기록하면서 목록의 허브에 연결한다. 이를 통해 사용자는 네트워크에 부하를 주지 않으면서 인기 있는 파일을 쉽게 찾을 수 있으며, 이론적으로는 네트워크 어디에든 있는 단일 파일을 찾을 수 있다.

허브는 리프가 가진 파일을 쿼리 라우팅 테이블을 통해 인덱싱한다. 쿼리 라우팅 테이블은 리프가 허브에 업로드하고 허브가 인접한 허브에 보낼 버전을 만들기 위해 자체 리프가 보낸 모든 해시 테이블과 결합하는 해시 함수의 색인어 비트 항목으로 채워진다. 이를 통해 허브는 검색과 일치하는 항목이 라우팅 테이블에서 발견되지 않으면 쿼리를 리프와 인접한 허브로 전달하지 않음으로써 대역폭을 크게 줄일 수 있다.

그누텔라2는 검색에 TCP가 아닌 UDP를 광범위하게 사용한다. TCP 연결을 설정하는 데 드는 오버헤드는 소량의 데이터를 사용하여 대량의 노드에 연결해야 하는 임의 보행 검색 시스템을 사용할 수 없게 만든다. 그러나 UDP에도 단점이 있다. UDP는 비연결형이므로 메시지가 수신되었음을 보내는 클라이언트에게 알릴 표준 방법이 없으므로 패킷이 손실되면 알 수 없다. 이 때문에 그누텔라2의 UDP 패킷에는 신뢰성 설정을 활성화하는 플래그가 있다. 신뢰성 플래그가 활성화된 UDP 패킷을 수신하면 클라이언트는 응답 패킷으로 응답하여 보낸 클라이언트에게 해당 패킷이 목적지에 도착했음을 알린다. 응답 패킷이 전송되지 않으면 신뢰할 수 있는 패킷이 전달을 보장하기 위해 재전송된다. 플래그가 활성화되지 않은 중요도가 낮은 패킷은 응답 패킷이 필요하지 않아 신뢰성이 낮아지지만, 응답 패킷을 보내고 기다릴 필요가 없어 오버헤드도 줄어든다.

3. 2. 쿼리 라우팅

허브는 리프가 가진 파일을 쿼리 라우팅 테이블을 통해 인덱싱한다. 쿼리 라우팅 테이블은 리프가 허브에 업로드하는 해시 테이블과 허브가 인접 허브에 보낼 버전을 만들기 위해 자체 리프가 보낸 모든 해시 테이블을 결합하여 구성된다.[8] 이를 통해 허브는 검색과 일치하는 항목이 라우팅 테이블에서 발견되지 않으면 쿼리를 리프와 인접한 허브로 전달하지 않아 대역폭을 절약한다.[8]

3. 3. UDP 프로토콜 사용

Gnutella2는 검색에 TCP가 아닌 UDP를 광범위하게 사용한다. TCP 연결을 설정하는 데 드는 오버헤드는 소량의 데이터를 사용하여 대량의 노드에 연결해야 하는 임의 보행 검색 시스템을 사용할 수 없게 만든다. 그러나 UDP에도 단점이 있는데, UDP는 비연결형이므로 메시지가 수신되었음을 보내는 클라이언트에게 알릴 표준 방법이 없으므로 패킷이 손실되면 알 수 있는 방법이 없다. 이 때문에 Gnutella2의 UDP 패킷에는 신뢰성 설정을 활성화하는 플래그가 있다.[8] 신뢰성 플래그가 활성화된 UDP 패킷을 수신하면 클라이언트는 응답 패킷으로 응답하여 보낸 클라이언트에게 해당 패킷이 목적지에 도착했음을 알린다. 응답 패킷이 전송되지 않으면 신뢰할 수 있는 패킷이 전달을 보장하기 위해 재전송된다. 플래그가 활성화되지 않은 중요도가 낮은 패킷은 응답 패킷이 필요하지 않아 신뢰성이 낮아지지만, 응답 패킷을 보내고 기다릴 필요가 없어 오버헤드도 줄어든다.

4. 프로토콜 특징

Gnutella2(그누텔라2)는 Gnutella를 개선한 P2P 네트워크 프로토콜로 다음과 같은 특징을 가진다.


  • 확장 가능한 패킷 형식을 사용하여 네트워크의 발전과 함께 기능을 추가하기 쉽다.[9]
  • 파일 식별 및 무결성 검사를 위해 SHA-1 암호화 해시 함수와 타이거 트리 해시를 사용한다.[10]
  • 메타데이터 시스템을 통해 파일에 대한 상세한 정보(라벨링, 평점, 품질 등)를 제공한다.[11]
  • HTTP 압축을 사용하여 네트워크 대역폭 사용량을 줄인다.[10]
  • gtk-gnutella, Shareaza 등에서 프로토콜을 확장하여 기능을 추가했다.[12]

4. 1. 확장 가능한 패킷 형식

Gnutella의 덜 우아한 부분을 해결하기 위해 고안된 Gnutella2는 XML 문서 트리와 유사한 확장 가능한 바이너리 패킷 형식을 가지고 있다.[9] 이 패킷 형식은 향후 네트워크 개선 및 개별 공급업체 기능을 네트워크의 다른 클라이언트에서 소프트웨어 버그를 일으키는 것에 대한 걱정 없이 추가할 수 있도록 설계되었다.[9]

4. 2. 파일 식별 및 무결성 검사

파일 식별 및 안전한 데이터 무결성 검사를 위해 SHA-1 암호화 해시 함수를 사용한다. 여러 소스에서 병렬로 파일을 안정적으로 다운로드할 수 있도록 하고, 파일이 아직 다운로드되는 동안 부분을 안정적으로 업로드(스와밍)할 수 있도록 하기 위해 머클 트리 타이거 트리 해시가 사용된다.[10]

4. 3. 메타데이터 시스템

Gnutella2는 파일 이름 외에 더 완벽한 라벨링, 평점 및 품질 정보를 제공하는 메타데이터 시스템을 갖추고 있다.[11] 노드는 파일을 삭제한 후에도 이 정보를 공유할 수 있으므로, 사용자는 컴퓨터 바이러스 및 컴퓨터 웜을 쉽게 식별할 수 있다.[11]

4. 4. HTTP 압축

Gnutella2는 네트워크 연결에서 HTTP 압축을 사용하여 네트워크 대역폭 사용량을 줄인다.[10]

4. 5. 프로토콜 확장 (gtk-gnutella, Shareaza)

gtk-gnutella는 Gnutella와 G2 간의 격차를 줄이기 위해 프로토콜을 확장했다. 특히 반신뢰성 UDP 계층은 기존 G2 클라이언트와 하위 호환되는 방식으로 누적 및 확장된 승인을 추가하도록 향상되었다.[12] 추가 확장은 쿼리 히트에서 /Q2/I의 "A" 문자열[13] 및 /QH2/H/ALT, /QH2/H/PART/MT, /QH2/HN, /QH2/BH, /QH2/G1 도입을 포함한다.[14]

Shareaza는 이미지비디오 파일 형식의 미리보기를 요청하는 추가 기능을 가지고 있다.

5. 그누텔라와의 차이점

2002년 11월, 마이클 스토크스는 그누텔라 개발자 포럼에 그누텔라2 프로토콜을 발표했다. 그누텔라2는 그누텔라의 덜 깔끔한 부분을 더 우아하게 처리하고 전반적으로 개선하는 것을 목표로 했다. 그러나 LimeWire와 BearShare 개발자들은 이를 "저렴한 홍보 수단"으로 치부하며 기술적 장점을 깎아내렸다.[2]

Gnutella2 프로토콜은 연결에 구 "GNUTELLA CONNECT/0.6" 핸드셰이크 문자열을 사용한다.[1] 이는 Gnutella 개발자 포럼에서 비판을 받았지만, 네트워크 지지자들은 그누텔라와 하위 호환을 유지하고 현재 그누텔라 클라이언트가 Gnutella2를 추가할 수 있도록 하기 위함이라고 주장했다.

개발자들 간의 논쟁은 불꽃 튀는 논쟁으로 이어졌고, 양측의 결의를 더욱 굳건하게 만들었다.[3][4][5][6] 2003년 3월 26일에는 초안 사양이 발표되었고, 더 상세한 사양이 뒤따랐다.

많은 Gnutella2 클라이언트가 여전히 그누텔라에도 연결되지만, 많은 "구" 그누텔라 네트워크 클라이언트에서는 G2를 지원하지 않는다. Gnutella2 지지자들은 이것이 정치적인 이유 때문이라고 주장하는 반면, 그누텔라 지지자들은 급격한 변화에 따른 재작성 비용을 상쇄할 만큼 충분한 장점이 없다고 주장한다.[7]

두 네트워크는 전반적으로 상당히 유사하며, 주요 차이점은 프로토콜의 패킷 형식과 검색 방법에 있다.

5. 1. 프로토콜

그누텔라의 패킷 형식은 원래 확장성을 염두에 두고 설계되지 않아, 여러 해에 걸쳐 많은 기능이 추가되면서 패킷 구조가 복잡하고 비효율적이라는 비판을 받아왔다.[15] Gnutella2는 이러한 점을 교훈 삼아 Gnutella 표준의 추가 기능을 많이 포함할 뿐만 아니라, 처음부터 미래의 확장성을 고려하여 설계되었다.

5. 2. 검색 알고리즘

그누텔라2는 쿼리 플러딩 방식을 사용하는 그누텔라와 달리, 무작위 보행 시스템을 사용한다.[2] 검색 노드는 허브 목록을 수집하고 한 번에 하나씩 직접 연결한다. 허브는 이웃이 저장한 정보를 미러링하는, 이른바 "허브 컴퓨터 클러스터"로 구성되므로 리프는 전체 허브 클러스터(일반적으로 7개의 허브)의 정보를 반환받는다.

이는 그누텔라의 쿼리 플러딩 시스템에 비해 몇 가지 장점이 있다. 검색을 계속해도 네트워크 트래픽지수 함수적으로 증가하지 않으므로 더 효율적이다. 또한 쿼리가 많은 노드를 거치지 않으며, 검색의 세분성을 높여 클라이언트가 미리 정의된 결과 임계값을 얻으면 그누텔라보다 더 효과적으로 중단할 수 있다.

하지만, 보행 시스템은 복잡한 네트워크와 필요한 네트워크 관리 및 유지보수의 복잡성을 증가시킨다. 또한 사이버 공격으로부터 서비스 거부 공격에 네트워크를 사용하지 못하도록 방지하는 안전 장치가 필요하다.[2]

5. 3. 용어

그누텔라에서는 네트워크를 압축하는 데 사용되는 더 강력한 노드를 ''울트라피어''라고 부르는 반면, 그누텔라2에서는 ''허브''라고 부른다. 그누텔라에서 울트라피어는 일반적으로 피어 연결만큼 많은 리프를 유지하는 반면, 그누텔라2 허브는 훨씬 더 많은 리프와 더 적은 피어(허브 간) 연결을 유지한다. 이는 다양한 네트워크의 검색 방식이 서로 다른 최적의 토폴로지를 갖기 때문이다.[7]

6. 클라이언트

Gnutella2 네트워크를 지원하는 대표적인 클라이언트로는 Shareaza, Gtk-gnutella, Adagio 등이 있다. Shareaza는 현재 가장 높은 점유율을 보이는 G2 클라이언트이다.[19] Foxy는 GnucDNA 파생 프로그램이지만, 다른 G2 클라이언트와 상호 작용은 불가능하며 자체 네트워크를 사용한다.

6. 1. 클라이언트 비교

Gnutella2 클라이언트 비교
클라이언트채팅4GB 초과 파일 처리UKHL[20]유니코드UPnPNAT 통과원격 미리보기해시 검색허브 모드스파이웨어/애드웨어/멀웨어 없음다른 네트워크기반운영체제(OS)기타
FoxyGnucDNA크로스 플랫폼-
FileScope그누텔라, eD2k, OpenNap-Windows[21]2014년에 개발 중단[22]
Gnucleus그누텔라GnucDNAWindows-
gtk-gnutella그누텔라-크로스 플랫폼-
Morpheus그누텔라, NEOnetGnucDNAWindows클라이언트 개발 및 호스팅 중단
Shareaza그누텔라, eD2k, 비트토렌트-WindowsIRC 지원 포함


  • Adagio[16]는 Ada로 작성된 크로스 플랫폼 자유 소프트웨어이며, GPL 하에 배포된다.
  • Gnucleus는 C/C++로 작성된 Windows용 자유 소프트웨어이며, LGPL 하에 배포된다.
  • Gtk-gnutella는 C로 작성된 크로스 플랫폼 자유 소프트웨어이다. 버전 1.1부터 G2에 대한 리프 모드 연결만 지원한다.[17]
  • MLDonkey는 OCaml로 작성된 크로스 플랫폼 자유 소프트웨어이며, GPL 하에 배포되었지만, 2007년 2.9.0 버전부터 공식적으로 지원되지 않으며 바이너리에서 비활성화되었다.[18]
  • Shareaza는 멀티 네트워크를 지원하는 Windows용 자유 소프트웨어이며, C++로 작성되었고, GPL 하에 배포된다. 현재 네트워크 점유율은 약 93%이다.[19]


독점 소프트웨어 구현은 다음과 같다.

  • Foxy (Windows): 중국 GnucDNA 파생 프로그램으로, 다른 G2 클라이언트와 상호 작용이 불가능하며, 자체 "Foxy"-네트워크를 사용한다. 이는 원래 G2와 거의 분리되어 있으며 G2로의 네트워크 누출이 있는 것으로 알려져 있다. 이론적으로는 G2와 호환 가능하다.
  • Morpheus (Windows)

참조

[1] 웹사이트 Developer discussion of similarities between Gnutella and Gnutella2 https://web.archive.[...] The Gnutella Developer Forum 2006-05-10
[2] 웹사이트 GDF Discussion on the Gnutella2 name https://web.archive.[...] The Gnutella Developer Forum 2006-05-10
[3] 웹사이트 Part of the Gnutella/Gnutella2 Flame War (1) https://web.archive.[...] The Gnutella Developer Forum 2006-08-06
[4] 웹사이트 Part of the Gnutella/Gnutella2 Flame War (2) https://web.archive.[...] The Gnutella Developer Forum 2006-08-06
[5] 웹사이트 Part of the Gnutella/Gnutella2 Flame War (3) https://web.archive.[...] The Gnutella Developer Forum 2006-08-06
[6] 웹사이트 Part of the Gnutella/Gnutella2 Flame War (4) https://web.archive.[...] The Gnutella Developer Forum 2006-08-06
[7] 웹사이트 Developer discussion on migration to Gnutella2 https://web.archive.[...] The Gnutella Developer Forum 2006-05-10
[8] 웹사이트 Gnutella2 Network history http://crawler.trill[...] Trillinux crawler (G2paranha) 2009-04-12
[9] 웹사이트 Packet Structure http://g2.trillinux.[...] Gnutella2 Wiki 2007-11-07
[10] 웹사이트 Gnutella2 Standard http://g2.trillinux.[...] Gnutella2 wiki 2007-11-07
[11] 웹사이트 Simple Query Language and Metadata http://g2.trillinux.[...] Gnutella2 Wiki 2007-11-07
[12] 웹사이트 UDP Transceiver - Gnutella2 http://g2.doxu.org/i[...] G2.doxu.org 2014-08-06
[13] 웹사이트 Q2 - Gnutella2 http://g2.doxu.org/i[...] G2.doxu.org 2014-08-06
[14] 웹사이트 QH2 - Gnutella2 http://g2.doxu.org/i[...] G2.doxu.org 2014-08-06
[15] 웹사이트 Developer discussion of Gnutella and Gnutella2 packet formats https://web.archive.[...] The Gnutella Developer Forum 2006-05-15
[16] 웹사이트 Adagio download {{!}} SourceForge.net https://sourceforge.[...] 2016-11-11
[17] 웹사이트 gtk-gnutella - The Graphical Unix Gnutella Client http://gtk-gnutella.[...] Gtk-gnutella.sourceforge.net 2014-08-06
[18] 웹사이트 OtherNetworksSupported - MLDonkey http://mldonkey.sour[...] 2016-11-11
[19] 웹사이트 Shareaza network share on the G2 network http://crawler.trill[...] Trillinux crawler (G2paranha) 2008-09-18
[20] 문서 UKHL = UDP Known Hub List
[21] 웹사이트 FileScope website: Statement about cross-platforum compatibility http://www.filescope[...] 2008-08-22
[22] 웹사이트 FileScope https://sourceforge.[...] 2021-06-25
[23] 웹인용 Developer discussion of similarities between Gnutella and Gnutella2 http://groups.yahoo.[...] 2010-07-05



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com