06.17 TIL — 네크워크 기초

Sean H.W. Lee
7 min readJun 17, 2021

--

Photo by Nastya Dulhiier on Unsplash

네트워크 기초에 대해 복습 겸 다시 정리해 본다.

IP 란?

IP(Internet Protocol) 란 인터넷에 연결되어 있는 모든 장치들(컴퓨터, 서버 장비, 스마트폰 등)을 식별할 수 있도록 각각의 장비에게 부여되는 고유 주소이다.

  • IP 는 지정한 IP 주소에 패킷이라는 통신 단위로 데이터를 전달한다.
  • 패킷은 pack 과 bucket 이 합쳐진 단어이고, 마치 소포처럼 전송할 데이터를 바로 이 패킷이 감싸고 있다고 생각하면 된다.
  • IP 패킷에는 택배 송장처럼 출발지 IP 와 목적지 IP 와 같은 정보가 포함되어 있다. 이러한 정보 덕분에 데이터가 정확한 목적지로 전달될 수 있다.
  • 클라이언트에서 데이터를 전송하면 이 데이터를 전달받은 서버도 마찬가지로 IP 패킷을 이용해 클라이언트에 응답을 전달한다.

IP 프로토콜의 한계

하지만 IP 프로토콜에는 한계가 있다.

  • 비연결성 : 패킷을 받을 대상이 없거나 서비스 불능 상태여도 클라이언트는 이러한 서버의 상태를 파악할 방법이 없이 때문에 패킷을 그대로 전송한다.
  • 비신뢰성 : 패킷은 목적지 서버까지 한번에 가능 것이 아니라 중간에 노드(서버 컴퓨터라고 볼 수 있다)들을 거쳐 목적지까지 도착하는데, 중간 서버에 장애가 생겨 중간에 패킷이 소실되더라도 클라이언트에서 이를 파악할 방법이 없다.
  • 전달할 데이터의 용량이 큰 경우, 패킷 단위로 나눠서 데이터를 전달하는데 이때 패킷들은 중간에 서로 다른 서버를 통해 전달 될 수 있고, 이렇게 되면 클라이언트가 의도하지 않은 순서로 목적지 서버에 도착할 수 있다.

네트워크 프로토콜 계층

IP 프로토콜의 한계를 보완할 수 있는 방법으로 TCP(Transmission Control Protocol) 프로토콜이 있다.

TCP/IP 4계층은 아래와 같이 구성되어 있다.

  • 어플리케이션 계층 : 말 그대로 어플리케이션에서 생성되는 데이터
  • 전송 계층 : TCP 정보가 생성되며, 위에서 만든 데이터가 포함된다
  • 인터넷 계층 : IP 패킷이 생성되며, TCP 데이터가 포함된다.
  • 네크워크 인터페이스 계층 : 위 과정을 거쳐 생성된 TCP/IP 패킷은 LAN 카드와 같은 물리적 계층을 지나기 위해 이더넷 프레임 워크에 포함되어 서버로 전송됩니다.

TCP 세그먼트의 구성

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

TCP 특징

연결 지향 - TCP 3way handshake (가상 연결)
: TCP는 장치들 사이에 논리적인 접속을 성립하기 위하여 3 way handshake를 사용하는 연결지향형 프로토콜이다. 연결 방식은 아래와 같다

  • 클라이언트는 서버에 접속을 요청하는 SYN (Syncronize)패킷을 보낸다.
  • 서버는 SYN요청을 받고 클라이언트에게 요청을 수락한다는 ACK (Acknowledgment)와 SYN가 설정된 패킷을 발송하고 클라이언트가 다시 ACK으로 응답하기를 기다린다.
  • 클라이언트가 서버에게 ACK을 보내면 이 이후로부터 연결이 성립되며 데이터를 전송할 수 있다. 만약 서버가 꺼져있다면 클라이언트가 SYN을 보내고 서버에서 응답이 없기 때문에 데이터를 보내지 않는다.
  • 현재에는 클라이언트 -> 서버로 ACK 를 보낼 때 데이터를 함께 보내기도 한다.

데이터 전달 보증
: TCP 는 데이터 전송이 성공적으로 이루어지면 이에 대한 응답을 돌려주기 때문에 IP 패킷의 비연결성을 보완할 수 있다.

순서 보장
: 패킷이 순서대로 도착하지 않는다면 서버는 TCP 세그먼트에 있는 정보를 토대로 다시 패킷 전송 요청을 할 수 있다. 이를 통해 IP 패킷의 비신뢰성을 보완할 수 있다.

신뢰할 수 있는 프로토콜

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

UDP는 IP 프로토콜에 PORT, 체크섬 필드 정보만 추가된 단순한 프로토콜이다. TCP 특징과 비교하면 신뢰성은 낮지만 3 way handshake 방식을 사용하지 않기 때문에 TCP와 비교해 빠른 속도를 보장한다. HTTP3는 UDP를 사용하며 이미 여러 기능이 구현된 TCP와 비교했을 때 커스터마이징이 가능하다.

  • 기능이 거의 없다
  • 비 연결지향 - TCP 3 way handshake 를 사용하지 않는다
  • 데이터 전달을 보증하지 않는다
  • 순서를 보장하지 않는다
  • 대신 단순하고 빠르다. 때문에 실시간 스트리밍과 같은 신뢰성보다는 연속성이 중요한 서비스에 자주 사용된다.
정리

HTTP (Hyper Text Transfer Protocol : 인터넷 데이터 통신 규약)

HTTP 의 특징은 아래와 같다.

클라이언트 서버 구조

클라이언트가 서버에 요청을 보내면 서버는 그에 대한 응답을 보내는 클라이언트 서버 구조로 이루어져 있다.

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

무상태 프로토콜 - Stateless

HTTP 에서는 서버가 클라이언트의 상태를 보존하지 않는 무상태 프로토콜이다.

Stateful vs Stateless ?

  • Stateful : 서버가 클라이언트 요청 상태를 기억하고 있는 것. 때문에 클라이언트의 요청에 대해 같은 서버가 응답해야 한다. 이것의 단점은 해당 서버에 장애 발생 시 처음부터 다시 서버에 요청해야 한다.
  • Stateless : 클라이언트가 자신의 상태를 기억하고 요청하는 것. 즉, 요청할 때 필요한 데이터를 다 담아서 보낸다. 때문에 아무 서버나 호출해도 된다. 이 말은 첫 요청을 받은 서버가 만약에 문제가 생기더라도 다른 서버에서 응답을 하면 되기 때문에 클라이언트 입장에서는 다시 요청할 필요가 없다. 이렇게 무상태는 응답 서버를 쉽게 바꿀 수 있기 때문에 무한 서버 증설이 가능하다.

하지만 무상태에도 한계는 있다. 예를 들어 단순한 정적 페이지의 경우 무상태 설계에 문제가 없지만, 로그인가 같이 클라이언트 상태가 유지되어야 하는 경우는 브라우저 쿠키, 서버 세션, 토큰 등을 이용해 상태를 유지해야 한다.

정리하면 무상태 프로토콜은 서버가 클라이언트의 상태를 보존하지 않기 때문에 서버 확장성이 높지만, 클라이언트가 추가 데이터를 전송해야 한다는 단점이 있다.

Connectionless (비연결성)

비연결성을 이야기하기에 앞서 반대 개념인 Connection Oriented 를 알아보자.

Connection Oriented - 연결을 유지하는 모델
: TCP/IP의 경우 기본적으로 연결을 유지한다. 이 경우 연결을 유지하기 위해 서버의 자원이 계속 소모된다.

Connectionless
: 비연결성인 HTTP 는 실제 요청을 주고 받을 때에만 연결을 유지하고, 응답을 주고나면 TCP/IP 연결을 끊는다. 덕분에 최소 자원으로 서버 유지가 가능하다.

HTTP 1.0 기준 HTTP는 연결을 유지하지 않는 모델이다. 트래픽이 많지 않고 빠른 응답을 제공할 수 있는 경우라면 비연결성은 효율적으로 작동한다. 하지만

  • TCP/IP 연결을 새로 맺어야 하기 때문에 3 way handshake 시간이 추가되고
  • HTML, JS, CSS, image 등 다양한 자원을 요청해야 하는 상황에서 각각의 자원을 보낼 때마다 connect 와 disconnect 를 반복하는 것은 비효율적이다.

따라서 HTTP Persistent Connection (지속 연결)로 문제를 해결하였으며, HTTP/2, HTTP/3 로 갈수록 더 많은 최적화가 이뤄지고 있다.

--

--