🔌
1. 소켓(Socket)이란
소켓은 "IP 주소 + 포트 번호 + 프로토콜(TCP 또는 UDP)"의 조합으로 만들어지는, 네트워크 통신의 양쪽 끝을 나타내는 접속점입니다. 전화로 비유하면 IP 주소는 건물 주소, 포트 번호는 그 건물 안의 내선 번호, 소켓은 실제로 통화가 연결된 하나의 회선이라고 볼 수 있습니다.
🆚
2. 포트와 소켓의 차이
포트 번호는 "어떤 서비스로 연결할지"를 가리키는 하나의 숫자(0~65535)일 뿐이지만, 소켓은 그 포트 번호에 실제 IP 주소와 프로토콜까지 결합해 만들어진 구체적인 연결 하나하나를 뜻합니다. 같은 80번 포트라도 접속한 클라이언트 IP마다 서로 다른 소켓이 만들어져 여러 명이 동시에 같은 웹서버에 접속할 수 있는 것입니다.
🔗
3. 소켓 쌍(Socket Pair)으로 연결을 구분한다
하나의 TCP 연결은 "내 IP:내 포트"와 "상대 IP:상대 포트"로 이루어진 소켓 쌍으로 고유하게 식별됩니다. 이 덕분에 서버는 같은 80번 포트로 수천 명이 동시에 접속해도 각 소켓 쌍을 기준으로 어떤 요청이 어느 사용자의 것인지 정확히 구분할 수 있습니다.
📶
4. TCP 소켓과 UDP 소켓의 차이
TCP 소켓은 통화를 걸듯 먼저 연결을 맺고(3-way 핸드셰이크) 순서와 도착을 보장하며 데이터를 주고받는 방식이고, UDP 소켓은 미리 연결하지 않고 엽서를 보내듯 데이터를 그때그때 전송하는 방식입니다. 웹사이트 접속처럼 정확성이 중요하면 TCP를, 실시간 게임이나 화상통화처럼 속도가 더 중요하면 UDP 기반 소켓을 주로 사용합니다.
🔢
5. 잘 알려진 포트와 임시 포트
서버가 사용하는 80(HTTP), 443(HTTPS) 같은 포트는 누구나 알 수 있도록 정해진 "잘 알려진 포트"입니다. 반면 내 컴퓨터(클라이언트)가 서버에 접속할 때 쓰는 포트는 매번 운영체제가 자동으로 골라주는 임시 포트(대략 49152~65535 범위)로, 사용자가 직접 신경 쓸 필요는 없습니다.
🏷️
6. 소켓 주소(Socket Address) 표기법
소켓 주소는 흔히 "IP주소:포트번호" 형태로 표기합니다. 예를 들어 192.168.0.10:8080은 192.168.0.10이라는 기기의 8080번 포트를 가리키는 소켓 주소이며, 이 표기법은 서버 설정 파일이나 개발자 도구 화면에서 자주 볼 수 있습니다.
🎧
7. 리스닝(Listening) 소켓과 연결된(Established) 소켓
서버 프로그램이 특정 포트에서 새로운 접속을 기다리고 있는 상태를 리스닝 소켓이라 하고, 클라이언트와 실제로 연결이 맺어져 데이터를 주고받는 상태를 연결된(Established) 소켓이라 합니다. netstat 같은 네트워크 진단 명령어로 현재 어떤 소켓이 리스닝 중이고 어떤 소켓이 연결되어 있는지 직접 확인할 수 있습니다.
🛡️
8. 방화벽이 통제하는 것도 결국 소켓
방화벽 규칙에서 "특정 포트를 차단한다"고 할 때, 실제로는 그 포트로 새로운 소켓 연결이 만들어지는 것 자체를 막는 것입니다. 소켓 개념을 이해하면 포트포워딩, 방화벽 규칙, 프록시 설정 같은 여러 네트워크 개념이 결국 같은 원리 위에서 동작한다는 점을 알 수 있습니다.