그누텔라

누텔라 또는 그누텔라(Gnutella)는 중앙 집중식 서버를 두지 않고 P2P 파일 공유 네트워크를 구성하기 위한 분산 소프트웨어 프로젝트이다.

역사 
2000년 초에 AOL의 자회사인 널소프트의 저스틴 프랑켈(Justin Frankel)과 톰 페퍼(Tom Pepper)가 첫 번째 프로그램을 개발했다. 그 해 3월 14일 Nullsoft에서 파일을 내려받을 수 있었으며, Slashdot에 소개된 첫 날 수 천명이 프로그램을 내려 받았다. Nullsoft의 모회사인 아메리카 온라인(AOL)이 당시 음악/미디어 쪽의 거인인 타임 워너와 합병하려던 차였기 때문에 배포된 다음날 내려 받기는 중지된다.

하지만 이미 비밀은 누출되어 버린 뒤였다. Nullsoft가 올렸다가 지운 그 코드를 해커들이 낚아채서 이를 바탕으로 자신들만의 새로운 소프트웨어로 만들었다. 그 결과 불과 몇 주일 만에 웹 상에는 여러 종의 상호호환적인 누텔라 유사품이 등장한다.

누텔라는 냅스터와 달리 중앙에서 개입하는 부분이 전혀 없다. 2001년초 냅스터의 법정 공방으로 P2P 네트워크가 유명세를 타게 되고 누텔라는 많은 사용자를 확보하게 된다. 하지만 초기 프로토콜의 확장성 문제 (사용자가 많아질수록 다운로드가 어려워지는 문제)가 드러나게 된다. 개발자들이 확장성 문제를 극복하는 새로운 누텔라를 개발하며, 새로운 피어간 경로 설정 기법인 "ultrapeers" 개념을 제시한다.

"누텔라"는 특정한 프로젝트나 프로그램의 이름뿐만 아니라, 여러 클라이언트들에게 사용되는 일반적인 프로토콜의 의미를 갖기도 한다. 곳곳에서 새로운 클라이언트와 프로토콜들이 개발되고 있으므로, "누텔라"가 미래의 P2P 표준이 될 것이라는 장담은 할 수 없다.

Frankel과 Pepper는 누텔라를 개발하는 동안 Nutella(spread의 한 종류)를 많이 먹었고 소스를 GNU GPL 라이선스 하에 배포해서 "Gnutella"라는 이름이 탄생했다. 누텔라는 GNU 프로젝트와 연관이 없다.

동작 방식 
누텔라 네트워크에 참여하는 것은 어렵지 않다. 누텔라 소프트웨어 패키지 중 하나를 웹을 통해 다운로드한 다음 프로그램을 설치한 뒤, 누텔라 네트워크 상의 적어도 하나의 다른 노드를 찾아 연결하면 된다.

누텔라 노드를 찾는 방법은 클라이언트 프로그램에 미리 등록되어 있는 노드를 이용하는 방법, "Gwebcache"를 이용하는 방법, 그리고 IRC 채팅방에서 찾는 방법이 있다.

새로 누텔라 네트워크에 접속하고자 하는 노드 A와 기존에 누텔라에 접속해 있던 노드 B가 존재한다고 하자. 노드 A가 노드 B와의 연결을 완료하면 노드 B는 누텔라에 연결된 노드들의 주소를 노드 A에게 전송한다. 노드 A는 일정 수준 이상의 노드들(사용자가 상한선 결정)과 연결될 때까지 수동으로 설정한 주소와 다른 노드들이 전송해 준 노드들의 목록을 이웃으로 추가해 나간다. 연결을 시도해서 연결이 정상적으로 이루어진 노드만을 이웃으로 인정한다.

파일을 찾기 위해서 키워드를 치면, 그 요청은 자신과 가장 가까운 이웃 노드로 보내진다. 이 메시지를 받은 컴퓨터는 먼저 자신의 하드 디스크 드라이브를 뒤진 다음 맞는 것이 있으면 그 사실을 노드 A에게 알려주고 요청을 또 다른 노드로 다시 전송한다. 이걸 받은 노드는 또 똑같은 과정을 반복한다. 그 결과, 단 한 번의 요청이 순식간에 수천 대의 컴퓨터로 퍼져나갈 수 있다.

노드 A가 요청한 파일을 가지고 있는 노드는 노드 A와 직접 통신하여 전송여부를 결정한다. 만일 요청한 파일이 여러 노드에 동시에 존재한다면 노드 A는 분할 다운로드를 수행하여 다운로드 속도를 높인다. 한 번 이웃으로 등록된 노드들은 프로그램 종료후 다음에 다시 사용할 수 있다.

프로토콜의 특징과 확장 
누텔라는 질의 플러딩 프로토콜이다. 누텔라 0.4 버전은 다섯가지의 패킷 유형을 제공한다.

 ping: 네트워크 호스트 찾기
 pong: 핑(ping)에 대한 응답
 query: 파일을 찾기 위해
 query hit: query에 대한 응답
 push: (방화벽 뒷쪽의 노드에게) 요청한 파일 다운로드

패킷 유형들은 주소 누텔라 네트워크를 찾는 것과 관련되어 있고, 파일 전송은 HTTP를 통해 이루어진다.

현재 누텔라 프로토콜의 개발은 GDF(Gnutella Developer Forum)에서 주도하며, 소프트웨어 벤더와 GDF의 개발자들에 의해 프로토콜의 개선이 이루어지고 있다. 개선 내용은 지능적인 질의 경로 설정, SHA checksums, 여러 노드로부터 동시에 내려받기(swarming)등이 있다.

현재 누텔라 프로토콜 개발 웹사이트에서는 누텔라 0.6 스펙을 마지막으로 프로토콜을 완성하려고 하고 있다. 0.4 버전은 오래된 프로토콜이지만 아직도 사용되고 있으며, 이를 막을 방법은 없다.

2003년 1월, Shareaza는 검색을 위해 TCP가 아닌 UDP를 사용하는 누텔라2 프로토콜을 발표했다. 누텔라 2는 패킷 포맷에 XML 기법을 적용하고 많은 확장 기능들을 포함한다. 하지만 누텔라2를 지원하는 다른 클라이언트는 Gnucleus뿐이며 누텔라 개발자들은 GDF의 승인을 받지 않은 누텔라 2를 인정하지 않는다.

같이 보기 
 누텔라2

참조 사이트 
 https://web.archive.org/web/20040812002643/http://www.emh.co.kr/xhtml/p2p_and_liberalism.html

파일 공유 네트워크
해시 자료 구조