WebSocket

김영훈·2022년 10월 28일
2

TCP/IP 5계층

  • WebSocket에 대해 이해하려면 우선 네트워크 계층 구조(Newtwork Layer)에 대한 이해가 필요하다. 네트워크 계층 구조란 네트워크에서 통신이 일어나는 과정을 단계별로 나눈 것이다. 대표적인 계층 구조 모델로 OSI 7계층 모델TCP/IP 5계층 모델이 있는데, OSI 모델보다 TCP/IP 모델이 인터넷 통신에서 실제로 사용되는 실질적 개념에 가깝기 때문에, TCP/IP 개념을 기반으로 웹소켓 통신에 관한 내용을 정리했다.

    OSI 모델은 네트워킹 장비나 통신장치를 만들 때 표준적 기준으로 참조하는 개념적 모델에 가깝다.

  • TCP/IP 모델

    • 네트워크에서 사용자(Client 및 Server) 간의 통신(데이터를 주고받는 행위)은 각각의 계층(layer)의 상호작용을 통해 이뤄진다. 네트워크 통신이 이뤄지는 흐름 및 과정을 이해하기 위해서라도 각각 계층의 개념과 역할을 알아두는 것은 중요하다.

    • 애플리케이션 계층(Application Layer)

      • 최상위 계층으로, 사용자와 컴퓨터의 상호작용이 이뤄지는 계층이다. 네트워크 응용 프로그램(network application)으로 사용자 데이터를 생성 및 전달하거나, 통신으로 받아온 데이터를 브라우저 창에 보여주는 등, 사용자를 위한 다양한 서비스(application services)가 수행된다. 사용 가능한 프로토콜은 HTTP, FTP, SMTP, POP, DNS 등이 있다. 처리 데이터 단위(data unit)는 message다.
    • 전송 계층(Transport Layer)

      • 상위 계층(애플리케이션 계층)에서 받아온 데이터 헤더에 포트 번호를 추가하여 출발지에서 도착지까지 데이터의 전송이 제대로 이뤄지도록 하고, 오류를 제어하여 사용자들이 신뢰성 있는 데이터를 주고받을 수 있도록 해준다. 신뢰성 있는 데이터 전송을 보장해주는 TCP 프로토콜을 제공하며, 처리 데이터 단위(data unit)는 segment다.
    • 네트워크 계층(Network Layer)

      • 상위 계층(전송 계층)에서 받아온 데이터 헤더에 IP 주소를 추가하고, 출발지에서 도착지까지 최단 경로로 데이터를 전송해준다. 이 과정에서 데이터를 목적지(도착지)까지 보내는 최적 경로를 설정하게 되는데, 이를 라우팅(routing)이라고 한다. 처리 데이터 단위(data unit)는 packet이다.
    • 데이터 링크 계층(Link Layer)

      • 상위 계층(네트워크 계층)에서 받아온 데이터 헤더에 MAC 주소를 추가하고, 직접 연결된 서로 다른 네트워크 장치가 상호 간의 데이터를 주고받을 수 있도록 해준다. MAC 주소란 네트워크 어댑터(랜카드)의 고유한 물리적 주소다. 이외에도 물리 계층에서 발생한 오류를 수정하거나 데이터가 일관성 있는 일정한 비율로 전달되도록 흐름을 제어하는 역할을 한다. 처리 데이터 단위(data unit)는 frame이다.
    • 물리 계층(Physical Layer)

      • 최하단 계층으로, 상위 계층(네트워크 계층)에서 받아온 데이터를 전기적인 신호(Bit)로 변환시켜 네트워크 장치 간의 실질적인 통신을 수행한다. 처리 데이터 단위(data unit)는 bit이다.

TCP 프로토콜

  • WebScoket을 이해하기 위해선 TCP/IP 모델의 전송 계층(Transport Layer)을 주목해야 한다. 전송 계층은 TCP 혹은 UDP 프로토콜을 이용하여 송신자와 수신자 사이의 데이터 전송이 제대로 이뤄지도록 한다. 이 중 TCP 프로토콜은 Socket을 활용한 양방향 전이중 통신 기능을 제공하는데, 이 기능을 활용하면 네트워크 사용자(Client 및 Server)들이 연결을 유지하며 실시간 통신이 가능하다. 이때 활용되는 Socket을 'TCP Socket' 또는 'TCP/IP Socket'이라 부르고, TCP Socket을 활용하여 제공하는 양방향 전이중 통신을 '소켓 통신'이라고 부른다.

    TCP 프로토콜
    네트워크 통신에서 자주 사용되는 프로토콜로, UDP에 비해 전송 속도는 느리지만 모든 데이터를 고정된 통신 선로를 통해서 순차적으로 전달하기 때문에 정확성과 안정성이 높다.

    전이중 통신(Full-Duplex)
    데이터를 양방향으로 동시에 송수신 할 수 있는 방식

  • Socket(TCP Socket)

    • 그렇다면 Socket이란 무엇일까?
    • Socket네트워크에서 동작하는 응용 프로그램(network application)들이 상호 통신할 수 있도록 연결해주는 부분이다. 가령 응용프로그램이 클라이언트 서버 모델(Client-server model) 구조인 경우, 클라이언트와 서버는 Socket이라는 일종의 연결 튜브(구멍 혹은 콘센트라고 생각해도 된다.)를 타고 상호 간의 데이터를 주고받게 된다. Socket이 IP 주소와 포트 번호로 조합된 엔드 포인트로 정의되는 이유도 여기에 있다. 통신이 이뤄지려면 클라이언트와 서버 모두 특정 포트와 연결된 Socket을 생성해야 하며, 생성된 Socket을 통해 실시간으로 데이터를 주고받는 것(양방향 전이중 통신)이 가능하다. 이는 WebSocket과 전혀 다른 개념이다.

      네트워크 응용 프로그램(network application)
      네트워크 통신을 활용하는 프로그램을 가리킨다. 이메일, 웹 메신저, P2P 사이트, 유튜브 등, 사용자가 실제로 이용하는 프로그램 대부분이 해당한다.

      클라이언트 서버 모델(Client-server model)
      중앙에 하나의 서버가 있고 주변에 있는 나머지 클라이언트들을 서버가 지원하는 구조. 각 클라이언트는 서버에 데이터를 요구하고 서버는 거기에 대한 응답으로 데이터를 전달해준다. 클라이언트 서버 모델에서는 서버가 유일하게 데이터를 제공하는 역할을 담당한다.

WebSocket

  • 응용 프로그램(network application)들이 실시간으로 데이터를 주고받을 수 있도록, 전송 계층의 TCP 연결(양방향 전이중 통신)을 유지해주는 프로토콜이다. 응용프로그램이 클라이언트 서버 모델(Client-server model) 구조일 경우, 웹소켓 기술을 활용하면 클라이언트와 서버가 실시간으로 통신할 수 있다. 채팅, 주식 관련 서비스에서 데이터가 빠르게 교환될 수 있는 것도 웹소켓 기술 덕분이다.

  • WebScoket 프로토콜은 HTTP 프로토콜처럼 애플리케이션 계층(Application Layer)에 위치하며, TCP의 양방향 전이중 통신을 사용하기 때문에 전송 계층(Transport Layer)에 의존하고 있다고 볼 수 있다.

  • 웹소켓을 통해 사용자 간의 양뱡향 연결을 수립하려면, 먼저 HTTP 요청의 도움을 받아 초기 연결이 이뤄져야 하며, handshake 과정을 거친 후 프로토콜은 HTTP에서 웹소켓으로 업그레이드된다. 자세한 사항은 아래 이미지를 참고하자. HTTP 요청 헤더에서 Upgrade: websocket 헤더를 통해 웹소켓 연결로 업그레이드 요청을 하고 있다. HTTP 응답 헤더 역시 이와 동일한 헤더를 가지고 있고, 요청 헤더의 Sec-WebSocket-Key 를 인코딩한 값이 담긴 Sec-WebSocket-Accept 헤더를 통해 웹소켓 연결이 개시되었음을 알리고 있다.

    • request

    • response

socket.io

  • 웹소켓 프로토콜을 활용하여 양방향 통신을 쉽게 구현시켜주는 라이브러리로, WebSocket과 다른 개념이다.
profile
Difference & Repetition

0개의 댓글

관련 채용 정보