네트워크 흐름을 이해하기 위해서는 웹 통신을 가능하게 한 HTTP 통신의 흐름을 파악해야 한다.

네트워크 OSI 7 계층

  • 응용 계층 (Application Layer): HTTP, DNS, SSL, SMTP, FTP
  • 표현 계층 (Presentation Layer): GIF, JPEG, MPEG, MIME, ZIP, ASCII
  • 세션 계층 (Session Layer): RPC, SQL, NETBOIS, Sockets
  • 전송 계층 (Transport Layer): TCP, UDP, NETBEUI
  • 네트워크 계층 (Network Layer): IP, ICMP
  • 데이터 링크 계층 (Data Link Layer): FDDI, Ethernet, PPP
  • 물리 계층 (Physical Layer): CDMA, GSM, NICs, CSMA/CD, Fiber

TIP/IP 4계층

  • 어플리케이션 계층 (Application)
  • 전송 계층 (Transport)
  • 인터넷 계층 (Internet)
  • 네트워크 인터페이스 계층 (Network Interface)


IP와 IP Packet

IP에서 노드는 하나의 서버 컴퓨터를 의미합니다.
(출발지에서 목적지까지 데이터가 무사히 전달되기 위해서는 규칙이 필요합니다.)

IP 주소를 컴퓨터에 부여하여 이를 이용해 통신합니다.
(IP는 IP Address에 Packet이라는 통신 단위로 데이터 전달을 합니다.)

IP Packet은 송장처럼 전송 데이터를 무사히 전송하기 위한 출발지 IP, 목적지 IP 같은 정보가 포함되어 있습니다.

패킷 단위로 전송 하면 노드들은 목적지 IP에 도달하기 위해 서로서로 데이터를 전달합니다.
(이를 통해 복잡한 인터넷 망 속에서 정확한 목적지로 패킷을 전송할 수 있습니다.)

서버에 데이터를 전달받으면 서버도 응답을 합니다. (서버 역시 Ip Packet을 통해 응답합니다.)


IP와 IP Packet 한계

IP 프로토콜에도 한계가 존재합니다.

비연결성

  • 패킷을 받을 대상이 없거나 서비스 불능 상태에도 패킷을 일방적으로 전송

비신뢰성

  • 중간에 패킷이 사라질 수 있다.
    서버가 데이터를 전달하던 중 장애가 생겨 Packet이 소실되더라도 클라이언트는 이를 파악할 방법이 없습니다.

  • 패킷의 순서를 보장할 수 없다.


TCP 와 UDP

네트워크 계층 구조를 통해 IP Packet의 한계를 보완할 수 있습니다.

네트워크 프로토콜 계층은 OSI 7계층과 TCP/IP 4계층으로 나눌 수 있습니다.

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

Ex) 채팅 프로그램에서 메시지를 보낼 때
1. HTTP 메시지 생성 후 Socket 라이브러리를 통해 전달
2. TCP 세그먼트를 생성
3. IP Packet 생성
4. TCP/IP Packet을 Ethernet Frame 포함해 서버로 전송

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

차이점

  • TCP는 연결지향형 프로토콜, UDP는 비 연결지향형 프로토콜
  • TCP는 전송 순서 보장, UDP는 전송 순서 보장 x
  • TCP는 데이터 수신 여부 확인, UDP는 데이터 수신 여부 확인 x
  • TCP는 신뢰성이 높지만 속도가 느리다. UDP는 신뢰성이 낮지만 속도가 빠르다.

TCP 특징 (전송 제어 프로토콜)

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

TCP 3 way handshake

SYN: Synchronize
ACK: Acknowledgement

  1. 클라이언트는 서버에 접속을 요청하는 SYN Packet을 전송
  2. 서버는 SYN 요청을 받고 클라이언트의 요청을 수락한다는 ACK + SYN 설정 Packet을 반환
    (만약 서버가 꺼져있다면 서버에서 응답이 없기 때문에 다시 데이터를 보내지 않습니다.)
  3. 클라이언트가 다시 ACK로 응답

TCP 데이터 전달 보증

데이터 전송이 성공적으로 이루어지면 서버는 응답을 돌려주기 때문에 IP Packet의 한계인 비연결성을 보완할 수 있습니다.

TCP 특징 중 하나인 순서 보장

Packet이 순서대로 도착하지 않는다면 TCP 세그먼트에 있는 정보를 바탕으로 다시 Packet 요청을 할 수 있습니다. (IP Packet의 한계 비신뢰성을 보완 할 수 있다.)


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

  • 기능이 거의 없다. (하지만 커스터마이징이 가능하다.)
  • 비 연결지향
  • 데이터 전달 보증 지원 x
  • 순서 보장 x
  • 속도가 빠르다.
  • 신뢰성 보다는 연속성이 중요한 서비스에 자주 사용됨 ex) 실시간 스트리밍

HTTP

HTTP 1.1 / 2는 TCP 기반
HTTP 3는 UDP 기반이다.

HTTP 특징

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

HTTP (클라이언트 서버 구조)

클라이언트가 서버에 요청을 보내면 서버는 그에 대한 응답을 클라이언트에 보낸다.
(클라이언트는 서버에 요청을 보내고, 응답을 대기하고 서버에게 응답 받는다.)

HTTP 무상태 프로토콜 (Stateless)

서버가 클라이언트의 상태를 보존하지 않는다.
장점: 서버 확장성 높음 (스케일 아웃)
단점: 클라이언트가 추가 데이터 전송

서버는 클라이언트의 상태를 보존하지 않지만, 클라이언트에서 서버로 부터 받은 응답을 보존하기 때문에 무한한 서버 증설이 가능합니다.

  • 로그인이 필요한 서비스라면 유저의 상태를 유지해야 하기 때문에 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지합니다.

HTTP 상태 유지 (Stateful)

클라이언트가 서버에 요청 후 서버로 부터 받은 응답에 대해서는 상태를 유지한다.


Connection Oriented vs Connectionless

Connection Oriented

TCP/IP의 경우 기본적으로 연결을 유지합니다.

클라이언트에서 요청을 보내지 않더라도 연결은 계속 유지해야 합니다. 이러한 경우 연결을 유지하는 서버의 자원은 계속 소모 됩니다.

Connectionless (비 연결성)

HTTP에는 실제로 요청을 주고받을 때 연결을 유지하고 응답을 주고 나면 TCP/IP 연결을 끊습니다.
이를 통해 최소한의 자원으로 서버 유지를 가능하게 합니다.

  • 연결을 유지하지 않는 모델
  • 일반적으로 빠른 속도로 응답

트래픽이 많지 않고, 빠른 응답을 제공할 수 있는 것이 비연결성의 특징입니다. (효율적)
(하지만 트래픽이 많고, 큰 규모의 서비스 운영시 비연결성의 한계가 보입니다.)

HTML뿐 아니라, Javascript, CSS, 추가 이미지 등 많은 자원이 함께 다운됩니다.
해당 자원을 연결 시 마다 반복하는 것은 비효율적입니다.
이런 문제를 HTTP 지속 연결 (Persistent Connections)로 해결합니다.

HTTP 초기에는 각각의 자원을 다운로드하기 위해 연결과 종료를 반복했습니다.

HTTP 지속 연결 (Persistent Connections)

HTTP 지속 연결에서는 연결이 이루어지고 난 뒤 각각의 자원들을 요청하고 모든 자원에 대한 응답이 돌아온 후에 연결을 종료합니다.

profile
메일은 매일 확인하고 있습니다. 궁금하신 부분이나 틀린 부분에 대한 지적사항이 있으시다면 언제든 편하게 연락 부탁드려요 :)

0개의 댓글