📚 네트워크 · 패킷 분석 › 01. TCP/IP 구조 이해 — 18편
이전 글: 17. 게이트웨이와 라우팅 기초 — 다른 네트워크로 패킷은 어떻게 가는가 · 다음 글: 19. Static Routing
Routing Table(라우팅 테이블) 은 "어떤 목적지로 가는 패킷을 어디로(next hop), 어느 인터페이스로 내보낼지"를 적어 둔 표입니다. 라우터뿐 아니라 일반 PC와 서버도 자기만의 라우팅 테이블을 가지고 있으며, 패킷을 보낼 때마다 이 표를 조회합니다.
라우팅이 무엇이고 패킷이 홉을 지나며 어떻게 바뀌는지는 17. 게이트웨이와 라우팅 기초 — 다른 네트워크로 패킷은 어떻게 가는가에서 다뤘습니다. 이 글은 표의 구조와 조회 규칙에 집중합니다. 라우터 장비에서의 테이블 운영은 171. Router의 Routing Table에서 다룹니다.
라우팅 테이블의 한 줄(엔트리)은 보통 다음 항목으로 구성됩니다.
| 항목 | 의미 | Linux ip route 표기 예 |
|---|---|---|
| 목적지(Destination) | 네트워크 주소 + 프리픽스 | 10.20.0.0/16, default |
| Next Hop(Gateway) | 패킷을 넘길 다음 라우터 IP | via 192.168.10.254 |
| 출력 인터페이스 | 패킷을 내보낼 NIC | dev ens160 |
| 출처(Protocol) | 경로가 생긴 방법 | proto kernel, proto static, proto dhcp |
| Metric | 같은 목적지 경로가 여럿일 때 우선순위 (작을수록 우선) | metric 100 |
| Source | 이 경로로 보낼 때 쓸 출발지 IP | src 192.168.10.20 |
조회 규칙의 핵심은 최장 일치(Longest Prefix Match) 입니다. 목적지 IP에 해당하는 엔트리가 여러 개면 프리픽스가 가장 긴(가장 구체적인) 엔트리를 선택합니다.
[패킷 목적지] 10.20.5.7
↓
[일치하는 엔트리 모두 찾기]
default (0.0.0.0/0) → 일치 (프리픽스 0)
10.0.0.0/8 → 일치 (프리픽스 8)
10.20.0.0/16 → 일치 (프리픽스 16)
192.168.10.0/24 → 불일치
↓
[가장 긴 프리픽스 선택] 10.20.0.0/16
↓
[같은 프리픽스가 여럿이면] metric이 작은 쪽 선택
↓
[next hop의 MAC을 ARP로 확인 후 해당 인터페이스로 전송]
일치하는 엔트리가 하나도 없고 default도 없다면 패킷은 전송되지 않고 "Network is unreachable" 오류가 발생합니다.
엔트리가 만들어지는 방식에 따라 세 종류로 나눌 수 있습니다.
| 종류 | 생성 방식 | 예 |
|---|---|---|
| 직접 연결(Connected) | 인터페이스에 IP를 설정하면 자동 생성 | 192.168.10.0/24 dev ens160 proto kernel scope link |
| 정적(Static) | 관리자가 수동 입력 | 19. Static Routing |
| 동적(Dynamic) | OSPF·BGP 등 라우팅 프로토콜로 학습 | 주로 라우터에서 사용 |
scope link 는 next hop 없이 같은 링크에서 직접 전달한다는 뜻입니다. 직접 연결 경로에는 via가 없습니다.ip route가 기본으로 보여 주는 것은 main 테이블이고, local 테이블에는 자기 주소·브로드캐스트 주소가 들어 있습니다. 정책 라우팅(ip rule)을 쓰는 서버에서는 main만 봐서는 실제 경로를 알 수 없습니다.실습 예시: 본인 소유 VM에서 테이블을 조회합니다. 명령은 Rocky Linux와 Ubuntu가 같습니다.
ip route show # main 테이블
ip route get 203.0.113.10 # 이 목적지로는 실제로 어느 경로를 쓰는가
ip route get 192.168.10.30
ip rule show # 정책 라우팅 규칙 (기본은 local, main, default)
출력 예시(값은 환경마다 다름):
default via 192.168.10.1 dev ens160 proto dhcp src 192.168.10.20 metric 100
10.20.0.0/16 via 192.168.10.254 dev ens160 proto static metric 100
192.168.10.0/24 dev ens160 proto kernel scope link src 192.168.10.20 metric 100
203.0.113.10 via 192.168.10.1 dev ens160 src 192.168.10.20 uid 1000
192.168.10.30 dev ens160 src 192.168.10.20 uid 1000
ip route get은 최장 일치 결과를 직접 보여 주므로 테이블을 눈으로 계산하는 것보다 정확합니다.via 192.168.10.1(기본 게이트웨이), 같은 서브넷 주소는 via 없이 직접 전달됩니다.Windows에서는 route print 또는 PowerShell Get-NetRoute로 확인하며, 표기 형식은 다르지만 목적지·마스크·게이트웨이·인터페이스·메트릭 구성은 같습니다.
흔적이 남는 곳
ip route, route print)은 시점 정보라 변경 이력이 남지 않습니다. 변경 이력은 명령 실행 기록(쉘 히스토리, 감사 로그)이나 설정 파일 변경으로 추적해야 합니다.관제자가 확인할 질문
ip route get <목적지>로 재현할 수 있는가?오탐 주의
ip route get <목적지>로 실제 선택되는 경로를 확인하는 것이 가장 정확합니다.