CS/Network

[Chapter 7] IP 프로토콜(라우팅 프로토콜)

devrabbit22 2025. 2. 13. 17:38

인터넷에는 수 많은 호스트가 연결되므로 관리해야 할 라우팅 정보도 매우 많다. 그러다보니 라우팅 정보를 적절히 관리하여 효과저긍로 라우팅 하는 작업이 생각보다 쉽지 않다.

간단한 라우팅 프로토콜

네트워크에서 의미하는 거리의 기준은 다양하지만, 라우팅과 관련해 가장 보편적으로 이용하는 기준은 전송 경로의 중간에 위치하는 라우터의 개수, 즉 홉의 수로 판단하는 것이다.

최단 경로 라우팅

최단경로 라우팅 방식은 패킷이 목적지에 도달할 때까지 거치는 라우터의 수가 최소화 될 수 있도록 경로를 선택한다. 장점은 바교적 간단한 형식으로 쉽게 적용할 수 있다는 것인데, 전송 패킷이 목적지까지 도착한는 여러 경로 중 가장 짧은 경로를 선택한다.

호스트 a에서 호스트 g까지 도달하는 경로는 여러개이지만, 가장 짧은 경로는 라우터 c만 거치는 것이다. 또다른 예로 호스트a에서 호스트d까지 도달하기 위한 최단 경로는 라우터 b나 c를 통과하는 것이다. 두 경로는 홉을 기준으로 하면 거리가 동일하다. 홉 수 외에 거리 기준이 될 수 있는 요소에는 패킷의 전송 지연 시간, 전송 대역폭, 통신 비용 등이 있다. 이들 요소를 개별적으로 적용하거나 적절한 비율로 함께 적용할 수 있다.

플러딩

플러딩은 라우터가 자신에게 입력된 패킷을 출력 가능한 모든 경로로 중개하는 방식이다. 이 방식에서는 원본 패킷과 동일한 패킷이 무수히 생성되고 모든 경로를 통해 반복하여 전송하므로 네트워크에 패킷이 무한 개 만들어질 수 있다. 패킷이 무한정 증가하는 현상을 맞이하려면 각 패킷의 홉 수를 일정 범위로 제한해 라우터에서 이를 확인하여 제거해야 한다.

플러딩 방식의 라우팅은 많이 이용하지는 않고, 중요한 데이터를 모든 호스트에 동시에 전달하는 환경에서 제한적으로 사용한다.

거리 벡터 라우팅 프로토콜

거리 벡터 라우팅 프로토콜은 라우터가 자신과 직접 연결된 이웃 라우터와 라우팅 정보를 교환하는 방식이다. 정보를 교환하는 라우터는 거리 벡터 프로토콜을 사용하는 호스트나 라우터들이다. 교환 정보는 각각의 라우터에서 전체 네트워크에 소속되는 개별 네트워크까지 패킷을 전송하는데 걸리는 거리 정보이다.

거리 벡터 알고리즘을 구현하려면 라우터가 링크 벡터, 거리 벡터, 다음 홉 벡터라는 세 가지 필수 정보를 관리해야 한다.

  1. 링크 벡터 : 이웃 네트워크에 대한 연결 정보
  2. 거리 벡터 : 개별 네트워크로 가기 위한 다음 홉 정보
  3. 다음홉 벡터 : 개별 네트워크로 가기 위한 다음 홉 정보

링크 벡터

링크 벡터L(x)는 라우터 x와 직접 연결된 이웃 네트워크에 대한 정보를 보관한다.

라우터 x와 직접 연결된 네트워크가 M개

L(x) = [포트(1), 포트(2),...,포트(m),...,포트(M)]

링크 벡터에 보관된 정보는 라우터 x가 해당 네트워크와 연결하기 위해 할당한 라우터 포트 번호라고 생각할 수 있다.

네트워크에서 라우터 R1의 링크 벡터 정보를 구하려면 R1에 직접 연결된 네트워크가 무엇인지 알아야 한다. 네트워크 Net.1과 Net.2가 직접 연결되어 있으며, 이는 라우터R1의 1번과 3번 포트에 각각 연결되어 있다. 따라서 라우터 R1의 링크 벡터 정보는 다음과 같다.

L(R1) = [포트(Net.1)=1, 포트(Net.2)=3]

라우터 R2와 R7도 동일한 원리로 링크 벡터 정보를 구할 수 있고, 다른 라우터들도 같은 방식을 적용할 수 있다. 링크 벡트는 자신과 직접 연결된 이웃 라우터가 누구인지를 판단하기 위한자료이며, 이들에게 거리 벡터 정보를 제공하기 위하여 사용한다.

L(R2) = [포트(Net.1)=1, 포트(Net.4)=8]

L(R7) = [포트(Net.3)=6, 포트(Net.5)=9]

거리 벡터

거리 벡터 D(x)는 전체 네트워크에 소속된 개별 네트워크들까지의 거리 정보를 관리한다. 네트워크가 N개라고 가정하면 거리 벡터 정보는 아래와 같다.

거리 벡터 D(x) = [거리(1),거리(2),...,거리(n),...,거리(N)]

거리벡터에서 관리하는 정보는 일반적으로 개별 네트워크 까지 패킷을 전송하는데 걸리는 최소 전송 지연 시간이다.

라우터 R1을 위한 거리 벡터 값 D(R1) = [거리(Net.1)=1, 거리(Net.2)=1, 거리(Net.3)=2, 거리(Net.4)=2, 거리(Net.5)=2]

다음 홉 벡터

다음 홉 벡터H(x)는 개별 네트워크 까지 패킷을 전송하는 경로에 있는 다음 홉 정보를 관리한다. 보관하는 정보의 수는 전체 네트워크에 속한 네트워크의 개수로, 거리 벡터의 경우와 같다.

H(x) = [홉(1),홉(2),...,홉(n),...,홉(N)]

라우터 R1을 위한 다음 홉 벡터 값 H(R1) = [다음 홉(Net.1)=-, 다음 홉(Net.2)=-, 다음 홉(Net.3)=R4, 다음 홉(Net.4)=R3, 다음 홉(Net.5)=R6]

RIP 프로토콜

RIP 거리 벡터 방식을 사용하는 내부 라우팅 프로토콜 중에서 가장 간단하게 구현된 것이다. 소규모 네트워크 환경에 적합하며, 현재 가장 많이 사용하는 라우팅 프로토콜 중 하나이다. RIP가 제대로 동작하려면 이웃 라우터가 제공하는 거리 벡터 정보가 임의의 짧은 시간 내에 모두 도착해야 하는데 현실적으로 구현이 쉽지 않다. 특히 RIP 패킷은 UDP 프로토콜을 사용해야 하는데, UDP는 비신뢰성 전송을 제공하므로 RIP 패킷이 전송 과정에서 사라질 수 있다.

위의 이류를 바탕으로 RIP는 다음과 같은 제한을 두어 개별 거리 정보가 라우팅 테이블에 순차적으로 적용되도록 한다.

첫번째와 두번째는 자신이 관리하는 거리 벡터 정보에 대한 내용이고, 세 번째는 다른 라우터로부터 받는 거리벡터 정보이다.

  • 입력되는 거리 벡터 정보가 새로운 네트워크의 목적지 주소이면 라우팅 테이블에 적용한다.
  • 입력되는 거리 벡터 정보가 기존 정보와 비교하여 목적지까지 도착하는 지연이 더 적으면 대체한다. 즉, 이전 정보와 홉 수가 같아도 추가 지연 측정을 통해 지연 시간이  적으면 새로운 경로를 선택한다.
  • 임의의 라우터로부터 거리 벡터 정보가 들어왔을 때 라우팅 테이블에 해당 라우터를 다음 홉으로 하는 등록 정보가 있으면 새로운 정보로 수정한다.

라우터 R1의 라우팅 테이블에 위와 같은 정보가 기록되어있다고 가정하면 값중에서 주목할 사앟은 네트워크 NET.4를 목적지로 하는 패킷은 라우터 R4를 거쳐서 네트워크 Net.3과 라우터 R5의 경로를 선택하도록 되어 있다는 점이다.(이는 극단적으로 나쁜 상황을 가정한 것으로, 라우터 R3을 통한 우회 경로가 빠른 전송을 지원한다.)

라우터 R1과 직접 연결된 주변 라우터 R2, R3, R4, R6으로부터 라우팅 정보가 주기적으로 입력된다. 임의의 시점에 다음의 거리 벡터 정보가 들어온다고 가정하면 각 값은 순서대로 Net.1, Net.2, Net.3, Net.4, Net.5까지의 거리이다.

R2 = [1. 2. 2. 1. 2]

R3 = [2, 1, 2, 1, 2]

R4 = [2, 1, 1, 2, 2]

R6 = [2, 1, 2, 2, 1]

이 값을 해석하면, 네트워크 Net.4로 갈 때 라우터 R4나 R6을 거치면 거리가 2이지만 라우터 R2나 R3을 거치면 1이다. 라우터 R2와 R3을 이용하는 것이 거리가 짧으므로 이 중 하나를 선택하는데, 라우터 R1에서 라우터 R2나 R3으로 가는 거리 1을 더하면 최종 거리는 2이다. 결과적으로 표 7-1보다 패킷을 빠르게 전송할 수 있는 새로운 경로를 찾았으므로 이를 라우팅 테이블에 반영한다. 라우터 R3을 선택했다고 가정하면 새로 수정한 라우터 R1의 라우팅 테이블은 아래와 같다.

RIP는 라우터 사이에서 링크 벡터, 거리 벡터, 다음 홉 벡터 등의 정보를 교환하려고 아래와 같은 패킷 구조를 사용한다.

각 필드의 의미는 다음과 같다. 두번쨰 줄 부터는 개별 네트워크에 대한 거리 정보를 묶음 단위로 기술하는데, RIP 패킷 하나는 최대 25개의 묶음 정보를 포함할 수 있다.

  • Command(명령): 값이 1이면 RIP 요청을, 2이면 RIP응답을 의미한다. 라우터가 초기화되는 과정에서 RIP 요청이 브로드캐스팅되면 이 패킷을 받은 라우터들은 즉각 응답한다.
  • Version : 프로토콜의 버전 번호
  • Address Family Identifier(주소 패밀리 구분자) : IP 프로토콜의 주소는 2로 설정된다.
  • IP Address :  특정한 네트워크를 지칭하는 용도로 사용되기 떄문에 IP 주소의 네트워크 부분의 값만 사용하고, 호스트 부분은 0으로 채운다.
  • Metric(거리) : 해당 라우터에서 목적지 네트워크 까지의 거리이다.

링크 상태 라우팅 프로토콜

두 번째 방식인 링크 상태 라우팅 프로토콜은 라우터 간의 정보 교환 원리가 거리 벡터 방식과 반대이다.

  • 개별 라우터가 이웃 라우터 까지의 거리 정보를 구한 후, 이를 네트워크에 연결된 모든 라우터에 통보한다.
  • 거리 벡터 라우팅 프로토콜에서는 각 라우터가 상당한 양의 정보를 요구받고, 특히 링크 상태가 많이 변하면 동작 과정에서 시간이 많이 소모될 수 있다. 링크 상태 알고리즘은 이와 같은 단점을 극복하려고 고안된 방식이다.
  • 거리 벡터 라우팅 프로토콜은 알고리즘의 특성 상 정보가 주기적으로 전달되지만 링크 상태 라우팅 프로토콜에서는 이웃 라우터와 연결된 상황에 변화가 있을 때만 정보 전달이 이루어진다.
  • 링크 상태 라우팅 프로토콜은 정보 전달을 위해 플러딩 기법을 사용한다. 임의의 라우터가 이웃한 모든 라우터에 정보를 전달하고, 다시 이들 라우터가 주변의 모든 라우터에게 정보를  전달하는 방식으로 동작한다. 이 때 입력된 선로를 통해 출력되지 않도록 주의해야 한다.
  • 플러딩 방식을 사용하면 특정 패킷이 네트워크에서 무한정 순환할 수 있다는 점을 고려해야 한다. 

간단한 해결방법

  1. 각 라우터가 전송된 패킷을 기억했다가 해당 패킷이 다시 도착하면 무시하고 버리는 것이다.
  2. 링크 상태 방식을 사용하는 라우팅 프로토콜에는 TPC/IP 기반의 인터넷에서 사용하는 OSPE가 있다.
  3. 링크 상태 라우팅 프로토콜과 거리 벡터 라우팅 프로토콜은 모두 다음과 같은 가정을 전제로 동작한다. 각 라우터는 이웃 라우터의 주소 정보와 함께 이들 라우터까지 전송하는 데 필요한 비용 정보를 알고 있으며, 이때 비용의 종류는 패킷 전송 지연 등을 비롯해 여러가지가 될 수 있다.

외부 라우팅 프로토콜

거리 벡터 방식을 사용하는 IP프로토콜이나 링크 상태 방식을 사용하는 OSPE 프로토콜은 내부 라우팅 용도로 개발되었다. 따라서 이 방식을 외부 라우팅 프로토콜에서 사용하기는 적합하지 않다.

외부 라우팅 프로토콜에서 사용하는 경로 벡터 프로토콜은 경로에 관한 거리 정보 값이 필요 없는 방식이다. 단순히 해당 라우터에서 어느 네트워크가 연결이 가능한 지에 대한 정보만을 제공한다. 이는 근거리의 경로 정보를 관리하는 내부 라우팅 프로토콜이 효율의 문제를 고려하지만, 원거리의 경로 정보를 관리하는 외부 라우팅 프로토콜은 경로의 존재 유무에 초점을 맞추기 때문이다.

경로 벡터 방식은 거리 벡터 방식과 두 가지 면에서 다르다. 

  1. 거리에 대한 처리 과정이 이루어지지 않는다.
  2. 관리하는 라우팅 정보에는 목적지 네트워크에 도착하기 위한 자율 시스템에 관한 내용만 포함한다.

BGP는 외부 라우팅 프로토콜로, 인터넷에서 많이 사용된다. BGP는 서로 다른 종류의 자율 시스템에서 동작하는 라우터가 라우팅 정보를 교환할 수 있게 해준다.

이와 같이 종류가 다른 환경에서 동작하는 라우터를 일반적으로 게이트웨이(Gateway)라 한다.

BGP는 TCP 프로토콜을 이용해 메시지를 교환한다. 


Reference

쉽게 배우는 데이터 통신과 컴퓨터 네트워크