네트워크

이승현·2022년 11월 13일

웹 개발

목록 보기
12/20

IP통신

노드(컴퓨터)에 할당된 IP주소에 패킷(packet) 통신단위로 데이터를 전달한다.

Packet

패킷은 pack + bucket 으로 합쳐진 단어이다. 소포라고 볼 수 있다.

IP패킷은 우체국 송장처럼 출발지 IP, 전송지 IP같은 내용을 포함한다.

IP프로토콜의 문제점

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성
    • 중간에 패킷이 사라질 수 있다.
    • 패킷의 순서를 보장할 수 없다.

TCP & UDP

네트워크 계층 구조

패킷 전달 구조

TCP/IP 패킷

TCP(Transmission Control Protocol)

  • 연결 지향 - TCP 3 way handshake(가상 연결)
  • 데이터 전달 보증
  • 순서 보장
  • 신뢰할 수 있는 프로토콜

3 way handshake

통신 시작 전 거치는 인증 과정

종료 과정은 4 way handshake라고 따로 있다.

TCP 장점

  • 데이터 전달 보증
    • 데이터 전송이 성공적으로 이루어지면 이에 대한 응답을 돌려주기 때문에 IP패킷의 한계인 비연결성을 보완할 수 있다.
  • 순서 보장
    • 패킷이 순서대로 도착하지 않았을 때 TCP세그먼트에 있는 정보를 토대로 다시 패킷 전송을 요청 할 수 있다.
    • 이를 통해 IP 패킷의 한계인 비신뢰성(순서를 보장하지 않음)을 보완할 수 있다.

UDP

  • UDP는 IP 프로토콜에 PORT, 체크섬 필드만 추가된 단순한 프로토콜이다.
  • TCP와 비교하여 신뢰성은 낮지만 3 way handshake를 사용하지 않기 때문에 속도가 빠르다.

UDP특징

  • 비 연결 지향 - TCP 3 way handshake 사용 x
  • 데이터 전달 보증 x
  • 순서 보장 x
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
  • 신뢰성보다는 연속성이 중요한 서비스 (e.g. 실시간 스트리밍)에 자주 사용된다.

HTTP

HTTP 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜(Stateless)
    • 장점 : 서버 확장성 높음(스케일 아웃)
    • 단점 : 클라이언트 추가 데이터 전송
    • 로그인 같이 상태가 유지되어야 하는 요소는 쿠키, 세션, 토큰 등의 방식을 이용한다.
  • 비연결성(Connectionless)
    • 연결성과 비연결성(Connection Oriented vs Connectionless model)
    • HTTP는 기본이 연결을 유지하지 않는 모델
    • 일반적으로 초 단위 이하의 빠른 속도로 응답
    • 1시간 동안 수천명이 서비스를 이용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.

  • 비연결성의 한계
    • 요청, 응답 마다 TCP/IP 연결을 새로 맺어야 한다. - 3 way handshake
    • 웹 브라우저로 사이트를 요청하면 HTML뿐만 아니라 자바스크립트, CSS, 추가 이미지 등 수많은 자원이 함께 다운로드
    • 현재 HTTP 지속 연결(Persistent Connections)로 문제 해결
    • HTTP/2, HTTP/3에서 더 많은 최적화
    • HTTP/2는 TCP기반 HTTP/3은 UDP기반

  • 단순함, 확장 가능

HTTP 헤더

표현 헤더, 콘텐츠 협상 헤더로 나뉜다. 또한 요청 메세지와 응답 메세지에서 사용되는 헤더가 틀리다.

헤더의 형식은

<field-name> : <field-value>

와 같고 field-name은 대소문자 구분이 없다.

  • 표현 헤더(Representation Header) : 메시지 본문(message body, payload)의 전달할 데이터를 해석할 수 있는 정보를 제공하는 헤더
    • Content-type : 표현 데이터의 형식
    • Content-Encoding : 표현 데이터의 압축 방식
    • Content-Language : 표현 데이터의 자연 언어
    • Content-Length : 표현 데이터의 길이
  • 콘텐츠 협상 헤더(Content Negotiation Header) : 요청 메세지에서만 사용됨, 클라이언트가 선호하는 표현을 지정하는 헤더이다.
    • Accept : 클라이언트가 선호하는 미디어 타입 전달
    • Accept-Charset : 클라이언트가 선호하는 문자 인코딩
    • Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
    • Accept-Language : 클라이언트가 선호하는 자연 언어
    • 받는 표현 타입이 여러개일때 우선순위를 지정해 줄 수 있다.
      • 0~1 까지 클수록 높은 우선순위, 1은 생략 가능 ‘ ;q=숫자 ’ 형식으로 우선순위 지정
      • e.g. Accept-Language : ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
  • 요청 메세지에서 많이 사용되는 헤더
    • From : 유저 에이전트의 이메일 정보
      • 일반적으로 잘 안씀
      • 검색 엔진에서 주로 사용
    • Referer : 이전 웹 페이지 주소
      • 현재 요청된 페이지의 이전 웹 페이지 주소
      • 이걸 써서 유입경로 수집 가능
      • referer는 referrer의 오타인데 이걸로 굳어짐
    • User-Agent : 유저 에이전트 애플리케이션 정보
      • 클라이언트의 애플리케이션 정보(웹 브라우저 정보 등등)
      • 통계 정보
      • 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
    • Host : 요청한 호스트 정보(도메인)
      • 필수 헤더
      • 하나의 서버가 여러 도메인을 처리해야 할 때 호스트 정보를 명시하기 위해 사용
      • Origin : 서버로 POST 요청을 보낼 때, 요청을 시작한 주소를 나타냄
      • 요청을 보낸 주소와 받는 주소가 다르면 CORS에러가 발생한다.
      • 응답 헤더의 Access-Control-Allow-Origin과 관련
    • Authorization : 인증 토큰(e.g. JWT)을 서버로 보낼 때 사용하는 헤더

  • 응답 메세지에서 많이 사용되는 헤더
    • Server : 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보
    • Date : 메세지가 발생한 날짜와 시간
    • Location : 페이지 리디렉션
    • Allow : 허용 가능한 HTTP메서드
    • Retry-After : 유저 에이전트가 다음 요청을 하기까지 걸리는 시간

HTTP 헤더 - 캐시

e.g.

  • Cache-Control : max-age=60 (60초동안 페이로드 클라이언트의 캐시에 저장, 응답에서 사용)
    • max-age
    • no-cache : max-age = 0과 동일
    • no-store : 민감한 데이터라 캐시저장을 아예안하는 옵션
  • Last-Modified : 2021년 3월 3일 08:00:00 (데이터가 마지막으로 수정된 시간, 요청에서 사용)
  • If-Modified-Since : 2021년 3월 3일 08:00:00 (이전에 Last-Modified로 보내놨으면 캐시가 만료됐어도 조건부 요청 가능, 만일 변경이 없었으면 304 Not Modified로 응답)
profile
매일 꾸준히

0개의 댓글