비트토렌트 프로토콜은 기존의 파일 다운로드 방식인 서버-클라이언트 구조의 일대 일 파일 공유 방식이 아닌 클라이언트-클라이언트 구조의 일대다의 파일 공유방식을 사용하는 대표적인 프로토콜이다.
일대다 파일 공유 방식은 파일을 여러 개의 조각(piece)으로 나누어 각 클라이언트에 조각들을 서로 교환하는 방식이다. 클라이언트는 파일 조각들을 소유/공유하고 있는 클라이언트와 세션을 생성하여 필요한 조각에 대하여 전송을 요청한다. 각 클라이언트들은 공유파일을 가지고 있는 새로운 클라이언트를 발견하면 자신이 가지고 있는 조각의 정보를 알려주고 새로운 클라이언트에게 자신이 필요한 조각을 요청한다. 이러한 방식 때문에 하나의 클라이언트는 여러 개의 클라이언트들과 무수히 많은 세션(Multiple Session)을 생성하게 되며 세션이 계속하여 늘어남에 따라 사용자의 다운로드 속도는 점진적으로 늘어나 클라이언트가 사용하는 인터넷 환경의 최대 대역폭까지 다운로드 속도가 증가한다.
비트토렌트 프로토콜은 파일을 공유하는 많은 클라이언트들과 동시에 많은 세션들을 생성하여 매우 빠른 다운로드 속도로 파일을 받을 수 있다. 하지만 무수히 많은 세션을 생성하여 파일을 공유하는 방식은 통신망 사업자에게 문제점을 야기 시키기 때문에, 이러한 비트토렌트 프로토콜의 원리에 대한 이해가 필요하다.
비트토렌트와 같은 P2P 방식은 클라이언트와 클라이언트 간에 세션이 직접 생성되는 것과 공유하고자 하는 파일을 여러 개의 조각(Piece)으로 나누어 주고받는 것이 특징이다.
비트토렌트 프로토콜을 사용하여 파일을 다운로드 받기 위해서는 비트토렌트 클라이언트 프로그램(e.g., BitTorrent, uTorrent 등)을 설치하여야 한다. 설치 이후 사용자는 웹(토렌트 커뮤니티, 웹 서핑 등)을 통해 다운로드 받고자 하는 파일의 정보가 담긴 토렌트 파일(확장자: .torrent)을 받아 실행하여야 한다. 토렌트 파일은 공유 할 파일을 가지고 있는 사용자가 자료 공유를 목적으로 토렌트 파일을 작성하여 웹에 게시하는 것이 일반적이며, 자료를 얻고자 하는 유저는 해당 토렌트 파일을 받아 실행하면 자료를 다운로드 받을 수 있다. 위의 그림 41은 비트토렌트 클라이언트를 이용하여 파일을 다운로드 받는 절차를 보여 주고 있다.
① 토렌트 파일 (.torrent) 받기
사용자는 “해리포터.avi”를 다운로드 받기 위해 웹 검색 등을 통해 토렌트 파일인 “해리포터_avi.torrent”를 다운로드 받아서 실행하여야 한다. 해당 토렌트 파일에는 “해리포터.avi”를 위한 고유의 해시 값이 포함되어 있으며 트래커의 URL 주소가 포함되어 있다. 해시 값은 파일 식별자로써 동일한 파일 이름을 가진 다른 콘텐츠와 구분을 위하여 생성되는 고유의 값이며 트래커의 URL은 파일을 공유하는 피어들의 정보를 관리하는 서버(트래커)를 지정하는 것이다. 만약 동일한 파일에 대하여 트래커의 URL이 서로 다르게 적혀있는 토렌트 파일을 클라이언트에서 실행하게 되면 클라이언트들의 정보를 서로 다른 트래커에서 관리하게 되므로 서로 다른 트래커를 이용하는 클라이언트들 간에는 파일을 공유할 수 없다.
② 트래커에 피어 리스트 (IP 주소 리스트 ) 요청하기: Tracker Request
“해리포터.avi”를 다운로드 받고자 하는 사용자가 토렌트 파일을 실행하면 비트토렌트 클라이언트는 토렌트 파일에 포함된 “해리포터.avi”의 고유 해시 값을 트래커(토렌트 파일에 포함되어 있는 URL)로 전송한다. 이 메시지를 Tracker Request(HTTP Get)라고 한다. 이와 같이 동일한 토렌트 파일을 사용하여 “해리포터.avi”를 공유하고 있는 모든 피어들은, 트래커에게 “해리포터.avi”의 해시 값을 보내게 된다. 피어들로부터 Tracker Request를 받은 트래커는 “해리포터.avi”의 해시 값에 해당하는 스웜(Swarm)을 생성하고 “해리포터.avi”의 해시 값을 보낸 피어들의 IP 주소를 이 스웜을 통해 관리한다.
③ 피어 리스트(IP 주소 리스트 ) 받아오기: Tracker Response
Tracker Request를 받은 트래커는 해당 메시지에 포함된 “해리포터.avi”의 해시 값을 참조하여 해당하는 스웜이 존재 하는지를 확인한다. 만약, 존재하지 않는다면 새로운 스웜을 생성하고 다른 피어로부터 Tracker Request가 들어올 때까지 기다린다. 기존에 만들어진 스웜이 존재하여 피어들의 정보가 있을 경우에는 스웜에 포함되어 있는 피어들을 리스트로 만들어 Tracker Response 메시지(HTTP Response)에 포함하여 응답한다. Tracker Response에 들어있는 피어 리스트는 피어들의 IP 주소로 이루어지며 Tracker Request를 보낸 피어에게 알려주는 피어 리스트는 50개 피어들의 IP 주소로 구성된다. 만약 스웜에 존재하는 피어의 개수가 50개 이상인 경우, 트래커가 50개가 넘는 피어들 중에 무작위로 피어의 IP 주소를 선정하여 피어 리스트를 구성한다.
④ 파일 다운로드 받기
피어 리스트를 받은 비트토렌트 클라이언트는 모든 피어 IP 주소로 “해리포터.avi”의 해시 값을 보낸다. 이 메시지를 받은 피어들 중에 “해리포터.avi” 파일 공유가 가능한 피어는 동일한 “해리포터.avi”의 해시 값으로 응답 하게 된다. 이러한 해시 교환을 통해 피어와 피어는 세션을 생성하게 되고 생성된 세션을 통해 조각을 교환한다. 비트토렌트 프로토콜은 이러한 방식으로 트래커로 부터 다수 피어들의 IP 주소(기본 설정 50개, 실제 운영에서는 200개)를 받아 세션을 생성하므로 하나의 클라이언트는 동시에 여러 개의 세션을 생성하게 된다.
댓글 없음:
댓글 쓰기