스위치는 같은 네트워크 안에서 MAC 주소를 보고 프레임을 전달했다.
하지만 우리가 접속하는 서버가 항상 내 집, 내 회사, 내 와이파이 안에 있는 것은 아니다. 대부분의 웹 서버는 내 네트워크 바깥에 있다. 이때 필요한 장비가 라우터다.
라우터는 간단히 말하면 서로 다른 네트워크 사이에서 패킷이 갈 길을 정해주는 장비다.
같은 LAN 안에서는 MAC 주소를 보고 다음 장비를 찾았다면, LAN을 넘어갈 때부터는 IP 주소를 보고 목적지 네트워크를 찾아가야 한다. 라우터는 이 IP 주소를 기준으로 “이 패킷을 어느 방향으로 보내야 하지?”를 판단한다.
비유하자면 스위치가 같은 건물 안에서 방 번호를 보고 사람을 찾아주는 안내 데스크라면, 라우터는 도시와 도시 사이에서 목적지까지 가는 길을 알려주는 내비게이션에 가깝다.
라우터가 패킷을 받을 때마다 그냥 대충 가까운 곳으로 보내는 것은 아니다.
라우터 안에는 라우팅 테이블이라는 것이 있다.
라우팅 테이블은 말 그대로 길 목록이다.
어떤 네트워크로 가려면 어느 방향으로 보내야 하는지 적어둔 표라고 보면 된다.
예를 들어 라우터 입장에서는 이런 식으로 생각한다.
목적지 IP: 172.16.10.25
이 IP는 172.16.10.0/24 네트워크에 속하네.
그 네트워크로 가려면 이 인터페이스로 내보내야겠다.
다음 라우터는 10.0.0.2 쪽이네.
여기서 중요한 건 라우터가 최종 목적지까지의 모든 길을 한 번에 다 아는 것이 아니라는 점이다.
라우터는 보통 “다음에 어디로 보낼지”를 판단한다.
즉, 패킷을 목적지까지 직접 데려다주는 게 아니라, 다음 라우터에게 넘겨주는 식으로 길을 이어간다.
마치 택배가 한 번에 우리 집까지 오는 것이 아니라, 여러 물류 허브를 거쳐 이동하는 것과 비슷하다.
라우팅 테이블에는 대략 이런 정보들이 들어간다.
목적지 네트워크 다음 홉 나가는 인터페이스
192.168.1.0/24 직접 연결됨 eth0
10.0.0.0/8 172.16.0.1 eth1
0.0.0.0/0 192.168.1.1 eth0
여기서 목적지 네트워크는 패킷이 가고자 하는 IP 대역이다.
다음 홉은 다음으로 넘겨야 할 라우터의 주소다.
나가는 인터페이스는 어떤 네트워크 포트로 패킷을 내보낼지에 해당한다.
라우터는 패킷의 목적지 IP를 보고 라우팅 테이블에서 가장 알맞은 항목을 찾는다.
이때 중요한 기준은 가장 구체적인 경로를 우선한다는 것이다.
예를 들어 목적지 IP가 192.168.1.50이라면 192.168.0.0/16보다 192.168.1.0/24가 더 구체적인 경로다. 그래서 라우터는 더 좁고 정확한 경로를 선택한다.
내 컴퓨터도 라우터처럼 모든 네트워크의 경로를 알고 있지는 않다.
내 컴퓨터가 아는 것은 보통 이것 정도다.
내 IP 주소
서브넷 마스크
기본 게이트웨이
DNS 서버 주소
여기서 기본 게이트웨이가 중요하다.
기본 게이트웨이는 내 컴퓨터 입장에서 다른 네트워크로 나가기 위해 처음으로 패킷을 보내는 라우터다.
예를 들어 내 컴퓨터가 192.168.0.10이고, 접속하려는 서버가 142.250.207.14라고 해보자. 이 서버는 내 로컬 네트워크에 없다.
그러면 내 컴퓨터는 이렇게 판단한다.
목적지 IP가 내 네트워크에 있나?
아니네.
그럼 내가 직접 보낼 수 없겠네.
기본 게이트웨이에게 보내자.
그래서 패킷은 먼저 공유기나 사내 라우터로 간다.
우리가 집에서 쓰는 공유기도 이 기본 게이트웨이 역할을 한다.
여기서 헷갈리기 쉬운 부분이 있다.
내 컴퓨터가 외부 서버로 패킷을 보낼 때, 목적지 IP는 외부 서버 IP다.
하지만 같은 LAN 안에서 실제로 프레임을 전달할 때 필요한 목적지 MAC 주소는 기본 게이트웨이의 MAC 주소다.
즉, 이런 식이다.
IP 목적지: 외부 서버
MAC 목적지: 기본 게이트웨이
지난번 ARP에서 봤던 “IP는 최종 목적지 관점, MAC은 다음 홉 관점”이 여기서 다시 이어진다.
패킷이 라우터에 도착하면 라우터는 대략 이런 순서로 판단한다.
1. 패킷의 목적지 IP를 확인한다.
2. 라우팅 테이블을 조회한다.
3. 가장 적절한 경로를 찾는다.
4. 다음 홉을 결정한다.
5. 다음 네트워크로 패킷을 내보낸다.
조금 더 시뮬레이션하듯 보면 이렇다.
라우터: 목적지 IP가 203.0.113.10이네.
라우터: 내 라우팅 테이블에 203.0.113.0/24로 가는 경로가 있나?
라우터: 있네. 다음 홉은 10.1.1.2 쪽이네.
라우터: 그럼 이 패킷을 해당 인터페이스로 내보내자.
만약 라우팅 테이블에 정확한 경로가 없다면 어떻게 될까?
그때는 기본 경로를 사용할 수 있다.
기본 경로는 보통 0.0.0.0/0으로 표현한다.
이것은 “위에 해당하는 경로가 없으면 일단 이쪽으로 보내라”는 의미다.
내 컴퓨터의 기본 게이트웨이와 비슷한 역할을 라우터끼리도 할 수 있는 것이다.
라우팅 테이블을 만드는 방법 중 하나는 정적 라우팅이다.
정적 라우팅은 관리자가 직접 경로를 설정하는 방식이다.
10.10.0.0/16 네트워크로 가려면 192.168.1.254로 보내라.
이렇게 사람이 직접 라우터에 알려주는 것이다.
장점은 단순하고 예측하기 쉽다는 점이다.
작은 네트워크에서는 오히려 이런 방식이 깔끔할 수 있다.
하지만 네트워크가 커지면 문제가 생긴다.
라우터가 많아지고, 네트워크 경로가 복잡해지고, 중간 장비에 장애가 나면 사람이 일일이 경로를 수정해야 한다. 네트워크 구조가 자주 바뀌는 환경에서는 관리 부담이 커진다.
즉, 정적 라우팅은 작은 지도에 길 몇 개 직접 표시해두는 느낌이다.
길이 적을 때는 편하지만, 도시 전체 도로망을 손으로 계속 수정해야 한다면 꽤 힘들어진다.
동적 라우팅은 라우터들이 서로 경로 정보를 주고받으면서 라우팅 테이블을 갱신하는 방식이다.
관리자가 모든 경로를 직접 입력하지 않아도, 라우터들이 서로 대화하면서 이런 정보를 공유한다.
라우터 A: 나는 10.1.0.0/16 네트워크에 갈 수 있어.
라우터 B: 나는 172.16.0.0/16 네트워크에 연결되어 있어.
라우터 C: 그러면 172.16.0.0/16으로 가려면 B 쪽으로 보내면 되겠네.
이런 식으로 라우터들이 네트워크 정보를 교환하면, 장애가 발생했을 때 다른 경로를 찾는 것도 가능해진다.
물론 자동이라고 해서 무조건 단순한 것은 아니다.
동적 라우팅은 라우팅 프로토콜의 동작 방식, 우선순위, 비용 계산 방식 등을 이해해야 한다. 하지만 지금은 깊게 들어가기보다 “라우터들이 서로 길 정보를 공유하는 방식” 정도로 잡아두면 충분하다.
동적 라우팅에도 여러 방식이 있다. 대표적으로 RIP, OSPF, BGP가 있다.
RIP는 비교적 단순한 라우팅 프로토콜이다.
목적지까지 몇 개의 라우터를 거치는지를 기준으로 경로를 판단한다. 이때 거치는 라우터 수를 홉 수라고 한다. 단순하지만 큰 네트워크에는 한계가 있다.
OSPF는 네트워크의 상태 정보를 바탕으로 더 효율적인 경로를 계산한다.
단순히 몇 번 거치는지만 보는 것이 아니라, 링크 상태를 기반으로 경로를 선택한다. 회사나 기관 내부 네트워크처럼 하나의 조직 안에서 많이 사용되는 방식으로 이해하면 된다.
BGP는 인터넷 규모에서 사용되는 라우팅 프로토콜이다.
인터넷은 하나의 거대한 네트워크가 아니라, 수많은 독립적인 네트워크들이 연결된 구조다. BGP는 이런 큰 네트워크들 사이에서 경로 정보를 주고받는 데 사용된다.
간단히 정리하면 이렇다.
RIP : 단순하게 홉 수를 기준으로 길을 고른다.
OSPF : 네트워크 상태를 보고 더 적절한 길을 계산한다.
BGP : 인터넷을 이루는 큰 네트워크들 사이의 길을 조율한다.
여기서 중요한 건 지금 당장 RIP, OSPF, BGP의 세부 동작을 외우는 것이 아니다.
라우터가 혼자 모든 길을 알고 있는 것이 아니라, 필요에 따라 사람이 직접 경로를 넣거나, 라우터들끼리 정보를 주고받으며 길을 만든다는 흐름을 이해하는 것이다.
라우터를 공부할 때 헷갈렸던 부분은 이것이다.
패킷이 여러 라우터를 지나가면 목적지 IP가 계속 바뀌는 걸까?
기본적으로 목적지 IP는 최종 목적지를 가리킨다.
그래서 라우터를 여러 개 지나도 목적지 IP는 계속 서버 IP를 가리킨다.
대신 매 구간마다 다음 장비에게 전달하기 위한 MAC 주소는 바뀔 수 있다.
예를 들어 내 컴퓨터에서 외부 서버로 간다고 하면 흐름은 이런 식이다.
내 컴퓨터
→ 기본 게이트웨이
→ ISP 라우터
→ 여러 중간 라우터
→ 서버 쪽 네트워크
→ 서버
IP 패킷의 목적지는 계속 서버다.
하지만 이 패킷을 감싸는 이더넷 프레임은 각 구간마다 새로 만들어질 수 있다.
즉, 라우터는 패킷을 다음 네트워크로 넘길 때 다음 홉에 맞는 데이터 링크 계층 정보를 다시 사용한다.
이 부분이 계층 구조와 연결된다.
IP는 전체 여정의 목적지를 본다.
MAC은 지금 이 구간에서 다음에 전달할 장비를 본다.
라우터는 이 둘 사이를 이어주는 장비처럼 동작한다.
브라우저에서 어떤 웹사이트에 접속할 때도 이 흐름은 그대로 적용된다.
우리는 주소창에 도메인을 입력하지만, 실제 통신에서는 IP 주소를 찾아야 한다. 그리고 그 IP가 내 네트워크 밖에 있다면 패킷은 기본 게이트웨이로 간다.
기본 게이트웨이는 라우팅 테이블을 보고 다음 라우터로 보낸다.
다음 라우터도 자기 라우팅 테이블을 보고 또 다음으로 보낸다.
이 과정을 반복하면서 패킷은 목적지 서버가 있는 네트워크까지 이동한다.
라우터 입장에서 생각하면 계속 같은 질문을 반복하는 셈이다.
이 목적지 IP로 가려면 어디로 보내야 하지?
라우터는 이 질문에 대한 답을 라우팅 테이블에서 찾는다.
그래서 네트워크 장애를 볼 때도 라우팅은 중요하다.
서버는 살아 있는데 접속이 안 된다면, 중간 어딘가에서 경로가 잘못되었을 수도 있다. 내 컴퓨터의 기본 게이트웨이 설정이 틀렸을 수도 있고, 라우터의 라우팅 테이블에 잘못된 경로가 있을 수도 있다. 또는 방화벽이나 보안 장비가 중간에서 막고 있을 수도 있다.
아직 장애 분석을 깊게 들어가지는 않지만, “패킷이 목적지까지 가려면 중간 라우터들이 계속 다음 길을 선택해야 한다”는 감각은 중요하다.
라우터는 서로 다른 네트워크를 연결한다.
그리고 라우팅 테이블을 보고 패킷을 다음 어디로 보낼지 결정한다.
내 컴퓨터 입장에서 기본 게이트웨이는 외부 네트워크로 나가기 위한 첫 번째 라우터다.
라우터는 목적지 IP를 보고 다음 홉을 고른다.
라우팅 테이블은 사람이 직접 설정할 수도 있고, 라우터들이 동적 라우팅 프로토콜을 통해 서로 정보를 주고받으며 만들 수도 있다.
결국 라우팅을 이해한다는 것은 패킷이 “어디로 가야 하는지”를 네트워크 장비가 어떻게 판단하는지 이해하는 것이다.
스위치가 같은 LAN 안에서 MAC 주소를 보고 움직였다면, 라우터는 네트워크와 네트워크 사이에서 IP 주소를 보고 길을 고른다.