익명 사용자
로그인하지 않음
계정 만들기
로그인
youngwiki
검색
P2P architecture 문서 원본 보기
youngwiki
이름공간
문서
토론
더 보기
더 보기
문서 행위
읽기
원본 보기
역사
←
P2P architecture
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
상위 문서: [[Application Layer]] ==개요== 많은 애플리케이션들은 항상 켜져 있는 인프라 서버에 크게 의존하는 클라이언트-서버(client-server) 구조를 사용한다. 하지만, P2P 구조에서는 항상 켜져 있는 인프라 서버에 거의 (또는 전혀) 의존하지 않는다. 대신 간헐적으로, 임의로 연결되는 호스트 쌍, 즉 피어(peer)들이 서로 직접 통신한다. 이 피어들은 서비스 제공자가 소유한 것이 아니라, 사용자들이 제어하는 데스크탑과 노트북이다. 해당 문서에서는 P2P 애플리케이션이 하나의 파일을 단일 서버로부터 다수의 호스트(피어)에게 배포하는 것을 살펴본다. ==Scalability of P2P Architectures== 클라이언트-서버 아키텍처와 P2P 아키텍처를 비교하고, P2P의 scalability을 설명하기 위해, 고정된 수의 피어에게 파일을 배포하는 경우를 살펴보자. [[파일:An illustrative file distribution problem.png|프레임없음|500x500픽셀]] 서버와 피어들은 인터넷에 접속 링크로 연결되어 있다. 서버의 업로드 속도를 us, i번째 피어의 업로드 속도를 ui, 다운로드 속도를 di라고 하자. 또한 배포될 파일의 크기를 F(비트 단위), 파일을 받고자 하는 피어의 수를 N이라고 하자. 배포 시간은 N개의 피어가 모두 파일을 받을 때까지 걸리는 시간이다. 이떄 core network는 충분한 대역폭을 가지고 있고, bottleneck link는 access network에만 존재한다고 가정하자. ===Server-Client 구조의 배포시간=== 서버-클라이언트 구조에서는 오직 서버 혼자서 모든 파일을 배포한다. 이때 서버는 각 피어에게 파일 사본을 하나씩 보내므로, 총 NF bit를 us의 업로드 속도로 배포한다. 따라서 배포시간은 약 NF/us이다. 또한, d<sub>min</sub>을 모든 피어의 가장 낮은 다운로드 속도라고 하면, 해당 피어는 F bit를 다운로드하는데 약 F/d<sub>min</sub>초가 걸린다. 이를 통해 서버-클라이언트 구조의 배포시간은 다음과 같이 나타내어질 수 있다. D<sub>c-s</sub> <math>\ge</math> max{NF/us, F/d<sub>min</sub>} 위 식에서 알 수 있는 것은 NF/us가 F/d<sub>min</sub>을 압도할 정도로 커진다면, D<sub>c-s</sub>의 최솟값은 N이 증가함에 따라 선형적으로 증가한다. 즉, 피어의 수가 1,000명에서 100만 명으로 1,000배 증가하면, 파일을 모두에게 배포하는 데 걸리는 시간도 1,000배 증가한다. ===P2P 구조의 배포시간=== P2P 구조에서는 각 피어가 서버를 도와 파일을 배포한다. 피어가 일부 파일 데이터를 받으면, 자신의 업로드 대역폭을 이용해 다른 피어들에게 그 데이터를 재배포한다. 이 때문에 P2P 구조의 배포 시간을 계산하는 것은 클라이언트-서버 구조보다 더 복잡하다. 왜냐하면 피어들이 파일의 일부를 어떻게 배포하느냐에 따라 배포 시간이 달라지기 때문이다. 그럼에도 불구하고 최소 배포 시간에 대한 단순한 식을 도출할 수 있다. 이때 다음과 같은 관찰을 한다: * 배포 초기에 파일을 가진 건 오직 서버뿐이다. 따라서 파일의 모든 비트는 최소 한 번은 서버의 접속 링크를 통해 전송되어야 하므로, 최소 배포 시간은 F/us 이상이다. 하지만 한번 전송된 비트는 피어들이 재배포 하므로, 전송된 비트를 서버가 다시 전송할 필요는 없다. * 다운로드 속도가 가장 느린 피어는 파일을 최소 F/dmin 초 이상 걸려야 받을 수 있다. * 시스템 전체의 업로드 속도는 서버의 업로드 속도 us과 모든 피어의 업로드 속도 u1,..., uN의 합이다. 따라서 이 시스템은 NF 비트를 모든 피어에게 전송해야 하므로, 최소 NF / (us + u1 + ... + uN)의 시간이 소요된다. 위 세 가지를 종합하면 P2P 구조의 배포시간은 다음과 같이 나타내어진다. D<sub>P2P</sub> <math>\ge</math> max{F/us, F/d<sub>min</sub>, NF/(us + <math>\sum_{i=1}^{N}</math>ui)} [[파일:Distribution time for P2P and client-server architectures.png|프레임없음|400x400픽셀]] 위는 모든 피어의 업로드 속도가 u로 동일하다고 가정할 때, 클라이언트-서버와 P2P의 최소 배포 시간을 비교한 것이다.<ref>F/u = 1시간, us = 10u, 그리고 dmin ≥ us로 설정하였다.<br>즉, 피어의 다운로드 속도는 배포 시간에 크게 영향을 주지 않는다고 가정한 것이다.</ref> 위의 그림에서 볼 수 있듯, 클라이언트-서버 구조에서는 피어 수가 증가할수록 배포 시간이 선형적으로 무한히 증가한다. 반면, P2P 구조에서는 배포 시간이 항상 클라이언트-서버 구조보다 짧으며, 피어 수와 관계없이 1시간 이하로 유지된다. 이는 P2P 구조의 애플리케이션이 자기 확장성을 가지고 있어 유저가 늘어남에 따라 이를 지원하는 네트워크 또한 커지기 때문이다. ==BitTorrent== '''BitTorrent'''는 파일 배포를 위한 P2P 프로토콜이다. BitTorrent 용어에서, 특정 파일 배포에 참여하는 모든 피어들의 모음을 토렌트('''torrent''') 라고 부른다. 토렌트에 있는 피어들은 서로에게서 같은 크기의 청크('''chunk''') 들을 다운로드하며, 일반적인 청크 크기는 256KB이다. 피어가 처음 토렌트에 참여하면 아무 청크도 갖고 있지 않지만 파일을 다운로드하며 점점 더 많은 청크를 쌓아가게 된다. 다운로드를 하는 동안, 동시에 다른 피어들에게 청크를 업로드하기도 한다. 그러나 한 피어가 전체 파일을 획득하면, 자기중심적으로(selfishly) 토렌트를 떠날 수도 있고, 또는 이타적으로(altruistically) 토렌트에 남아 다른 피어들에게 계속 청크를 업로드할 수도 있다. BitTorrent는 P2P의 작동 과정 뿐만 아니라, 이기적인 피어를 어떻게 처리할 지에 대한 메커니즘 또한 포함한다. ===BitTorrent 작동방식== BitTorrent는 트랙커('''tracker''')라는 infrastructure node가 존재한다. 피어는 토렌트에 참여할 때 트랙커에 등록하고, 주기적으로 자신이 참가 중이라는 신호를 보낸다. 이를 통해서 트랙커는 현재 토렌트에 참여중인 피어들의 리스트들을 관리한다. 만약 준영이 토렌트 서비스를 새로 이용하고자 한다고 하자. 트랙커는 준영이에게 토렌트에 참여하는 피어들의 목록을 보내고, 이를 통해서 준영이는 이웃('''Neighbor''')이라고 하는 여러 피어들과 연결된다. 그리고 준영이는 주기적으로 자신의 이웃 피어들에게 "너는 어떤 청크 갖고 있니?" 하고 요청하고, 이웃이 L명이라면, L개의 청크 리스트를 받게 된다. 그 정보를 바탕으로 준영이는 자신이 아직 갖고 있지 않은 청크를 선택해서 요청하게 된다. 이러한 과정을 통해서 준영이는 파일을 구성하는 모든 청크를 얻을 수 있게 된다. ===Rarest first 전략=== 위의 예시에서 만약 준영이가 가지고 있지 않은 청크들 중에서 아무거나 먼저 요청하면 어떻게 될까? 해당 토렌트에는 다수의 피어가 가지고 있는 흔한 청크가 존재한다. 이때 많은 피어가 이미 갖고 있는 청크는 여러 이웃에게서 쉽게 찾을 수 있기 때문에 청크에 대한 요청도 흔한 청크로 우선적으로 쏠리게 되는경향이 만들어진다. 그러면 그 흔한 청크는 더 많은 피어에게 퍼지게 되며, 해당 현상이 가속화된다. 심지어, 드문 청크는 몇몇만 가지고 있기 떄문에 해당 청크를 가지고 있는 피어들이 토렌트에서 나가버리는 경우 해당 청크를 더 이상 구할 수 없어 토렌트 전체가 멈추는 현상까지 생길 수 있다. 이를 해결하기 위한 전략이 '''rarest first 전략'''이다. Rarest first 전략은 구하기 힘든 청크를 우선적으로 요청하는 전략이다. 이는 피어가 이웃이 가지고 있는 청크 리스트를 확인한 후, 자기가 아직 가지고 있지 않은 청크 목록 중에서 이웃 중 가장 적은 수가 갖고 있는 청크를 우선적으로 요청함으로서 이루어진다. 이를 통해서 희귀한 청크를 먼저 퍼트리고, 모든 청크의 수를 비슷하게 유지하여 보다 안정적이고 빠르게 파일을 퍼뜨릴 수 있다는 장점이 있다. ===Tit-for-tat 전략=== 토렌트는 이기적인 피어에게 불이익을 주고, 이타적인 피어에게 혜택을 주기위해 tit-for-tat 전략을 사용한다. 위 예시에서 준영이에게는 '''top 4 neighbor'''라는 자신에게 가장 빠르게 데이터를 보내주고 있는 4명의 이웃 피어들이 존재하고, 준영이는 이들에게만 청크를 보내준다. 이 top 4 neighbor는 '''unchoked neighbor'''라고도 불린다.<ref>반대로 나머지 피어들은 choked neighbor라고 불린다.</ref> 또한, 각 30초마다 준영이 무작위 이웃 한명(승빈이라고 하자)을 선택하여 청크를 보내고, 해당 피어는 '''optimistically unchoked peer'''라고 불린다. 이때 준영이가 승빈이에게 청크를 보내면, 승빈도 준영에게 데이터를 보내주게 되고, 만약 준영에게 보내는 속도가 충분히 빠르다면 승빈은 준영의 top 4 neighbor로 올라갈 수 있다. 이러한 전략을 통해서 속도가 잘 맞는 피어들끼리 서로 청크를 주고 받게 된다. 이를 통해서 업로드 속도가 빠른 피어는 서로 빠르게 데이터를 주고받게 된다. 반대로 무임승차자(freerider) 는 청크를 못 받게 된다. 아무에게도 top 4 neighbor로 선택되지 않기 때문이다. ==각주== [[분류:컴퓨터 네트워크]]
P2P architecture
문서로 돌아갑니다.
둘러보기
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
위키 도구
위키 도구
특수 문서 목록
문서 도구
문서 도구
사용자 문서 도구
더 보기
여기를 가리키는 문서
가리키는 글의 최근 바뀜
문서 정보
문서 기록