이 시리즈는 그림으로 배우는 Http&Network Basic을 읽고 정리한 내용입니다.
이번 포스팅에서는 HTTP를 이해하는데 알아야 할 TCP/IP 개념만 설명하겠습니다.

1. 네트워크의 기본은 TCP/IP

인터넷을 포함하여 일반적으로 사용하고 있는 네트워크는 TCP/IP라는 프로토콜에서 옴직이고 있습니다.
HTTP는 그 중 하나입니다. 이제 TCP/IP에 대해 더 알아봅시다.


1.1 TCP/IP는 프로토콜의 집합

본론에 들어가기 앞서 프로토콜이 뭔지, 왜 필요한지 알아봅시다.

컴퓨터와 네트워크 기기가 상호간에 통신하기 위해서는 서로 같은 방법으로 통신해야 합니다.
예를들어, 어떻게 상대를 찾고, 어떻게 상대에게 이야기를 시작하고, 어떤 언어로 이야기를 하며, 어떻게 이야기를 종료할까와 같은 규칙을 결정할 필요가 있습니다. 이렇게 서로 다른 하드웨어와 운영체제 등을 가지고 서로 통신하기 위해서는 모든 요소에 규칙이 필요합니다. 이런 규칙을 프로토콜이라고 부릅니다.

프로토콜에는 케이블 규격이랑 IP 주소 지정 방법, 떨어진 상대를 찾기 위한 방법과 그 곳에 도달하는 순서, 그리고 웹을 표시하기 위한 순서 등 여러가지가 있습니다.
이렇게 인터넷과 관련된 프로토콜들을 모은 것을 TCP/IP라고 부릅니다.

image.png


1.2 계층으로 관리하는 TCP/IP

TCP/IP에서 중요한 개념 중 하나가 계층(Layer)입니다. TCP/IP는 애플리케이션 계층, 트랜스포트 계층, 네트워크 계층, 링크 계층 이렇게 4계층으로 나뉘어 있습니다.
image.png

TCP/IP를 굳이 왜 4개의 계층으로 나누어 놨을까?
TCP/IP가 계층화된 것은 여러 메리트가 있기 때문입니다.

  1. 사양이 변경되면 해당 계층만 바꾸면 되므로 자유롭다.
    예를들어, 인터넷이 하나의 프로토콜로 되어 있다면 어디선가 사양이 변경되었을 때 전체를 바꿔야 하지만, 계층화되어 있으면 사양이 변경된 해당 계층만 변경하면 됩니다. 각 계층은 계층이 연결되어 있는 부분만 결정되어 있어, 각 계층의 내부는 자유롭게 설계할 수 있습니다.

  2. 설계가 편하다.
    애플리케이션 층에서 애플리케이션은 자기 자신이 담당하는 부분을 고려하면 되고, 상대가 어디에 있는지, 어떠한 루트로 메시지를 전달하는지, 전달한 메시지가 확실하게 전달되고 있는지 같은 고려를 하지 않아도 됩니다.


1.2.1 TCP/IP 계층

  • 애플리케이션 계층(Application Layer)
    애플리케이션 계층은 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정하고 있습니다.
    TCP/IP에는 여러 가지의 공통 애플리케이션이 있습니다. 예를 들면, FTP와 DNS 등도 애플리케이션의 한 가지 입니다. HTTP도 이 계층에 포함됩니다.

  • 트랜스포트 계층(Transport Layer)
    트랜스포트 계층은 애플리케이션 계층에 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공합니다. 트랜스포트 계층에서는 서로 다른 성질을 가진 TCP(Transmission Control Protocol)와 UDP(User Data Protocol) 두 가지 프로토콜이 있습니다.

  • 네트워크 계층(혹은 인터넷 계층)
    네트워크 계층은 네트워크 상에서 패킷의 이동을 다룹니다. 패킷이란 전송하는 데이터의 최소 단위입니다. 이 계층에서는 어떠한 경로를 거쳐 상대의 컴퓨터까지 패킷을 보낼지를 결정하기도 합니다.
    인터넷의 경우라면 상대 컴퓨터에 도달하는 동안에 여러 대의 컴퓨터와 네트워크 기기를 거쳐 상대에게 배송됩니다. 그러한 여러 가지 선택지 중에서 하나의 길을 결정하는 것이 네트워크 계층의 역할입니다.

  • 링크 계층(혹은 데이터 링크 계층, 네트워크 인터페이스 계층)
    네트워크에 접속하는 하드웨어적인 면을 다룹니다. 하드웨어적 측면은 모두 링크 계층의 역할입니다.

1.2.2 TCP/IP 통신의 흐름

image.png
TCP/IP로 통신할 때 계층을 순서대로 거쳐 상대와 통신 합니다. 송신하는 측은 애플리케이션 계층에서부터 내려가고, 수신하는 측은 네트워크 계층부터 올라갑니다.

HTTP를 예로 들어 설명하면 다음과 같은 순서로 통신합니다.

  1. 송신측 클라이언트의 애플리케이션 계층(HTTP)에서 어느 웹 페이지를 보고 싶다라는 HTTP 리퀘스트를 지시합니다.

  2. 그 다음에 있는 트랜스포트 계층(TCP)에서는 애플리케이션 계층에서 받은 데이터(HTTP 메시지)를 통신하기 쉽게 조각내어 안내 번호와 포트 번호를 붙여 네트워크 계층에 전달합니다.

  3. 네트워크 계층(IP)에서는 수신지 MAC 주소를 추가해서 링크 계층에 전달합니다. 이로써 네트워크를 통해 송신할 준비가 되었습니다.

  4. 수신측 서버는 링크 계층에서 데이터를 받아들여 순서대로 위의 계층에 전달하여 애플리케이션 계층까지 도달합니다.

  5. 수신측 애플리케이션 계층에 도달하게 되면 클라이언트가 발신했던 HTTP 리퀘스트를 수신할 수 있습니다.

    이 과정을 그림으로 보면 다음과 같습니다.

image.png

위 그림을 자세히 보면 송신할 때는 각 계층을 거칠 때마다 헤더에 필요한 정보가 추가되고, 수신할 때는 해해당 계층마다 사용한 헤더를 삭제합니다. 이렇게 정보를 감싸는 것을 캡슐화라고 합니다.


1.3 HTTP와 관계가 깊은 프로토콜은 IP/TCP/DNS

TCP/IP 중에서 HTTP와 관계가 깊은 IP, TCP, DNS 세 개의 프로토콜에 대해 조금 더 자세히 알아봅시다.

1.3.1 배송을 담당하는 IP

IP(Internet PRotocol)는 앞서 봤듯이 네트워크 층에 해당합니다.
이름 그대로 인터넷을 활용하는 거의 대부분의 시스템이 IP를 이용하고 있습니다. IP는 TCP/IP라는 명칭의 일부가 될 정도로 중요한 프로토콜입니다.

IP의 역할은 개개의 패킷을 상대방에게 전달하는 것입니다. (패킷: 통신망을 통해 전송하기 쉽도록 자른 데이터의 전송 단위)
상대에게 전달하기까지 여러 가지 요소가 필요합니다. 그 중에서도 IP 주소와 MAC 주소(Media Access Control Address)라는 요소가 중요합니다.
IP주소는 각 노드에 부여된 주소를 가리키고 MAC 주소는 각 네트워크 카드에 할당된 고유의 주소입니다. IP주소는 변경 가능하지만 기본적으로 MAC 주소는 변경할 수 없습니다.

통신은 ARP(주소 결정 프로토콜)를 이용하여 MAC 주소에서 한다

IP 주소? MAC 주소?
IP주소: 컴퓨터 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해서 사용하는 특수한 번호이다. 네트워크에 연결된 장치가 라우터이든 일반 서버이든, 모든 기계는 이 특수한 번호를 가지고 있어야 한다. 이 번호를 이용하여 발신자를 대신하여 메시지가 전송되고 수신자를 향하여 예정된 목적지로 전달된다.
MAC 주소: 네트워크 세그먼트의 데이터 링크 계층에서 통신을 위한 네트워크 인터페이스에 할당된 고유 식별자이다.

IP 통신은 MAC 주소에 의존해서 통신 합니다. 인터넷에서 통신 상대가 같은 랜선 내에 있을 경우는 적어서 여러 대의 컴퓨터와 네트워크 기기를 중계해서 상대방에게 도착합니다. 그렇게 중계하는 동안에는 다음으로 중계할 곳의 MAC 주소를 사용하여 목적지를 찾아가는 것입니다. 이때, ARP(Address Resolution Protocol: 주소 결정 프로토콜)이라는 프로토콜이 사용됩니다.

ARP는 주소를 해결하기 위한 프로토콜 중 하나인데, 수신지의 IP 주소를 바탕으로 MAC 주소를 조사할 수 있습니다. ARP를 사용해서 패킷을 보내는 과정을 한 번 보겠습니다.

image.png

목적지까지 중계를 하는 도중에 컴퓨터와 라우터 등의 네트워크 기기는 목적지에 도착하기 전까지 대략적인 목적지만을 알고 있습니다.
이 시스템을 라우팅이라고 부르는데 택배 배송과 비슷합니다. 화물을 보내는 사람은 택배 집배소 등에 화물을 가지고 가면 택배를 보낼 수 있는 것만 알고 있으며, 집배소는 화물을 보내는 곳을 보고 어느 지역의 집배소에 보내면 되는지만 알고 있습니다. 그리고 목적지에 있는 집배소는 어느 집에 배달하면 되는지만 알고 있습니다. 결국, 어떤 컴퓨터나 네트워크 기기도 인터넷 전체를 상세하게 파악하고 있지 못합니다.

1.3.2 신뢰성을 담당하는 TCP

TCP(Transfer Control Protocol)는 트랜스포트 층에 해당하며, 신뢰성 있는 바이트 스트림 서비스를 제공합니다.

바이트 스트림 서비스란?
바이트 스트림 서비스란 용량이 큰 데이터를 보내기 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 것을 말하고, 신뢰성 있는 서비스는 상대방에게 보내는 서비스를 의미합니다.

결국 TCP는 대용량의 데이터를 보내기 쉽게 작게 분해하여 상대에게 보내고, 정확하게 도착했는지 확인하는 역할을 담당합니다.

쓰리웨이 핸드쉐이킹(three way handshaking)

TCP는 데이터를 상대방에게 확실하게 보내기 위해서 쓰리웨이 핸드쉐이킹이라는 방법을 사용하고 있습니다. 이 방법은 패킷을 보내고 잘 보내졌는지 여부를 상대에게 확인하러 갑니다. 여기에서 'SYN'와 'ACK'라는 TCP 플래그를 사용합니다. 그림을 보면서 알아봅시다.

image.png

  1. 송신측에서 최초 'SYN' 플래그로 상대에게 접속함과 동시에 패킷을 보냅니다.
  2. 수신측에서는 'SYN/ACK' 플래그로 송신측에 접속함과 동시에 패킷을 수신한 사실을 전합니다.
  3. 마지막으로 송신측이 'ACK' 플래그를 보내 패킷 교환이 완료되었음을 전합니다.

1.3.3 이름 해결을 담당하는 DNS

DNS(Domain Name System)는 HTTP와 같이 응용 계층 시스템에서 도메인 이름과 IP 주소 이름을 확인을 제공합니다. 컴퓨터는 IP 주소와는 별도로 호스트 이름과 도메인 이름을 붙일 수 있습니다.
DNS는 도메인명에서 IP 주소를 조사하거나 반대로 IP 주소로부터 도메인명을 조사하는 서비스를 제공하고 있습니다.