앞서 라우터의 동작 방식에서, 라우터가 패킷을 처리할 땐 크게 두 가지 작업을 수행한다고 했었다.
참고 - 라우터의 동작 방식과 역할
- 경로 지정 : 경로 정보를 얻어 경로 정보를 정리하는 역할
- 패킷 포워딩 : 정리된 경로 정보를 기반으로 패킷을 포워딩하는 역할
라우팅 동작과 라우팅 테이블
홉-바이-홉(Hop-by-Hop) 라우팅
- 경로 지정 단계에서는 단말부터 목적지까지의 경로를 모두 책임지는 것이 아니라,
인접한 라우터까지만 경로를 지정 👉🏻 인접 라우터에서 최적 경로 파악 👉🏻 라우터로 패킷 포워딩
의 단계를 거친다. - 이를 홉-바이-홉(Hop-by-Hop) 라우팅이라고 하며, 인접한 라우터를 넥스트 홉(Next Hop) 이라고 부른다.
- 라우터는 패킷이 목적지로 가는 전체 경로를 파악하지 않고 최적의 넥스트 홉을 선택해 보내준다.
넥스트 홉을 지정하는 방법
- 다음 라우터의 IP를 지정(넥스트 홉 IP 주소)
- 일반적인 방법. 넥스트 홉을 지정할 때 상대방 라우터의 인터페이스 IP 주소를 지정한다. - 라우터의 나가는 인터페이스를 지정
- 특수한 경우에만 사용. 상대방 넥스트 홉 라우터의 IP를 모르더라도 MAC 주소를 알아낼 수 있을 때만 사용할 수 있다.
- WAN 구간 전용선에서 PPP(Point-to-Point)나 HLDC(High Level Datalink Control)와 같은 프로토콜을 사용해 상대방의 MAC 주소를 알 필요가 없을 때
- 상대방 라우터에서 프록시 ARP가 동작해 정확한 IP 주소를 모르더라도 상대방의 MAC 주소를 알 수 있을 때 - 라우터의 나가는 인터페이스와 다음 라우터의 IP를 동시에 지정
인터페이스를 설정할 때는 라우터의 나가는 물리 인터페이스를 지정하는 것이 일반적이지만, IP 주소와 인터페이스를 동시에 사용할 때는 VLAN 인터페이스와 같은 논리적인 인터페이스를 사용할 수 있다.
라우터가 패킷 포워딩 경로를 선택할 때는 출발지를 고려하지 않고, 목적지 주소와 라우팅 테이블을 비교해 어느 경로로 포워딩할지 결정한다. 따라서 라우팅 테이블을 만들 때는 목적지 정보만 수집하고, 이를 확인해 패킷을 넥스트 홉으로 포워딩한다.
라우팅 테이블에 저장하는 데이터
- 목적지 주소
- 넥스트 홉 IP 주소, 나가는 로컬 인터페이스(선택)
참고 - PBR(Policy-Based Routing) : 패킷의 출발지 주소를 이용해 라우팅
라우터에서 패킷의 출발지 주소를 이용해 라우팅하도록 PBR(Policy-Based Routing) 기능을 사용할 수 있지만,
라우팅 테이블은 목적지 주소만 수집하기 때문에 라우터 정책과 관련된 별도 설정이 필요하다.
이 기능은 소스 라우팅(Source Routing)이나 줄여서 폴리시 라우팅(Policy Routing)이라고 하는데, 관리가 어려워지고 문제가 발생하면 해결이 어려우므로 특별한 목적으로만 사용해야 한다.
참고 - 루프가 없는(Loop Free)3계층 : TTL(Time To Live)
3 계층의 IP 헤더에는 TTL 이라는 필드가 있는데, 이는 패킷이 네트워크에 살아 있을 수 있는 시간(홉)을 제한한다.
인터넷 구간에서 쓸모없는 패킷이 돌아다녀 대역폭을 낭비하는 것을 막기 위해 라우터는 주소가 불분명한 패킷을 버린다.
하지만 실제로 운영되던 사이트가 갑자기 없어지는 경우가 발생할 수 있고,
대안 경로를 찾다가 순간적으로 마주보는 두 대 라우터의 넥스트 홉이 각각 상대방으로 구성되어 패킷이 두 라우터 사이에서 계속 오가는 경우도 생길 수 있다.
그림과 같이 목적지가 30.30.30.30인 패킷이 R1, R2에 들어오면
R1은 라우팅 테이블을 참조해 (ip route 30,30.30,0/24 1.1.1.2) 1.1.1.2 IP로 내보내고
이 패킷을 받은 R2는 자신의 라우팅 테이블을 참조해 (ip route 30.30.30.0/24 1.1.1.1) 1.1.1.1로 패킷을 포워딩한다.
R1에서 R2로, R 2에서 다시 R1으로 패킷을 보내는 이 현상을 라우팅 루프라고 함
패킷이 영구적으로 사라지지 않는다면,
장비 간에 동일한 패킷이 핑퐁(Ping Pong)을 치거나 인터넷에 사라지지 않는 유령 패킷이 넘쳐날 것이다.
그래서 모든 패킷은 TTL이라는 수명 값(ufetime)을 가지고 있다.
이 값이 0이 되면 네트워크 장비에서 버려지며, TTL은 실제 초와 같은 시간이 아니라 홉을 지칭한다.
하나의 홉을 지날 때마다 TTL 값은 1씩 줄어든다.
라우팅(경로 정보)
라우터가 경로 정보를 얻는 방법은 크게
- 다이렉트 커넥티드(Direct Connected)
- 스태틱 라우팅(Static Routing)
- 다이나믹 라우팅(Dynamic Routing)
으로 나눌 수 있다.
다이렉트 커넥티드(Direct Connected)
- 라우터나 PC에서 해당 네트워크에 대한 라우팅 테이블을 자동으로 만든 경로 정보
(IP 주소를 입력할 때 사용된 IP 주소와 서브넷 마스크로 해당 IP가 속한 네트워크 주소 정보를 알 수 있다.) - 다이렉트 커넥티드로 생성되는 경로 정보는 인터페이스에 IP를 설정하면 자동 생성되는 정보이다.
👉🏻 강제로 지울 수 없고,
👉🏻 해당 네트워크 설정을 삭제 or 해당 네트워크 인터페이스가 비활성화되는 경우에만 자동으로 삭제
그림에서 R1은 1.1.1.0/30와 10.10.10.0/24 네트워크,
R2는 1.1,1.0/30와 20.20.20.0/24 네트워크 정보를 갖고 있다.
👉🏻 모두 Direct Connected에서 습득된 정보
스태틱 라우팅(Static Routing)
- 관리자가 목적지 네트워크와 넥스트 홉을 라우터에 직접 지정해 경로 정보를 입력하는 것
- 경로를 직접 지정하므로 라우팅 정보를 매우 직관적으로 설정, 관리할 수 있다.
- 다이렉트 커넥티드처럼 연결된 인터페이스 정보가 삭제되거나 비활성화되면 연관된 스태틱 라우팅 정보가 자동 삭제
- 다만 논리 인티페이스의 경우는 물리 인터페이스가 비활성화되더라도 함께 비활성화되지 않는 경우도 있다.
- 라우팅 테이블에서 사라지지 않을 수 있음.
- 그림의 R1은 10.10.10.10/24와 1.1.1.0/30(목적지) 네트워크만 다이렉트 커넥티드를 이용해 학습할 수 있으므로 20.20.20.20/24 네트워크 정보가 없다.
- R1의 10.10.10.0/24 네트워크에서 R2의 20.20.20.20과 통신하려면 넥스트 홉을 1.1.1.2로 스태틱 라우팅을 설정해야 한다.
- R2에서는 20.20.20.0/24 네트워크 정보와 1.1.1.0/30 네트워크 정보를 다이렉트 커넥티드 라우팅을 이용해 얻을 수 있지만,
원래 출발지였던 10.10.10.10/24 네트워크 정보가 없다. (네트워크 통신은 양방향이므로 되돌아오는 패킷을 고려해야 함) - 따라서 R2에서도 스태틱 라우팅을 이용해 10.10.10.10/24 네트워크 정보를 추가하고, 이 때 넥스트 홉은 1.1.1.1이 되어야 한다.
다이나믹 라우팅(Dynamic Routing)
- 스태틱 라우팅은 변화가 적은 네트워크에서 네트워크를 손쉽게 관리할 수 있는 좋은 방법이지만,
- 큰 네트워크는 스태틱 라우팅만으로는 관리가 어렵다.
- 스태틱 라우팅은 라우터 너머의 다른 라우터의 상태 정보를 파악할 수 없어 라우터나 라우터 사이 회선에 장애가 발생하면 장애 상황을 파악하고 대체 경로로 패킷을 보낼 수 없기 때문
ex) 장애 사항이 파악 불가한 경우
위 그림의 예에서는,
- R1에서 40.40.40.0/24 네트워크(R4)로 가는 경로가 R2의 1.1.1.2로 보내도록 라우팅 테이블이 설정
- R2와 R4 사이의 링크가 다운되더라도 R1과 R3에서는 상황을 파악할 수 없음.
- R1은 40,40.40.0/24에 대한 경로를 변경하지 못하고 패킷을 R2로 계속 포워딩
- 40,40.40.0/24에 대한 경로가 사라진 R2는 이 패킷을 드롭
👉🏻 한 홉을 건넌 장애(R2-R4 간)를 라우팅 테이블(R1)에 반영하지 못함
또한 관리해야 할 네트워크 수가 많아지거나 연결이 복잡해지면 직접 관리해야 하는 라우팅 개수가 기하급수적으로 늘어남 → 라우팅을 직접 추가하거나 삭제하는 데 한계
이러한 단점을 보완해주는 것이 다이나믹 라우팅(Dynamic Routing)이다.
- 라우터끼리 자신이 알고 있는 경로 정보나 링크 상태 정보를 교환해 전체 네트워크 정보를 학습
- 주기적으로 또는 상태 정보가 변경될 때 라우터끼리 경로 정보 교환
👉🏻 라우터를 연결하는 회선이나 라우터 자체에 장애가 발생하면 이 상황을 인지해 대체 경로로 패킷을 포워딩할 수 있다. - 관리자의 개입 없이 라우터끼리의 정보교환만으로 장애를 인지하고 트래픽을 우회할 수 있으므로 대부분의 네트워크에서 다이나믹 라우팅이 사용된다.
- 다이나믹 라우팅에서는 자신이 광고할 네트워크를 선언해주어야 한다.
- 각 다이나믹 라우팅 프로토콜에 따라 설정 방법만 다를 뿐, 광고에 필요한 자신의 네트워크를 선언해야 하는 것은 똑같다.
- 다이나믹 라우팅은 다시 세부적으로 여러 종류로 분류할 수 있다.
라우터에서 라우팅의 역할 - 경로 정보 + 다양한 경로 정보를 체계적으로 데이터베이스화하고 순위를 적절히 부여해 최선의 경로 정보만 수집
토폴로지 테이블, 라우팅 테이블
- 라우팅 정보를 저장할 때 최적의 경로만 추려 별도 테이블에 미리 보관한다.
(패킷을 포워딩할 때 최적의 경로를 찾는 작업을 단순화하기 위해) - 토폴로지 테이블 : 라우터가 수집한 경로 정보, 즉 원시 데이터(Raw Data)
- 라우팅 테이블 : 이 경로 정보 중 최적의 경로를 저장하는 테이블
많은 패킷을 실시간으로 포워딩해야 하는 라우터는 라우팅 테이블을 참고해 패킷 경로를 지정하고 포워딩한다.
스위칭(경로 지정)
라우팅이 경로 정보를 얻는 과정이었다면, 스위칭은 경로를 지정하는 과정이다.
라우팅을 통해 얻은 정보로 최적의 경로라고 생각되는 경로를 라우팅 테이블에 올리면(라우팅), 패킷이 들어왔을 때 라우팅 테이블을 참조해 최적의 경로를 찾아 빠르게 라우터 외부로 포워딩할 수 있다(스위칭)
👉🏻스위칭 : 라우팅을 통해 얻은 정보로 패킷 경로를 지정해 보내는 작업
이 때도 여러가지를 고려해야 하는데, 들어온 패킷의 목적지가 라우팅 테이블에 있는 정보와 완벽히 일치할 때도 있지만, 그렇지 않은 경우도 생길 수 있다.
롱기스트 프리픽스 매치 (Longest Prefix Match, LPM)
롱기스트 프리픽스 매치(Longest Prefix Match) 또는 Maximum Prefix Length Match:
라우터가 패킷을 포워딩할 때 자신이 갖고 있는 라우팅 테이블에서 가장 좋은 항목을 찾는 알고리즘
이런 작업을 수행하는 것을 Longest Prefix Matching 또는 Longest Match Rule이라고 부른다.
라우터나 스위치에서 관리할 수 있는 라우팅 테이블을 LPM 테이블 (Longest Prefix Match Table)이라고 부르며 도입해야 할 장비가 관리할 수 있는 테이블 양으로 대략적인 성능을 확인할 수 있다. → 장비 데이터시트(Datasheet)에서 확인 가능
패킷 스위칭
👉🏻 10.1.1.9 IP가 목적지인 패킷
라우터는 도착지와 가장 가깝게 매치되는 경로를 찾는다. 10.1.1.9와 완전히 매치되는 경로 정보가 없기 때문에,
롱기스트 프리픽스 매치 기법을 이용해 갖고 있는 경로 정보 중 가장 가까운 경로를 선택한다.
- 매치되지 않는 정보
- 10.1.2.0/24 , 10.1.2.9/32 : 세 번째 자리부터 매치 X
- 10.1.1.5/32 : 마지막 X - 매치되는 정보 : 10.0.0.0/8 , 10.1.0.0/16, 10.1.1.0/24
👉🏻 세 개의 라우팅 정보 중 목적지와 더 많이 매치되는 정보는 10.1.1.0/24
👉🏻 이 정보를 최선의 정보로 인식해 Eth 2 인터페이스 쪽으로 패킷을 내보내게 된다.
사실 라우터에서 이 작업은 많은 부하가 걸립니다. 정확한 정보를 매치하는 Exact Match는 단순한 서치 작업으로 찾고 패킷을 처리할 수 있지만 롱기스트 매치처럼 부정확한 정보 중 가장 비슷한 경로를 찾는 작업은 더 많은 리소스를 소모합니다. 라우터에서 패킷이 들어올 때마다 이 작업을 수행하면 많은 리소스를 소모하게 됩니다. 대부분의 라우터는 오래 걸리는 이런 반복작업을 줄여주는 기술을 채용하고 있습니다.
한 번 스위칭 작업을 수행한 정보는 캐시에 저장하고, 뒤에 들어오는 패킷은 라우팅 테이블을 확인하는 것이 아니라 캐시를 먼저 확인합니다. 이런 기술이 유용한 것은 패킷 네트워크에서 데이터를 보내기 위해 동일한 출발지 IP, 동일한 목적지 IP, 포트 번호로 여러 개의 패킷이 연속적으로 보내지기 때문입니다. 이런 캐시 기술도 캐시하는 정보에 따라 다양합니다. 단순히 목적지 IP만 캐시하는 경우와 출발지와 목적지 IP 모두 캐시하는 경우, 포트 번호 정보까지 포함해 플로를 모두 저장하는 경우로 구분할 수 있습니다. 한 단계 나아가 넥스트 홉 L2 정보까지 캐시해 스위칭 시간을 줄이는 기법도 사용됩니다. 이런 캐시 기법은 레디스(Redis)와 같은 메모리 캐시를 아용해 테이터 베이스 부하를 줄이는 기법과 매우 유사합니다.
참고
⌜IT 엔지니어를 위한 네트워크 입문⌟ 길벗, 2023
[5장] 라우터/L3 스위치: 3계층 장비 | 5.2 경로 지정 - 라우팅/스위칭 (p.163~176)
* 책을 참고해 필요한 내용을 정리한 것이므로, 책의 내용과 다를 수 있습니다.
GitHub 댓글