210705_네트워크(심화)

Bitnara Lee·2021년 7월 5일
0

Achievement Goals
HTTP 기반 네트워크 흐름에 대해 이해할 수 있다.
TCP/IP 기반 네트워크 흐름에 대해 이해할 수 있다.
TCP/IP 패킷이 왜 필요한 지 설명할 수 있다.
TCP와 UDP의 차이에 대해 설명할 수 있다.
HTTP 기본 동작과 특징에 대해 이해할 수 있다.
상태유지(Stateful)과 무상태(Stateless)의 개념에 대해 설명할 수 있다.
HTTP 메시지 구성에 대해 설명할 수 있다.
HTTP 헤더의 역할에 대해 이해할 수 있다.
표현, 콘텐츠 협상 등 다양한 헤더의 역할에 대해 알 수 있다.
캐시가 왜 필요한 지 알 수 있다.
브라우저 캐시, 프록시 캐시에 대해 설명할 수 있다.
조건부 요청, 캐시 무효화 방법 등을 사용할 수 있다.


네트워크는 OSI 7계층 또는, TCP/IP 4계층으로 구분

IP와 IP Packet

복잡한 인터넷 망 속 클라이언트와 서버가 통신하는 법
--> IP(인터넷 프로토콜) 주소를 컴퓨터에 부여하여 이를 이용
--> 패킷 단위로 전송을 하면 노드들은 목적지 IP에 도달하기 위해 서로 데이터를 전달

IP

지정한 IP 주소(IP Address)에 패킷(Packet)이라는 통신 단위로 데이터 전달

IP패킷

pack과 bucket이 합쳐진 단어로 소포로 비유
우체국 송장처럼 전송 데이터를 무사히 전송하기 위해 출발지 IP, 목적지 IP와 같은 정보가 포함되어 있다

IP 프로토콜의 한계

  • 비연결성
    • 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
  • 비신뢰성
    • 중간에 패킷이 사라질 수 있음
    • 패킷의 순서를 보장할 수 없음 (ex>전달 데이터의 용량이 클 경우 패킷단위로 나눠 전달-> 서로 다른 노드 통해 전달될시 의도되지 않은 순서로 패킷도착 가능)

TCP vs UDP

ex) 채팅 프로그램에서 메시지 보낼 때

- HTTP 메시지가 생성됨 

- Socket 라이브러리를 통해 전달됨

네트워크 소켓(Socket) : 프로그램이 네트워크에서 데이터를 송수신할 수 있도록, “네트워크 환경에 연결할 수 있게 만들어진 연결부“ 

- IP 패킷을 생성하기 전 **_TCP 세그먼트_**를 생성

- 생성된 TCP/IP 패킷은 LAN 카드와 같은 물리적 계층을 지나기 위해 이더넷 프레임 워크에 포함되어 서버로 전송
(그림표현하기)

TCP 세그먼트 - IP 패킷의 출발지 IP와 목적지 IP 정보를 보완할 수 있는 출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보 등을 포함

TCP

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

연결지향형-3 way handshake


<그림> 왼 - 클라이언트/ 오- 서버
1. 클라이언트 : 서버에 접속 요청하는 SYN 패킷 전송
2. 서버 : SYN요청 받음, 클라이언트에게 요청 수락하는 ACK + SYN설정된 패킷 발송(클라이언트의 응답 기다림)
3. 클라이언트 : 서버에게 ACK보냄- 연결성립, 데이터 전송 가능(3번에서 함께 데이터전송 가능)

IP 패킷의 한계인 비연결성을 보완
-> 데이터 전송이 성공적으로 이루어진다면 이에 대한 응답을 돌려줌

IP 패킷의 한계인 비신뢰성(순서를 보장하지 않음)을 보완
-> 패킷이 순서대로 도착하지 않는다면 TCP 세그먼트에 있는 정보를 토대로 다시 패킷 전송을 요청

UDP

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

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

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

HTTP3 -> UDP를 사용, 이미 여러 기능이 구현된 TCP보다는 하얀 도화지처럼 커스터마이징이 가능하다는 장점

TCPUDP
연결지향형 프로토콜비 연결지향형 프로토콜
전송 순서 보장전송 순서 보장 x
데이터 수신 여부 확인데이터 수신 여부 확인x
신뢰성 ↑속도 ↓신뢰성 ↓ 속도 ↑

좋은 기능이 다 들어있는 무거운 라이브러리 vs 필요한 기능만 들어있는 가벼운 라이브러리
TCP vc UDP

HTTP

HTTP/1.1, HTTP/2는 TCP 기반이며 HTTP/3는 UDP 기반 프로토콜

HTTP 특징

단순함,확장 가능

클라이언트 서버 구조

무상태 프로토콜(Stateless)

  • 상태 유지(Stateful):
    점원A가 고객의 상태를 기억하고 있는 것
    ->항상 같은 서버가 응답해야 -> 서버에 장애가 난다면 유지되던 상태정보 날라감, 처음부터 서버에 다시 요청해야 함
  • 무상태(Stateless):
    (고객이 자신의 주문을 기억하고 있다면) 중간에 다른 점원으로 바뀌어도 주문을 할 수 있다.
    고객(클라이언트 요청)이 증가하더라도 무상태에서는 점원(서버)을 대거 투입할 수 있다
    -> 응답 서버를 쉽게 바꿀 수 있다 -> 무한한 서버 증설 가능
  • 한계 :
    로그인이 필요없는 단순한 서비스 소개 화면 -> 무상태로 설계가능
    로그인이 필요한 서비스 -> 유저의 상태 유지해야 함(브라우저쿠키,서버세션,토큰 등 이용 상태 유지)

비연결성(Connectionless)

요청을 주고 받을 때만 연결을 유지하고 응답을 주고나면 TCP/IP 연결을 끊음 -> 최소한의 자원으로 서버 유지

HTTP 초기 : 각각의 자원을 다운로드하기 위해 연결과 종료를 반복해야 했다
트래픽이 많고, 큰 규모의 서비스를 운영할 때에는 비연결성은 한계

HTTP 지속 연결(Persistent Connections)
연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후에 연결을 종료

HTTP 메세지

(MDN에 자세히 나와있으니 기본을 숙지하고 MDN을 항상 참고가능)

HTTP 메시지는 헤더와 바디로 구분

HTTP body: message body(=payload) 통해 표현 데이터 전달

HTTP header : 표현 데이터를 해석할 수 있는 정보 제공( HTTP 전송에 필요한 모든 부가정보)

표현헤더
요청, 응답 둘 다 사용

주요헤더

MDN

콘텐츠 협상


동일한 URI에서 리소스의 서로 다른 버전을 서브하기 위해 사용되는 메커니즘 - 가장 잘 맞는 프레젠테이션의 결정

협상헤더
-요청시에만 사용

캐시(cache)
데이터나 값을 미리 복사해 놓는 임시 장소

캐시의 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을 절약하고 싶은 경우에 사용

요청 - 응답을 받았을 때 브라우저 캐시에 해당 응답 결과를 저장하며 이는 지정한 시간동안 유효

캐시 유효 시간 초과 : 다시 서버에 요청을하고 지정 시간동안 유효한 이미지를 응답받음 -> 네트워크 다운로드

검증 헤더(Validator), 조건부 요청 헤더

  • Last Modified & If-Modified-Since
    Last Modified : 데이터가 마지막으로 수정된 시간정보를 헤더에 포함
    If-Modified-Since : 캐시 유효시간 초과되더라도 조건부 요청
  • ETag & If-None-Match

프록시 캐시

한국에 있는 클라이언트에서 특정 데이터가 필요한 상황인데 해당 데이터의 원 서버가 미국에 있다고 가정(ex-youtube)

클라이언트와 원 서버 사이에 위치한 프록시 캐시 서버를 도입
private 캐시 : 클라이언트에서 사용하고 저장하는 캐시프록시 캐시
public 캐시 : 서버의 캐시

클라이언트가 캐시를 적용하지 않아도 임의로 브라우저가 캐시를 적용하는 경우

profile
Creative Developer

0개의 댓글