dh_0e

[Node.js] 강의 내용 정리(2) (HTTP, TCP, 웹소켓) 본문

내일배움캠프/Node.js[심화]

[Node.js] 강의 내용 정리(2) (HTTP, TCP, 웹소켓)

dh_0e 2024. 6. 13. 00:01

HTTP의 특징

  • Request <-> Response 구조
  • 요청이 있어야만 응답이 있다.
  • 비연결성 - 연결을 유지하지 않음 >> 리소스가 적다 >> 트래픽이 적으므로 처리가 빠르다
  • Stateless(무상태)
    • 유저의 경험을 저장하지 않는다
    • 좋은 유저 경험을 위해 세션, 쿠키, DB에 저장하여 임의로 처리하긴 한다.

 

HTTP 메시지 구조

튜터님 모자 출연

  • HTTP 헤더 - Genereal Header, Req/Res Header, Entity Header
  • 많은 양의 데이터가 key-value 형태로 헤더에 포함됨

 

철수가 서버와 통신하는 과정

 

TCP

  • OSI 4 계층(transport layer)에 존재하며 HTTP로만 할 수 없는 통신을 할 수 있게 해 줌
  • HTTP는 비연결성이지만 TCP는 TCP는 데이터를 교환하기 위해서 무조건 연결을 해야 하는 연결지향성임

 

TCP 3-way-handshake

 

SYN(synchronize sequence numbers), ACK(acknowledgment)

  • TCP/IP 프로토콜을 이용하여 통신을 하는 application이 정확한 전송을 보장하기 위해 데이터를 전송하기 전에 상대방 컴퓨터와 사전에 세션을 수립하는 과정
  • 장치들 간의 논리적인 접속을 성립하기 위해 사용됨
  • 클라이언트와 서버가 서로 데이터를 전송할 준비가 됐다는 것을 보장하며, 이를 서로에게 알려주는 역할을 함
  • 양쪽 모두가 상대편에 대한 초기 순차번호(TCP 연결 설정동안 난수발생기를 이용하여 생성된 초기 순서번호)인 ISN을 얻을 수 있도록 함

 

과정

  1. 클라이언트가 서버에 접속을 요청하는 SYN 패킷을 보내고 SYN/ACK 응답을 기다리는 SYN_SENT 상태로 전환
  2. 서버가 SYN 요청을 받고 이를 수락한다는 ACK와 SYN flag가 설정된 패킷을 클라이언트에게 발송하고 다시 ACK로 응답하기를 기다리는 SYN_RECEIVED 상태로 전환
  3. 클라이언트가 서버에게 ACK를 보낸 뒤 서로를 연결하여 데이터를 주고받으며, 클라이언트, 서버 모두 ESTABLISHED 상태로 전환

 

HTTP 1.1
HTTP 2 / TCP 이전의 연결을 재사용 가능
HTTP 3 / UDP로 연결

 

 

TCP 통신 과정

양방향 통신(Full-Duplex) 순서

  1. 서버가 접속 요청을 받기 위해 소켓을 연다. - Listen
  2. 클라이언트는 소켓(접속을 위한)을 만들고, 서버에 접속을 요청한다. - Connect
  3. 서버는 접속 요청을 받아서 클라이언트와 통신할 소켓을 따로 만든다. - Accpet
  4. 소켓을 통해 데이터를 주고받는다. - Send & Receive 반복
  5. 통신을 마치면 소켓을 닫는다. - Close, 상대방은 Receive로 인지

 

WebSocket

  • 양방향 통신(Full-Duplex)을 http에서 구현하면 되지 않나? 라는 니즈에 의해 태어난 것

주요 특징

  1. 실시간 통신
  2. 양방향 통신(Full-Duplex)
  3. 지속적 연결
  4. 낮은 오버헤드
    • 데이터 패킷의 크기가 작으므로 주고받을 때 효율적으로 네트워크에서 교환이 가능하다는 의미
    • http / tcp보다 작음
  5. HTTP와의 호환성

기존의 웹 인프라에 웹소켓을 얹어 개발할 수 있음

 

Websocket도 TCP처럼 handshake를 한다.

 

HTTP, WebSocket이 더 빠를 경우도 물론 있지만 튜터님은 이렇게 한 줄로 요약하셨다.

 

놀라운 "성능 최적화"로 TCP가 대부분 빠르게 보인다.