지식

[Network] 네트워크 기초 이론 8강 — 인터페이스 선택 원리: 라우팅 테이블과 메트릭

네트워크 기초 이론 시리즈 정리 — 8강. 참고: 널널한 개발자 TV, 네트워크 인터페이스 선택 원리와 기준 (재생목록)

6강에서 스위칭은 곧 인터페이스 선택이라고 정리했다. 그 선택은 라우터에서만 일어나지 않는다. 나가는 길이 둘 이상인 호스트는 자기 안에서 똑같은 선택을 한다. 이번에는 그 선택이 어디서, 무엇을 근거로 이루어지는지를 본다.

상황 — 유선과 무선에 동시에 붙은 노트북

노트북 한 대를 가정한다.

  • 유선 랜으로 인터넷에 연결되어 있다 — IP는 192.168.0.10, 회선은 A 통신사
  • 동시에 와이파이(또는 테더링)로도 인터넷에 연결되어 있다 — IP는 172.20.10.2, 회선은 B 통신사

이 호스트의 IP 주소는 두 개다. 2강에서 정리했듯 NIC마다 IP를 바인딩할 수 있으니 컴퓨터 한 대의 IP는 N개일 수 있다. 지금은 회선도 둘, 통신사도 둘이다.

이 상태에서 브라우저를 띄워 어떤 웹사이트에 접속한다. 소켓이 열리고 TCP/IP에 바인딩된다.

        [ 브라우저 프로세스 ]
                 │  소켓
        ─────────┴─────────  커널 (TCP/IP)
           ↓             ↓
      유선 NIC        무선 NIC
    192.168.0.10    172.20.10.2
      A 통신사        B 통신사
           ↓             ↓
        인터넷?       인터넷?      ← 둘 중 어디로 나가는가

질문은 이것이다. 트래픽은 유선으로 나가는가, 무선으로 나가는가. 그리고 그것을 누가 정하는가.

정하는 주체는 애플리케이션이 아니다

브라우저는 "유선으로 보내라"고 지시하지 않는다. 애플리케이션이 하는 일은 목적지 주소와 포트를 지정해 연결을 요청하는 것뿐이다.

인터페이스를 고르는 주체는 커널이고, 근거는 라우팅 테이블이다. 6강에서 라우터의 이정표라고 했던 그 표가 일반 호스트 안에도 있다. 나갈 인터페이스가 여러 개일 때 커널은 이 표를 조회해 하나를 고른다. 이것이 호스트 안에서 일어나는 스위칭이다.

라우팅 테이블 들여다보기

명령 한 줄로 확인할 수 있다.

route print          # Windows
ip route             # Linux
netstat -rn          # macOS·유닉스 계열

Windows의 IPv4 경로 테이블은 대략 이런 모양이다.

네트워크 대상        네트워크 마스크        게이트웨이       인터페이스    메트릭
      0.0.0.0          0.0.0.0        192.168.0.1     192.168.0.10      35
      0.0.0.0          0.0.0.0        172.20.10.1     172.20.10.2       45
  192.168.0.0    255.255.255.0             연결됨      192.168.0.10     291
  172.20.10.0    255.255.255.0             연결됨      172.20.10.2      301

리눅스라면 같은 내용이 이렇게 나온다.

default via 192.168.0.1 dev eth0  proto dhcp  metric 100
default via 172.20.10.1 dev wlan0 proto dhcp  metric 600
192.168.0.0/24 dev eth0  proto kernel scope link src 192.168.0.10 metric 100
172.20.10.0/24 dev wlan0 proto kernel scope link src 172.20.10.2  metric 600

각 칸이 뜻하는 바는 이렇다.

항목 의미
네트워크 대상 이 줄이 적용되는 목적지 네트워크
네트워크 마스크 대상을 어디까지 비교할지 정하는 범위(/24 같은 표기와 같은 뜻)
게이트웨이 그 목적지로 가려면 데이터를 넘길 다음 홉. 같은 네트워크 안이면 넘길 곳이 없으므로 "연결됨"
인터페이스 실제로 내보낼 인터페이스(그 인터페이스의 IP로 표시된다)
메트릭 그 경로를 쓰는 비용. 작을수록 우선

읽는 법은 한 문장이다. 목적지를 마스크로 걸러 봤을 때 이 대상과 맞아떨어지면, 이 인터페이스로 이 게이트웨이에 넘겨라.

0.0.0.0/0(리눅스의 default)은 어떤 목적지와도 맞는 줄이다. 표의 어느 줄과도 맞지 않는 목적지가 여기로 떨어진다. 인터넷으로 나가는 트래픽 대부분이 이 줄을 탄다.

선택 기준 — 프리픽스가 먼저, 메트릭이 다음

여러 줄이 목적지와 맞으면 규칙은 순서대로 적용된다.

  1. 더 구체적인 줄이 이긴다 — 마스크가 긴 쪽, 즉 맞아떨어지는 비트가 더 많은 줄을 고른다. 이것을 롱기스트 프리픽스 매치(longest prefix match)라고 한다. 192.168.0.0/240.0.0.0/0이 둘 다 맞으면 /24가 이긴다.
  2. 구체성이 같으면 메트릭이 작은 쪽이 이긴다 — 위 예시에서 기본 경로가 두 줄인데(유선 35, 무선 45) 둘 다 /0이므로 여기서 갈린다. 메트릭이 작은 유선이 선택된다.

메트릭은 곧 비용이다. 목적지에 닿기까지의 비용이 낮을수록 좋은 경로로 취급된다. 운영체제는 대개 인터페이스 속도를 근거로 메트릭을 자동 계산하므로, 유선과 무선이 함께 살아 있으면 보통 빠른 쪽이 낮은 값을 갖는다. 필요하면 사람이 직접 지정할 수도 있다.

리눅스에서는 결정 결과를 직접 물어볼 수도 있다.

$ ip route get 8.8.8.8
8.8.8.8 via 192.168.0.1 dev eth0 src 192.168.0.10 uid 1000

어느 게이트웨이로, 어느 인터페이스로 나가며, 출발지 IP로 무엇을 쓸지까지 한 줄로 나온다.

인터페이스가 정해지면 출발지 IP도 정해진다

여기서 5강의 소켓 이야기와 이어진다. 애플리케이션이 출발지 주소를 명시하지 않으면(bind()로 로컬 주소를 고정하지 않으면), 커널은 라우팅 결정을 먼저 내리고 그때 고른 인터페이스의 IP를 출발지 주소로 채운다.

즉 순서가 이렇다.

목적지 주소 → 라우팅 테이블 조회 → 나갈 인터페이스 결정 → 출발지 IP 결정 → 소켓 5-튜플 확정

IP가 두 개인 호스트에서 "왜 상대편 로그에 저 IP로 찍히지?" 하는 상황은 대개 여기서 나온다. 출발지 IP는 내가 고른 것이 아니라 경로 선택의 결과로 따라온 값이다. 앞의 예시대로라면 A 통신사 회선의 주소로 나가고, 목적지 서버가 보는 접속 IP도 그쪽이 된다.

실무에서 이 지식이 필요한 순간

  • 테더링·VPN을 켰는데 트래픽이 예상과 다른 길로 간다 — 기본 경로가 하나 더 생겨 경합한 결과다. 어느 쪽이 이겼는지는 메트릭을 보면 알 수 있다.
  • 인터페이스가 여럿인 서버에서 특정 대역만 다른 회선으로 보내고 싶다 — 기본 경로를 건드릴 것이 아니라, 그 대역에 대한 더 구체적인 경로를 한 줄 추가하면 롱기스트 프리픽스 매치가 알아서 처리한다.
  • 랜은 되는데 인터넷만 안 된다 — 연결된 네트워크 경로는 있고 기본 경로가 없거나 잘못된 게이트웨이를 가리키는 전형적인 형태다. 표를 한 번 열어 보는 것이 빠르다.

노트북에서 테더링을 켜고 route printip route를 직접 찍어 보면 줄이 어떻게 늘어나고 메트릭이 어떻게 갈리는지 눈으로 확인할 수 있다.

정리

  • 인터페이스가 여러 개인 호스트는 자기 안에서 스위칭을 한다. 나갈 길을 고르는 문제는 라우터만의 것이 아니다.
  • 고르는 주체는 애플리케이션이 아니라 커널이고, 근거는 라우팅 테이블이다.
  • 테이블은 route print·ip route·netstat -rn으로 볼 수 있고, 대상·마스크·게이트웨이·인터페이스·메트릭으로 구성된다.
  • 선택 규칙은 ① 롱기스트 프리픽스 매치(더 구체적인 줄) → ② 메트릭이 작은 쪽 순이다.
  • 메트릭은 비용이며 작을수록 우선한다. 운영체제가 인터페이스 속도를 근거로 자동 부여한다.
  • 인터페이스가 정해지면 출발지 IP도 그 결과로 따라 정해진다.
조회 1댓글 0

댓글

아직 댓글이 없습니다. 첫 댓글을 남겨보세요.