IT 지식/네트워크(Network)

컴퓨터 네트워크 - P2P applications

나아가는중 2021. 11. 29. 22:17
반응형

P2P (Peer to Peer, Peer-Peer)

P2P는 단말(end system = peer) 간에 양방향 파일 전송 시스템이다. 각 단말이 서버이면서 동시에 클라이언트의 역할을 한다. P2P에서 파일 전송은 망을 구성하는 peer들의 성능에 의존되는 통신망이다. P2P를 사용하는 대표적인 프로그램으로 비트토렌트, 소리바다 등이 있다.

 

클라이언트 서버구조에서는 클라이언트(peer)가 늘어날수록 전송 속도가 선형적으로 증가하는 반면, P2P 구조에서는 Peer가 증가하더라도 비선형적으로 전송 속도가 크게 늘어나지 않는다. P2P가 큰 네트워크에서도 파일 전송에 더 적은 시간이 걸리며 확장성이 있다.

 

Pure P2P

Pure P2P 구조에서는 always-on 서버(중앙 서버)가 존재하지 않고 peer(end system) 간에 직접 통신이 이루어진다. peer는 간혈적으로 접속(연결)하며 IP주소가 변경(동적 IP주소) 될 수 있다. 네트워크 구조(범위)가 커져도 동작이 잘되며 확작성(scalable)한 장점이 있다.

 

Hybrid of client-server and P2P

하이브리드 형태는 기본적으로 P2P의 방식이지만 중앙 서버가 존재한다. 중앙 서버는 통신하고자 하는 상대방의 주소를 가지고 있어 클라이언트는 중앙 서버를 통해 상대의 주소를 얻는다. 중앙 서버를 통해 주소를 얻을 뿐이지 통신은 클라이언트 상호간에 직접 이루어진다. 하이브리드 방식은 대표적으로 Skype가 있다.

 

 

Napster

 

초기의 P2P는 중앙 디렉토리 서버(centralized directory server)가 존재하는  "Napster" 디자인으로 음악 공유의 목적으로 사용되었다. 우리나라에는 대표적으로 소리바다가 이에 해당된다.

 

이 모델에서 Peer는 연결을 할 때 IP주소와 어떤 파일을 가지고 있는지 정보를 중앙 디렉토리에 등록하였다. 파일 전송은 Peer 간에 하였지만, 파일의 위치를 찾기 위해서는 중앙 디렉토리에 의존적이었다. 

 

Peer에서 어떠한 파일을 다운로드 받고 싶으면 중앙 디렉토리에 질의(query)를 보내고, 중앙 디렉토리는 해당 파일을 가지고 있는 Peer의 정보를 응답해주었다. 받은 정보로 Peer 간 연결을 맺고 파일을 다운로드하였다. 

 

이 모델의 문제점은 중앙 디렉토리에 장애가 발생하면 전체 시스템이 동작이 안되며, 중앙 디렉토리에 트래픽이 발생하면 전체 성능 저하의 문제가 있었다. 마지막으로 중앙 디렉토리를 운영하는 회사에서 저작권의 문제로 운영을 못하게 되었다.

 

Gnutella

 

Gnutella에서부터는 중앙 서버가 존재하지 않는 완전 분산 구조이며 프로토콜의 동작이 공개되어이다. TCP 연결이 되어 있는 네트워크(overlay network) 상에서 파일을 찾기 위한 질의를 flood(모든 곳으로 전송) 방식으로 전달한다. 파일을 가진 Peer를 찾으면 해당 호스트로 직접 TCP 연결을 맺고 파일을 다운로드 한다. 

 

파일 다운로드를 위해 Peer는 query message를 TCP연결을 맺고 있는 주변 Peer들에게 보낸다. 만약 주변 Peer들이 파일을 가지고 있지 않으면 query message를 받은 Peer도 주변 Peer들에게 query message를 보낸다. 이렇게 홍수가 난 듯이 퍼진다 하여 flood 방식이라 하고, 과도한 flood 트래픽이 발생할 수 있어 이를 방지하기 위해 최대 전송(forward)되는 홉수를 제한하였다. 하지만 이는 확장성의 문제를 야기한다. 큰 네트워크에서는 적상적으로 작동되지 않을 수 있다.

 

KaZaA

 

Napster(중아 디렉토리 서버 구조)와 Gnutellar(완전 분산 네트워크 구조)의 구조를 조합한 hybrid 방식이다. 전체적인 구조는 Gnutella와 유사한 분산 네트워크 구조이지만, 작은 영역(수백 개의 노드)들을 묶고, 그곳에서 특정 노드를 그룹 리더로 지정하여 Napster에서의 중앙 디렉토리 서버와 유사한 역할을 하도록 한다.

 

프로토콜의 동작은 비공개로 알 수 없다. 그룹 리더끼리는 서로간에 TCP 연결을 맺어 ovelay network를 구성한다. 그룹 리더는 자식 노드들의 IP 주소와 공유하는 모든 파일의 정보를 저장하는 데이터베이스를 가진다.

 

파일 다운로드를 위해 Peer는 그룹 리더에게 query message를 보내고, 만약 그룹 내에 해당 파일이 존재하지 않으면 연결된 다른 그룹 리더들에게 flooding 시킨다. 그룹 내에서의 동작은 Napster와 유사하며 그룹 리더 간에 동작은 Gnutella와 유사하다.

 

모든 control data(query messaga 등)은 암호화 하고 실제 데이터는 암호화하지 않는다.

 

Bit Torrent

 

Torrent는 어느 특정 파일의 분배에 참여하는 모든 Peer들의 집합을 의미한다. Bit torrent에서 파일은 256KB chunk크기로 나눠져 있으며 동일한 크기의 chunk들을 교환한다. Bit torrent에는 특정 파일에 대한 정보들을 가지고 있는 tracker를 가지고 있다. 중앙 디렉토리 서버와는 다른다.

 

Peer가 Torrent에 참여하는 방법은 어떤 특정 seed file (.torrent 파일, content의 배포를 위해 작성된 파일)을 다운로드하고 실행하면  이 .torrent 파일 내부에 포함되어 있는 tracker 정보를 가지고 등록하게 된다. Traker는 해당 파일을 분배하고 있는 Peer들 중 일부(약 50개)를 랜덤 하게 선택하여 이 peer들의 IP주소를 알려주고 이 peer들에 TCP 연결을 시도한다. 이때 연결된 peer를 neighboring peer라 한다. Neighboring peer들로부터 다운로드를 받게 된다. 다운로드와 동시에 다른 Peer들에게 chunk를 업로드한다. 파일 전송이 완료되면 떠나거나 남을 수 있다.

 

Bit Torrent에서 chunk를 가장 희소한 것부터 요청하도록 설계되어 있다. pulling chunks로 Peer는 neighboring peer들에게 주기적으로 해당 파일의 어떠한 chunk를 가지고 있는지 물어본다.  받은 chunk 정보에서 가지고 있지 않는 chunk 중에 가장 희귀한것(rarest first)을 먼저 요구하는 방법이다.

 

Equal retaliation(tit-for-tat) 방법은 chunk를 가장 많이 전송해주는 neighboring peer에게 chunk를 보내주는 방법이 있다. Equal retaliation 방법에서는 매 10초마다 자신에게 가장 많은 chunk를 보내주는 4개의 neigboring peer(unchoked)를 선정하여 chunk를 보내고 30초마다 랜덤 하게 선택된 peer(optimistically unchoked)에게 보낸다.  이 5개 peer 이외에는 chunk를 받지 못한다.

 

 

반응형