[지식창고]/네트워크

[ 컴퓨터 네트워크 ] 2.6 P2P applications

개발새발주발 2023. 4. 1. 21:03
728x90

제목에서 나오는 P2P : Peer to Peer 통신방식 .. 어딘가 익숙한데 .. ? 엇 ? 어디서 봤던 기억이 난다 ! 

바로 2.1 network of application에서 ! client-server 방식과 P2P방식을 함께 봤었다 ~ 

 

간략히 짚고 넘어가보자면 client-server , P2P 방식은 application의 아키텍쳐, 즉 애플리케이션의 설계도 혹은 청사진을 의미한다 ! 

*필자의 뇌가 아직 영어패치가 많이 적용되지 않아 아키텍쳐보단 설계도가 이해하기 쉬워 설계도라고 작성해보겠다. 

클라이언트- 서버 설계도에서 클라이언트는 서비스를 요청하는 측, 서버는 이 요청을 받아 처리하고 결과를 클라이언트에게 반환하는 환경이다. 서버는 항상 켜져있고 여러 클라이언트들의 요청을 처리하고 응답을 반환한다. 클라이언트는 일반적으로 인터넷을 통해 서버에 연결되어 요청을 보내며 서버는 요청을 받으면 해당 작업을 수행하고 결과를 클라이언트에게 전송하는 구조이다. 

 간단하게 클라이언트들끼리 서버에게 일을 계속 시킨다고 생각하면 된다. 불쌍한 서버 ..  

 

반면 P2P 설계도에서는 중앙 서버가 없다. 각각의 end-system(호스트, peer)이 직접 통신하며, 이 피어는 대부분 컴퓨터, 노트북, 폰 이나 서버와 같은 인터넷에 연결된 디바이스이다 ~~ 각각의 장치(피어)가 직접 통신하며 서로 다른 피어 간의 연결을 통해 데이터를 공유한다. 이러한 방식을 통해 P2P 네트워크는 분산 처리와 데이터 공유를 가능하게 한다는 것 ! 

 

그럼 오늘은 뭘 작성해볼까 ~ 라고 하면 바로 제목에서 눈치채셨을 P2P !

그리고 P2P와 클라이언트-서버를 비교해볼거다 근데 .. 비교지표는 무엇인고 살펴보니 바로 파일 분배 시간

그럼 피어끼리 어떻게 데이터 공유가 가능한 지에 대해서 알아보러 가자 ~ 


1. Pure P2P architecture 

순수 P2P 아키텍쳐라 .. 앞에서 봤다시피 중앙 서버가 없이 각각의 장치(피어)들이 직접적으로 통신하여 데이터를 공유하는 네트워크 아키텍쳐이다 ! 그럼 이 P2P의 특징과 예시를 살펴보자 

 

  • 특징 
    • always-on 서버가 없음 
    • 각각의 end-system끼리 직접적으로 통신하여 데이터를 공유
    • 피어들끼리 간헐적(intermittently)으로 연결되고 IP주소(인터넷 프로토콜 주소)를 변경한다. 
  • 예시 
    • 파일 배포(BitTorrent)
    • 스트리밍(KanKan)
    • VoIP(Skype)

 

 


 

2. File distribution 

- client -server vs P2P

파일 분배를 통해 뭘하려나 ? 하니 ~ 클-서와 P2P방식을 performance측면에서 비교를 해보려고 한다. 

그래서 질문을 하나 던지는데 .. 

 

Q. 1개의 서버에서 N개의 서버에 사이즈가 F인 파일을 분배해보려고 하는데 .. 얼마나 시간이 걸리나 ? 

우리의 강의자료는 질문만 던지지 않는다. 하나의 조건또한 주면서 이야기를 하는데 .. 

  • peer upload/download capacity is limited resource 
    : 피어의 업로드/다운로드 용량이 한정되어 있다 ! 

A1. 클라이언트-서버 아키텍쳐에서의 File distribution Time 

  • 서버 전송 : N개의 파일 복사본을 순차적으로 send(upload)해야한다. 
    • 1개의 복사본을 보내는 데 걸리는 시간 : F/us
    • N개의 복사본을 보내는 데 걸리는 시간 : NF/us
  • 클라이언트: 각각 파일 복사본을 다운로드 해야한다. 
    • d min = 가장 느린 클라이언트의 다운로드 속도 
    • F/d min : 가장 느린 클라이언트가 파일 하나를 다운로드하는데 걸리는 시간

→ 클라이언트 - 서버 방식을 사용하여 F를 N개의 클라이언트에게 배포하는 데 걸리는 시간 D(c-s)의 계산 

: D(c-s) >= max{ NF/us , F/dmin }

 

** Us : 서버 업로드 전송속도 

** di : peer i 의 다운로드 속도

** ui : peer i 의 업로드 속도 

 

즉, 더 오래 걸리는 경우를 선택하여 최악의 경우를 고려한다. 

이 때 F를 N개의 클라이언트에게 배포하는 데 걸리는 시간은 ,서버가 모든 파일 복사본을 전송하는 데 걸리는 시간 (NF/us)과, 가장 느린 클라이언트가 파일 하나를 다운로드하는 데 걸리는 시간(F/dmin)중 더 오래 걸리는 쪽을 선택해야한다 ! 

 


A2. P2P 아키텍쳐에서의 File distribution Time 

 

  • 서버 전송 : 서버가 적어도 한 개의 복사본을 업로드해야한다. 
    • 1개의 복사본을 보내는 데 걸리는 시간 : F/us
  • 클라이언트: 각 클라이언트는 파일 하나의 복사본을 다운로드해야한다.  
    • d min = 가장 느린 클라이언트의 다운로드 속도 
    • F/d min : 가장 느린 클라이언트가 파일 하나를 다운로드하는데 걸리는 시간
  • 클라이언트'들' : 모든 클라이언트가 파일 전체(NF bits)를 다운로드해야 한다.
    • 클라이언트들이 받을 수 있는 최대 전송률 : us + ∑ui 

→ P2P 방식을 사용하여 F를 N개의 클라이언트에게 배포하는 데 걸리는 시간 D(p2p)의 계산 

DP2P > max{F/us, F/dmin, NF/(us + ∑ui)}

 

마찬가지로 더 오래 걸리는 경우를 선택하여 최악의 경우를 고려한다. 이 때 F를 N개의 클라이언트에게 배포하는 데 걸리는 시간은 서버가 한 개의 복사본을 전송하는 데 걸리는 시간 (F/us), 가장 느린 클라이언트가 파일 하나를 다운로드 하는 데 걸리는 시간 (F/dmin), 그리고 클라이언트들이 받을 수 있는 최대 전송률로 인해 전체 파일을 다운로드하는 데 걸리는 시간 중 더 오래 걸리는 쪽을 선택해야한다.

 

Example : 클라이언트-서버 vs P2P

그림을 보면 Peer수가 증가할수록 client-server의 가장 효율적인 (minimum) 분배시간보다 P2P 아키텍쳐의 분배시간이 월등히 작음을 볼 수 있다. → 즉, P2P의 네트워크 효율이 좋다!라는 것을 말하고 있다 .

 

역시 제목까지 가져간 오늘의 주인공 P2P , 이 아키텍쳐의 file distribution에 대해서 더 자세히 알아보자 ! 


3. P2P file distribution 

BitTorrnet

: BitTorrent를 사용하여 파일 배포를 하는 P2P 아키텍쳐의 기본적인 동작 방식 

** torrent : group of peers exchanging chunks of a file

→ 파일 공유를 위한 네트워크 방식 중 하나로 여러 피어들이 협력하여 파일을 다운로드하고 업로드 하는 것을 의미

** tracker : 정보제공자, 토렌트에 참여하는 피어들의 상태를 추적하는 서버 

 

  1.  파일은 256kb 크기의 청크 (chunk)로 분할된다.
  2.  토렌트(torrent)내의 피어는 파일 청크를 주고 받는다. 
  3. 토렌트에 참여하는 피어 
    - 처음에는 청크를 갖고 있지 않지만 시간이 지남에 따라 다른 피어로부터 청크를 받아서 누적한다. 
    - 트래커에 등록하여 피어 목록을 받아들인 후, 일부 피어(neighbor이라고 함)와 연결한다.
  4. 다운로드 중인 피어는 다른 피어에게 청크를 업로드한다. → 다운 받는 동안 다른 peer에게 청크 업로드 
  5. 피어는 청크를 교환하는 다른 피어를 변경할 수 있다. 
  6. churn : P2P 네트워크의 특성 상 피어가 들어오고 나가는 일이 자주 발생하며 이런 현상을 지칭하는 말 
    (옮겨간다 ! ex. KT에서 SKT로 .. ) 
  7. 피어가 전체 파일을 갖게 되면, 이후 행동은 (이기적으로) leave하거나 (이타적으로)remain in torrent하는 방식으로 나뉜다.
    즉, 이후에 파일 배포를 하지 않고 떠나거나 다른 피어들에게 청크를 업로드하여 파일 배포에 기여할 수 있다. 

[시나리오]

오늘도 어김없이 등장한 우리의 앨리스 ~ ! 

Alice가 토렌트에 도착하면 트래커에서 피어 목록을 받아온다 ! 

이후 토렌트 내 다른 피어들과 청크를 교환하면서 파일을 다운로드한다.

동시에, Alice는 다른 피어들에게 업로드로 진행한다. 

이렇게 전체 네트워크의 다운로드 속도를 높일 수 있다 ! 

 

: BitTorrent에서 파일 청크의 요청과 전송 방식 

 

1. 청크 요청 

  • 서로 다른 피어(peer)가 어느 한 시점에는 파일 청크의 서로 다른 하위 집합을 가지고 있다. 
  • 주기적으로 Alice는 각 피어에게 피어들이 가지고 있는 청크 목록을 요청한다. 
  • Alice는 희귀한(rarest)청크를 우선적으로 요청한다. 
    : 희귀하다 = 네트워크 성능이 우수하다 ( 카피본이 많을수록 좋음 ! loss될 문제가 적으니까 ~ ) 

 

2. 청크 전송 : tit- for -tat 방식 (치고 빠지기) 

  • Alice는 현재 가장 높은 비율로 청크를 보내주는 4명의 피어에게 청크를 보내준다 
    • 다른 피어는 Alice에게 청크를 받지 못한다. 
    • 매 10초마다 상위 4명을 재평가한다. 
  • 매 30초마다 다른 피어를 무작위로 선택하여 청크를 보내준다.
    • 이전에 보내주지 않은 peer : optimistically unchoke
    • 새로 선택된 피어는 최상위 4명에 합류할 수 있음 

 

교수님께서 설명해주시길 .. 이곳에 대한 비유를 '가는말이 고와야 오는 말이 곱다'라는 이야기를 해주셨다 ~ 

다른 peer와 optimistically unchoke는 낙관적으로 말문이 트여서 서로 정보를 주고 받는 것 ! 낙관적으로 말문이 트이고 최상위 4명에 들어가면 똑같은 보답을 받는다는 것이다. 

 

다음 시나리오를 통해서 이해해보자 

 

[시나리오]

(1) Alice는 무작위로 선택한 Bob을 optimistic unchoke한다. 

(2) Alice가 Bob의 top-four providers중 하나가 되어 청크를 받고, 그에 대한 보답으로 Bob이 Alice에게 청크를 보내준다 ! 

(3) Bob이 Alice의 top-providers중 하나가 되어 청크를 받음


 

오늘 포스팅은 애플리케이션의 두 아키텍쳐에 대해서 알아보았다. 

두 아키텍쳐의 네트워크 효율을 파일 분배로 알아보았고 효율적인 P2P 방식에 대해서 더 자세히 알아보았다 ~ ! 

 

네트워크 , OS와 같은 컴퓨터와 관련된 과목을 배우다보면 사람 사는 세상처럼 돌아간다는 것을 알 수 있다!

신기하면서도 재밌고 하지만 댑따 어렵고 . . . .

아무튼 즐겁게 보자 ~~  

 


 

[출처 및 참고]

한국항공대학교 「컴퓨터 네트워크」 강의 자료