본문내용
저장 되있다 이 초기화 문이 다시 정의 안된다면
stack[count]=position; // 최소 값을 구할 수 없다 명령을 수행후 다시 최대값으로 초기화 하자
} // 한번 사용했던 최소 값은 중복을 막기 위해 stack 배열에 넣자
for(i=0 ; i
{
if(load[i] <0)
{
load[i]=starting;
}
}
i=ending; // 이 부분은 load 배열에서 각 경로들이 갱신될때 마다
while(1) // 저장이 되어 있다 이걸 거꾸로 되집어 가면
{ // 시작점과 끝의 경로를 구할 수 있는데 위에 시작 값으로 초기화한
FastWay[Fastcount++]=i; // 이유는 그 흔적 마지막에는 시작 값으로 오기 때문이다
if(i == starting) break; // 이 부분은 직접 분석 해보자
i=load[i];
}
printf("\n %c 에 대한 최단경로를 구하였습니다! \n\n", ending+65);
// 65 를 더한 이유는 알파벳으로 출력하기 위해서 65 를 더했다
puts(" ");
for(i=65 ; i<75 ; i++) // 이부분도 알파벳으로 표시 하기 위해 65 75를 사용
{
printf("%4c", i);
}
puts(" ");
for(i=0 ; i
{
printf("%4d", map[i]);
}
puts(" ");
puts(" ");
printf(" 최단 경로\n");
for(i=Fastcount-1 ; i>0 ; i--)
{
printf(" %c -> ", FastWay[i]+65);
}
printf(" %c ", FastWay[0]+65);
printf("\n\n%4c 도착지의 최단거리 : %d\n\n", ending+65, map[ending]);
}
void main()
{
int choice ; //메뉴 선택 변수
int departure, ending; //출발지 도착지 변수
MapPrint(); //맵 프린트 호출
while(1)
{
printf(" <1> OSPF <2> 맵출력 <3> 깨끗이 <4> 종료 : ");
scanf("%d", &choice); //메뉴 선택 변수 입력
switch(choice)
{
case 1: // 메뉴 1번 선택시 OSPF 시작
printf("시작지를 입력 : ");
scanf("%d", &departure); // 라우터 시작점 입력
printf("도착지를 입력 : ");
scanf("%d", &ending); // 라우터 도착점 입력
OSPF(departure, ending);//OSPF 함수호출(시작점 도착점)
break;
case 2: // 메뉴 2번 선택시 맵 프린트
MapPrint();
break;
case 3: // 메뉴 3번 선택시 화면 지움
system("cls");
break;
case 4: // 메뉴 4번 선택시 프로그램 종료
exit(0);
}
}
}
2.2.2. RIP, OSPF 소스 실행 결과
(가)RIP
1)노드구성
2)RIP 실행결과
RIP 출력 결과
<메뉴>
<초기 라우팅테이블 A-C>
<초기 라우팅테이블 D-F>
<초기 라우팅테이블 G-I>
<초기 라우팅테이블 J>
<30초 갱신후 라우팅 테이블>
<30초 갱신후 라우팅테이블 A-C>
<30초 갱신후 라우팅테이블 D-F>
<30초 갱신후 라우팅테이블 G-I>
<30초 갱신후 라우팅테이블 J>
(나)OSPF
1)노드구성
2)각 노드별 거리정보
A
B
C
D
E
F
G
H
I
J
A
0
5
M
M
1
M
M
3
M
M
B
5
0
2
M
3
M
M
M
M
M
C
M
2
0
1
M
1
M
M
M
M
D
M
M
1
0
M
M
3
M
M
M
E
1
3
M
M
0
4
M
7
5
M
F
M
M
1
M
4
0
2
M
3
M
G
M
M
M
3
M
2
0
M
4
M
H
3
M
M
M
7
M
M
0
M
2
I
M
M
M
M
5
3
4
M
0
M
J
M
M
M
M
M
M
M
2
3
0
3)OSPF 실행결과
OSPF 출력 결과
<맵출력>
<경로선택>
<노드별 최단거리 출력>
2.2.3. RIP, OSPF 구현결과 및 분석 결과
(1)RIP
RIP의 벨만포드 알고리즘을 통한 설계결과를 검증하기 위하여 10개의 라우터를 구성하여 각라우터별 테이블을 작성하여 30초가 지나면 각라우터별 노드가 갱신되어 각라우터별 테이블 또한 갱신되도록 프로그래밍 되었다.
(2)OSPF
OSPF의 딕스트라 알고리즘을 통한 설계결과를 검증하기 위하여 우선 라우터 10개를 구성하여 각 라우터별 노드를 직접 구성 및 프로그래밍 하였다. 먼저 초기 선택 메뉴에서 OSPF를 선택하여 출발지 라우터와 도착지 라우터를 선택한다. 그리고 각 라우터의 노드를 소팅하여 최단경로를 화면에 출력한다.
그래서 최종 출발지 라우터부터 도착지 라우터까지의 최단경로를 화면에 출력하였다. 위 결과화면에서 확인하면 라우터B에서 I까지의 최단거리는 B라우터 → C라우터(비용2) → F라우터(비용1) 를 거쳐 최종 I라우터(비용3)까지 총6의 비용이 드는 것을 확인할 수 있다. 여기서 비용은 바로 전라우터에서부터의 비용이다. 그리고 A-J까지 총10개의 라우터에서의 출발지부터의 비용을 리스트로 출력하였다.
3. 결론 및 고찰
RIP는 기본적으로 거리 벡터 알고리즘을 기반으로한 라우터 프로토콜이다. 10개의 라우팅 테이블 정보를 미리 구성하여 프로그램에서 그 테이블 정보를 가지고 각 라우터에 대한 테이블을 30초후 갱신을 한다. RIP는 프로그래밍 하느는 것이 쉽지않았다. 여기저기 인터넷등을 이용하여 자료를 참조하여 프로그래밍 동작 구현까지 완성할수있었다.
OSPF는 동작확인을 위해 10개의 라우터의 노드와 비용을 지접 구성하여 라우팅맵을 미리 출력하여 출발지 도착지에 대한 각 라우터별 비용결과를 출력하도록 하였다.
4. 역할분담
조원
역할
5. 참고문헌
[1] TCP/IP Protocol sutie 3e by Forouzan
[2] TCP/IP 완벽 가이드
[3] TCP/IP 라우팅[I]
[4] 명품 C언어 프로그래밍
[5] 혼자연구하는 C/C++
stack[count]=position; // 최소 값을 구할 수 없다 명령을 수행후 다시 최대값으로 초기화 하자
} // 한번 사용했던 최소 값은 중복을 막기 위해 stack 배열에 넣자
for(i=0 ; i
if(load[i] <0)
{
load[i]=starting;
}
}
i=ending; // 이 부분은 load 배열에서 각 경로들이 갱신될때 마다
while(1) // 저장이 되어 있다 이걸 거꾸로 되집어 가면
{ // 시작점과 끝의 경로를 구할 수 있는데 위에 시작 값으로 초기화한
FastWay[Fastcount++]=i; // 이유는 그 흔적 마지막에는 시작 값으로 오기 때문이다
if(i == starting) break; // 이 부분은 직접 분석 해보자
i=load[i];
}
printf("\n %c 에 대한 최단경로를 구하였습니다! \n\n", ending+65);
// 65 를 더한 이유는 알파벳으로 출력하기 위해서 65 를 더했다
puts(" ");
for(i=65 ; i<75 ; i++) // 이부분도 알파벳으로 표시 하기 위해 65 75를 사용
{
printf("%4c", i);
}
puts(" ");
for(i=0 ; i
printf("%4d", map[i]);
}
puts(" ");
puts(" ");
printf(" 최단 경로\n");
for(i=Fastcount-1 ; i>0 ; i--)
{
printf(" %c -> ", FastWay[i]+65);
}
printf(" %c ", FastWay[0]+65);
printf("\n\n%4c 도착지의 최단거리 : %d\n\n", ending+65, map[ending]);
}
void main()
{
int choice ; //메뉴 선택 변수
int departure, ending; //출발지 도착지 변수
MapPrint(); //맵 프린트 호출
while(1)
{
printf(" <1> OSPF <2> 맵출력 <3> 깨끗이 <4> 종료 : ");
scanf("%d", &choice); //메뉴 선택 변수 입력
switch(choice)
{
case 1: // 메뉴 1번 선택시 OSPF 시작
printf("시작지를 입력 : ");
scanf("%d", &departure); // 라우터 시작점 입력
printf("도착지를 입력 : ");
scanf("%d", &ending); // 라우터 도착점 입력
OSPF(departure, ending);//OSPF 함수호출(시작점 도착점)
break;
case 2: // 메뉴 2번 선택시 맵 프린트
MapPrint();
break;
case 3: // 메뉴 3번 선택시 화면 지움
system("cls");
break;
case 4: // 메뉴 4번 선택시 프로그램 종료
exit(0);
}
}
}
2.2.2. RIP, OSPF 소스 실행 결과
(가)RIP
1)노드구성
2)RIP 실행결과
RIP 출력 결과
<메뉴>
<초기 라우팅테이블 A-C>
<초기 라우팅테이블 D-F>
<초기 라우팅테이블 G-I>
<초기 라우팅테이블 J>
<30초 갱신후 라우팅 테이블>
<30초 갱신후 라우팅테이블 A-C>
<30초 갱신후 라우팅테이블 D-F>
<30초 갱신후 라우팅테이블 G-I>
<30초 갱신후 라우팅테이블 J>
(나)OSPF
1)노드구성
2)각 노드별 거리정보
A
B
C
D
E
F
G
H
I
J
A
0
5
M
M
1
M
M
3
M
M
B
5
0
2
M
3
M
M
M
M
M
C
M
2
0
1
M
1
M
M
M
M
D
M
M
1
0
M
M
3
M
M
M
E
1
3
M
M
0
4
M
7
5
M
F
M
M
1
M
4
0
2
M
3
M
G
M
M
M
3
M
2
0
M
4
M
H
3
M
M
M
7
M
M
0
M
2
I
M
M
M
M
5
3
4
M
0
M
J
M
M
M
M
M
M
M
2
3
0
3)OSPF 실행결과
OSPF 출력 결과
<맵출력>
<경로선택>
<노드별 최단거리 출력>
2.2.3. RIP, OSPF 구현결과 및 분석 결과
(1)RIP
RIP의 벨만포드 알고리즘을 통한 설계결과를 검증하기 위하여 10개의 라우터를 구성하여 각라우터별 테이블을 작성하여 30초가 지나면 각라우터별 노드가 갱신되어 각라우터별 테이블 또한 갱신되도록 프로그래밍 되었다.
(2)OSPF
OSPF의 딕스트라 알고리즘을 통한 설계결과를 검증하기 위하여 우선 라우터 10개를 구성하여 각 라우터별 노드를 직접 구성 및 프로그래밍 하였다. 먼저 초기 선택 메뉴에서 OSPF를 선택하여 출발지 라우터와 도착지 라우터를 선택한다. 그리고 각 라우터의 노드를 소팅하여 최단경로를 화면에 출력한다.
그래서 최종 출발지 라우터부터 도착지 라우터까지의 최단경로를 화면에 출력하였다. 위 결과화면에서 확인하면 라우터B에서 I까지의 최단거리는 B라우터 → C라우터(비용2) → F라우터(비용1) 를 거쳐 최종 I라우터(비용3)까지 총6의 비용이 드는 것을 확인할 수 있다. 여기서 비용은 바로 전라우터에서부터의 비용이다. 그리고 A-J까지 총10개의 라우터에서의 출발지부터의 비용을 리스트로 출력하였다.
3. 결론 및 고찰
RIP는 기본적으로 거리 벡터 알고리즘을 기반으로한 라우터 프로토콜이다. 10개의 라우팅 테이블 정보를 미리 구성하여 프로그램에서 그 테이블 정보를 가지고 각 라우터에 대한 테이블을 30초후 갱신을 한다. RIP는 프로그래밍 하느는 것이 쉽지않았다. 여기저기 인터넷등을 이용하여 자료를 참조하여 프로그래밍 동작 구현까지 완성할수있었다.
OSPF는 동작확인을 위해 10개의 라우터의 노드와 비용을 지접 구성하여 라우팅맵을 미리 출력하여 출발지 도착지에 대한 각 라우터별 비용결과를 출력하도록 하였다.
4. 역할분담
조원
역할
5. 참고문헌
[1] TCP/IP Protocol sutie 3e by Forouzan
[2] TCP/IP 완벽 가이드
[3] TCP/IP 라우팅[I]
[4] 명품 C언어 프로그래밍
[5] 혼자연구하는 C/C++
소개글