본문 바로가기
TIL/Code States

Code States 63일차 - [네트워크] 심화

by 죠르띠에 2021. 10. 27.

Chapter - 인터넷 프로토콜

IP와 IP Packet

  • 컴퓨터에 IP 주소를 부여하여 통신을 한다.
  • IP는 지정한 IP 주소(IP Address)에 패킷(Packet)이라는 통신 단위로 데이터 전달을 한다.
  • IP 패킷에는 출발지 IP, 목적지 IP와 같은 정보가 포함되어 있다.
  • 패킷 단위로 전송을 하면 목적지 IP에 도달하기 위해 서로 데이터를 전달한다.
  • 서버에서 데이터를 전송받는다면 서버도 응답을 돌려줘야한다.
  • 서버도 IP 패킷을 이용해 클라이언트에 응답한다.

IP 프로토콜의 한계

비연결성

  • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송

비신뢰성

  • 중간에 패킷이 사라질 수 있음
  • 패킷의 순서를 보장할 수 없음

TCP vs UDP

TCP 프로콜은 IP 프로토콜보다 더 높은 게층에 존재하기 때문에 IP 프로토콜의 한계를 보완할 수 있다.

* TCP/IP 4계층은 OSI 7계층보다 먼저 개발되었으며 TCP/IP 프로토콜의 계층은 OSI 모델의 계층과 정확하게 일치하지는 않는다.

 

TCP 특징

전송 제어 프로토콜(Transmission Control Protocol)

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

TCP는 장치들 사이에 논리적인 접속을 성립하기 위해 3 way handshake를 사용하는 연결지향형 프로토콜이다.

 

연결방식

  1. 클라이언트는 서버에 접속을 요청하는 SYN 패킷을 보낸다.
  2. 서버는 SYN 요청을 받고 클라이언트에게 요청을 수락한다는 ACK와 SYN가 설정된 패킷을 발송한다.
  3. 서버는 클라이언트가 다시 ACK으로 응답하기를 기다린다.
  4. 클라이언트가 서버에게 ACK을 보내면 이 이후부터 연결성이 성립되며 데이터를 전송할 수 있다.

만약 서버가 꺼져있다면 클라이언트가 SYN을 보내고 서버에서 응답이 없기 때문에 데이터를 보내지 않는다. 현재에는 최적화가 이루어져 3번 ACK을 보낼 때 데이터를 함께 보내기도 한다.

* SYN은 Syncronize, ACK는 Acknowledgment의 약자

UDP 특징

사용자 데이터그램 프로토콜 (User Datagram Protocol)

  • 하얀 도화지에 비유 (기능이 거의 없음)
  • 비 연결지향
  • 데이터 전달 보증 X
  • 순서 보장 X
  • 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
  • 신뢰성보다는 연속성이 중요한 서비스(e.g. 실시간 스트리밍)에 자주 사용됨

UDP는 IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜이다.

* 체크섬(checksum)은 중복 검사의 한 형태로, 오류 정정을 통해, 공간(전자 통신)이나 시간(기억 장치) 속에서 송신된 자료의 무결성을 보호하는 단순한 방법

TCP UDP
연결지향형 프로토콜 비 연결지향형 프로토콜
전송 순서 보장함 전송 순서 보장하지 않음
데이터 수신 여부 확인함 데이터 수신 여부 확인하지 않음
신뢰성은 높지만 속도가 느림 신뢰성은 낮지만 속도가 빠름

HTTP

HTTP의 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜 (Stateless), 비연결성 (Connectionless)
  • HTTP 메세지
  • 단순함, 확장 가능

클라이언트 서버구조

  • Request, Response 구조
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기
  • 서버가 요청에 대한 결과를 만들어 응답

무상태 프로토콜 - Stateless

서버가 클라이언트의 상태를 보존하지 않는다.

  • 장점: 서버 확장성이 높음 (스케일 아웃)
  • 단점: 클라이언트가 추가 데이터 전송

비 연결성 - Connectionless

  • HTTP는 기본이 연결을 유지하지 않는 모델
  • 일반적으로 초 단위 이하의 빠른 속도로 응답

Chapter - HTTP 헤더

표현 헤더(Representation Headers)

HTTP 헤더는 HTTP 전송에 필요한 모든 부가정보를 담기 위해 사용한다.

  • Content-Type: 표현 데이터의 형식
  • Content-Encoding: 표현 데이터의 압축 방식
  • Content-Language: 표현 데이터의 자연 언어
  • Content-Length: 표현 데이터의 길이
  • 표현 헤더는 요청, 응답 둘 다 사용

HTTP 주요 헤더

요청(Request)에서 사용되는 헤더

From: 유저 에이전트의 이메일 정보

  • 일반적으로 잘 사용하지 않음
  • 검색 엔진에서 주로 사용

Referer: 이전 웹 페이지 주소

  • 현재 요청된 페이지의 이전 웹 페이지 주소
  • A -> B로 이동하는 경우 B를 요청할때 Referer: A를 포함해서 요청
  • Referer를 사용하면 유입경로 수집 가능

User-Agent: 유저 에이전트 애플리케이션 정보

  • 클라이언트의 애플리케이션 정보(웹 브라우저 정보 등등)
  • 통계 정보
  • 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능

Host: 요청한 호스트 정보(도메인)

  • 필수 헤더
  • 하나의 서버가 여러 도메인을 처리해야 할 때 호스트 정보를 명시하기 위해 사용
  • 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 호스트 정보를 명시하기 위해 사용

Origin: 서버로 POST 요청을 보낼 때, 요청을 시작한 주소를 나타냄

  • 여기서 요청을 보낸 주소와 받는 주소가 다르면 CORS 에러가 발생
  • 응답 헤더의 Access-Control-Allow-Origin과 관련

Authorization: 인증 토큰을 서버로 보낼 때 사용하는 헤더

응답(Response)에서 사용되는 헤더

Server: 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보

Data: 메시지가 발생한 날짜와 시간

Location: 페이지 리디렉션

  • 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 리다이렉트(자동 이동)
  • 201(Created): Location 값은 요청에 의해 생성된 리소스 URI
  • 3xx(Redirection): Location 값은 요청을 자동으로 리디렉션하기 위한 대상 리소스를 가리킴

Allow: 허용 가능한 HTTP 메서드

  • 405(Method Not Allowed)에서 응답에 포함

Retry-After: 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간

  • 503(Service Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있음

콘텐츠 협상 헤더

콘텐츠 협상(Content negotiation)

클라이언트가 선호하는 표현 요청

  • Accept: 클라이언트가 선호하는 미디어 타입 전달
  • Accept-Charset: 클라이언트가 선호하는 문자 인코딩
  • Accept-Encoding: 클라이언트가 선호하는 압충 인코딩
  • Accept-Language: 클라이언트가 선호하는 자연 언어
  • 협상 헤더는 요청시에만 사용

Chapter - 웹 캐시

HTTP 헤더 - 캐시

캐시(cache)는 컴퓨터 과학에서 데이터나 값을 미리 복사해놓는 임시 장소를 가리킨다.

  • 캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절학하고 싶을 때 사용
  • 캐시에 데이터를 미리 복사해 놓으면 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근할 수 있음
  • 브라우저에 캐시를 저장할 땐 헤더에 cache-control 속성을 통해 캐시가 유효한 시간을 지정할 수 있음
  • 캐시가 존재하고 유효기간이 지나지 않은 캐시라면 해당 캐시에서 데이터를 가져올 수 있음
  • 캐시가 유효기간을 초과하면 서버를 통해 데이터를 다시 조회하고 캐시를 갱신함. 이때 다시 네트워크 다운로드가 발생함

캐시 검증 헤더와 조건부 요청은 조금 더 정리되면 작성

프록시 캐시(Proxy Cache), 얘도 마찬가지로 정리되면 작성