1. 인터넷의 동작 원리
IP주소가 1.2.3.4인 컴퓨터 A와 IP주소가 5.6.7.8인 컴퓨터 B가 있다고 합시다. 컴퓨터 A가 컴퓨터 B에게 "안녕?"이라는 메시지를 보낸다면, 대략적으론 다음과 같은 과정으로 메시지 전송이 일어납니다.
먼저 컴퓨터 A에서 "안녕?"이라는 메시지를 적절한 인코딩 방식으로 2진수들의 나열로 변환하고, 유선이든 무선이든 A 컴퓨터가 인터넷에 연결되어있는 매체를 통해 메시지를 인터넷 상으로 전송시킬 것입니다. 예를 들어서 A 컴퓨터가 ISP에 전화선으로 연결되어 있다면, 위 2진수들의 나열은 전화선으로 전송되기에 알맞은 디지털 신호로 변환되어서 전화선을 타고 전송이 되겠죠. 그리고 그 신호가 ISP의 라우터나 스위치 같은 컴퓨터들을 지나 목적지 주소 5.6.7.8 즉, 컴퓨터 B로 전송이 될 것이고 그 곳에서 디지털 신호는 다시 텍스트 형태로 변환이 될 겁니다. 그럼 컴퓨터 B는 정상적으로 "안녕?"이라는 텍스트 메시지를 받아볼 수 있을거에요.
이 과정 전반에서 프로토콜 스택(Protocol Stack)이 사용되며 이는 보통 운영체제(OS)에 내장되어있습니다. 인터넷(Internet)에 사용되는 프로토콜 스택은 TCP/IP 프로토콜 스택으로 불리는데, 이 프로토콜에서 사용되는 두 가지 주된 통신 방법이 TCP와 IP이기 때문에 그렇게 불리게 됐습니다.
2. TCP/IP 프로토콜 스택 -> TCP/IP 4계층
TCP/IP 프로토콜 스택은 위 표와 같이 구성되어 있습니다. 흔히 TCP/IP 4계층이라고 불립니다.
위에서부터 하나씩 내려가면서 살펴볼게요.
2-1. Application Protocol Layer
Application Protocol 계층에선 여러 응용 프로그램들이 서비스 될 수 있도록 표준적인 인터페이스를 제공합니다. Application별로 예시를 통해서 이해해 봅시다.
2-1-1. HTTP와 WWW(World Wide Web)
HTTP와 WWW의 예시를 먼저 보겠습니다. WWW는 인터넷에서 가장 흔하게 사용되는 서비스입니다. 흔히 Web이라고도 불러요. 그리고 그 Web이 동작하게 하는 어플리케이션 프로토콜이 바로 HTTP(Hypertext Transfer Protocol)입니다.
HTTP는 웹브라우저(클라이언트)와 웹서버(서버)가 서로 통신하기 위한 프로토콜이에요. TCP 계층의 위에 존재하며, 다른 상대와 통신하기 위한 특정 어플리케이션에서 사용되므로 Application 계층의 프로토콜입니다. 이 경우 Application은 웹브라우저나 웹서버가 되겠지요.
HTTP는 비연결성 문자 기반(connectionless text based) 프로토콜입니다. 클라이언트(웹브라우저)가 웹서버로 웹페이지나 이미지 등의 웹 요소를 받기 위해 요청(Request)을 보내고, 해당 요청이 서버에 의해 서비스 되면, 즉 클라이언트가 요청에 대한 응답(Response)을 받으면, 인터넷 상의 클라이언트와 서버 간의 연결은 끊깁니다. 매 요청마다 새로운 연결이 필요한거죠.
대부분의 프로토콜은 연결성(connection oriented)입니다. 하지만 HTTP는 그렇지 않죠. 클라이언트로부터 요청이 만들어지기 위해선 우선, 서버로의 새로운 연결이 만들어져야 합니다.
사용자가 웹브라우저에 URL을 입력하면, 아래와 같은 과정을 따릅니다.
(1) URL이 도메인 이름(Domain Name)*을 가진다면, 브라우저(클라이언트)는 가장 먼저 도메인 이름 서버에 연결해, 해당 웹서버의 IP 주소를 검색합니다.
(2) 브라우저는 IP주소를 통해 해당 웹 서버에 연결해, 원하는 웹페이지의 HTTP 요청을 보냅니다.
(3) 웹 서버는 요청을 받아 브라우저가 원하는 웹페이지를 확인합니다. 그 페이지가 존재한다면 보내고, 존재하지 않는다면 404(Page not found) 에러 메시지를 보냅니다.
(4) 브라우저는 웹페이지를 수신하고 연결은 끊깁니다.
(5) 브라우저는 수신한 웹페이지를 파싱하고 웹페이지를 완성시킬 다른 요소들이 있는지 확인합니다. 이에는 이미지나 애플릿 등이 있을 수 있습니다.
(6) 그러한 요소가 있다면 브라우저는 각 요소의 서버에 추가적인 HTTP 연결을 만듭니다.
(7) 브라우저가 모든 요소들을 로딩하고 나면, 웹페이지는 완벽하게 브라우저 화면에 나타나게 됩니다.
* DNS란?
IP주소를 기억하기 쉬운 문자로(nn.nn.nn.nn -> www.abcde.co.kr) 변환하는 시스템으로, 컴퓨터의 이름과 그에 상응하는 인터넷상의 IP주소를 계속해서 추적하고 있는 분산된 데이터베이스 시스템입니다. ICANN에서 관리하며 계층적으로 구성됩니다.(.kr 아래에 .co와 같이)
2-1-2. SMTP와 전자메일
Application 계층의 또 다른 실제 예시는 SMTP입니다. SMTP는 Simple Mail Transfer Protocol의 약자로, 우리가 흔히 아는 이메일에 쓰이는 Application 계층의 프로토콜입니다. SMTP는 HTTP와 같이 문자 기반의 프로토콜이면서 HTTP와는 달리 비연결성이 아닙니다(connection oriented). HTTP와 비교해서는 다소 복잡한 프로토콜인데, 이메일을 읽기 위해 메일 클라이언트를 열면 생기는 일은 아래와 같습니다.
(1) 메일 클라이언트가 디폴트 메일 서버로의 연결을 엽니다.
(2) 연결이 열리면 메일 서버는 자신임을 알릴 수 있는 메시지(Ready)를 보냅니다.
(3) 클라이언트는 SMTP HELO 명령을 보내고 서버는 250 OK 메시지로 응답합니다.
(4) 위와 같이 성공적으로 SMTP handshaking을 통한 연결이 맺어지면, 클라이언트가 메일을 확인하는지, 보내는지에 따라 적절한 SMTP 명령이 서버로 보내지며 적절하게 응답 받습니다.
(5) 이러한 요청/응답 트랜잭션은 클라이언트가 SMTP QUIT 명령을 보낼 때 까지 이어집니다. 서버는 QUIT메시지를 수신하면 goodbye를 응답하며 연결은 종료됩니다.
2-2. Transmission Control Protocol Layer
TCP/IP에서 TCP에 해당하는 Transmission Control Protocoal 계층, 즉 TCP 계층은 목적지 컴퓨터 어플리케이션으로의 라우팅을 책임지며 여기에 포트 번호가 사용됩니다. 포트는 각 컴퓨터의 분리된 채널로 생각할 수 있는데, 웹서핑을 하면서도 이메일을 읽을 수 있는 건 두 어플리케이션이 다른 포트 번호를 사용중이기 때문입니다.
프로토콜 스택에서 TCP 계층 위인 Application 계층에서 데이터를 받으면, TCP 계층에선 그것을 관리하기 용이한 크기의 chunk들로 나누고, 각 chunk에 자세한 TCP 정보를 포함한 TCP헤더를 붙입니다. (위 그림에서 TCP헤더의 구조를 볼 수 있습니다. 이를테면 checksum은 받은 데이터의 에러를 확인할 수 있는 정보입니다.)
프로토콜 스택에서 TCP 계층 아래인 IP계층에서 패킷*을 받으면, TCP 계층은 패킷으로부터 TCP 헤더 데이터를 떼내고, 필요하다면 데이터를 약간 재구조화하고, 어느 어플리케이션이 이 패킷을 받을지 TCP헤더에 포함된 포트 번호를 통해 결정합니다.
TCP는 문자기반 프로토콜이 아니면서 데이터를 주고 받기 전 연결 설정이 필요한 connection-oriented 프로토콜입니다. 연결 기반이며 패킷을 받으면 ACK 신호를 보내는 등 신뢰할 수 있는 byte stream 서비스입니다.
* 패킷이란?
인터넷을 통해 전송되는 정보의 기본 단위로, 정보를 작은 단위로 쪼개 네트워크가 효율적으로 처리할 수 있는 용량으로 나눈 것입니다. 헤더와 바디로 구성되어, 헤더에는 패킷 목적지에 대한 정보, 패킷의 길이, 전송중 패킷의 손상이 있었을 시 그것을 탐지 가능한 checksum 등을 가지고 있고 이 헤더 뒤 바디에 실제 데이터가 위치해있습니다.
2-3. Internet Protocol Layer
TCP/IP에서 IP에 해당하는 Internet Protocol 계층, 즉 IP 계층은 TCP와는 다르게 신뢰할 수 없는(unreliable), 비연결성(connectionless) 프로토콜입니다. IP에선 패킷이 목적지에 도착했는지 아닌지는 관심 가지지 않습니다. 연결에 대해서도 모르고 포트 번호도 모릅니다. IP 계층의 유일한 역할은 다른 컴퓨터로 패킷을 보내는 것 뿐이에요.
IP 패킷은 독립적인 개체이며 순서대로 도착하지 않을 수도 있고 아예 도착하지 않을 수도 있습니다. 패킷의 도착과 순서의 확인은 TCP 계층의 역할이죠. IP가 유일하게 TCP와 닮은 점은, TCP 헤더처럼 IP 헤더를 붙인다는 것입니다. 위 그림에서 IP헤더의 구조를 볼 수 있습니다. (IP 헤더는 TCP 헤더와 내용도 다릅니다.)
2-4. Hardware Layer
binary 패킷을 네트워크 신호로 변환해서 주고 받는 계층으로, 실제로 어떻게 물리적으로 이진 데이터를 주고 받을지 결정하는 계층입니다.
이렇게 TCP/IP 4계층에 대해 조금이나마 알아봤는데요, '1. 인터넷의 동작 원리' 에서 예시를 든 "안녕?"이라는 메시지를 컴퓨터 A가 컴퓨터 B에게 보내는 상황이라면 다음 그림과 같이 TCP/IP 4계층을 통과하게 됩니다.
TCP/IP 4계층에 대해 알아봤으니 다음으론 위 그림에서 중간 연결다리 역할을 하는 Internet에 대해서 조금 더 깊이 알아보겠습니다.
2. Internet
중간 미디어인 Internet에는 전화선과 같은 전송매체와 ISP의 라우터, 스위치들이 있을 수 있습니다. 그것을 어느정도 간략화해서 그린 것이 아래의 이미지 입니다.
모뎀부터 천천히 살펴보겠습니다.
모뎀은 ISP에 의해서 관리되며 보통 컴퓨터당 한대씩 존재합니다. 전화망과 모뎀풀 또한 ISP에 의해 관리되죠.
ISP 포트 서버는 모뎀 풀로부터의 데이터 흐름을 컨트롤 하는 역할을 가지고 있는 컴퓨터입니다. 이 데이터 흐름을 라우터나 ISP backbone으로 전송하는 역할을 합니다. 요금청구나 사용 정보 관리 또한 이 곳에서 이루어집니다.
ISP backbone에 도착한 패킷은 다른 ISP의 backbone이나 라우터를 옮겨다니며 목적지로 향해 갑니다. 위 그림에선 간단히 표현했지만 실제론 수 많은 라우터를 거쳐가게 되죠. (맥에서 터미널에 traceroute + IP주소 혹은 traceroute + 도메인 이름을 입력하면 패킷이 자신의 컴퓨터로부터 목적지까지 가는동안 거쳐가는 라우터나 컴퓨터 등 중간 인터넷 개체의 주소를 알 수 있습니다.)
backbone은 수많은, 큰 네트워크들이 서로 연결되어 구성되어있습니다. 여기서의 이 큰 네트워크는 NSP(Network Service Provider)라고 불리며, 큰 NSP의 예시는 UUNet, CerfNet, IBM, BBN Planet, SprintNet, PSINet 등이 있습니다. 각 NSP는 세 개의 NAP(Network Access Point)와 MAE(Metropolitan Area Exchange)에 연결되어 있어야 합니다.(위 그림을 참고해주세요.) 이러한 것들을 IX(Internet eXchange point)라고 불러요. NAP에선 패킷들이 한 NSP의 backbone에서 다른 NSP의 backbone으로 연결됩니다. MAE도 같은 역할을 하지만 private하게 소유된다는 차이점이 있습니다.
라우팅 과정은 계층적입니다. 패킷과 각 컴퓨터는 다른 컴퓨터가 어디에 있는지 몰라요. 그렇기에 패킷이 정확한 목적지에 도달하기 위해서는 각 라우터가 가진 라우팅 테이블을 이용해야합니다.
라우터는 패킷 스위치입니다. 각 라우터는 스스로의 서브네트워크와 그 서브네트워크들이 쓰는 IP주소들을 알고 있어요. 하지만 그 위 계층의 IP주소는 모릅니다.
라우터에 패킷이 도착하면 라우팅 테이블을 보고 해당 패킷이 가진 목적지 IP주소가 있으면 그리로 보내고, 없다면 default 경로로 보냅니다. 이 과정을 아래에서부터 위로 똑같이 반복합니다. 그리고 최상위인 NSP backbone에 도달하면 (그 라우터는 가장 큰 라우팅 테이블을 가지고 있겠죠?) 그곳에서부터 맞는 주소를 따라 다시 위에서 아래로 내려갑니다.
이로서 인터넷의 동작 원리에 대해 전반적으로 알아보았는데요, 패킷이 무엇이고 왜 필요하며 어떻게 전달되는지를 중심으로 보시면 파악이 빠를 것 같습니다. 다음 포스팅에선 HTTP, DNS에 대해서 조금 더 자세히 다뤄보도록 하겠습니다.
'Network' 카테고리의 다른 글
호스팅(Hosting)이란? (0) | 2022.09.21 |
---|---|
브라우저의 동작 원리 (1) | 2022.09.16 |
HTTP란 무엇인가? (2) | 2022.06.25 |
DNS란 무엇이고 어떤 원리로 동작하는가 (0) | 2022.06.22 |
Internet(인터넷)은 무엇인가? (0) | 2022.05.12 |