네트워크 소켓(Socket)이란?

포트와 자주 헷갈리는 소켓 개념을 기초부터 정리했습니다.

🔌

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. 방화벽이 통제하는 것도 결국 소켓

방화벽 규칙에서 "특정 포트를 차단한다"고 할 때, 실제로는 그 포트로 새로운 소켓 연결이 만들어지는 것 자체를 막는 것입니다. 소켓 개념을 이해하면 포트포워딩, 방화벽 규칙, 프록시 설정 같은 여러 네트워크 개념이 결국 같은 원리 위에서 동작한다는 점을 알 수 있습니다.

포트 번호 자체가 궁금하다면

소켓을 이루는 요소 중 하나인 포트 번호 자체를 더 자세히 알고 싶다면포트 번호 완전정복도 함께 확인해보세요.

실시간 양방향 통신에 쓰이는 웹소켓과는 다릅니다

이름이 비슷한 "웹소켓(WebSocket)"은 이 페이지에서 다룬 운영체제 수준의 일반적인 소켓 개념이 아니라, 브라우저와 서버가 지속적인 양방향 통신을 하기 위해 만들어진 별도의 응용 계층 프로토콜입니다. 웹소켓 자체가 궁금하다면 웹소켓(WebSocket)이란? 기초 개념 정리를 확인해보세요.

방화벽과 포트포워딩 개념도 함께 보면 좋습니다

소켓 개념을 이해하면 방화벽(Firewall)이란? 기초 개념 정리포트포워딩 설정하는 방법이 왜 필요한지 더 쉽게 이해할 수 있습니다.

자주 묻는 질문

소켓 번호는 사용자가 직접 정하나요?

서버가 사용하는 잘 알려진 포트(80, 443 등)는 프로그램이나 관리자가 지정하지만, 클라이언트가 접속할 때 쓰는 임시 포트는 운영체제가 자동으로 배정하므로 사용자가 신경 쓸 필요가 없습니다.

소켓이 부족해지는 경우도 있나요?

네, 매우 많은 연결을 동시에 짧은 시간에 맺고 끊는 서버에서는 임시 포트가 일시적으로 부족해지는 "소켓 고갈" 현상이 나타날 수 있습니다. 이런 경우 서버 설정에서 연결 재사용(Keep-Alive) 설정을 조정해 완화하기도 합니다.