[컴퓨터네트워킹] 12. P2P

Yoons·2023년 4월 8일
0
post-thumbnail

❗️Notice❗️

저의 velog에 작성된 글은 모두 저의 주관적인 생각 및 이해를 바탕으로 작성된 글이므로 
정확하지 않은 내용을 있을 수 있음을 알립니다.

[교재] Computer Networking : A Top-Down Approach 8th

저번 시간까지는 Application architecture 중 client-server architecture에 대한 내용을 학습했습니다. 지금부터는 application architecture의 또다른 architecture인 P2P architecture에 대해서 알아보도록 하겠습니다.

1. P2P architecture

사실 P2P architecture의 경우 이전에 client-server architecture와 함께 소개해드린 적이 있습니다.

[컴퓨터네트워킹] 07편 내용 중

user host끼리 통신, 자체적으로 network를 확장하지만 관리가 복잡함

peer to peer에서의 server와 client는 모두 user입니다. user끼리 소통하기 때문에 client-server에서 server와는 달리 항상 작동하지 않습니다. peer는 request(client의 성격) 뿐만 아니라 service capability(server의 성격) 또한 가지고 있기 때문에 자체적으로 network를 확장한다는 특징이 있습니다. peer의 IP 주소는 매번 바뀌기 때문에 관리 또한 힘듭니다. 이 방식을 사용하는 대표적인 예시로는 P2P file sharing이 있습니다.


2. File distribution : client-server vs P2P

client-server와 P2P의 file distribution 시간을 서로 비교해 봅시다.

우선 여기에서 따져봐야 할 것은 bottleneck입니다. bottleneck은 [컴퓨터네트워킹] 04에서 다뤘으니 궁금하신 분들은 확인해보시면 됩니다.

bottleneck을 따져봐야하는 이유는 속도를 따지기 위해서는 throughtput이 얼마나 되는가?의 문제와 같기 때문입니다.

이 상황에서 client-server에서의 file distribution delay는 어떻게 될까요?

case 1) throughtput : server upload to network > client download from network

이 경우 최종적인 throughtput은 작은 값인 client download from network에서 delay를 따지면 됩니다. client가 network로부터 file을 download하는 속도는 각 client당 크기가 F인 파일을 d의 속도로 다운로드 하기 때문에 F/d입니다.

하지만 여기에서는 가장 download가 느린 client를 바라보고 최대 delay를 계산해야하기 때문에 F/d_min이 최종적인 client download from network에서의 delay가 될 것입니다.

case 2) throughtput : server upload to network < client download from network

이 경우 최종적인 throughtput은 server upload to network서 delay를 따지면 됩니다. server가 network로 file을 upload하는 속도는 각 크기가 F인 파일 N개를 u_s의 속도로 업로드 하기 때문에 NF/u_s입니다.

여기서 의문을 가질 수 있는 부분은 server가 network에 대표로 하나만 올리고 그 파일을 여러명이 copy해서 보면 되는거 아닌가?라는 의문을 가질 수 있지만 client-server는 그렇게 작동하지 않습니다. N명이 있고, 모두가 file을 가져야 한다면 server는 N개 만큼 file을 upload 해야하죠.

결과적으로 case 1과 case 2를 합쳐보면 client-server에서의 file distribution delay는 다음과 같습니다.

D >= max{NF/u_s, F/d_min}

여기에서는 N이 늘어나면 늘어날 수록 delay가 선형적으로 커지는 것을 확인 할 수 있습니다.


다음으로 **P2P에서의 file distribution delay**는 어떻게 될까요?

여기에서는 3가지의 경우가 있습니다. client-server와 같이 server upload to network, client download from network가 있고, 특별하게 client upload to network의 경우도 있죠. 각 경우에 대해 살펴보겠습니다.

case 1) throughtput : server upload to network > client download from network

이 경우 작은 값인 client download from network에서의 delay를 계산하면 됩니다. 여기에서는 clinet-server에서의 계산과 다를 것 없이 F/d_min이 됩니다.

case 2) throughtput : server upload to network < client download from network

이 경우 server upload to network에서 delay를 계산하면 되는데 여기에서는 조금 달라집니다. client-server에서는 N명이 사람이 있고, 모든 사람이 같은 파일을 원하면 server가 N개의 파일을 모두 upload 해야했기 때문에 NF/u_s가 됐지만, P2P에서는 하나의 파일만 올려주면 그 파일을 peer끼리 나눠서 보기 때문에 하나의 파일만 올려주면 됩니다. 따라서 F/u_s가 됩니다.

**case 3) throught : both server and client upload to network

이 경우는 조금 특별합니다. client도 여기서는 upload 할 수 있기 때문에, network 입장에서는 client가 upload 하는 시간과 server가 upload 할 수도 있습니다. 따라서 크기가 F인 file N개를 u_s + sum(i = 1 to N) u_i의 capasity로 upload하기 때문에 NF/(u_s + sum(i = 1 to N) u_i) 가 됩니다.

D >= max{F/u_s, F/d_min, NF/(u_s + sum(i = 1 to N) u_i)}

여기에서는 client-server와 달리 N이 늘어나면 분자와 분모가 같이 커지면서 delay가 client-server만큼 커지지 않습니다.

이것은 밑에 그래프를 통해서 확인할 수 있습니다.


3. P2P file distribution : BitTorrent

P2P에서 file sharing을 하는 대표적인 application인 BitTorrent에 대해서 알아보겠습니다.

torrent는 특정 파일을 원하는 사람들을 묶어놓은 하나의 group이고, tracker는 사람들이 어떤 파일을 원하는지 list를 가지고 있는 server라고 생각하시면 됩니다.

Alice라는 사람이 특정 파일을 원해서 tracker에게 알려주면 tracker는 그 파일을 가지고 있는 사람과 연결을 시켜줍니다.

연결이 되면 다른 peer들과 본인이 가지고 있는 file list를 보여주면서 필요한 file을 요청합니다.

여기서 file의 우선 순위는 특정 file을 가지고 있는 사람이 별로 없는, 즉 rare한 file들이 우선적으로 배정됩니다. 또 언제 받을 수 있을지 모르기 때문이죠.

그런데 여기에서 문제가 하나 발견됩니다. 그것은 바로 peer가 file을 받고, 다른 peer에게 다른 file을 sharing 해줘야 하는데, 소위 말하는 먹튀를 할수도 있죠. 그래서 BitTorrent에서는 tit-for-tat 방식을 이용합니다. 이 방식은 10초마다 본인과 거래를 잘 한 top 4를 선정해서 공유하는 겁니다.

그런데 이 방식도 하나의 문제가 생깁니다. 매번 받는 사람에게만 받기 때문에 file variety가 좋지 않을 겁니다.

그래서 매 30초마다 random하게 peer를 골라서 match 해 줍니다. match 된 후에는 일단 file을 막 보내서 상대방의 top 4에 일단 올라가면 상대방은 그때부터 해당 peer와 활발하게 file sharing을 하겠죠? 결론적으로 좋은 file을 받기 위해서는 우선 좋은 file을 먼저 share 해줘야 한다는 겁니다.


마치며

여기까지 P2P architecture에 대해 알아보았습니다. 조금 복잡한 듯 아닌 듯 하네요..ㅋㅎㅋ 다음 시간에는 video streaming과 content distribution에 대해 알아보겠습니다. 수고하셨습니다 :)

profile
모든 글은 저의 눈물을 머금으며 작성한 글이니..재밌게 봐주세요 :) 깃헙 맞팔@

0개의 댓글