• network
  • tcp-ip
  • web

소켓과 포트, 그리고 웹소켓

포트와 소켓의 차이, 여러 소켓이 같은 포트를 쓸 수 있는 이유, HTTP로 시작해 양방향 통신을 하는 웹소켓을 정리한다.

시리즈 · 네트워크12 / 12
  1. OSI 7 Layer와 계층별 역할, ARP
  2. IP 주소: IPv4와 IPv6, NAT, 체크섬
  3. 라우터: 경로 지정, 브로드캐스트 컨트롤, 라우팅과 스위칭
  4. DHCP 동작 방식과 UDP를 사용하는 이유
  5. IP의 한계와 TCP·UDP, 3-Way Handshake
  6. TCP 4-Way Handshake와 TIME_WAIT
  7. DNS 정리: 구조, 질의 방식, 레코드, 이중화와 위임
  8. 로드 밸런서: 구성 방식, 헬스 체크, L4와 L7
  9. HTTP 메서드와 상태 코드: 멱등성, POST와 PUT의 차이
  10. HTTP의 Stateless·Connectionless와 쿠키, 세션
  11. HTTP/1.1, HTTP/2, HTTP/3 비교
  12. 소켓과 포트, 그리고 웹소켓

Port와 Socket

Port

네트워크를 통해 데이터를 주고받는 프로세스를 식별하기 위해, 호스트 내부에서 프로세스가 할당받는 고유한 값이다. 포트 번호는 전송 계층 프로토콜의 헤더에 담긴다.

Socket

프로세스가 네트워크를 통해 데이터를 주고받으려면 열려 있어야 하는 창구다. 프로그램에서 사용하는 네트워크 통신 API 인터페이스이기도 하다. 소켓을 열려면 호스트에 할당된 IP 주소, 포트 번호, 프로토콜이 필요하다.

정리하면 포트는 호스트 안에서 프로세스를 식별하고, 소켓은 클라이언트와 서버 간의 통신을 가능하게 한다.

여러 소켓이 있을 때 포트 번호는 모두 다른가

같을 수도 있고 다를 수도 있다.

소켓은 IP 주소, 포트 번호, 프로토콜의 조합으로 정의된다. 포트 번호를 다르게 지정해 소켓을 여러 개 만들면 소켓마다 포트 번호가 다르다. 반대로 포트 번호가 같아도 프로토콜이나 연결 상대가 다르면 서로 다른 소켓이다. 예를 들어 서버는 하나의 포트로 여러 클라이언트의 연결을 받는데, 이때 클라이언트마다 만들어지는 소켓은 모두 같은 서버 포트 번호를 사용한다.

Web Socket

웹소켓은 서버와 클라이언트 간의 효율적인 양방향 통신을 위한 프로토콜이다. 웹 서버와 웹 브라우저가 실시간으로 메시지를 교환하는 데 사용한다.

  • 브라우저에서 쓰는 소켓이며, HTTP와 마찬가지로 애플리케이션 계층에서 동작한다.
  • 연결을 유지하는 Stateful 프로토콜이다.
  • 단순한 API로 구성되어 있고, 한 번의 접속으로 양방향 메시지를 자유롭게 주고받을 수 있다.

연결 과정

  1. 처음 한 번, HTTP 프로토콜로 핸드셰이크를 수행해 웹소켓 연결을 요청한다.
  2. 핸드셰이크가 정상적으로 끝나면 통신 프로토콜이 HTTP에서 웹소켓으로 전환되고, 그 TCP 연결 위에서 웹소켓 통신이 이루어진다.
  3. 이후에는 연결이 계속 유지된다. 메시지를 보낼 때마다 새로 연결을 맺을 필요가 없어 빠르고 효율적이다.

보안

웹소켓 자체는 메시지를 평문으로 전송한다. 데이터 탈취를 막으려면 SSL/TLS 보안 계층으로 암호화해야 한다.

웹소켓과 소켓의 차이

구분 웹소켓 소켓
동작 위치 HTTP와 호환되도록 설계되어 7계층에서 시작한다 TCP, UDP 프로토콜을 직접 사용해 통신한다
보안 SSL/TLS를 사용해 암호화된 통신이 가능하다 암호화되지 않은 통신을 제공하므로 별도의 암호화 기술을 적용해야 한다