• 티스토리 홈
  • 프로필사진
    오렌지망고맛
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
오렌지망고맛
  • 프로필사진
    오렌지망고맛
    • 분류 전체보기 (45)
      • ALGORITHM (10)
        • BAEKJOON (5)
      • ANDROID (7)
        • AOSP (3)
      • CS (1)
      • Design Pattern (1)
      • DOCKER (3)
      • EMBEDDED (1)
      • GIT (1)
      • NETWORK (4)
      • OS (8)
        • LINUX (7)
        • WINDOWS (1)
      • PORTFOLIO (1)
        • PROJECT (0)
      • PROGRAMMING (0)
        • PYTHON (0)
      • SECURITY (1)
      • SPRING (5)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • [Network-Protocol] WebSocket?
        2023년 04월 10일
        • 오렌지망고맛
        • 작성자
        • 2023.04.10.:03

        순서

        WebSocket의 특징

        WS 이전의 통신방식

        WS 동작과정

        Socket.io

        WebSocket이란?
        : Server와 Clinet 간의 메시지 교환을 위한 통신 규약(Protocol)

        WebSocket의 특징

        ▶ 양방향 통신

        - 데이터 송수신을 동시에 처리할 수 있는 방법

        - 통상적인 HTTP 통신은 Client가 요청을 보낼때만 Server가 응답하는 방식이지만, WebSocket은 양방향 통신이 가능하다.

         

        ▶ 실시간 네트워킹

        - Web 환경에서 연속된 데이터를 빠르게 노출하는 것.(채팅 및 주식 등등)


        WS 이전의 통신방식

        ▶ Polling

        - setTimeout, setInterval 등으로 일정 주기마다 Server에게 Request를 보내는 방법( != 실시간)

        - HTTP 통신을 하기 때문에 Request/Response Header가 불필요하게 크다. → Server에게 부담을 준다.

        - Polling 방식을 선택하는 경우

            ▷ 응답을 실시간으로 받지 않아도 되는 경우

            ▷ 다수의 사용자가 동시에 사용하는 경우

            ▷ facebook, chatting, messanger 등

         

        ▶ Long Polling

        - Polling과 비슷하게 일정주기마다 Request를 보내지만 Server가 응답을 바로 전달하지 않고 특정 이벤트나 TimeOut이 발생했을 때 응답을 전달하는 방식

        - 응답을 받은 Client는 다시 Server에게 데이터를 Request 한다.

        - 불필요한 Request가 적기 때문에 Server 입장에서는 Polling 보다 낫다.

        - Long Polling도 동시 다발적인 요청과 응답이 생기면 부하가 발생할 수 있다.

        - HTTP 통신을 하기 때문에 Request/Response Header가 불필요하게 크다.

        - Long Polling을 선택하는 경우

            ▷ 응답을 실시간으로 받아야 하는 경우

            ▷ 적은 수의 사용자가 동시에 사용하는 경우

         

        ▶ Streaming

        - 이벤트가 발생했을 때 응답을 내려주나 응답을 완료시키지 않고 계속 연결을 유지하는 방식

        - Long Polling에 비해 응답마다 다시 요청을 하지 않아도 되므로 효율적이지만, 연결 시간이 길어질수록 연결 유효성 관리의 부담이 발생할 수 있다.

        - HTTP 통신을 하기 때문에 Request/Response Header가 불필요하게 크다.


        WS 동작과정

        Opening Handshake → Data transfer → Closing Handshake

        ▶ HandShake

         Opening Handshake와 Closing Handshake는 일반적으로 TCP HTTP 통신의 과정 중 하나로, 접속 요청은 HTTP로 한 뒤, WS로 변경된다.

        WebSocket Protocol로 변경되기 위한 HTTP Header는 다음과 같다.

        <Request Header>

        GET /chat HTTP/1.1
        Host: localhost:8080
        Upgrade: websocket
        Connection: Upgrade
        Sec-WebSocket-Key: ????
        Sec-WebSocket-Protocol: chat, superchat
        Sec-WebSocket-Version: 13
        Origin: htp://localhost:9000

         

        ※ 부가설명

        "GET /chat HTTP/1.1"

        : WebSocket 통신 요청은 GET으로 해야하고 HTTP 버전은 1.1 이상이어야 한다.

         

        "Upgrade"

        : Protocol을 전환하기 위한 Header로 WebSocket 요청 시에는 "websocket" 값을 가지며, 이 값이 없거나 다른 값이면 cross-protocol attack으로 간주하여 접속을 중지한다.

         

        "Connection"

        : 현재 전송이 완료된후 네트워크 접속을 유지할 것인가에 대한 정보로, WebSocket 요청 시에는 반드시 Upgrade라는 값을 가진다. 앞서 언급했던 Upgrade와 마찬가지로 이 값이 없거나 다른 값이면 WebSocket을 중지한다.

         

        "Sec-WebSocket-Key"

        : 유효한 요청인지 확인하기 위해 사용하는 키 값

         

        "Sec-WebSocket-Protocol"

        : 사용하고자 하는 하나 이상의 WebSocket Protocol 지정(필수X)

         

        "Sec-WebSocket-Version"

        : Client가 사용하고자 하는 WebSocket Protocol 버전

         

        "Origin"

        : CORS 정책으로 만들어진 헤더로, Cross-Site WebSocket Hijacking과 같은 공격을 피하기 위한 항목

         

         

        <Response Header>

        HTTP/1.1 101 Switching Protocols
        Upgrade: websocket
        Connection: Upgrade
        Sec-WebSocket-Accept: ????
        Sec-WebSocket-Protocol: chat

         

        ※ 부가설명

        "HTTP/1.1 101 Switching Protocols"

        : 101은 HTTP 응답코드로 WS로 Protocol 전환 승인 코드

         

        "Sec-WebSocket-Accept"

        : Request Header의 Sec-WebSocket에 Unique ID를 더해서 SHA-1로 해싱한 후 base64로 Encoding한 결과값. WS가 개시되었음을 알림

        'NETWORK' 카테고리의 다른 글

        [Network] "OSI" & "TCP/IP"  (0) 2023.05.03
        [Network-Protocol] "TCP" & "UDP"  (1) 2023.05.02
        [Network-Protocol] HTTP "GET" & "POST"  (3) 2023.05.02
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바