네트워크 Protocol & OSI7 - mapc-team/document GitHub Wiki

웹 동작 방식

웹통신과정

  1. 웹브라우저
  • url에 입력된 값을 브라우저 내부에서 결정된 규칙에 따라 그의미를 조사한다.

  • 조사된 의미에 따라 HTTP Request 메세지를 만든다

  • 만들어진 메세지를 웹서버에 전송한다.

    → 실질적인 전송은 OS에서 이루어진다. 웹브라우저는 요청만 할뿐이다.

    (이 과정에서 OS는 IP 주소로 상대를 지정해야하므로 DNS 조회가 이루어진다.)

  1. 프로토콜 스택, LAN 어댑터
  • 프로토콜 스택(운영체제 네트워크 제어용 소프트웨어)이 웹브라우저로부터 메세지를 받는다
  • 브라우저로 받은 메세지를 패킷에 저장한다.
  • 수신처 정보 등의 제어 정보를 덧붙인다.
  • 패킷을 LAN 케이블에 송출시킨다.
  1. 허브, 스위치, 라우터
  • LAN 어댑터가 송신한 패킷은 스위치 허브 → 인터넷 접속용 라우터 경로로 전달한다.
  • 라우터는 패킷을 프로바이더(통신사)에게 전달한다.
  • 인터넷에 접속하게된다.
  1. 방화벽, 캐시 서버
  • 패킷이 웹서버의 LAN에 도착한다.
  • 방화벽이 패킷을 검사한다.
  • 패킷이 웹서버까지 가지않아도 되는지를 검사한다. (이게 그 프록시 패턴인가?)
  1. 웹서버
  • 웹서버의 프로토콜 스택은 패킷을 추출하여 메세지를 웹 서버 어플리케이션에 넘긴다.
  • 웹 서버 어플리케이션은 요청 메세지에 따른 응답을 클라이언트로 회송한다.

GET 방식과 POST 방식의 차이

get_post

이미지 오류 있음, 첫번째 속성이 반대

GET 방식은 HTTP Request Message의 Header 부분의 Url에 요청 데이터를 담아 보낸다.

url이라는 공간에 담기때문에 데이터의 크기가 제한적이며, 보안에 좋지않다.

POST 방식은 HTTP Request Message의 Body 부분에 데이터를 담아 보낸다.

GET 방식보다 데이터의 크기가 크며, 보안이 더 낫다.

일반적으로 서버의 상태나 값을 변경 하기위해서는 POST 방식을 사용하고, 단순 보여주기용으로는 GET 방식을 사용한다. 또한, GET 방식의 경우 브라우저에서 Caching이 가능하다.

캐시에는 몇 가지 종류가 있습니다: 
크게 사설(private) 혹은 공유(shared) 캐시 두 가지 부류로 분류될 수 있습니다.
공유 캐시는 한 명 이상의 사용자가 재사용할 수 있도록 응답을 저장하는 캐시를 말합니다. 
사설 캐시는 한 명의 사용자만 사용하는 캐시를 말합니다.

https://developer.mozilla.org/ko/docs/Web/HTTP/Caching

TCP와 UDP의 차이

tcp_udp

TCP의 경우 3way-handshaking 과정을 통해 연결, 신뢰성을 보장하지만 속도가 느린편이다.

→ 파일 교환과 같은 경우에 사용된다.

→ 신뢰성과 순차적인 전달

UDP의 경우 3way-handshaking 과정이 필요 없어서 속도는 빠르지만, 신뢰성이 낮다.

→ 실시간 스트리밍 및 DNS에 사용한다.

→ 흐름제어, 오류제어 및 손상된 세그먼트에 대한 재전송을 수행하지 않는다.

3way-Hanshaking

TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다.

SYN 'synchronize sequence numbers'
ACK 'acknowledgment'

3wayhandshaking

4way-Handshaking

3way-Hanshaking의 경우 연결을 위한 절차라고하면, 4way-Handshaking은 세션을 종료하기 위한 절차

4wayhandshaking

[STEP 1]
클라이언트가 연결을 종료하겠다는 FIN플래그를 전송한다.

[STEP 2] 
서버는 일단 확인메시지를 보내고 자신의 통신이 끝날때까지 기다리는데 이 상태가 TIME_WAIT상태다.
 
[STEP 3]
서버가 통신이 끝났으면 연결이 종료되었다고 클라이언트에게 FIN플래그를 전송한다.
 
[STEP 4]
클라이언트는 확인했다는 메시지를 보낸다.

"Server에서 FIN을 전송하기 전에 전송한 패킷이 Routing 지연이나 패킷 유실로 인한 재전송 등으로 인해 
FIN패킷보다 늦게 도착하는 상황"이 발생한다면? 

Client에서 세션을 종료시킨 후 뒤늦게 도착하는 패킷이 있다면 이 패킷은 Drop되고 데이터는 유실될 것이다. 
이러한 현상에 대비하여 Client는 Server로부터 FIN을 수신하더라도 일정시간(디폴트 240) 동안 
세션을 남겨놓고 잉여 패킷을 기다리는 과정을 거치게 되는데 이 과정을 "TIME_WAIT" 라고 한다.

HTTP와 HTTPS의 차이

암호화되지않는 모든 프로토콜의 공통적인 문제점 (HTTP의 문제점)

  • 평문 통신이기 때문에 도청이 가능하다.

  • 통신 상대를 확인하지 않기 때문에 위장이 가능하다.

    → 권한이 없어도 요청이 가능하다.

    (어떠한 reponse가 무조건적으로 수행됨. / 의미없는 request까지 수신한다.) - DDOS

  • 완전성을 증명할 수 없기 때문에 변조가 가능하다.

TCP/IP는 도청 가능한 네트워크

TCP/IP 구조의 통신은 전부 통신 경로 상에서 도청이 가능하다. 이 과정에서 암호화되지 않은 패킷을 수집하는 것만으로도 보안에 심각한 문제가 발생한다.

HTTPS (HTTP SECURE or HTTP over SSL)

위와 같은 문제를 해결 하기위해 SSL(Secure Socket Layer)나 TLS(Transport Layer Security)와 같은 다른 프로토콜과 조합하여 암호화 할 수 있다.

HTTPS는 SSL의 껍질을 덮어 쓴 HTTP라고 할 수 있다. SSL은 상대를 확인하는 방법으로 제 3자 기관에 의해 발행된 증명서를 제공하고 있다.

HTTP Protocol
HTTP <-> TCP

HTTPS Protoco
HTTP <-> SSL <-> TCP

모든 웹 페이지가 HTTPS를 사용하지 않는 이유로는 CPU나 메모리의 낭비때문이라고는 하는데, HTTP 2.0으로 발전되면서 HTTPS가 더 빠르다고 한다.

OSI 7계층 (이게 진짜 제일 싫어)

네트워크가 통신이 일어나는 과정을 7단계로 나눈 것을 의미한다.

→ 흐름을 한 눈에 확인할 수 있으며, 문제 발생시 해당 계층만을 쉽게 고칠 수 있다.

7계층 응용 (Data)

6계층 표현 (Data)

5계층 세션 (Data)

4계층 전달 (Segments)

3계층 네트워크 (Packets)

2계층 데이터링크 (Frames)

1계층 물리 (Bits)

(1계층) 물리 계층

1layer

  • 단지 데이터 전달 역할만을 수행
  • 1계층 장비 : 케이블, 리피터, 허브

(2계층) 데이터링크 계층

2layer

  • 물리적인 연결을 통해 인접한 두 장치의 신뢰성있는 정보 담당
  • MAC 주소와 제어정보를 전송, 헤더를 통해 캡슐화 및 캡슐화 해제
  • 정보의 오류 흐름을 관리하여 안정된 정보를 전달
  • 2계층 장비 : 브릿지, 스위치

(3계층) 네트워크 계층

3layer

  • 데이터를 목적지까지 가장 안전하고 빠르게 전달
  • 패킷은 목적지까지 경로를 설정, 헤더를 통해 캡슐화 또는 캡슐화 해제
  • IP(Internet Protocol), 라우팅(Routing), OSFP, BGP 등등
  • 3계층 장비 : 라우터, L3 스위치

(4계층) 전송 계층

4layer

  • 종단 간(End-to-End)에 신뢰성있고, 정확한 데이터를 전송
  • 종단 간의 에러복구와 흐름제어 담당, 헤더를 통해 캡슐화 및 캡슐화 해제
  • TCP(Transmission Control Protocol), UDP(User Datagram Protocol) 등등
  • 4계층 장비 : L4 스위치

(5계층) 세션 계층

5layer

  • 통신장치간 상호작용 및 동기화
  • 연결 세션에서 데이터 교환과 에러 발생시 복구를 관리 (논리적인 연결을 담당)
  • 헤더를 통해 캡슐화 및 캡슐화 해제
  • SSH 등등

(6계층) 표현 계층

6layer

  • 데이터 표현에 차이가 있는 처리에 제어 구조를 제공
  • 전송하는 데이터의 인코딩, 디코딩, 암호화, 코드 변화
  • 헤더를 통해 캡슐화 및 캡슐화 해제

(7계층) 응용 계층

7layer

  • 사용자와 가장 밀접한 계층, 인터페이스 역할
  • 응용 프로세스간 정보 교환

TCP/IP 4계층

tcp7layer

(1계층) 네트워크 엑세스 계층

  • 물리 계층 + 데이터 링크 계층
  • 물리적인 주소로 MAC을 사용
  • 이더넷, 토큰링, PPP 등등

(2계층) 인터넷 계층

  • 네트워크 계층
  • 통신 노드간 IP 패킷을 전송하는 기능과 라우팅 기능을 담당

(3계층) 전송 계층

  • 전송 계층
  • 통신 노드간 연결을 제어하고, 신뢰성있는 데이터 전송
  • TCP, UDP 등등

(4계층) 응용 계층

  • 세션 계층 + 표현 계층 + 응용 계층
  • TCP/UDP 기반의 응용 프로그램을 구현할 때 사용
  • SMTP, HTTP, SSH, DNS 등등
⚠️ **GitHub.com Fallback** ⚠️