P2P (Peer-to-Peer)
P2P는 중앙 서버 없이 참여 노드(피어)들이 직접 서로 연결하여 자원을 공유하는 네트워크 구조다.
Client-Server vs P2P
| 항목 | Client-Server | P2P |
|---|---|---|
| 구조 | 중앙 서버 의존 | 피어 간 직접 연결 |
| 확장성 | 서버 증설 필요 | 참여자 증가 = 용량 증가 |
| 단일 장애점 | 있음 | 없음 (분산) |
| 관리 | 용이 | 복잡 |
| 사례 | 웹 서비스, API | BitTorrent, 블록체인 |
P2P 네트워크 유형
순수 P2P (Unstructured)
- 모든 노드가 대등한 역할
- 자원 탐색이 비효율적 (브로드캐스트 방식)
- 예: 초기 Gnutella
하이브리드 P2P
- 중앙 서버가 피어 목록·메타데이터만 관리
- 실제 데이터는 피어 간 직접 전송
- 예: 초기 Napster, BitTorrent(트래커 방식)
구조화 P2P (Structured)
- DHT(분산 해시 테이블)로 자원 위치를 체계적으로 관리
- 탐색 효율 O(log N)
- 예: BitTorrent(트래커리스), Kademlia, IPFS
NAT 통과 (NAT Traversal)
대부분의 기기는 NAT 뒤에 있어 직접 연결이 어렵다. 여러 기법으로 이를 극복한다.
STUN (Session Traversal Utilities for NAT)
- 공개 STUN 서버에 요청해 자신의 공개 IP와 포트를 파악
- Full Cone NAT, Restricted NAT 환경에서 유효
기기 A STUN 서버 기기 B
│── 내 공개 IP는? ──▶│ │
│◀── 1.2.3.4:5000 ──│ │
│ │ ◀── 내 공개 IP는? │
│ │ ──▶ 5.6.7.8:6000 │
│────────── 직접 연결 시도 ──────────────▶│
UDP 홀 펀칭 (UDP Hole Punching)
- 양측이 동시에 상대방에게 패킷 전송 → NAT 테이블에 허용 항목 생성
- Symmetric NAT에서는 동작하지 않음
기기 A (NAT 뒤) 기기 B (NAT 뒤)
│── 패킷 전송 (B 방향) ────▶│ (NAT가 A 측 구멍 뚫음)
│◀── 패킷 전송 (A 방향) ────│ (NAT가 B 측 구멍 뚫음)
│═══════════ P2P 연결 ═══════════│
TURN (Traversal Using Relays around NAT)
- 직접 연결 불가 시 릴레이 서버를 경유
- 항상 동작하지만 서버 대역폭 소모
- 예: Tailscale의 DERP, WebRTC의 TURN 서버
ICE (Interactive Connectivity Establishment)
- STUN + TURN을 조합하여 최적 연결 경로를 자동 선택하는 프레임워크
- WebRTC가 ICE를 사용
ICE 후보 수집:
1. Host 후보: 로컬 IP (192.168.x.x)
2. Srflx 후보: STUN으로 파악한 공개 IP
3. Relay 후보: TURN 서버 IP
→ 우선순위 순으로 연결 시도, 성공한 것으로 확정
DHT (Distributed Hash Table)
분산 환경에서 키-값 쌍을 저장·조회하는 구조. 중앙 서버 없이 피어들이 데이터 위치를 관리한다.
Kademlia (BitTorrent에서 사용)
- 노드 ID와 콘텐츠 해시를 XOR 거리로 비교
- O(log N) 홉으로 원하는 피어 탐색
- 각 노드는 자신과 가까운 노드들만 알면 됨
탐색 예시 (목표: 콘텐츠 해시 0x1A2B)
내 노드(0x1000) → 가장 가까운 노드에 질의 → 더 가까운 노드 발견 → ... → 목표 도달
주요 활용 사례
BitTorrent
- 파일을 청크 단위로 분산 저장·공유
- 보유 청크가 많을수록 더 많이 업로드 (tit-for-tat)
- Magnet 링크: 트래커 없이 DHT로 피어 탐색
WebRTC
- 브라우저 간 실시간 오디오/비디오/데이터 P2P 전송
- ICE(STUN+TURN)로 NAT 통과, DTLS+SRTP로 암호화
브라우저 A 시그널링 서버 브라우저 B
│── SDP Offer ───────▶│──────────────▶│
│◀──────────────── SDP Answer ────────│
│── ICE 후보 교환 ─────▶│──────────────▶│
│◀──────────────── ICE 후보 교환 ──────│
│══════════════ P2P 연결 (미디어 전송) ══│
블록체인
- 트랜잭션과 블록을 피어 간 브로드캐스트로 전파
- 51% 이상 합의로 정합성 유지
- 예: Bitcoin, Ethereum
IPFS (InterPlanetary File System)
- 콘텐츠 주소 지정: URL 대신 파일 해시로 접근
- DHT로 파일 위치 탐색, P2P로 전송
- 동일 파일은 네트워크 어디서든 같은 해시
P2P 보안 고려사항
| 위협 | 설명 | 대응 |
|---|---|---|
| Sybil 공격 | 가짜 노드 대량 생성으로 네트워크 장악 | 작업증명, 신뢰 점수 |
| Eclipse 공격 | 특정 노드의 모든 연결을 악의적 노드로 채움 | 랜덤 피어 선택 |
| 중간자(MITM) | 릴레이 경유 시 패킷 변조 | E2E 암호화 |
| 익명성 침해 | IP 노출로 실제 사용자 추적 | Tor, I2P 등 익명 레이어 |