Programming/Network

[Network] 소켓, 웹소켓, 포트

soeun2537 2024. 7. 28. 04:14
해당 글은 VSFe 깃허브 레포를 참고하여 작성한 글입니다. (아래 출처에 표기)

 

❗️해당 글은 프로토콜 스택, IP, TCP, UDP, 포트, 소켓에 대한 이해가 필요하다. 여기를 참고하면 좋을 것 같다.

 

 

✅ 웹소켓과 소켓의 통신의 차이에 대해 설명해 주세요.

웹소켓(Web Socket)과 소켓(Socket)은 모드 네트워크 상에서 데이터 교환을 위한 기술이다.

 소켓

  • 기본 개념
    • 네트워크에서 데이터를 주고받을 수 있도록 네트워크 환경에 연결할 수 있게 만들어진 연결점
    • 일반적으로 TCP/IP 프로토콜을 사용하여 데이터 송수신을 처리한다.
  • 프로토콜
    • TCP (Transmission Control Protocol): 신뢰성 있는 연결 지향 프로토콜로, 패킷의 순서와 무결성을 보장한다.
    • UDP (User Datagram Protocol): 비연결형 프로토콜로, 속도는 빠르지만 패킷의 순서나 무결성을 보장하지 않는다.
  • 통신 방식
    1. 클라이언트 소켓 생성: 연결 대상에 대한 정보가 들어있지 않은 Socket을 생성한다.
    2. 연결 설정: 클라이언트가 서버에 연결 요청을 보내고, 서버가 이를 수락하면 연결이 완료된다.
    3. 데이터 송수신: 설정된 연결을 통해 데이터를 주고받는다.
    4. 연결 해제: 통신이 끝나면 소켓을 닫아 연결을 해제한다.
  • 사용 사례
    • 일반적인 네트워크 애플리케이션 (예: 파일 전송, 이메일)

 

 웹소켓

  • 기본 개념
    • 웹 애플리케이션에서 사용할 수 있도록 설계된 프로토콜로, HTTP를 통해 초기 연결을 설정하고 그 후에 지속적인 양방향 통신을 가능하게 한다.
    • HTTP에서 실시간 통신을 할 수 없다는 문제를 해결하기 위해 나온 기술이다.
HTTP 실시간 통신이 어려운 이유
1. 비연결성으로 인한 단방향 통신
2. 비연결성으로 인한 매번 연결을 맺고 끊는 과정의 비용
3. request-response 구조
4. 헤더의 비중이 너무 큼 (실시간성으로 많은 데이터를 주고 받는 경우 부담이 됨)
  • 프로토콜
    • WebSocket Protocol: HTTP 업그레이드 요청을 통해 초기 연결을 설정한 후, 지속적인 연결을 유지하며 데이터 프레임을 주고받는다.
  • 통신 방식
    1. 초기 Handshake: 클라이언트가 서버에 HTTP "업그레이드" 요청을 보내고, 서버가 이를 수락하면 웹소켓 연결이 설정된다.
    2. 지속적인 통신: 연결이 설정되면, 양방향으로 데이터를 실시간으로 주고받을 수 있다.
    3. 연결 해제: 필요에 따라 클라이언트나 서버가 연결을 종료할 수 있다.
  • 사용 사례
    • 실시간 웹 애플리케이션 (예: 채팅 애플리케이션, 주식 거래 플랫폼, 실시간 게임)

 

 소켓과 웹소켓의 차이점

  일반 TCP 소켓 웹소켓
목적 신뢰성 있는 연결 지향형, 양방향 데이터 스트림 제공 웹 애플리케이션과 서버 간의 실시간 통신
연결 방식 3-way handshake를 통한 연결 설정 후 지속적 데이터 교환 HTTP Handshake를 통한 연결 설정 후 지속적 양방향 통신
프로토콜 구조 TCP/IP 스택에서 동작 HTTP/1.1 기반
데이터 교환 방식 스트림 기반, 바이트 단위 데이터 교환 메시지 기반, 메시지 단위 데이터 교환
프로토콜 호환성 다양한 응용 프로토콜과 호환 가능 HTML5와 관련된 웹 기술에 특화
포트 번호 예약된 포트 없음, 애플리케이션에 따라 다름 일반적으로 HTTP(80) 또는 HTTPS(443) 포트 사용
지원하는 플랫폼 다양한 운영 체제와 플랫폼에서 호환 주로 웹 브라우저 및 웹 서버 환경에서 사용
사실 웹 소켓과 TCP 소켓은 상반되는 개념이 아니기 때문에 완전한 차이점을 비교할 수 없다. 웹에서도 TCP 소켓 통신으로 실시간 통신을 할 수 있지만 전송 계층의 원시 바이트 대신 애플리케이션 계층을 통해 메시지를 보내는 것이 개발 측면에서 더 적합하기 때문에 TCP 소켓 통신에 기반하여 웹 소켓을 발전시킨 것이기 때문이다. 한마디로 웹 소켓은 TCP 소켓과 구분되는 것이 아니라 TCP 소켓의 추상화된 형태이다.

 

 

 소켓과 포트의 차이가 무엇인가요?

 

 소켓

  • 개념: 컴퓨터 네트워크에서 프로세스 간에 통신을 가능하게 하는 창구이다. 소켓은 IP 주소와 포트를 조합하여 특정 네트워크 연결을 식별한다.
  • 역할: 소켓은 애플리케이션이 네트워크 통신을 시작하고, 데이터를 보내고, 응답을 받는 데 사용된다. 소켓은 일반적으로 클라이언트와 통신 세션을 생성하고 관리하는 데 사용된다.
프로세스: 네트워크에 연결된 모든 종류의 장치를 노드라고 부르며, 노드 중에서도 네트워크 주소(IP 주소)가 할당된 노드를 호스트라고 부른다. 이 호스트 안에서는 여러 개의 프로세스(ex: 프로그램, 애플리케이션, 앱 등)들이 존재한다. 네트워크 공간 상에서 데이터를 주고받는다는 것은 호스트의 프로세스까지 데이터가 오고 감을 의미한다.

 

 포트

  • 개념: 포트는 컴퓨터 내에서 특정 애플리케이션을 구분하는 숫자로, 소켓을 연결하기 위한 통로이다.
  • 역할: 호스트에서 동작하는 여러 프로세스 중 실제로 이 데이터를 받아야 하는 프로세스에 전달되어야 하는데, 이를 식별할 수 있게 해 준다.

 

 

 여러 소켓이 있다고 할 때, 그 소켓의 포트 번호는 모두 다른가요?

  • 여러 소켓의 포트 번호가 같을 수 있다. 같은 프로세스가 같은 포트를 가지고 여러 개의 소켓을 열 수 있기 때문이다.
  • 포트 번호가 같은 예시: 온라인 게임 서버는 수천 명의 플레이어가 동시에 서버에 접속하지만, 서버의 동일한 포트에서 접속한다. 게임 서버는 각 플레이어와의 연결을 별도의 소켓으로 관리한다.
소켓은 포트 번호 외에도 IP 주소, 프로토콜, 연결 정보 등으로 구성되어 있고, 고유한 소켓 식별자를 통해 식별된다.

 

 

 사용자의 요청이 무수히 많아지면, 소켓도 무수히 생성되나요?

  • 사용자의 요청이 증가함에 따라 서버가 처리해야 하는 소켓도 증가한다. 다만 고려 사항이 있다.
  • 각 클라이언트 요청은 일반적으로 소켓을 생성하지만, 서버는 동시에 처리할 수 있는 소켓의 수에 제한이 있다. 따라서 대규모로 사용자 요청이 증가하는 경우, 서버는 소켓 풀링, 비동기 처리, 로드 밸런싱(부하 분산)과 같은 기술을 사용하여 효율적으로 요청을 처리하고 리소스를 관리해야 한다.

 

 

📍 문제 출처

Tech-Interview / 03-NETWORK.md

 

📍 참고 자료