라우터 작동 방식 기사를 읽었다면 라우터가 네트워크 트래픽을 관리하고 패킷을 보내기 위한 최적의 경로를 찾는 데 사용된다는 것을 알고 있을 것입니다. 그러나 라우터가 이것을 수행하는 방법에 대해 생각해 본 적이 있습니까? 라우터는 패킷을 보낼 위치와 방법을 결정하기 위해 네트워크 상태에 대한 정보가 필요합니다. 그러나 그들은 어떻게 이 정보를 수집합니까?
이 기사에서 우리는 패킷을 보낼 위치를 결정할 때 라우터가 사용하는 정보를 정확하게 알아낼 것입니다.
- 기초
- LS 알고리즘
- 예: 다익스트라 알고리즘
- DV 알고리즘
- 계층적 라우팅
기초
라우터는 라우팅 알고리즘 을 사용 하여 목적지에 대한 최적의 경로를 찾습니다. "최상의 경로"라고 할 때 홉 수 (한 라우터 또는 네트워크의 중간 지점에서 다른 라우터로 패킷이 이동하는 이동), 시간 지연 및 패킷 전송의 통신 비용과 같은 매개변수를 고려합니다 .
이 콘텐츠는 이 기기에서 호환되지 않습니다.
라우터가 네트워크 구조에 대한 정보를 수집하고 최상의 경로를 지정하기 위해 정보를 분석하는 방법에 따라 글로벌 라우팅 알고리즘 과 분산 라우팅 알고리즘의 두 가지 주요 라우팅 알고리즘이 있습니다. 분산 라우팅 알고리즘에서 각 라우터는 직접 연결된 라우터에 대한 정보를 가지고 있습니다. 네트워크의 모든 라우터에 대해서는 알지 못합니다. 이러한 알고리즘은 DV (거리 벡터) 알고리즘 이라고도 합니다. 글로벌 라우팅 알고리즘에서 모든 라우터는 네트워크의 다른 모든 라우터와 네트워크의 트래픽 상태에 대한 완전한 정보를 가지고 있습니다. 이러한 알고리즘은 LS (링크 상태) 알고리즘 이라고도 합니다. 다음 섹션에서 LS 알고리즘에 대해 논의할 것입니다.
LS 알고리즘
LS 알고리즘에서 모든 라우터는 다음 단계를 따라야 합니다.
- 물리적으로 연결된 라우터를 식별하고 IP 주소를 얻습니다. 라우터가 작동을 시작하면 먼저 네트워크를 통해 "HELLO" 패킷을 보냅니다. 이 패킷을 수신하는 각 라우터는 IP 주소 가 포함된 메시지로 응답 합니다 .
- 인접 라우터에 대한 지연 시간(또는 평균 트래픽과 같은 네트워크의 다른 중요한 매개변수)을 측정합니다. 이를 위해 라우터 는 네트워크를 통해 에코 패킷 을 보냅니다 . 이러한 패킷을 수신하는 모든 라우터는 에코 응답 패킷으로 응답합니다. 왕복 시간을 2로 나누어 라우터는 지연 시간을 계산할 수 있습니다. (왕복 시간은 일부 원격 호스트에서 반송된 패킷의 타이밍에 의해 발견되는 네트워크의 현재 지연 측정값입니다.) 이 시간에는 전송 및 처리 시간이 모두 포함됩니다. 패킷이 대상에 도달하는 데 걸리는 시간과 수신자가 처리하고 응답하는 데 걸리는 시간입니다.
- 네트워크를 통해 다른 라우터에 대한 정보를 브로드캐스트하고 다른 라우터의 정보를 수신합니다. 이 단계에서 모든 라우터는 지식을 공유하고 정보를 서로 브로드캐스트합니다. 이러한 방식으로 모든 라우터는 네트워크의 구조와 상태를 알 수 있습니다.
- 적절한 알고리즘을 사용하여 네트워크의 두 노드 사이의 최상의 경로를 식별합니다. 이 단계에서 라우터는 모든 노드에 대한 최상의 경로를 선택합니다. 그들은 Dijkstra 최단 경로 알고리즘 과 같은 알고리즘을 사용하여 이를 수행 합니다 . 이 알고리즘에서 라우터는 다른 라우터에서 수집한 정보를 기반으로 네트워크의 그래프를 작성합니다. 이 그래프는 네트워크에서 라우터의 위치와 서로에 대한 링크를 보여줍니다. 모든 링크에는 가중치 또는 비용 이라는 숫자로 레이블이 지정됩니다 . 이 숫자는 지연 시간, 평균 트래픽, 때로는 단순히 노드 간 홉 수의 함수입니다. 예를 들어, 노드와 목적지 사이에 두 개의 링크가 있는 경우 라우터는 가중치가 가장 낮은 링크를 선택합니다.
다 익스트라 알고리즘 은 다음 단계를 거칩니다.
- 라우터는 네트워크의 그래프를 작성하고 예를 들어 V1 및 V2와 같이 소스 및 대상 노드를 식별합니다. 그런 다음 "인접 행렬"이라는 행렬을 만듭니다. 이 행렬에서 좌표는 무게를 나타냅니다. 예를 들어, [i, j]는 Vi와 Vj 사이의 링크의 가중치입니다. Vi와 Vj 사이에 직접적인 연결이 없는 경우 이 가중치는 "무한대"로 식별됩니다.
- 라우터는 네트워크의 모든 노드에 대한 상태 레코드 세트를 구축합니다. 레코드에는 세 개의 필드가 있습니다. 선행 필드 - 첫 번째 필드는 이전 노드를 표시합니다. 길이 필드 - 두 번째 필드는 소스에서 해당 노드까지의 가중치 합계를 표시합니다. 레이블 필드 - 마지막 필드는 노드의 상태를 보여줍니다. 각 노드는 "영구" 또는 "임시"와 같은 하나의 상태 모드를 가질 수 있습니다.
- 라우터는 상태 레코드 세트의 매개변수(모든 노드에 대해)를 초기화하고 길이를 "무한대"로, 레이블을 "임시"로 설정합니다.
- 라우터는 T-노드를 설정합니다. 예를 들어, V1이 소스 T-노드인 경우 라우터는 V1의 레이블을 "영구"로 변경합니다. 레이블이 "영구적"으로 변경되면 다시 변경되지 않습니다. T 노드는 에이전트일 뿐 그 이상은 아닙니다.
- 라우터는 소스 T-노드에 직접 연결된 모든 임시 노드에 대한 상태 레코드 세트를 업데이트합니다.
- 라우터는 모든 임시 노드를 살펴보고 V1에 대한 가중치가 가장 낮은 노드를 선택합니다. 해당 노드는 대상 T-노드입니다.
- 이 노드가 V2(목적지)가 아니면 라우터는 5단계로 돌아간다.
- 이 노드가 V2이면 라우터는 상태 레코드 집합에서 이전 노드를 추출하고 V1에 도달할 때까지 이를 수행합니다. 이 노드 목록은 V1에서 V2까지의 최적 경로를 보여줍니다.
다음 페이지에서 이 알고리즘을 예제로 사용할 것입니다.
예: 다익스트라 알고리즘
여기서 우리는 A와 E 사이의 최적 경로를 찾고자 합니다(아래 참조). A와 E 사이에 6개의 가능한 경로(ABE, ACE, ABDE, ACDE, ABDCE, ACDBE)가 있음을 알 수 있으며 가중치가 가장 낮기 때문에 ABDE가 가장 좋은 경로임은 자명합니다. 그러나 인생이 항상 그렇게 쉬운 것은 아니며 알고리즘을 사용하여 최상의 경로를 찾아야 하는 복잡한 경우가 있습니다.
- 첫 번째 이미지에서 볼 수 있듯이 소스 노드(A)는 T-노드로 선택되어 레이블이 영구적입니다(채워진 원이 있는 영구 노드와 --> 기호가 있는 T-노드를 표시함).
- 다음 단계에서는 T-노드(B, C)에 직접 연결된 임시 노드의 상태 레코드 집합이 변경되었음을 알 수 있습니다. 또한 B는 가중치가 적기 때문에 T-노드로 선택되었으며 레이블이 영구적으로 변경되었습니다(아래 참조).
- 3단계에서는 2단계와 마찬가지로 T 노드(D, E)에 직접 연결되어 있는 임시 노드의 상태 레코드 집합이 변경되었습니다. 또한 D는 가중치가 적기 때문에 T-node로 선택되어 레이블이 영구적으로 변경되었습니다.
- 4단계에서는 임시 노드가 없으므로 다음 T-노드만 식별합니다. E의 가중치가 가장 작기 때문에 T 노드로 선택되었습니다.
마지막으로 E가 목적지이므로 여기서 멈춥니다.
우리는 끝이다! 이제 경로를 식별해야 합니다. E의 이전 노드는 D, D의 이전 노드는 B, B의 이전 노드는 A입니다. 따라서 가장 좋은 경로는 ABDE입니다. 이 경우 총 무게는 4 (1+2+1)입니다.
이 알고리즘은 잘 작동하지만 너무 복잡해서 라우터가 이를 처리하는 데 오랜 시간이 걸리고 네트워크의 효율성이 떨어질 수 있습니다. 또한 라우터가 다른 라우터에 잘못된 정보를 제공하면 모든 라우팅 결정이 무효가 됩니다. 이 알고리즘을 더 잘 이해하기 위해 다음은 C로 작성된 프로그램 소스입니다.
#define MAX_NODES 1024 /* 최대 노드 수 */
#define INFINITY 1000000000 /* 모든 최대 경로보다 큰 숫자 */
int n,dist[MAX_NODES][MAX_NODES]; /*dist[I][j]는 i에서 j까지의 거리 */
무효 shortest_path(int s,int t,int 경로[ ])
{struct state { /* 작업 중인 경로 */
int 전임자 ; /*이전 노드 */
int length /*소스에서 이 노드까지의 길이*/
enum {영구, 잠정} 레이블 /*레이블 상태*/
}상태[MAX_NODES];
int I, k, min;
구조체 상태 *
NS;
for (p=&state[0];p < &state[n];p++){ /*상태 초기화*/
p->전임자=-1
p->길이=INFINITY
p->라벨=임시;
}
상태[t].길이=0; 상태[t].label=영구적 ;
k=t ;
/*k는 초기 작업 노드입니다. */
하다{
/* k에서 더 나은 경로입니까? */
I=0인 경우; 나는 < n; 나++)
/*이 그래프에는 n개의 노드가 있습니다 */
if (dist[k][I] !=0 && state[I].label==미정){
if (상태[k].길이+거리[k][I] < 상태[I].길이){
state[I].predecessor=k;
상태[I].길이=상태[k].길이 + 거리[k][I]
}
}
/* 가장 작은 레이블을 가진 임시 레이블이 지정된 노드를 찾습니다. */
k=0;min=무한대;
(I=0;I < n;I++)
if(상태[I].label==잠정 && 상태[I].length <
최소)=상태[I].길이;
k=나;
}
state[k].label=영구적
}동안(k!=s);
/*경로를 출력 배열로 복사*/
나는=0;k=0
Do{경로[I++]=k;k=state[k].predecessor;} 동안 (k > =0);
}
DV 알고리즘
DV 알고리즘은 Bellman-Ford 라우팅 알고리즘 및 Ford-Fulkerson 라우팅 알고리즘이라고도 합니다. 이러한 알고리즘에서 모든 라우터에는 모든 대상에 대한 최상의 경로를 보여주는 라우팅 테이블이 있습니다. 라우터 J의 일반적인 그래프와 라우팅 테이블은 페이지 상단에 표시됩니다.
표에서 알 수 있듯이 라우터 J가 라우터 D로 패킷을 가져오려면 라우터 H로 보내야 합니다. 라우터 H에 패킷이 도착하면 자체 테이블을 확인하고 패킷을 D로 보내는 방법을 결정합니다.
DV 알고리즘에서 각 라우터는 다음 단계를 따라야 합니다.
- 직접 연결된 링크의 가중치를 계산하고 해당 테이블에 정보를 저장합니다.
- 특정 시간 동안 자신의 테이블을 이웃 라우터(모든 라우터가 아님)로 보내고 각 이웃의 라우팅 테이블을 수신합니다.
- 이웃의 라우팅 테이블에 있는 정보를 기반으로 자신의 라우팅 테이블을 업데이트합니다.
DV 알고리즘의 가장 중요한 문제 중 하나는 " 무한대까지 계산 "입니다. 예를 들어 이 문제를 살펴보겠습니다.
아래와 같은 그래프가 있는 네트워크를 상상해 보십시오. 이 그래프에서 볼 수 있듯이 A와 네트워크의 다른 부분 사이에는 하나의 링크만 있습니다. 여기에서 모든 노드의 그래프와 라우팅 테이블을 볼 수 있습니다.
이제 A와 B 사이의 연결이 끊어졌다고 상상해 보십시오. 이때 B는 자신의 테이블을 수정한다. 일정 시간이 지나면 라우터는 테이블을 교환하므로 B는 C의 라우팅 테이블을 받습니다. C는 A와 B 사이의 링크에 무슨 일이 일어났는지 모르기 때문에 가중치가 2인 A에 대한 링크가 있다고 말합니다(C에서 B는 1, B에서 A는 1 -- 그렇지 않습니다. B는 A에 대한 링크가 없음을 알고 있습니다. B는 이 테이블을 수신하고 C와 A 사이에 별도의 링크가 있다고 생각하여 테이블을 수정하고 무한대를 3으로 변경합니다(C가 말했듯이 B에서 C로 1, C에서 A로 2). 다시 한 번, 라우터는 테이블을 교환합니다. C가 B의 라우팅 테이블을 수신하면 B가 A에 대한 링크의 가중치를 1에서 3으로 변경한 것을 확인하므로 C는 테이블을 업데이트하고 링크의 가중치를 A로 변경합니다. B가 말했듯이 B에서 A로).
이 프로세스는 모든 노드가 A에 대한 링크의 가중치가 무한대임을 알 때까지 반복됩니다. 이 상황은 아래 표에 나와 있습니다. 이런 식으로 전문가들은 DV 알고리즘의 수렴 속도 가 느리다고 말합니다 .
이 문제를 해결하는 한 가지 방법은 라우터가 대상에 대한 배타적 링크가 아닌 이웃에만 정보를 보내는 것입니다. 예를 들어 이 경우 C는 A에 대한 정보를 B에게 보내지 않아야 합니다. B는 A에게 가는 유일한 방법이기 때문입니다.
계층적 라우팅
보시다시피 LS 및 DV 알고리즘 모두에서 모든 라우터는 다른 라우터에 대한 일부 정보를 저장해야 합니다. 네트워크 크기가 커지면 네트워크의 라우터 수가 늘어납니다. 결과적으로 라우팅 테이블의 크기도 증가하고 라우터는 네트워크 트래픽을 효율적으로 처리할 수 없습니다. 우리는 이 문제를 극복하기 위해 계층적 라우팅 을 사용 합니다 . 예를 들어 이 주제를 살펴보겠습니다.
DV 알고리즘을 사용하여 노드 간의 최적 경로를 찾습니다. 아래의 상황에서 네트워크의 모든 노드는 17개의 레코드가 있는 라우팅 테이블을 저장해야 합니다. 다음은 A의 일반적인 그래프와 라우팅 테이블입니다.
계층적 라우팅에서 라우터는 지역 으로 알려진 그룹으로 분류됩니다 . 각 라우터는 자신의 지역에 있는 라우터에 대한 정보만 가지고 있고 다른 지역에 있는 라우터에 대한 정보는 가지고 있지 않습니다. 따라서 라우터는 다른 모든 지역에 대해 테이블에 하나의 레코드만 저장합니다. 이 예에서는 네트워크를 5개 지역으로 분류했습니다(아래 참조).
A가 지역 2(D, E, F 또는 G)의 라우터에 패킷을 보내려는 경우 B로 보내는 식입니다. 보시다시피 이러한 라우팅 유형에서는 테이블을 요약할 수 있으므로 네트워크 효율성이 향상됩니다. 위의 예는 2단계 계층 라우팅을 보여줍니다. 3 또는 4 수준의 계층적 라우팅을 사용할 수도 있습니다.
3단계 계층 라우팅에서 네트워크는 여러 클러스터 로 분류됩니다 . 각 클러스터는 여러 지역으로 구성되며 각 지역에는 여러 라우터가 포함됩니다. 계층적 라우팅은 인터넷 라우팅에서 널리 사용되며 여러 라우팅 프로토콜을 사용합니다.
라우팅 및 관련 주제에 대한 자세한 내용은 다음 페이지의 링크를 확인하십시오.
더 많은 정보
관련 기사
- 라우터 작동 방식
- 라우터 퀴즈
- 방화벽 작동 방식
- 인터넷 인프라 작동 방식
- LAN 스위치 작동 방식
- 홈 네트워킹 작동 방식
- 네트워크 주소 변환 작동 방식
- 패킷이란 무엇입니까?
- 사람들이 "컴퓨터 알고리즘"을 언급할 때 정확히 무엇을 말하는 것입니까?
더 좋은 링크
- 인터넷 백과사전: 라우팅
- 라우팅 테이블
- 네트워크 라우팅
- 네트워크 계층
- 계층적 라우팅
저자 소개
Roozbeh Razavi는 KNT 공과 대학의 전자 공학 학생입니다. 그는 또한 Microsoft Corporation의 "Networking Essentials Plus" 책의 번역가이기도 합니다. 그의 연구는 TCP/IP, 라우팅 및 네트워크 보안 분야에 중점을 두었습니다.