Search
🌐

[내 PC에서 구글까지] 네트워크 통신의 여정 (1) 이론편

Created
2024/09/19 09:00
Tags
Network
Post
Last edited time
2024/09/29 15:12
Status
Done

1. 들어가기 앞서

우리가 데스크탑에서 google.com을 브라우저에서 입력했다고 가정해보자. 이 과정은 단순히 URL을 입력하는 것으로 시작되어, 세상 어딘가에 위치한 구글 서버까지의 요청을 보낸 후, 응답을 받는 복잡한 여정과 네트워크 통신이 이루어지고 있다. 총 2편의 포스팅을 통해 첫번째 포스팅에서는 어떠한 과정으로 구글 서버에 도달하는지 이론을 살펴보고, 두번째 포스팅에는 실제 여정이 어떻게 되는지를 예시를 통해 살펴보도록 하자.

2. 브라우저 → 구글 요청 시작

2.1. DNS 요청

google.com과 같은 도메인 이름은 사람들에게 친숙하지만, 컴퓨터는 이 이름을 이해하지 못한다. 컴퓨터는 일반적으로 IP 주소라는 고유한 숫자 체계를 사용하여 서버와 통신한다. 그래서 google.com에 접속하려면 먼저 해당 도메인 이름을 IP 주소로 변환해야 한다. 이 변환 작업은 DNS(Domain Name System)를 통해 이루어진다.
브라우저는 먼저 DNS 서버에 google.com의 IP 주소를 요청한다. 이 요청은 로컬 캐시를 먼저 확인한 후, 캐시된 IP가 없으면 인터넷 서비스 제공자(ISP)의 DNS 서버로 보내진다. DNS 서버는 google.com을 위한 IP 주소를 반환하는데, 예를 들어 142.250.76.142과 같은 구글 서버의 IP를 반환한다.
터미널에서 nslookup {도메인 주소} 를 입력하면 도메인의 IP를 확인 할 수 있다.
$ nslookup google.com Server: 210.220.163.82 Address: 210.220.163.82#53 Non-authoritative answer: Name: google.com Address: 142.250.76.142
Bash
복사

2.2. IP 주소 확인 및 패킷 생성

DNS 요청이 완료되면 브라우저는 구글 서버의 IP 주소를 알게 된다. 이제 브라우저는 HTTP(S) 요청을 통해 구글 서버에 접속하려고 시도한다. 이때 브라우저는 요청을 패킷에 담아 전송할 준비를 한다.

2.3. [주요 개념] 패킷

패킷은 데이터 전송의 기본 단위이다. 패킷은 여러 레이러로 나뉘며 각 레이어는 특정한 정보를 갖고 있다. 예를 들어 IP 헤더와 TCP 헤더가 포함된 패킷 구조는 다음과 같다.
IP 헤더
출발지 IP: 192.168.0.10
목적지 IP: 142.250.76.142
기타 IP 관련 정보 (TTL, 프로토콜 등)
TCP 헤더
출발지 포트: 50432
목적지 포트: 80
시퀸스 번호, 체크 섬 등
데이터 (Payload)
패킷 구조를 알기 쉽게 코드 형식으로 표현하자면 다음과 같다.
+-------------------------+-----------------------+ | IP Header | TCP Header | +-------------------------+-----------------------+ | Version: 4 | Source Port: 50432 | | IHL: 5 | Destination Port: 80 | | Type of Service: 0 | Sequence Number: 12345| | Total Length: 52 | Acknowledgment: 0 | | Identification: 54321 | Data Offset: 5 | | Flags: 0x02 (SYN) | Reserved: 0 | | Time to Live: 64 | Window: 8192 | | Protocol: TCP (6) | Checksum: 0x1abc | | Source IP: 192.168.0.10 | Urgent Pointer: 0 | | Destination IP: 142.250.76.142 | +-------------------------+-----------------------+ +------------------------+ | Data Payload | +------------------------+ | GET / HTTP/1.1 | | Host: google.com | | User-Agent: Mozilla... | +------------------------+
Bash
복사

3. 라우터와 ISP를 거치는 과정

패킷이 만들어지면, 이제 인터넷을 통해 구글 서버에 도착해야 한다. 하지만 내 컴퓨터에서 구글 서버까지 바로 연결된 물리적 선이 있는 것은 아니기 때문에, 패킷은 여러 네트워크 장비와 경로를 통해 전달된다.

3.1. 로컬 네트워크에서 라우터로

먼저, 내 컴퓨터에서 패킷은 집의 라우터로 전달된다. 라우터는 집 안의 여러 기기(스마트폰, 태블릿 등)가 인터넷에 접속할 수 있도록 하는 장비이다. 이때 라우터는 내 컴퓨터의 사설 IP(예: 192.168.0.10)를 공인 IP(예: 112.190.5.13)로 변환한다. 이 과정을 NAT(Network Address Translation)이라고 한다.
라우터는 패킷을 ISP(인터넷 서비스 제공자)의 네트워크로 전달한다. 이때 패킷은 ISP의 네트워크를 통해 구글 서버로 향하게 된다.

3.2. ISP를 통해 전 세계를 가로지르는 경로

패킷이 ISP에 도착하면, ISP는 여러 경로를 통해 패킷을 구글 서버가 있는 데이터 센터로 보낸다. 패킷은 인터넷 백본을 통해 여러 라우터와 스위치를 거치면서 구글 서버에 가까워진다. 이러한 과정은 패킷이 구글의 데이터 센터에 도착할 때까지 반복된다.

3.3. [주요 개념] ISP

ISP(인터넷 서비스 제공자)는 인터넷 연결을 제공하는 업체로, 가정과 기업이 인터넷에 접속할 수 있도록 돕는 역할을 합니다. ISP들은 각자 자신의 네트워크를 운영하며, 인터넷 트래픽을 전달한다. 이러한 ISP들은 서로 피어링(peering)이나 트랜짓(transit) 계약을 맺어 네트워크를 상호 연결한다.

3.3.1. ISP 네트워크의 원리

1.
피어링(Peering): 두 ISP가 트래픽을 교환하는 계약으로, 대개 비용 없이 트래픽을 주고받습니다. 피어링을 통해 지역 및 글로벌 네트워크 간 데이터가 전달됩니다.
2.
트랜짓(Transit): 작은 ISP가 더 큰 ISP에게 트래픽을 전달하고, 그 대가로 비용을 지불하는 방식입니다. Tier 2 ISP나 Tier 3 ISP가 주로 Tier 1 ISP에게 트랜짓 비용을 지불합니다.

3.3.2. ISP 티어(Tier) 구조

Tier 1: 글로벌 백본을 소유한 대형 ISP로, 전 세계 ISP 간 상호 연결을 제공한다. 이들은 트래픽을 주고받을 때 별도의 비용을 지불하지 않으며, 다른 Tier 1 ISP들과 피어링을 통해 전 세계를 연결한다.
Tier 2: 지역적 또는 국가적 규모의 ISP로, 주로 트래픽을 Tier 1 ISP로 전달하기 위해 트랜짓 계약을 맺는다. 그러나 일부 Tier 2 ISP는 다른 Tier 2 또는 Tier 3 ISP들과 피어링 관계를 맺어 트래픽을 처리하기도 한다.
Tier 3:: 주로 소규모 지역이나 특정 고객에게 인터넷을 제공하는 ISP로, 보통 Tier 1이나 Tier 2 ISP로부터 트랜짓을 구매하여 고객에게 인터넷을 제공한다.

3.3.3. ISP 네트워크의 상호 연결

ISP들은 각자의 네트워크를 보유하고 있지만, 전 세계 데이터를 전달하기 위해 서로 연결되어야 한다. 이를 위해 인터넷 교환 지점(IXP, Internet Exchange Point)에서 만나 데이터를 교환하거나, 직접 물리적으로 연결된 케이블을 통해 피어링을 맺는다. 이 덕분에 전 세계 어디서든 다른 네트워크에 연결해 데이터를 주고받을 수 있다.
예를 들어, 당신이 구글에 접속할 때 데이터는 먼저 로컬 ISP를 통해 전송되고, 이후 여러 계층의 ISP와 네트워크를 거쳐 구글의 데이터 센터로 전달된다. 이 과정에서 ISP들 간의 연결이 원활하게 이루어지며, 이는 네트워크 피어링과 트랜짓을 통해 가능해진다.

3.4. [주요 개념] NAT

NAT는 내부 네트워크에서 사용하는 사설 IP 주소를 공용 IP 주소로 변환하여 외부 네트워크(인터넷)와 통신할 수 있도록 해주는 기술이다. 가정용 라우터나 사무실 네트워크에서 널리 사용된다.

3.4.1. NAT의 동작 방식

로컬 네트워크에서는 여러 장치가 사설 IP 주소(예: 192.168.x.x, 10.x.x.x)를 사용한다. 사설 IP 주소는 외부 인터넷에서 직접 접근할 수 없으며, 오직 네트워크 내부에서만 사용된다.
라우터는 외부 네트워크와 연결될 때, 각 장치가 보내는 트래픽의 출발지 IP 주소를 라우터가 할당받은 공용 IP 주소로 변환한다. 이렇게 함으로써 여러 사설 IP 주소를 가진 장치가 하나의 공용 IP 주소를 통해 인터넷에 접근할 수 있다.
외부에서 응답이 돌아올 때는, 라우터는 해당 패킷을 사설 IP 주소로 다시 변환하고, 원래 요청을 보낸 장치로 전달한다.

3.4.2. NAT의 종류

정적 NAT (Static NAT) 사설 IP 주소 하나를 특정 공용 IP 주소와 1:1로 매핑한다. 네트워크 외부에서 특정 사설 IP 주소로 직접 연결해야 할 때 사용된다.
동적 NAT (Dynamic NAT) 사설 IP 주소 여러 개를 공용 IP 주소 풀에서 임의의 IP 주소로 매핑한다. 다수의 사설 IP 주소가 여러 공용 IP 주소를 공유한다.
PAT (Port Address Translation, Overloading) 가장 흔히 사용되는 형태로, 여러 사설 IP 주소를 하나의 공용 IP 주소에 포트 번호를 사용해 구분한다. 동일한 공용 IP 주소를 다수의 내부 장치가 사용할 수 있도록 하며, 이 때 각 장치는 다른 포트 번호를 할당받는다. 예를 들어, 사설 IP 192.168.0.2에서 보내는 트래픽은 192.168.0.2:1234로 식별되며, 외부로 나갈 때는 라우터가 공용 IP와 포트 번호를 조합해 트래픽을 처리한다.

3.4.3. NAT의 장/단점

NAT을 사용하면 다수의 사설 IP 주소를 하나의 공용 IP 주소로 변환함으로써 공용 IP 주소를 절약할 수 있다. 또한 사설 IP 주소는 외부에서 직접 접근할 수 없으므로 네트워크 보안이 강화된다. 그리고 네트워크 내부의 IP 구조를 외부에 공개하지 않으면서 자유롭게 변경할 수 있습니다.
그러나 몇가지 단점도 존재한다. PAT를 사용할 때, 동일한 공용 IP에 너무 많은 장치가 연결되면 포트 충돌이 발생할 수 있다. NAT 환경에서는 일부 P2P 서비스나 VoIP 애플리케이션이 작동하지 않을 수 있다. 이러한 애플리케이션은 외부에서 직접적인 연결이 필요한데, NAT는 이를 차단할 수 있기 때문이다. 마지막으로 외부에서 볼 때 모든 트래픽이 하나의 공용 IP 주소에서 발생하는 것처럼 보이기 때문에, 사설 네트워크의 개별 장치를 추적하기가 어렵다.

3.5. [주요 개념] CGNAT

Carrier-Grade NAT (CGNAT)는 인터넷 서비스 제공자(ISP)가 다수의 사용자에게 한정된 공용 IP 주소를 할당하기 위해 사용하는 대규모 NAT 기술이다. IPv4 주소가 부족해지면서 CGNAT은 여러 고객의 트래픽을 하나의 공용 IP 주소로 변환하여 IPv4 주소 부족 문제를 해결하기 위한 임시 방편으로 널리 사용되고 있다.
CGNAT의 주 목적은 IPv4 주소 부족 문제를 해결하는 것이다. IPv4 주소는 총 43억 개 정도로 한정되어 있으며, 현재 전 세계적으로 고갈 상태에 있다. 아직 IPv6로 완전히 전환되지 않은 상황에서, CGNAT은 ISP가 IPv4 주소를 효율적으로 관리하기 위한 임시 방편이다. IPv6는 더 많은 주소 공간을 제공하지만, 기존의 많은 장치가 IPv4만을 지원하기 때문에 완전한 전환에는 시간이 필요한 상황이다.

3.5.1. CGNAT의 동작 방식

CGNAT에서는 여러 사용자(가정 또는 기업)에 사설 IP 주소가 할당되며, ISP의 네트워크 내부에서 다수의 사설 IP 주소를 하나의 공용 IP 주소로 변환한다. 공용 IP 주소는 고객 간에 공유되며, 포트 번호를 사용하여 각 사용자의 트래픽을 구분한다.
사용자의 요청이 외부 인터넷으로 나갈 때, CGNAT 장비는 포트 번호와 IP 주소를 사용하여 패킷을 추적하고, 응답을 올바른 사용자에게 다시 전달한다.

3.5.2. CGNAT의 장/단점

CGNAT를 사용하면 여러 고객이 하나의 공용 IP 주소를 공유하기 때문에, ISP는 공용 IP 주소를 효율적으로 사용할 수 있다. ISP는 CGNAT을 통해 수백만 명의 사용자에게 인터넷 연결을 제공할 수 있으며, 이를 통해 IPv4 주소가 부족한 상황에서도 지속적으로 서비스를 제공한다.
다만, 여러 고객이 동일한 공용 IP 주소를 공유하기 때문에, 포트 충돌이 발생할 수 있으며, 특히 P2P, 온라인 게임, 화상 회의와 같은 고유 포트 사용이 필요한 애플리케이션에서 문제가 발생할 수 있다. 또한 동일한 공용 IP 주소를 여러 사용자가 공유하기 때문에 보안 및 법 집행 기관이 특정 사용자를 추적하는 데 어려움이 있을 수 있다.

4. 구글 데이터 센터 도달 및 구글 서버의 응답

4.1. 구글 데이터 센터 내부 라우팅

이제 패킷은 구글의 데이터 센터에 도착한다. 구글은 전 세계에 수많은 데이터 센터를 보유하고 있으며, 이들 데이터 센터는 전 세계 사용자에게 최적의 응답 시간을 제공하기 위해 서로 연결되어 있다.
패킷이 구글 데이터 센터에 도착하면, 그곳에 있는 여러 라우터와 스위치를 통해 구글의 웹 서버로 전달 된다. 구글의 내부 네트워크는 매우 복잡하며, 패킷이 최종적으로 구글의 웹 서버에 도달하기 전에도 여러 경로를 거치게 된다.

4.2. 구글 서버의 응답

구글의 웹 서버는 사용자의 요청을 처리하고, 요청된 데이터를 응답 패킷에 담아 다시 보낸다. 예를 들어, 사용자가 google.com의 메인 페이지를 요청한 경우, 구글 서버는 해당 페이지의 HTML, CSS, 이미지 파일 등을 응답 데이터로 준비한다.
응답 패킷의 구조는 2.3. 패킷과 동일하다. 예를 들어 응답 패킷을 코드로 표현하면 다음과 같다.
+------------------+------------------------+ | IP Header | TCP Header | +------------------+------------------------+ | Version: 4 | Source Port: 443 | | IHL: 5 | Destination Port: 52345| | Total Length: 128| Sequence Number: 123456| | TTL: 64 | ACK Number: 987654 | | Source IP: 142.250.x.x (Google) | | Destination IP: 192.168.x.x (Client) | | Flags: ACK | Window: 8192 | +------------------+------------------------+ +----------------------------+ | Data (Payload) | +----------------------------+ | HTTP/1.1 200 OK | | Content-Type: text/html | | Content-Length: 5120 | | | | <html>...</html> | +----------------------------+
Bash
복사
응답 패킷은 처음 보냈던 경로를 반대로 거쳐 다시 내 컴퓨터로 돌아온다. ISP의 네트워크를 거쳐 로컬 라우터로 전달되고, 라우터는 NAT를 통해 공인 IP를 사설 IP로 변환하여 내 컴퓨터로 패킷을 전달한다.

5. 응답 데이터 처리 및 웹 페이지 표시

마지막 단계는 브라우저에서 응답 패킷을 처리하는 과정이다. 응답 패킷이 도착하면, 브라우저는 이를 해석하여 사용자가 요청한 데이터를 화면에 표시한다.

5.1. 브라우저에서 응답 처리

브라우저는 먼저 응답 헤더를 확인하여 요청이 성공했는지(HTTP/1.1 200 OK)를 확인한다.. 그런 다음, 서버에서 전송된 HTML, CSS, 이미지 파일 등을 분석하여 웹페이지를 렌더링한다.

5.2. 웹페이지 표시

결과적으로 브라우저는 사용자가 요청한 google.com 페이지를 화면에 표시한다. 이 과정이 완료되기까지는 보통 몇 밀리초에서 수십 밀리초 정도밖에 걸리지 않으며, 사용자는 매우 빠른 속도로 구글 페이지를 사용할 수 있게 된다.

6. 결론

데스크탑에서 구글 서버까지 데이터를 주고받는 과정은 매우 복잡하지만, 사용자에게는 단 몇 밀리초 안에 이루어진다. 이 과정 속에는 DNS 요청, 라우터와 ISP를 거치는 경로, 그리고 구글의 데이터 센터까지 도달하는 여러 네트워크 장비들의 협력이 포함된다. 네트워크의 여러 계층, 피어링 및 트랜짓과 같은 원리 덕분에 전 세계 어디서든 원활하게 인터넷을 사용할 수 있다. 이러한 네트워크의 복잡한 구조가 우리의 일상 속에서 빠르고 신뢰성 있는 인터넷을 가능하게 하는 핵심 요소이다.
다음 포스팅에서는 지금까지 배운 이론을 바탕으로 실제로 구글까지 네트워크 통신의 여정이 어떻게 이루어지는지 예시를 통해 살펴보도록 하자.