>정리하면 라우팅 우선순위는
>
>첫째, longest prefix matching
>
>둘재, AD(Administrative Distance) 값
>
>셋째, cost 값(hop count 등등...)
>
>
>만약 이 세조건이 모두 같다면.. 당근히 로드밸런싱 되겟져..
>
라우터는 동작하는 과정에서 목적지까지의 경로가 다수 존재할 경우 그 가운데 가장 좋은 경로를 선택하고
그것만을 이용하게 됩니다. 다만, 서로 다른 여러 프로토콜이 존재하고 또 여러 경로가 존재하는 상황에서
라우터는 다음과 같은 방식에 의거, 가장 좋은 경로를 선택하게 되는데..
가장 좋은 경로를 선택하기에 앞서 전제가 되는 중요한 부분이 하나 있습니다.
그것은 바로 동일한 목적지에 대해서만 경로의 좋고 나쁨을 비교한다는 것이죠.
누군가가 서울에서 광주까지 버스를 타고 가는 방법과 서울에서 부산까지 KTX 를 타고 가는 방법 중에서
어느 것이 빠른지를 묻는다면.. 어느 누구도 그것에 대해 답할 수는 없을 것입니다. 왜냐하면, 너무도 당연한
사실이지만, 서로 다른 목적지를 가는 방법은 비교될 수 없기 때문이죠.
라우터도 마찬가지입니다.
다만, 라우터는 목적지에 대한 주소와 마스크까지 완전히 일치해야 목적지가 같다고 생각합니다. 그리고
그렇게 완전히 동일한 목적지를 향한 경로가 여럿 존재하면 그들을 비교하여 가장 좋은 경로를 선택합니다.
(물론, 사람들에게 부산까지 KTX 로 가는 방법과 해운대까지 버스로 가는 방법을 비교하라고 한다면, 어차피
해운대는 부산에 있기 때문에 사람들은 나름대로의 지식을 이용하여 그 둘을 비교하고 판단하려 할 것입니다.
하지만 라우터는 여전히 그 둘을 완전히 서로 다른 목적지로 인식합니다.)
따라서 라우터는 동일한 목적지에 대해서만 경로의 좋고 나쁨을 비교하되, 동일한 목적지를 향한 경로가 다수
존재하면 가장 먼저 라우팅 프로토콜에 대한 신뢰도, 다시 말해 administrative distance (A.D.) 를 비교하여
신뢰할 수 있는 프로토콜을 선택한 후에, 그 이후에도 여전히 다양한 경로가 존재한다면 각 경로의 metric
(목적지까지의 거리 또는 비용) 을 비교하여 가장 좋은 경로를 선택합니다.
물론, 이렇게 A.D. 와 metric 까지 비교하여 선택된 가장 좋은 경로가 여러개이면, 그들을 동시에 이용하는 로드
밸런싱을 하게 되는 거죠.
따라서 라우터가 가장 좋은 경로를 선택하는 방법은,
첫번째, lowest A.D.
두번째, lowest metric
이렇게 되는 것입니다.
반면에 longest match 라는 rule 은 가장 좋은 경로를 선택하는 기준이라기 보다는, 라우터가 어떤 경로를 이용할
것인가에 대한 규정, 다시 말해 라우터의 동작 방식을 설명한다고 봐야 할 것 같습니다.
앞에서 말씀드린 것 처럼, 라우터는 목적지가 동일한 경우 - 네트웍 주소와 마스크까지 동일한 경우 - 에 한하여
가장 좋은 경로를 선택하되, 주소와 마스크가 완전히 일치하지 않는다면 서로 다른 목적지로 판단하게 되고,
그 결과 각각에 대하여 가장 좋은 경로를 선택하게 됩니다.
그리하여 극단적인 경우, 다음과 같은 라우팅 테이블도 가능하게 되는 거죠.
10.1.1.0 / 30 --- a.
10.1.1.0 / 27 --- b.
10.1.1.0 / 25 --- c.
10.1.1.0 / 24 --- d.
이러할 때, 10.1.1.1 을 향한 패킷은 과연 어느 경로를 통해 전달될 것인가?
또 10.1.1.60 을 향한 패킷은 어느 경로를 통해 전달될 것인가?
10.1.1.0 / 30 ==> 10.1.1.0 ~ 3 ----- a.
10.1.1.0 / 27 ==> 10.1.1.0 ~ 31 ---- b.
10.1.1.0 / 25 ==> 10.1.1.0 ~ 127 --- c.
10.1.1.0 / 24 ==> 10.1.1.0 ~ 255 --- d.
상식적인 관점에서도 충분히 유추할 수 있듯이 이런 경우 10.1.1.1 을 향한 패킷은 a 경로를 따라 전달될 것이며
10.1.1.60 을 향한 패킷은 c 경로를 따라 전달될 것입니다. 사람의 관점에서 보았을 때에는 가장 범위가 작은
경로 (more specific entry) 를 따라 패킷이 전달되어 진다고 보면 되겠지요.
다만, 라우터는 그것을 어떻게 찾아내느냐 하면..
먼저 라우팅 테이블에 있는 목적지에 대한 entry 를 죄다 bit 로 풀어 놓습니다. 단, network 부분 까지만!
10.1.1.0 / 30 == 00001010.00000001.00000001.000000
10.1.1.0 / 27 == 00001010.00000001.00000001.000
10.1.1.0 / 25 == 00001010.00000001.00000001.0
10.1.1.0 / 24 == 00001010.00000001.00000001
그 다음에 마찬가지로 목적지의 주소를 bit 로 풀어놓은 다음에..
목적지 주소와 가장 많은 bit 가 일치하는 entry 를 이용하는 겁니다.
10.1.1.1 == 00001010.00000001.00000001.00000001
목적지가 10.1.1.1 이라면 첫번째 entry 가 가장 많은 bit (30 bit) 가 일치하는 entry 가 되는 거겠죠.
10.1.1.60 == 00001010.00000001.00000001.00111100
목적지가 10.1.1.60 이라면 세번째 entry 가 가장 많은 bit (25 bit) 가 일치하는 entry 가 되겠구요..