웹과 네트워크에 대해 알아보자.

📌 시작하기 앞서

웹이라는 세계가 어떤 기술로 구성되어 있는가, HTTP는 어떻게 탄생했고 성장해 왔는가에 대해 알아보려고 한다.

📌 웹은 HTTP로 나타낸다.

클라이언트에서 서버까지 일련의 흐름을 결정하고 있는 것은 웹에서 HTTP라 불리는 프로토콜이다. 프로토콜은 약속이라는 의미를 가진다. 즉, 웹은 HTTP라는 약속을 사용한 통신으로 이루어져 있다.

📌 HTTP는 어떻게 탄생했는가?

웹은 지식 공유를 위해 고안되었다. 팀 버너스 리 박사가 멀리 떨어져 있는 동료 연구자와 지식을 공용할 수 있도록 시스템을 고안하였다.

HTTP/0.9

1990년 공개

HTTP/1.0

1996년 5월 공개, HTTP/1.0으로 RFC1945 발행
초기 사양이지만 현재까지 많은 서버 상에서 현역으로 가동되고 있는 프로토콜 사양이다.

HTTP/1.1

1997년 1월 공개
현재 가장 많이 사용되는 버전

📌 네트워크 기본 TCP

인터넷을 포함하여 일반적으로 사용하고 있는 네트워크는 TCP/IP라는 프로토콜에서 움직이고 있다. HTTP는 그 중 하나이다.

TCP/IP는 프로토콜의 집합이다.

컴퓨터와 네트워크 기기가 서로 통신하기 위해서는 꼭 같은 방법으로 통신해야 한다. 즉, 어떻게 상대를 찾고, 어떻게 상대에게 이야기를 시작하고, 어떤 언어로 이야기를 할지, 어떻게 이야기를 종료할지에 대한 규칙을 결정할 필요가 있다. 따라서 모든 요소에 규칙이 필요한데 이를 프로토콜이라 부른다.
인터넷과 관련된 프로토콜을 모은 것을 TCP/IP라고 부른다. TCP와 IP 프로토콜을 가리켜 TCP/IP라고 부르기도 한다. 하지만 IP 프로토콜을 사용한 통신에서 사용되고 있는 프로토콜을 총칭해서 TCP/IP라는 이름이 사용되고 있다.

계층으로 관리하는 TCP/IP

TCP/IP에서 중요한 개념 중 하나가 계층(layer)이다.
TCP/IP는 '애플리케이션 계층', '트랜스포트 계층', '네트워크 계층', '링크 계층' 총 4계층으로 나누어져 있다.

계층을 나누는 이유는 뭘까?

예를 들어 인터넷이 하나의 프로토콜로 되어 있다면 어디서 사양이 변경되었을 때 전체를 바꾸지 않으면 안된다. 그러나 계층화되어 있다면 사양이 변경된 계층만 바꾸면 된다.
각 계층의 내부는 자유롭게 설계할 수 있다. 자신이 담당하는 부분만 고려하면 되고, 상대가 어디에 있는지, 어떤 루트로 전달되는지, 전달한 메시지가 확실하게 전달되고 있는지는 고려하지 않아도 된다.

애플리케이션 계층

유저에게 제공되는 애플리케이션에서 사용하는 통신의 움직임을 결정하고 있다.
FTP랑 DNS, HTTP 등도 애플리케이션의 한 가지이다.

트랜스포트 계층

애플리케이션 계층에 네트워크로 접속된 2대의 컴퓨터 사이의 데이터 흐름을 제공한다.
서로 다른 성질을 가진 TCP와 UDP 두 가지 프로토콜이 있다.
TCP에서는 애플리케이션 계층에서 받은 데이터를 통신하기 쉽게 조각내어 안내 번호와 포트 번호를 붙여 네트워크 계층에 전달한다.

네트워크 계층(혹은 인터넷 계층)

네트워크 상에서 패킷의 이동을 다룬다.
패킷 : 전송하는 데이터의 최소 단위
어떤 경로를 거쳐 상대 컴퓨터까지 패킷을 보낼지 결정하기도 한다. (여러 가지 선택지 중에서 하나의 길을 결정)
IP에서는 수신지 MAC 주소를 추가해서 링크 계층에 전달한다.

링크 계층(혹은 데이터 링크 계층, 네트워크 인터페이스 계층)

네트워크에 접속하는 하드웨어적인 면을 다룬다.
운영체제가 하드웨어를 제어하기 떄문에 디바이스 드라이버랑 네트워크 인터페이스 카드(NIC)를 포함한다.
케이블 등과 같이 물리적으로 보이는 부분도 포함한다.
하드웨어적 측면은 모두 링크 계층의 역할

TCP/IP 통신의 흐름

계층을 순서대로 거쳐 상대와 통신한다. 즉, 송신측에서 애플리케이션부터 내려가고, 수신측에서 애플리케이션 계층으로 올라간다.
송신측에서 각 계층을 거칠 때는 헤더로 불려지는 해당 계층마다 필요한 정보를 추가하고, 수신측에서는 각 계층을 거칠 때마다 해당 계층마다 사용한 헤더를 삭제한다. → 캡슐화(정보를 감싼다)

📌 HTTP와 관계 깊은 프로토콜 → IP/TCP/DNS

IP : 배송 담당

IP는 어떤 역할을 수행할까?

패킷을 상대방에게 전달하는 역할을 한다.
상대방에게 전달하기 까지 여러 요소가 존재한다. 그 중에서 IP 주소와 MAC 주소가 중요하다.
('IP'와 'IP 주소'를 혼동하지 말자. 'IP'는 프로토콜 명칭이다)
IP 주소 : 각 노드에 부여된 주소 (변경 가능)
MAC 주소 : 각 네트워크 카드에 할당된 고유의 주소 (변경 불가)
IP(Internet Protocol)는 네트워크 층에 해당되며, 인터넷을 활용하는 대부분의 시스템이 IP를 이용한다.

통신은 ARP를 이용하여 MAC 주소에서 한다.

ARP는 주소를 해결하기 위한 프로토콜 중 하나이다.
수신지의 IP 주소를 바탕으로 MAC 주소를 조사할 수 있다.

라우팅 시스템이 뭘까?

목적지까지 중계하는 중에 컴퓨터와 라우터 등의 네트워크 기기는 목적지에 도착하기까지 대략적인 목적지만 알고 있다. 이 시스템을 라우팅이라고 한다.
예를 들어 쿠팡에서 물건을 주문했다고 가정해보면 여러 지역을 거쳐 우리집으로 물건이 배송된다.
1.
판매자는 우리집 주소(도착 지점)와 물건을 택배사에 보낸다.
2.
택배사는 곤지암 Hub(첫 번째 라우터)로 물건을 보낸다.
3.
곤지암 Hub(첫 번째 라우터)는 강남 Hub(두 번째 라우터)로 보낸다.
4.
강남 Hub에서 택배원이 물건을 가지고 우리집(도착 지점)으로 전달한다.
이와 같이 각 지점에서 전체 흐름을 상세하게 파악하고 있지 않다. A에서 B로 전달하면 되는 것만 파악하면 된다. 컴퓨터나 네트워크 기기도 마찬가지다. 전체를 상세하게 파악하고 있지는 않다. 이러한 시스템을 라우팅이라고 한다.

TCP : 신뢰성 담당

TCP(Trasfer Control Protocol)가 뭐고 어떤 역할을 수행할까?

트랜스포트 층에 해당하며, 신뢰성 있는 바이트 스트림 서비스를 제공한다. 즉, TCP는 대용량의 데이터를 보내기 쉽게 작게 분해하여 보내고, 정확하게 도착했는지 확인하는 역할을 담당한다.
💡
바이트 스트림? 용량이 큰 데이터를 보내기 쉽게 TCP 세그먼트라고 불리는 단위 패킷으로 작게 분해하여 관리하는 것을 말하고, 신뢰성 있는 서비스는 상대방에게 보내는 서비스를 의미한다.

상대가 데이터가 확실하게 도착했는지 어떻게 확인할까?

TCP는 '3-way handshaking'이라는 방법을 사용한다. '3-way handshaking'은 아래와 같은 과정을 거친다.
1.
패킷을 보내고 끝이 아닌, 보냈졌는지 여부를 상대에게 확인하러 간다.
'SYN'과 'ACK'라는 TCP 플래그 사용
2.
송신측에서 최초 'SYN' 플래그로 상대에게 접속함과 동시에 패킷을 보낸다.
3.
수신측에서 'SYN/ACK' 플래그로 송식측에서 접속함과 동시에 패킷을 수신한 사실을 전달한다.
4.
송신측에서 'ACK' 플래그를 보내 패킷 교환이 완료되었음을 전달한다.
과정에서 통신이 끊어지면 TCP는 같은 패킷을 재전송하게 된다.
'3-way handshaking'에 더 알아보려면 이전에 정리했던 글이 있으므로 참고하자.

DNS : 이름 해결 담당

DNS(Domain Name System)가 뭐고 어떤 일을 담당할까?

HTTP와 같이 응용 계층 시스템에서 도메인 이름과 IP 주소 이름 확인을 제공한다.
인간에게는 "www.google.com"과 같은 이름이 친숙하다. 그러나 컴퓨터는 숫자를 나열하는 방법을 선호하므로 DNS는 도메인명에서 IP 주소를 제공하거나 반대로 IP주소에서 도메인명을 제공하고 있다.

📌 URI와 URL

URL(Uniform Resource Locator)

웹 페이지를 표시하기 위해 입력하는 주소
"https://www.google.co.kr"

포맷

필요한 정보 전체를 지정하는 완전 수식 절대 URI 혹은 상대적 위치를 */image/log.gif와 같이 지정하는 상대 URI가 있다.
스키마 : 'http:'와 'https:' 같은 스키마를 사용하여 리소스를 얻기 위해 사용하는 프로토콜을 지시한다. (대소문자 무시)
자격정보(크리덴셜) : 서버로부터 리소스를 취득하려면 자격정보가 필요한데 유저명과 패스워드를 지정할 수 있다. (옵션)
서버 포트 : 접속 대상이 되는 네트워크 포트 번호를 지정한다. (옵션 → 생략 시 디폴트 포트 사용)
계층적 파일 경로 : 특정 리소스를 식별하기 위해 서버 상의 패스를 지정한다.
쿼리 문자열 : 파일 패스로 지정된 리소스에 임의의 파라미터를 넘겨주기 위해 사용한다. (옵션)
프래그먼트 식별자 : 주로 취득한 리소스에서 서브 리소스(도큐먼트 중간 위치)를 가리키기 위해서 프래그먼트 식별자가 사용된다.

URI(Uniform Resource Identifiers)

리소스 식별자

Uniform

통일된 서식을 결정 → 여러 가지 종류의 리소스 지정 방법을 같은 맥락에서 구별없이 취급할 수 있게 한다.
새로운 스키마 도입을 용이하게 한다. (http: 또는 ftp 등)

Resource

식별 가능한 모든 것 → 도큐먼트 파일뿐만 아니라 이미지와 서비스 등 구별할 수 있는 모든 리소스
단일한 부분만 아니라 복수의 집합도 리소스로 파악할 수 있다.

Identifier

식별 가능한 것을 참조하는 오브젝트이자 식별자로 불린다.
즉, URI는 스키마를 나타내는 리소스를 식별하기 위한 식별자를 뜻한다.

📌 참고 자료

TOP