Search
🌐

[내 PC에서 구글까지] 네트워크 통신의 여정 (2) 실전편

Created
2024/09/26 10:38
Tags
Network
Post
Last edited time
2024/09/29 23:42
Status
Done

1. 들어가기 앞서

첫번째 포스팅을 통해 우리는 어떠한 과정을 거쳐서 내PC에서 구글 서버까지 도달하는지 이론에 대해 살펴보았다. 이 이론을 다시 한번 요약하면 다음과 같다.
1.
구글 서버 주소 확인
a.
구글 서버 DNS 요청
b.
IP 주소 확인 및 패킷 생성
2.
내 PC → 구글 서버 경로
a.
로컬 네트워크 → 라우터
b.
라우터 → ISP ISP
c.
ISP → 구글 데이터 센터
d.
구글 데이터 센터 → 라우터/스위치 → 구글 서버
3.
구글 서버 응답
a.
2번의 경로를 반대로 거쳐서 반환
4.
브라우저에서 응답데이터 표시
두번째 포스팅에서는 내PC에서 구글서버까지의 여정을 확인하기 위해 필요한 도구들에는 무엇이 있고, 실제 여정이 어떻게 되는지 살펴보도록 하자.

2. 여정 확인을 위해 필요한 도구들

2.1. traceroute

traceroute는 네트워크 도구로, 사용자가 특정 서버에 연결할 때 패킷이 경유하는 모든 라우터(네트워크 경로)를 추적한다.
이를 통해 패킷이 도달하는 각 경로의 IP 주소를 확인할 수 있으며, 또한 네트워크 홉(hop)별 응답 시간 확인할 수 있다. 이때, 응답시간은 출발지에서 해당 홉까지 가는 데 걸린 시간과, 그 홉에서 출발지로 응답 패킷이 돌아오는 시간을 모두 포함한 왕복 시간 (RTT, Round-Trip Time)을 의미한다. 여기서 홉(hop)은 패킷이 목적지에 도달하기까지 거치는 네트워크 경로상의 중간 지점을 의미한다.
traceroute 는 다음과 같은 작동 방식을 가지고 있다.
1.
traceroute는 TTL(Time-to-Live) 값을 1로 설정해 패킷을 보낸다.
2.
첫 번째 홉(라우터)이 TTL이 만료된 패킷을 반환하고, 이를 기록한다.
3.
TTL을 1씩 증가시키며 이 과정을 반복하여 최종 목적지까지의 모든 경로를 기록한다.
예를 들어, traceroute -q 1 google.com 를 실행하면 총 15개의 홉을 거쳐서 구글 서버에 도달 하는 것을 알 수 있다. 이 홉들이 구글 서버에 도달하기까지 거치는 네트워크의 경로를 의미한다.
$ traceroute -q 1 google.com traceroute to google.com (172.217.25.174), 64 hops max, 52 byte packets 1 192.168.0.1 (192.168.0.1) 13.894 ms 2 1.231.*.* (1.231.*.*) 17.401 ms 3 100.79.153.101 (100.79.153.101) 15.391 ms 4 100.79.220.93 (100.79.220.93) 14.312 ms 5 10.45.253.50 (10.45.253.50) 15.071 ms 6 10.222.35.82 (10.222.35.82) 15.070 ms 7 10.222.22.109 (10.222.22.109) 14.643 ms 8 209.85.149.104 (209.85.149.104) 45.887 ms 9 * 10 142.251.60.194 (142.251.60.194) 39.078 ms 11 142.250.212.149 (142.250.212.149) 38.230 ms 12 142.251.254.137 (142.251.254.137) 35.452 ms 13 142.250.58.92 (142.250.58.92) 39.700 ms 14 142.250.209.69 (142.250.209.69) 37.365 ms 15 kix06s19-in-f14.1e100.net (172.217.25.174) 32.333 ms
Bash
복사

2.2. whois

whois 는 도메인 이름이나 IP 주소에 대한 정보를 조회할 수 있는 도구이다. 주로 다음과 같은 정보를 제공한다.
등록자 정보: 도메인 소유자, 등록 기관
등록 및 만료일: 도메인이 처음 등록된 날짜와 만료 예정일
네임서버 정보: 해당 도메인이 사용하는 DNS 서버
터미널에서 whois 라는 명령어로 정보를 조회할 수도 있으며, 관련 정보를 조금 더 보기 쉽게 서비스로 제공하는 많은 웹사이트 (예. db-ip)도 찾을 수 있다.
예를 들어 구글 서버의 IP 주소인 142.250.206.238 를 아래와 같이 whois 명령어를 실행하면 구글 서버의 정보를 얻을 수 있다.
whois -h whois.arin.net 142.250.206.238  ✔  system   20:06:40  NetRange: 142.250.0.0 - 142.251.255.255 CIDR: 142.250.0.0/15 NetName: GOOGLE NetHandle: NET-142-250-0-0-1 Parent: NET142 (NET-142-0-0-0-0) NetType: Direct Allocation OriginAS: AS15169 Organization: Google LLC (GOGL) RegDate: 2012-05-24 Updated: 2012-05-24 Ref: https://rdap.arin.net/registry/ip/142.250.0.0
Bash
복사
traceroutewhois 명령어를 통해 내 PC 에서 구글서버까지 경로와 IP 주소, 그리고 IP 주소에 대한 정보를 확인할 수 있게 되었다. 이제 정말로 내 PC에서 구글서버까지의 실제 여정을 살펴볼 순간이다.

3. 실제 여정

지금까지 살펴본 내용을 다시한번 복기해보자.
traceroute -q 1 google.com 명령어를 실행시키면 내 PC에서 구글 서버까지의 네트워크 경로를 확인할 수 있다. 총 15개의 홉으로 구성되어있는데, 홉 하나하나씩 살펴보자.
$ traceroute -q 1 google.com traceroute to google.com (172.217.25.174), 64 hops max, 52 byte packets 1 192.168.0.1 (192.168.0.1) 13.894 ms 2 1.231.186.1 (1.231.186.1) 17.401 ms 3 100.79.153.101 (100.79.153.101) 15.391 ms 4 100.79.220.93 (100.79.220.93) 14.312 ms 5 10.45.253.50 (10.45.253.50) 15.071 ms 6 10.222.35.82 (10.222.35.82) 15.070 ms 7 10.222.22.109 (10.222.22.109) 14.643 ms 8 209.85.149.104 (209.85.149.104) 45.887 ms 9 * 10 142.251.60.194 (142.251.60.194) 39.078 ms 11 142.250.212.149 (142.250.212.149) 38.230 ms 12 142.251.254.137 (142.251.254.137) 35.452 ms 13 142.250.58.92 (142.250.58.92) 39.700 ms 14 142.250.209.69 (142.250.209.69) 37.365 ms 15 kix06s19-in-f14.1e100.net (172.217.25.174) 32.333 ms
Bash
복사

3.1. [1번 홉] 192.168.0.1

1 192.168.0.1 (192.168.0.1) 13.894 ms
Bash
복사
이 IP는 사설 네트워크 주소로, 일반적으로 가정이나 사무실에서 사용하는 라우터의 주소이다. 이 라우터는 네트워크의 게이트웨이 역할을 하며, 로컬 네트워크 내에서 사용하는 사설 IP 주소를 가지고 있다. 흔히 집에서 사용하는 공유기가 라우터이다. 사설 IP이기 때문에 whois 조회를 할 필요가 없다.
사설 네트워크 대역: 192.168.0.0 - 192.168.255.255
여기서 잠깐 “왜 traceroute 에서는 공용 IP가 홉으로 표시되지 않는거지?” 라고 의문이 들 수 있다. 로컬 네트워크에서는 라우터를 통해 NAT 기술을 사용해서 사설 IP를 공용 IP로 변환하여 외부 인터넷과 통신할 수 있다고 이전 포스팅에서 설명한 바 있다.
로컬 네트워크 내에서는 사설 IP 주소만 사용된다. NAT을 통해 외부로 나가기 전까지는 공용 IP 주소는 사용되지 않는다. 즉 로컬 장치와 라우터간의 통신은 사설 IP를 통해 이루어지며, 공용 IP 주소는 외부 네트워크와의 통신에서만 사용된다.
따라서, traceroute 는 라우터의 내부 NAT 변환을 알 수 없으며, 패킷이 외부 인터넷으로 나가서 ISP에 도달한 후에만 공용 IP 주소가 나타나므로, traceroute 입장에서는 로컬 네트워크의 라우터가 가지는 사설 IP만 표시되는 것이다.

3.2. [2번 홉] 1.231.186.1

2 1.231.186.1 (1.231.186.1) 17.401 ms
Bash
복사
이 IP 주소는 인터넷 서비스 제공자(ISP), 여기서는 SK 브로드 밴드의 라우터 또는 네트워크 장비이다. 로컬 네트워크에서 라우터를 거친 후 ISP의 네트워크로 접속하는 첫 번째 단계이다. 이는 로컬 네트워크를 벗어나 인터넷과 연결되는 첫 번째 공용 네트워크 장비라고 볼 수 있다.
db-ip 에서 위 IP를 검색하면 아래와 같은 정보를 확인할 수 있다.

3.3. [3-4번홉] 100.79.xxx.xxx

3 100.79.153.101 (100.79.153.101) 15.391 ms 4 100.79.220.93 (100.79.220.93) 14.312 ms
Bash
복사
3~4번 홉의 IP 주소는 CGNAT (Carrier-Grade NAT) 대역에 속한다. 100.64.0.0 - 100.127.255.255 범위의 주소는 ISP가 내부적으로 고객 트래픽을 NAT하여 사용하는 IP 주소 대역이다.
이 주소는 공공 네트워크에 공개되지 않으므로 whois 정보는 제한적이라 자세한 내용은 확인이 되지 않는다. 그러나 우리가 로컬에서 보낸 트래픽이 ISP 내부의 CGNAT 장비를 거쳐 공용 IP로 변환되거나 내부 라우팅을 거치고 있음을 추측할 수 있다.

3.4. [5-7번홉] 10.x.x.x

5 10.45.253.50 (10.45.253.50) 15.071 ms 6 10.222.35.82 (10.222.35.82) 15.070 ms 7 10.222.22.109 (10.222.22.109) 14.643 ms
Bash
복사
5번~7번홉의 IP 주소는 사설 IP 대역(10.0.0.0/8)에 속한다. 따라서 whois 명령어로 정보 조회가 되지 않는 사설 네트워크 주소이다.
ISP 내부의 라우터나 스위치를 나타내는 것으로 추정되며, 이들은 패킷이 ISP 내부 네트워크를 거쳐 공용 인터넷에 나가기전에 트래픽을 관리하는 라우터 장비라고 볼 수 있다.

3.5. [8번 홉] 209.85.149.104

8 209.85.149.104 (209.85.149.104) 45.887 ms
Bash
복사
패킷이 ISP의 네트워크를 벗어나 구글 네트워크로 진입하는 첫 번째 지점이다. 여기서부터는 구글의 글로벌 네트워크를 통해 패킷이 전달된다.
이 IP는 구글 네트워크의 일부이며, 구글의 데이터 센터 또는 구글 서비스에 연결된 라우터일 가능성이 크다. 또한 응답 시간이 45.887 ms로, 이제 물리적으로 더 멀리 떨어진 구글의 네트워크 장비로 연결되고 있음을 추측할 수 있다.
db-ip 에서 위 IP를 검색하면 Organization의 이름이 Google LLC이고, 미국 캘리포니아 주, 마운틴뷰 라는 도시에 위치한 것을 알 수 있다.
NetRange: 209.85.128.0 - 209.85.255.255
OrgName: Google LLC
Country: US (United States)

3.6. [9-14번홉] 142.25x.x.x

9 * 10 142.251.60.194 (142.251.60.194) 39.078 ms 11 142.250.212.149 (142.250.212.149) 38.230 ms 12 142.251.254.137 (142.251.254.137) 35.452 ms 13 142.250.58.92 (142.250.58.92) 39.700 ms 14 142.250.209.69 (142.250.209.69) 37.365 ms
Bash
복사
9번 홉은 응답이 없는 홉을 의미한다. 일반적으로 이는 네트워크 장비가 ICMP 패킷에 대한 응답을 차단했거나 네트워크 문제로 인해 응답이 오지 않는 경우이다. 이 홉의 네트워크 장비는 보안을 위해 traceroute 응답을 차단했을 수 있다.
10번~14번홉은 여전히 구글 네트워크의 일부를 나타낸다. 이 IP 주소들은 모두 구글의 네트워크 범위에 속해 있으며, 구글의 글로벌 네트워크 백본 또는 데이터 센터 네트워크 내부의 라우터나 스위치일 것이다.
구글은 전 세계적으로 광범위한 네트워크 인프라를 가지고 있으며, 이 인프라는 전 세계적으로 분산된 데이터 센터와 백본 네트워크 장비로 구성되어 있다. 10번부터 14번 홉들은 패킷이 구글 네트워크 내부로 진입한 후, 구글이 소유하고 있는 여러 네트워크 장비를 통과하는 과정이다.
각 홉의 라우터는 패킷이 최적의 경로를 따라 구글의 데이터 센터로 가는 것을 돕고 있다. 이 과정은 구글이 자체적으로 구축한 네트워크 상에서 이루어지며, 이 라우터들은 구글 데이터 센터 간의 통신을 효율적으로 관리하기 위한 역할을 수행한다.
db-ip을 통한 ip 정보도 이전 홉의 정보와 크게 다르지 않다.
NetRange: 142.250.0.0 - 142.251.255.255
OrgName: Google LLC
Country: US (United States)

3.7. [15번 홉] kix06s19-in-f14.1e100.net (172.217.25.174)

15 kix06s19-in-f14.1e100.net (172.217.25.174) 32.333 ms
Bash
복사
드디어 마지막 홉에 도달했다. 이는 패킷이 최종 목적지인 구글 서버에 도달했음을 의미한다. 이 홉은 구글의 네트워크 내에서 특정 데이터 센터나 서버를 나타내며, 구글이 관리하는 서비스로의 최종 접속 지점이다. 패킷은 여기서 멈추며, 요청된 데이터를 구글의 서버에서 처리한다.
이 서버는 내 PC에서 최초에 접근하려고 한 google.com 웹사이트와 연결된 서버이다. 이 서버는 요청된 데이터를 처리하고 사용자에게 응답을 돌려보내는 역할을 한다.
IP 주소 정보를 살펴보면 앞 홉들과는 호주 시드니에 위치하고 있는데, 우리의 요청이 도달한 구글의 데이터 센터가 호주에 위치한 것을 알 수 있다.
IP 주소의 위치 정보(IP Geolocation)가 IP 정보 검색 웹사이트마다 다른 이유 IP 주소의 위치 정보는 정확히 매핑되기가 어려운 경우가 많다. 특히 대형 글로벌 기업인 구글이라면, 여러 국가에 거쳐 동일한 IP 대역을 사용하는 경우가 많아 IP 위치 정보가 서로 다를 수 있으며, 데이터 센터의 위치를 효율적으로 관리하기 위해 IP 주소를 지역간에 유동적으로 이동시킬 수 있다.
IP 주소의 위치 정보 (IP Geolocation)는 Geolocation 서비스 제공자에 따라 IP 위치 정보가 다를 수 있다. 일부 데이터베이스는 구글 본사 위치(미국 캘리포니아)를 기본적으로 지정할 수 있고, 다른 데이터베이스는 구글이 실제로 서비스를 제공하는 위치(예: 일본 도쿄의 데이터 센터)를 지정할 수 있다.
(필자는 db-ip에 명시된 위치 정보를 기반으로 이 포스팅을 작성하였다)
따라서, IP Geolocation 정보는 정확하지 않을 수 있으며, 대형 글로벌 네트워크에서 IP 주소의 실제 물리적 위치는 언제든지 바뀔 수 있다는 점을 고려해야 한다.

3.8. 응답 경로

마지막 홉에 도달한 패킷을 통해 구글 서버에서는 그 요청을 처리한 후 응답 패킷을 되돌려 준다. 응답 패킷은 대체로 동일한 경로를 거꾸로 거쳐서 내 PC에 돌아온다. 여기서 대체로 라는 말은 100% 그 경로를 확정할 수는 없다는 의미이다.
traceroute 명령어는 요청 패킷이 목적지까지 가는 경로를 추적할 수 있지만, 응답 패킷이 돌아오는 경로를 직접적으로 보여주지는 않는다. 응답 패킷이 동일한 경로를 따라 돌아오는지 확인하려면, 그와 반대 방향으로 traceroute를 실행해야 한다.
또한 네트워크 혼잡이나 라우팅 정책에 따라 비대칭 경로가 선택될 수 있으며, 이 경우 응답이 다른 경로를 통해 돌아올 수도 있다.

4. 글을 마치며

지금까지 2개의 포스팅을 통해 내 PC에서 구글 서버까지 패킷이 도달하는 여정에 대해 대략적으로 살펴보았다. 우리가 브라우저에서 검색하는 모든 정보들이 막연하게 로컬 → 서버로 응답이 가서 요청이 오겠지라고 생각했던 부분도, 조금 더 상세히 살펴보니 흥미로운 정보들을 많이 알 수 있었다.
이 포스팅이 지금 글을 읽고 계신 여러분들의 네트워크 이해도를 높이는 데 도움이 되었기를 바라며 이만 포스팅을 마치도록 하겠다.