HTTP
를 이해하기 위해서는 TCP/IP
프로토콜에 대해 어느정도 알고 있어야 할 필요가 있습니다.
인터넷을 포함하여 일반적으로 사용하고 있는 네트워크는 TCP/IP
라는 프로토콜에서 움직이고 있습니다.
컴퓨터와 네트워크 기기가 상호간에 통신하기 위해서는 서로 같은 방법으로 통신해야합니다.
따라서 서로 다른 하드웨어와 운영체제등을 가지고 통신하기 위해서는 규칙이 필요한데, 이러한 규칙을 프로토콜
이라 부릅니다.
프로토콜에는 여러 가지가 있는데, 케이블 규격, IP 주소 지정 방법, 목적지에 도달하는 순서 등등..
이렇게 인터넷과 관련된 프로토콜들을 모은것을 TCP/IP
라고 부르며 대표적으로 여러분들이 잘 아는 HTTP
프로토콜도 포함되어 있습니다.
TCP/IP에서 중요한 개념 중에 하나가 계층(layer)입니다. TCP/IP의 계층은 아래와 같이 나눠져있습니다.
애플리케이션 계층
은 유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정합니다.
TCP/IP에는 여러 가지의 공통 애플리케이션이 준비되어 있습니다. Ex) FTP, DNS, HTTP ..
트랜스포트 계층
은 애플리케이션 계층에 네트워크로 접속되어 있는 2대의 컴퓨터 사이의 데이터 흐름을 제공합니다.
트랜스포트 계층에서는 서로다른 성질을 가진 TCP
와 UDP
두가지 프로토콜이 있습니다.
네트워크 계층은 네트워크 상에서 패킷
의 이동을 다룹니다.
패킷이란? 전송하는 데이터의 최소 단위
이 계층에서는 어떤 경로를 걸쳐서 상대의 컴퓨터까지 패킷을 전송시킬지 정하기도 합니다.
인터넷의 경우에 상대 컴퓨터에 도달하는 동안에 여러 대의 컴퓨터와 네트워크 기기를 거쳐서 상대방에게 전달됩니다.
따라서 여러 컴퓨터와 네트워크 기기중 어떤 길로 갈지 하나의 길
을 결정하는 것이 네트워크 계층의 역할이 됩니다.
네트워크에 접속하는 하드웨어적인 면을 다룹니다. 운영체제가 하드웨어를 제어하기 때문에 디바이스 드라이버와 네트워크 인터페이스 카드를 포합합니다.
물리적으로 보이는부분(케이블 등등..)도 포함됩니다. 쉽게말하면 하드웨어적인 부분들은 모두 TCP/IP 계층중에서 링크 계층의 역할입니다.
TCP/IP 통신을 할 때는 계층을 순서대로 거쳐 상대와 통신을 합니다. 송신(보내는 쪽)은 애플리케이션 계층에서부터 내려가고, 수신(뱓는 쪽)은 애플리케이션 계층으로 올라갑니다.
예를 들어 설명해보겠습니다.
애플리케이션 계층 : 어느 웹 페이지를 보고싶다고 리퀘스트를 지시합니다.
트랜스포트 계층 : 애플리케이션 계층에서 받은 데이터를 작게 여러조각으로 조각내어 번호표를 부여하여 네트워크 계층에 전송합니다.
네트워크 계층 : 수신지 MAC 주소를 추가해서 링크 계층에 전달합니다. (MAC 주소는 아래서 설명합니다.)
이렇게 송신측의 준비는 끝났습니다. 수신은 이와 반대 순서로 진행된다고 보면 됩니다. 사진으로 보면 아래와 같습니다.
송신 : 각 계층을 거칠 때는 반드시 헤더로 불려지는 해당 계층마다 해당 계층에 필요한 정보를 추가합니다.
수신 : 각 계층을 거칠 때마다 반드시 해당 계층마다 사용한 헤더를 삭제합니다.
IP
, TCP
, DNS
는 HTTP와 관계가 정말 깊습니다. 따라서 세 개의 프로토콜에 대해서 설명을 해보겠습니다.
IP는 계층으로 말하자면 네트워크 층에 해당됩니다. IP
는 TCP/IP라는 명칭의 일부가 될 정도로 중요한 프로토콜입니다.
IP와 IP 주소는 다른 개념입니다. IP는 프로토콜의 명칭입니다.
IP의 역할은 개개의 패킷을 상대에게 전달하는 것입니다. 상대방에게 전달하기까지 여러 가지 요소가 필요한데, 그 중에서도 IP 주소
와 MAC 주소
가 중요합니다.
IP 주소와 MAC 주소는 연관되어있으며 IP 주소는 변경가능하지만, MAC 주소는 변경 불가능합니다.
IP 통신은 MAC 주소에 의존해서 통신을 합니다.
인터넷에서 통신 상대가 같은 랜선 내에 있을 경우는 많지 않기 때문에 여러 대의 컴퓨터와 네트워크 기기를 통해서 상대방에게 도착합니다.
그렇게 여러 컴퓨터와 네트워크 기기를 지나는 동안 다음 목적지의 MAC 주소를 통해 목적지를 찾아갈 수 있는것입니다.
ARP : 주소 문제를 해결하기 위한 프로토콜 중 하나이며 수신지의 IP 주소를 바탕으로 MAC 주소를 조사할 수 있다.
Ex)
송신 : 52.54.xx.xx 주소에 패킷을 보내고 싶음
ARP : 52.54.xx.xx 주소에 도달하기 위해 거치는 중간 라우터들의 MAC 주소를 조사해서 패킷을 목적지에 도달시킴
TCP는 계층으로 말하자면 트랜스포트 계층에 해당하는데, 신뢰성 있는 바이트 스트림 서비스를 제공합니다.
바이트 스트림 서비스? 용량이 큰 데이터를 보내기 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 서비스
신뢰성 있는? 상대방에게 보내는 서비스
따라서 TCP는 대용량의 데이터를 보내기 쉽도록 작게 분해하여 상대에게 보내고, 정확하게 도착했는지 확인하는 역할을 담당하고 있습니다.
신뢰성이 있도록 상대에게 확실하게 데이터를 보내기 위해서 TCP는 쓰리웨이 핸드셰이킹이라는 방법을 사용합니다. 이 글에 정리해 놓았습니다.
DNS는 HTTP와 같이 응용 계층 시스템에서 도메인 이름과 IP 주소 이름 확인을 제공합니다. 컴퓨터는 IP 주소와는 별도로 호스트 이름과 도메인 이름을 붙일 수 있습니다.
사용자들은 숫자를 나열하는 IP 주소보다 영문과 숫자 등으로 표기한 이름이 더 친숙합니다. 하지만 컴퓨터들은 숫자를 나열하는 방식이 더 친숙한데 이러한 문제를 해결하기 위해 DNS가 있습니다.
DNS는 도메인명에서 IP 주소를 조사하거나 반대로 IP 주소로부터 도메인명을 조사하는 서비스를 제공합니다.