Network

[Network] OSI Layer 3 - Router

Yoonsoo Park 2024. 8. 22. 01:58

1. 3계층의 핵심 네트워크 장비, 라우터

 우리는 이미  같은 네트워크(하나의 LAN)내에서의 통신이 스위치를 통해 이뤄진다는 것을 알고 있다. 그렇다면 LAN을 넘어 멀리 떨어진 다른 네트워크에 속한 호스트와의 통신은 어떻게 이뤄질까? LAN 간의 통신에서 사용되는 네트워크 장비가 라우터(Router)이다. LAN 간의 통신에서 패킷은 다양한 경로로 여러 라우터를 거쳐 이동하게 되는데, 여기서 라우팅 프로토콜(Routing Protocol)을 이용하여 최적의 경로를 선정하여 목적지까지 전송하는 일련의 과정라우팅(Routing)이라고 하며, 라우터와 라우터를 이동하는 하나의 과정홉(Hop)이라고 한다. 즉, LAN 간의 통신 과정에서 패킷은 목적지에 닿을 때까지 '여러 홉을 거쳐' '라우팅' 되는 것이다. 

 

구글 서버로 패킷을 보내는 경로 - 패킷이 여러 홉을 거쳐 보내진다

 

 라우팅의 역할 외에도 라우터는 네트워크 간 브로드캐스트 패킷을 차단하고, 유니캐스트 패킷만을 허용하는 브로드캐스트 도메인(Broadcast Domain) 분리, NAT(네트워크 주소 변환), 앞선 IP 포스트에서 언급한 동적 할당 기능 등 다양한 기능을 한다. 이번 포스트에서는 라우팅 및 라우팅 프로토콜 중심으로 다룰 예정이고, 다른 기능들은 차후 다뤄보도록 하겠다.

 

각설하고, 그렇다면 라우팅은 어떤 방법으로 수행되는 것일까?

 

 

2. 어디로 가야하오, 라우팅 테이블

 라우팅 테이블(Routing Table)은 라우팅 경로를 기록하기 위해 사용되는 표와 같은 정보이며, 라우터는 라우팅 테이블을 기준으로 최적 경로를 결정한다. 패킷이 라우터로 들어올 경우, 다른 과정보다 패킷의 목적지 IP와 라우팅 테이블을 먼저 비교하게 된다. 다음 라우팅 테이블을 통해 구성을 직접 보도록 하자.

 

*라우팅 테이블 확인 명령어 

  • 윈도우, 리눅스, 유닉스: netstat -nr(netstat -r) or route print
  • CIsco 라우터: (priviliage) show ip route

Window Routing Table
Cisco Routing Table

 

라우팅 테이블의 구성을 간략하게 정리해보면,

  • 네트워크 대상(목적지 IP 주소), 네트워크 마스크(서브넷 마스크): 패킷을 전달해야 할 대상 
  • 게이트웨이(Gateway, G/W): 게이트웨이는 간단하게 네트워크 연결 통로라고 이해하면 되는데, 라우팅 테이블에서 게이트웨이는 다음 호스트의  네트워크 인터페이스 IP 주소를 의미한다. 
  • 인터페이스(네트워크 인터페이스): 패킷을 내보내는 네트워크 인터페이스의 IP 주소 또는 인터페이스의 이름을 직접 명시한다. ex) GigabitEthernet 0/1
  • 메트릭(Metric): 해당 경로로 이동하는데 드는 비용이라고 생각하면 된다. 메트릭이 적은 경로일 수록 선호된다. 

  라우터는 패킷이 라우터로 들어왔을 때, 라우팅 테이블의 맨 밑 항목부터 위(Cisco의 경우 맨 위부터 아래로)로 하나씩 패킷의 목적지 IP 주소와 라우팅 테이블 항목의 서브넷 마스크를 AND연산시켜 라우팅 테이블 항목의 목적지 네트워크 주소와 동일한지 확인한다. 네트워크 주소가 동일할 경우, 해당 대상으로 패킷을 포워딩한다(Connected, 연결됨의 경우 같은 네트워크로 판단한다). 다를 경우, 앞선 과정들을 반복하며 경로를 찾게 된다. 그런데 라우팅 테이블 내에 합치하는 항목이 있을 수도 있지만, 없을 수도 있다. 이런 경우 기본적으로 패킷을 내보내야 하는 경로디폴트 라우트(Default Route)라고 한다(호스트들에는 Default Gateway로 해당 경로의 Gateway IP 주소를 기입하게 된다). 디폴트 라우트는 목적지 IP 주소와 서브넷 마스크가 모두 0.0.0.0으로 이뤄져 있기 때문에 무조건 합치하게 된다. 즉, "너 갈 곳 못 찾았어? 그럼 그냥 여기로 나가~" 이런 느낌인 것이다. 

 

10111000.00110000.00000000.00000001
00000000.00000000.00000000.00000000
---------------------------------- AND
00000000.00000000.00000000.00000000

=> 0.0.0.0과 AND 연산을 하게되면 무조건 0.0.0.0이 나온다.

 

 

3. 라우팅 테이블을 생성/유지/갱신하는 방법 1, 정적(Static) 라우팅

Topology

 해당 토폴로지에서 라우터 간에 Serial Interface를 연결했음에도 PC1에서 PC8로 패킷이 전송되지 않는 문제가 생겼다. 다른 부분에는 이상이 없어서 라우팅 테이블을 보니 PC1과 연결된 라우터에 PC8이 속한 서브넷의 정보가 없다 (=네이버 지도에서 에버랜드 가는 방법을 찾고 싶은데, 네이버 지도에 용인시에 대한 정보가 없다면? 정보를 제공할 수 없다). 그렇다면 단순하지만 직접 추가해주는 방법, 정적(Static) 라우팅이 있다(IP를 다룬 앞선 포스트에서 정적(Static) 할당이 직접 IP를 부여하는 방식이었고, 동적(Dynamic) 할당이 자동으로 할당해주는 것과 같다). 

 

OS 별 정적 라우팅 명령어

Window 
route  add  [목적지 네트워크 주소]  mask  [서브넷 마스크]  [게이트웨이 IP 주소]
Linux
sudo  route  add  -net  [목적지 네트워크 주소]  netmask   [서브넷 마스크]  gw  [게이트웨이 IP 주소] 
Cisco
router(conf): ip  route  [목적지 네트워크 주소]  [서브넷 마스크]  [게이트웨이 IP 주소] 

 

정적 라우팅을 수행한 후 라우팅 테이블의 모습

 

앞선 명령어들을 통해서 정적 라우팅을 수행해주면 라우팅 테이블에 통신을 원하는 서브넷의 정보가 생성되게 된다. 여기서 주의할 점은 통신은 요청(Request)와 응답(Reply)이 모두 이뤄져야 되기 때문에 수신 호스트의 라우터 뿐만 아니라 송신 호스트와 연결된 라우터의 라우팅 테이블에도 수신 호스트의 네트워크 주소가 반드시 생성되어 있어야 정상적인 통신이 가능하는 것이다. 

 

그런데, 위의 토폴로지와 같이 라우터가 2개만 존재하는 것이 아닌, 여러 개가 존재할 수도 있다. 게다가 라우터마다 연결된 서브넷이 다수 존재할 수도 있다. 물론 정적 라우팅으로 처리할 수도 있지만, 상상만 해도 너무 많은 시간과 오류가 날 수 있는 상황임은 부정할 수 없다. 이럴 땐 어떻게 해야할까?

 

 

4. 라우팅 테이블을 생성/유지/갱신하는 방법 2, 동적 라우팅 과 라우팅 프로토콜

 동적(Dynamic) 라우팅라우터 간 정보 교환을 통해서 동적으로(자동으로) 라우팅 테이블 항목을 생성, 유지, 갱신하는 방법이다. 동적 라우팅을 알아보기 전에 먼저 AS(Autonomous System)의 개념에 대해 알아보자.

 

AS(Autonomous System)란, 단일 관리와 동일한 라우팅 정책 하에 운영되는 집단 네트워크를 의미한다. SK Broadband, LG U+와 같은 대형 ISP, 대학교 네트워크 등을 예로 들 수 있다. 각 AS는 인터넷에서 라우팅 정보를 식별하는데 사용되는 고유한 AS 번호(ASN)을 부여받는다. 아래 사진과같이 AS 내에는 많은 라우터들이 존재하는데, 외부와 통신할 경우 AS 경계 라우터(ASBR; Autonomous System Boundary Router)라는 특별한 라우터를 사용한다.  

AS와 라우팅 프로토콜

 

 라우팅 프로토콜은 크게 이러한 AS 내부에서 수행되느냐, 외부에서 수행되느냐에 따라 IGP(Interior Gateway Protocol)EGP(Exterior Gateway Protocol)로 분류된다. 대표적인 IGP로는 RIP, OSPF, ELGRP가 있고, EGP에는 BGP가 있다. 이번 포스트에서는 각 프로토콜의 동작 방식까지 간략하게 설명하고, 다음 포스트를 통해 RIP v2와 OSPF를 라우터에 직접 설정하는 방법을 소개하겠다. 

 

 먼저, RIP(Routing Information Protocol)거리 벡터 알고리즘(Bellman-Ford Algorithm) 기반의 라우팅 프로토콜이다. 거리 벡터 알고리즘은 거리를 기반으로 최적 경로를 선택함을 의미한다. 그리고 RIP에서 거리는 홉 카운트(Hop Count) 즉, 몇 개의 라우터를 거쳐가느냐를 의미한다. RIP는 동일한 프로토콜을 사용하는 인접 장비와 멀티캐스트 주소(224.0.0.9)를 사용하여 Connected Network 정보를 교환 및 라우팅 테이블을 갱신하는데, 이를 통해 특정 호스트까지의 홉 카운트를 계산할 수 있다. 그리고 특정 호스트까지 '홉 카운트가 가장 적은 경로'를 최적 경로로 선택합니다. RIP은 30초를 주기로 경로 정보를 교환하기 때문에 정보가 업데이트되는 속도(Convergence Time)이 느리고, 최대 홉 카운트를 15로 제한하기 때문에 비교적 라우터가 적은 환경에서 사용된다. 반면, 쉬운 알고리즘으로 인해 구현 및 초기 설정이 쉽다는 장점이 있다. 

 

  • RIP v1: 최초의 RIP 버전으로, 클래스풀(Classful) 라우팅 프로토콜
  • RIP v2: RIP v1의 기능을 확장하여 클래스풀 라우팅을 지원하지 않으며, 클래스리스(Classless) 라우팅을 지원

 

 다음 OSPF(Open Shortest Path First Protocol)링크 상태(Link State) 알고리즘 기반의 라우팅 프로토콜이다. OSPF는 모든 인접 장비의 인터페이스 상태를 링크 상태 데이터베이스(Link State Database)에 기록한 후, 해당 데이터를 기반으로 최적 경로를 결정한다. OSPF는 메트릭(Metric)을 Bandwidth를 기반으로 계산하는데, 인터페이스의 상태를 고려했을 때, 전송 속도를 기준으로 최적 경로를 결정한다고 보면 된다.

 

 OSPF는 RIP와 같이 동일한 프로토콜을 사용하는 인접 장비와 멀티캐스트 주소(224.0.0.5, 6)를 사용하여 링크 상태 정보를 교환하는데, 정보 교환 거리의 제한이 없어 큰 범위의 네트워크에서 사용된다. RIP가 30초마다 상태를 광고했던 것과 다르게, OSPF는 상태 변화가 발생할 때마다 광고하기 때문에 수렴 시간(Convergence Time)이 빠르다. 또한 상황마다 매번 정보를 갱신하고, 이를 모두 링크 상태 데이터베이스에  저장하기 때문에 부하가 발생하는 단점이 있는데, OSPF는 이를 보완하기 위해 AS를 Area라는 단위로 나누어 관리한다. 각 Area는 동일한 링크 상태 데이터베이스를 공유한다. 모든 Area는 Area들의 허브 역할을 하는 BackBorn Area(Area 0)에 연결되어 있는데, OSPF는 Backborn Area를 중심으로 Area들을 구조화하여 관리한다. 이를 OSPF의 계층적 구조라고도 한다. 다른 Area와의 라우팅은 Backborn Area와 ABR를 통해 이뤄진다. ABR(Area Boarder Router) 은 Area 간의 경계를 담당하는 라우터로 한 Area의 라우팅 정보를 요약하여 다른 Area로 넘겨주는 역할을 한다. ABR을 통해 요약된 라우팅 정보를 얻은 Area는 해당 Area의 자세한 링크 상태를 알 필요가 없기 때문에 효율성을 얻을 수 있다. 마지막으로 자율 시스템 경계 라우터 (ASBR: Autonomous System Boundary Router)외부의 다른 라우팅 프로토콜이나 자율 시스템(AS)과의 경계를 담당하여, 외부 네트워크와의 통신을 가능하게 한다.