Client-Server구조 : 서버 호스트는 상시 켜져 있으며, 고정된 IP를 가지고 있습니다.
클라이언트 호스트들은 서버에 서비스를 요청하고 서버는 서비스 요청에 응답하는 방식으로 이루어집니다.
P2P구조: 상시 켜져 있는 독립서버를 사용하기 보다는 피어(Peer)들 끼리 모여서
서로 직접 통신하여 서비스를 주고 받는 방식입니다.
소켓 프로그래밍은 기본적으로 Client-Server구조를 가지기 때문에,
P2P는 상호가 서버이자 클라이언트로 연결을 맺는 구조로 하거나,
순간 특정 인원이 Listen서버를 켜면 불특정 다수가 클라이언트로 동작하는 구조 중에 하나를 사용합니다.
오늘날에는 대부분의 서비스를 Client-Server구조로 동작 시킵니다.
웹, 도메인서버, 메일서버, DHCP서버, 게임 Dedicate서버들은 대표적인 Client-Server구조입니다.
P2P보다 부하가 많이 걸리면서도 비효율 일 것 같아 보이지만,
그럼에도 해당 구조를 고수할 수밖에 없는 이유는 보안과 심플한 구조가 너무 중요하기 때문입니다.
물론 P2P를 전혀 안 쓰는 것은 아닙니다 (다만, 이는 보안에 심각할 수 있어 주의가 필요합니다)
uTorrent나 Peer_Upload 프로그램은 복잡한 구조와 추적의 난해함을 이용하면서도
무거운 파일의 빠른 이동(높은 대역폭)을 이점으로 사용하고 있고,
게임 Listen서버는 게임사에서 서버관리 자원(인적, 물적)이 부족한 경우에 자주 사용하는 방식입니다