KENS 사용자 가이드

용철

Korea Advanced Institute of Science and Technology

2004년 2월

고친 과정
고침 0.12004-02-16
최초 작성

초록

이 문서에서는 KENS(KAIST Educational Network System)를 실행하고, 어떻게 실습을 하는가에 대해서 다룬다.


차례

들어가는 말
1. KENS(KAIST Educational Network System)에 대하여
2. KENS의 구조
전체 구조
KENS Library
KENS Kernel
Dispatch
System Call
Transport Layer
Network Layer
Datalink Layer
3. KENS 응용 프로그램의 작성
KENS Library를 이용하여 프로그래밍하기
작성한 응용 프로그램 컴파일하기
4. KENS 및 KENS 응용 프로그램의 실행
KENS의 환경 설정
KENS의 환경 설정 파일
MAC 주소 목록
라우팅 규칙 목록
KENS의 실행
KENS 응용 프로그램의 실행
KENS를 이용하여 복잡한 network 구축하기
5. 정리
서지사항
A. KENS의 테스트에 사용된 Network 구성과 환경설정 파일들
KENS를 이용하여 구성된 Network
KENS 호스트 cli의 환경 설정
cli.conf
cli_seth0
KENS 호스트 svr의 환경 설정
svr.conf
svr_seth0
KENS 호스트 gw1의 환경 설정
gw1.conf
gw1_seth0
gw1_seth1
gw1.route
KENS 호스트 gw2의 환경 설정
gw2.conf
gw2_seth0
gw2_seth1
gw2.route

그림 목록

2.1. KENS와 KENS 응용 프로그램의 전체 구조
A.1. KENS의 테스트를 위해 구성된 네트워크

표 목록

3.1. KENS library의 API와 대응하는 표준 함수들
3.2. 플랫폼 별 네트워크 라이브러리
4.1. 환경 설정 : server_name
4.2. 환경 설정 : udp_port & tcp_port
4.3. 환경 설정 : log_level
4.4. 환경 설정 : unreliable
4.5. 환경 설정 : default_route
4.6. 환경 설정 : address
4.7. 환경 설정 : netmask
4.8. 라우팅 규칙 설명

들어가는 말

1장. KENS(KAIST Educational Network System)에 대하여

현재 대학에서 이루어지고 있는 네트워크 강의가 교과서에 의존하는 경향이 있어, 학생들이 실제 시스템 안에서 TCP/IP가 어떻게 작동되는지에 대해서 충분한 실습을 못하는 실정이다.

KENS는 이와 같은 문제점을 개선하기 위해 운영체제 과목에서 널리 쓰이고 있는 Nachos나 데이터베이스 과목에서 널리 쓰이고 있는 MiniBase 처럼, network 관련 과목의 실습을 돕기 위하여 KAIST Network Computing Lab.에서 자체 개발한 환경이다.

학생들은 KENS를 이용하여 크게 세 가지 부분에 대해서 실습을 할 수 있다.

  1. KENS가 제공하는 표준 socket programming API와 호환되는 API를 이용하여, KENS에서 실행되는 application을 작성해 볼 수 있다.

  2. OSI-7 layer의 transport layer에 해당하는 TCP 프로토콜과 관련된 여러가지 알고리즘들을 직접 구현하여 테스트 해 볼 수 있다.

  3. OSI-7 layer의 network layer에 해당하는 IP 프로토콜과 관련된 여러가지 알고리즘들(라우팅 알고리즘 등)을 직접 구현하여 테스트 해 볼 수 있다.

2장. KENS의 구조

이 장에서는 KENS의 구조에 대해서 자세하게 알아보도록 한다

전체 구조

아래 그림은 KENS와 KENS library를 이용하여 작성된 KENS 응용 프로그램 사이의 전체적인 관계를 나타내는 그림이다.

그림 2.1. KENS와 KENS 응용 프로그램의 전체 구조

여기에는 KENS의 전체 구조를 보여주는 그림이 있다

KENS와 KENS 응용 프로그램들 사이의 관계 및 KENS의 간략한 내부 구조를 나타낸 그림이다. KENS 응용 프로그램과 KENS 호스트(KENS 프로그램 자체) 사이의 관계에 주의해서 살펴보기 바란다. 좀 더 큰 그림을 보기를 원하면 여기를 클릭하기 바란다.

위 그림에서는 간단하게 두 개의 KENS 응용 프로그램이 하나의 소켓만을 이용하는 경우를 나타냈지만, 실제로는 한 응용 프로그램에서 여러개의 소켓을 동시에 사용할 수도 있고, 여러 KENS 응용 프로그램이 하나의 KENS 호스트에서 동시에 실행될 수도 있다.

그럼 KENS를 구성하고 있는 각각의 컴포넌트들에 대해서 간단하게 살펴보도록 하자.

KENS Library

KENS 라이브러리는 KENS 호스트 프로그램에서 제공하는 system call simulation을 이용하여 KENS 호스트에 KENS socket을 만들고, 자기 자신 혹은 KENS 호스트들로 이루어진 network 상의 다른 KENS 호스트에서 실행되고 있는 KENS 응용 프로그램과 통신을 하게 해 주는 라이브러리이다.

KENS 라이브러리가 실제 socket 대신 생성하는 KENS socket은 그림 2.1. KENS와 KENS 응용 프로그램의 전체 구조에서 보듯이 실제로는 system call을 시뮬레이션 하기 위한 UDP 소켓과, KENS 응용 프로그램 데이터를 전송하고 전송받기 위한 TCP 소켓이 한 쌍이 되어 하나의 KENS socket이 된다.

KENS 라이브러리에는 표 3.1. KENS library의 API와 대응하는 표준 함수들에 나와 있는 함수들이 구현되어 있으며, 모든 함수들은 POSIX 표준 혹은 BSD socket library 함수들과 호환된다.

따라서, KENS 응용 프로그램을 작성하고 실행하기 위해서는 반드시 KENS 라이브러리와 함께 링크해야만 한다. KENS 응용 프로그램의 작성에 관련된 내용은 3장. KENS 응용 프로그램의 작성를, 각 system call 별 동작 메커니즘은 프로그래밍 가이드를 참조하기 바란다.

KENS Kernel

KENS Kernel은 KENS 호스트의 초기화와 “KENS Library”에서 들어오는 system call을 받아서 처리해 주거나, “Transport Layer”“Datalink Layer”를 차례대로 호출하여, KENS 응용 프로그램에서 보내는 데이터와 다른 KENS 호스트로부터 전달 받는 데이터를 처리하는 일을 한다.

Dispatch

KENS kernel이 하는 일 중의 가장 중요한 부분 중의 하나가 바로 dispatch이다. KENS kernel은 system call 처리 부분, datalink 처리 부분, network 처리 부분을 계속 순차적으로 호출하여 KENS 호스트가 계속해서 실행되도록 하는 역할을 한다.

System Call

KENS Kernel에서는 UDP 소켓 하나와 TCP 소켓 하나에서 데이터가 들어왔는지, 혹은 새로운 TCP 연결이 있었는지를 매 dispatch loop마다 확인하고 처리한다.

UDP 소켓은 system call의 호출과 반환(return)에 사용되며, TCP 소켓은 KENS library의 KENS socket과 데이터를 주고 받는데 사용된다.

각 system call 별 동작 메커니즘은 프로그래밍 가이드를 참조하기 바란다.

Transport Layer

KENS의 transport layer에서는 현재 TCP만을 지원하고 있다.

KENS에 기본적으로 구현되어 있는 TCP는 상위 KENS kernel의 dispatch loop에서 호출하는 인터페이스(함수)와, “System Call” 처리 부분에서 호출하는 인터페이스들, 그리고 프로토콜 스택 중 바로 하위 레이어인 “Network Layer”에서 KENS 응용 프로그램으로 데이터를 전달하기 위해 호출하는 인터페이스들과 TCP 자체의 메커니즘들을 구현하고 있다.

각 system call 별 동작 메커니즘과 구체적인 인터페이스들은 프로그래밍 가이드를 참조하기 바란다.

Network Layer

KENS의 network layer에서는 현재 IP만을 지원하고 있다.

Network layer에서는 Transport layer에서 내려오는 패킷들과 KENS 호스트를 거쳐 다른 네트워크로 전송되어야 하는 패킷들을 어떤 경로로 전송해야 하는지 결정하는 라우팅(routing)이 일어 나며, 기본적으로 정적 라우팅(static routing)이 구현되어 있다.

KENS에 기본적으로 구현되어 있는 IP는 “Transport Layer”와 마찬가지로 상위 레이어에서 패킷을 전송하기 위해 호출하는 인터페이스와, 하위 레이어인 “Datalink Layer”에서 네트워크를 통해 전송받은 패킷을 처리하기 위해 호출하는 인터페이스, 그리고 각종 라우팅 알고리즘들을 구현하기 위한 인터페이스들과, IP 패킷을 처리하기 위한 기본적은 메커니즘들을 구현하고 있다.

IP 패킷 처리와 라우팅의 동작 메커니즘들, 그리고 구체적인 인터페이스들은 프로그래밍 가이드를 참조하기 바란다.

Datalink Layer

datalink layer는 ???에서 내려온 패킷을 네트워크를 통해 전송하거나, 네트워크로부터 전송받은 패킷을 ???에 올려주는 일을 한다.

KENS의 datalink layer는 UDP를 그대로 이용하여 가장 널리 쓰이는 Ethernet을 시뮬레이션 하였다. 그림 2.1. KENS와 KENS 응용 프로그램의 전체 구조의 맨 오른쪽의 bound UDP socket들은 KENS 호스트에 설치된 VNIC(Virtual Network Interface Card)들에 해당하며, Ethernet의 address인 MAC address는 그대로 bound UDP socket의 IP 주소와 port 번호로 대응된다.

datalink layer에 관련된 자세한 사항들은 프로그래밍 가이드를 참조하기 바란다.

3장. KENS 응용 프로그램의 작성

이 장에서는 KENS의 구조에 대해서 자세하게 알아보도록 한다

KENS Library를 이용하여 프로그래밍하기

KENS는 표준 소켓 인터페이스에 대응하는 API를 제공하며, 학생들은 이 API를 이용하여 실제 네트워크 프로그램을 작성하는 것과 동일하게 KENS 응용 프로그램을 작성할 수 있다.

KENS에서 제공하는 API들은 표준 함수들의 이름 앞에 'k'를 접두사로 사용한 이름들을 가지고 있다. 아래의 표는 KENS library에서 제공하고 있는 함수들과 대응하는 표준 함수들을 나타낸 것이다.

표 3.1. KENS library의 API와 대응하는 표준 함수들

표준 API

KENS library

비고

socket

ksocket

address family에 AF_STREAM(즉, TCP)만을 지원

bind

kbind

listen

klisten

backlog의 기본 값은 5

connect

kconnect

accept

kaccept

select

kselect

read

kread

write

kwrite

close

kclose

shutdown

kshutdown

완전하지 않음

fcntl

kfcntl

보다 자세한 사항은 메뉴얼 페이지나 [UNP98] 혹은 [APUE92]를 참고하기를 바란다

작성한 응용 프로그램 컴파일하기

KENS 응용 프로그램을 컴파일 하기 위해서는 KENS library와 함께 플랫폼 고유의 네트워크 라이브러리를 함께 링크해야한다. 아래 표는 각 플랫폼 별로 함께 링크해야 할 라이브러리를 정리한 것이다.

표 3.2. 플랫폼 별 네트워크 라이브러리

플랫폼

라이브러리

Linux, cygwin 계열

없음

Solaris 계열

socket, nsl

4장. KENS 및 KENS 응용 프로그램의 실행

이 장에서는 KENS와 KENS 응용 프로그램을 실행하는데 필요한 사항들을 알아본다.

KENS의 환경 설정

하나의 KENS를 실행시키기 위해서는 다음의 환경설정 파일들이 반드시 KENS가 실행되는 디렉토리와 같은 디렉토리에 있어야만 한다.

  • KENS의 환경 설정 파일 : KENS의 전체적인 설정을 위해 필요

  • MAC 주소 목록 파일 : KENS가 시뮬레이션하는 호스트에 설치된 각각의 NIC들과 물리적으로 같은 네트워크에 연결되어 있다고 할 NIC 주소들의 목록

  • 라우팅 규칙 목록 파일 : KENS가 시뮬레이션하는 호스트의 IP 패킷을 라우팅하는 규칙을 기술한 파일. 실제 호스트의 라우팅 테이블 정보에 해당한다.

KENS의 환경 설정 파일

KENS의 환경설정 파일은 KENS의 실행에 가장 핵심이 되는 정보들을 기술하고 있다. 이 정보들에는 KENS 호스트의 이름, KENS가 시스템 콜의 인터페이스로 사용할 UDP, TCP 포트 번호, 디버깅을 위한 로깅 정보 그리고 KENS 호스트에 설치된 VNIC(Virtual Network Interface Card)들의 정보와 기본 게이트웨이에 대한 정보 등이 있다.

KENS의 환경 설정 파일은 Windows에서 사용되는 INI 파일 형식을 따르고 있다. 이 INI 파일에는 KENS 호스트의 전체적인 환경을 기술하는 KENS 섹션과, 각각의 VNIC마다 정보를 기술하는 섹션들로 나뉘어 있다.

환경설정 파일 중 KENS 섹션은 반드시 있어야하며, VNIC에 관련된 섹션은 설치된 VNIC 갯수만큼 있어야 한다. 다음은 설정 파일의 예시이다.

[KENS]
server_name=sample
udp_port=9998
tcp_port=9999
log_level=ip,tcp_layer,sock,link_layer
unreliable=false

default_route=192.168.0.1

[seth0]
address=192.168.0.1
netmask=255.255.255.0

[seth1]
address=192.168.1.1
netmask=255.255.255.0

INI 파일에서 '[', ']'로 둘러 쌓인 부분이 섹션이름이고, 섹션 다음에는 '이름' = '값'의 형식으로 파라메터들이 기술된다.

KENS 섹션

KENS 섹션에는 KENS 프로그램 자체가 실행하는데 필요한 정보들을 기술하고 있다. 실제 상황에서는 호스트 자체 에 대한 설정들이라고 보면 될 것이다.

KENS 섹션에서 기술할 수 있는 것들에 대해서 알아보자.

server_name

표 4.1. 환경 설정 : server_name

필요 유무

반드시 필요함

설명

KENS 호스트의 이름을 정의한다. 이 이름에 의해서 자동으로 로딩할 각 VNIC들의 MAC 주소 목록 파일과 라우팅 테이블 파일, 그리고 로그를 남길 경우 로그 파일의 이름이 결정된다.

udp_port & tcp_port

표 4.2. 환경 설정 : udp_port & tcp_port

필요 유무

반드시 필요함

설명

KENS에서 시스템 콜을 시뮬레이션하기 위해서 사용하는 UDP와 TCP 포트 번호를 지정한다.

log_level

표 4.3. 환경 설정 : log_level

필요 유무

생략 가능

기본 값

로그를 남기지 않음

설명

KENS에서 남길 디버깅 로그의 종류를 정의한다. 사용할 수 있는 로그의 종류는 다음과 같다.

  • all : KENS의 모든 부분에 대하여 로그를 남긴다

  • link_layer : datalink layer와 관련된 모든 부분에 대한 로그

  • datalink or link : datalink layer의 패킷 처리에 대한 로그

  • mactable or mac : MAC 주소의 처리에 관련된 부분에 대한 로그

  • kens or kernel : KENS kernel 시뮬레이션 부분의 로그

  • library or lib : System Call의 시뮬레이션 stub 부분과 메시지 처리에 관련된 부분의 로그

  • socket or sock : System Call의 시뮬레이션 처리와 관련된 모든 로그

  • ip : IP 패킷 처리에 관련된 로그

  • route : 라우팅에 관련된 로그

  • icmp : ICMP 메시지 대신에 남기는 로그

  • ip_layer : IP layer의 모든 로그

  • tcp_layer : TCP layer의 모든 로그

KENS 호스트 각각의 로그는 KENS가 실행되고 있는 현재 디렉토리에 서버이름.log라는 파일에 저장된다. KENS의 디버깅을 할 때에는 log level을 설정하여 로그 파일을 참조하면 편리하다.

unreliable

표 4.4. 환경 설정 : unreliable

필요 유무

생략 가능

기본 값

false

설명

datalink layer를 unreliable 모드로 동작시킬지 여부를 설정한다. true일 경우 datalink layer에서는 패킷의 순서를 뒤바꾸거나 임의로 드롭하는 등의 이상 동작을 임의로 수행한다. TCP의 재전송 기능을 테스트할 때 유용하게 쓰인다.

default_route

표 4.5. 환경 설정 : default_route

필요 유무

생략 가능

기본 값

없음

설명

실제 시스템에서 네트워크를 설정할 때 기본 게이트웨이에 해당하는 항목이다. 게이트웨이가 될 KENS 호스트의 가상 IP 주소를 적는다. 만약, 보낼 패킷에 대한 적절한 라우팅 경로가 없을 경우 이 항목에서 정의된 KENS 호스트로 무조건 보내게 된다.

각 NIC 별 섹션

KENS 호스트 프로그램에 설치되는 각각의 VNIC들에 대한 가상 IP 주소와 local network mask를 설정한다. 각 섹션의 이름은 seth_#(#은 VNIC 번호, seth는 simulated ethernet의 약자)여야 한다. VNIC 번호는 0부터 시작하여 1씩 증가한다.

예를 들어, KENS 호스트를 gateway로 설정할 경우 두 개의 VNIC가 설치되어 있어야 하며, 이 경우 반드시 'seth0'와 'seth1'의 두 개의 섹션에서 각 VNIC에 대한 정보를 명시해 주어야 한다.

address

표 4.6. 환경 설정 : address

필요 유무

반드시 필요

설명

인터페이스 카드에 할당된 IP 주소를 지정한다

netmask

표 4.7. 환경 설정 : netmask

필요 유무

반드시 필요

설명

인터페이스 카드가 속해있는 local network의 network mask를 지정한다.

MAC 주소 목록

KENS에서는 datalink를 UDP로 시뮬레이션하고 있다. 따라서 실제로 사용되는 Ethernet의 MAC 주소 대신에 실제 host의 IP 주소와 port번호로 NIC(Network Interface Card)의 하드웨어 주소로 사용한다.

KENS에서는 local network 상에 있는 컴퓨터들의 MAC 주소를 검색하는 ARP와 RARP를 이용하는 대신에, 각각의 NIC와 직접적으로 연결되어 있는 NIC들에 해당하는 IP 주소와 port 번호들의 목록을 별도의 파일에 저장하여 사용한다.

각 NIC 마다 할당되는 이 파일의 이름은 서버이름_seth#('#'은 interface 번호)이며, 한 줄(line)이 다음과 같은 형식을 띠고 있다.

# 가상 IP 주소<공백>실제 IP 주소:포트 번호
192.168.0.1		127.0.0.1:9000
192.168.0.2		127.0.0.1:9002

즉, 매 줄마다 현재 NIC와 물리적으로 같은 local network에 연결되어 있는 NIC들에 할당된 가상 IP 주소와, NIC를 나타내는 실제 IP 주소와 port 번호의 쌍으로 나타난다.

각각의 NIC들은 반드시 1:1로 대응되는 MAC 주소 파일을 가지고 있어야 하며, 이 파일들은 KENS가 실행되는 디렉토리와 같은 디렉토리에 위치하고 있어야 한다.

라우팅 규칙 목록

KENS는 기본적으로 정적 라우팅(static routing)만을 지원하고 있기 때문에, 라우팅 규칙들을 미리 정의해 주어야만 한다. KENS가 로딩될 때 이 라우팅 규칙들을 '서버이름.route'이라는 파일에서 읽어들이게 된다.

이 파일에서는 매 줄마다 라우팅 규칙을 포함하고 있으며, 각 라우팅 규칙은 현재 널리 쓰이고 있는 운영체제들에 포함되어 있는 route 프로그램의 인자들과 거의 흡사하다.

아래는 한 라인의 형식이다.

[host|net] xx.xx.xx.xx [netmask] xx.xx.xx.xx [gw] xx.xx.xx.xx [[dev] if]

'[',']' 안의 부분은 생략이 가능한 인자들이며, 'xx.xx.xx.xx'는 IP 주소 혹은 network mask를 나타낸다. 아래의 표에 각 인자들에 대한 설명이 나와있다.

표 4.8. 라우팅 규칙 설명

인자

생략 가능

설명

host or net

X

host 또는 net 인자는 이 라우팅 규칙이 적용될 host 혹은 network를 지정한다. host나 net이 오면 그 바로 다음에는 IP 주소 내지 network id가 지정되어야 한다.

host 143.248.119.1

net 143.248.119.0

netmask

O

만약 이 라우팅 규칙이 적용될 대상이 network일 경우 해당 network의 network mask를 지정한다. host 일 경우에는 생략이 가능하다.

netmask 255.255.255.0

gw

O

이 라우팅 규칙이 적용되었을 때 다음 hop(gateway)의 IP 주소를 지정한다.

gw 192.168.0.1

dev

O

어떤 VNIC를 통해서 라우팅할 패킷을 보낼지를 지정한다. 생략할 경우에는 기본 VNIC(seth0)를 통해서 내 보낸다.

dev seth1

예제

다음은 라우팅 규칙 파일의 예제이다

# '#'이후로는 주석
# destination   mask    gateway interface
#[host|net] xx.xx.xx.xx [netmask] xx.xx.xx.xx [gw] xx.xx.xx.xx [[dev] if]

net 127.0.0.0 netmask 255.0.0.0 gw 127.0.0.1 dev seth0
host 127.0.0.1 dev seth0
host 128.32.33.5 dev seth0
net 140.252.13.32 netmask 255.255.255.224 gw 192.168.0.1 seth0
host 140.252.13.33
host 140.252.13.34
host 140.252.13.35
host 140.252.13.65
net 224.0.0.0 netmask 255.0.0.0 gw 192.168.0.1 seth0
host 224.0.0.1

KENS의 실행

위의 설정 파일들을 모두 하나의 디렉토리에 모아 놓고, KENS를 그 디렉토리에서 다음과 같이 실행하면 된다.

$ kens KENS환경설정파일

그럼 KENS는 먼저 KENS 환경 설정 파일을 읽어들여 전체적인 초기화를 한 다음, 그 정보를 바탕으로 각각 datalink layer(MAC 주소 목록), network layer(라우팅 규칙 목록) 그리고 transport layer에서 필요한 정보들을 읽어들여 각각의 layer를 초기화하고 KENS 응용 프로그램의 실행이나, 다른 KENS 호스트로부터 전송되는 패킷을 기다리게 된다.

KENS는 초기화가 완료됨과 동시에 KENS 응용프로그램을 위하여 몇 가지 환경변수들을 '서버이름.sh', '서버이름.csh'라는 파일들에 써 넣는다. 각각 shell, c shell용이며, KENS 응용 프로그램을 실행하기 위해서 반드시 필요한 환경 변수들이 저장되어 있다.

KENS 응용 프로그램의 실행

KENS 응용 프로그램을 실행하기 위해서는 KENS가 초기화를 마치고 작성한 환경 변수들을 실행하는 쉘 상에 설정해야만 한다. 만약, bourne shell(sh) 계열을 사용한다면,

# source 서버이름.sh

c shell(csh) 계열을 사용한다면,

$ source 서버이름.csh

와 같이 하여 환경변수를 현재 쉘에 설정한 다음 KENS 응용프로그램을 일반 프로그램을 실행하듯이 실행하면 된다.

주의할 점은 모든 IP 주소와 Port 번호는 가상의 것을 사용해야만 한다는 것이다.

호스트마다 매번 다른 프로그램을 실행하기 불편하다면 다음의 쉘 스크립트를 이용하는 것도 괜찮다.

$ cat kensapp
#!/bin/sh

if [ $# -lt 2 ] ; then
    echo "usage: kensapp kenshostname application ..."
    exit 0
fi

ENV_FILE="$1.sh"

if ! test -r $ENV_FILE ; then
    echo "can't read environment variable file : $ENV_FILE"
    exit 0
fi

shift

if ! test -x $1 ; then
    echo "can't find kens application executable file : $1"
    exit 0
fi

source $ENV_FILE

exec $*

이 스크립트를 이용해서 실행하는 예를 보도록 하자. client라는 KENS 호스트에서 echocli라는 프로그램을, server라는 KENS 호스트에서 echosvr 라는 프로그램을 실행하고 싶다고 하면,

$ ./kensapp client echocli 192.168.0.2:8080
$ ./kensapp server echosvr -p 8080

즉, 다른 KENS 호스트에서 프로그램을 실행하기 위하여 매번 새로운 쉘을 띄울 필요가 없어지는 것이다.

KENS를 이용하여 복잡한 network 구축하기

KENS를 이용하여 복잡한 network를 구축하기 위해서는 MAC 주소 목록과 라우팅 규칙들을 잘 조합하기만 하면 된다.

그래피컬하게 network 구성도를 그리면 자동으로 KENS의 MAC 주소 목록 파일들과 라우팅 규칙들을 생성해 주는 프로그램을 생각해 볼 수 있으나 KENS 기본 배포본에는 포함되어 있지 않다.

이런 프로그램을 만들어 수업 시간에 다른 학생들이나 조교들이 사용할 수 있게 배포한다면 추가 점수를 받을 수 있을지도 모른다. :-)

5장. 정리

여기까지 KENS를 어떻게 실행하고, 어떻게 KENS 응용 프로그램을 작성하여 KENS와 함께 실행하는가를 알아보았다.

남은 것은 프로그래밍 가이드를 참고하여, 이 문서를 읽는 독자여러분들이 KENS에 직접 TCP나 IP 라우팅 같은 메커니즘을 구현해 보는 것 뿐이다. :-)

KENS와 함께 즐거운 네트워크 프로그래밍의 세계로 떠나보도록 하자.

서지사항

[APUE92] StevensW. Richard. 0-201-56317-7. Addison Wesley. Advanced Programming in the UNIX® Environment.

[UNP98] StevensW. Richard. 0-13-649328-9. Prentice Hall. UNIX NETWORK PROGRAMMING. Networking APIs: Sockets and XTI.

부록 A. KENS의 테스트에 사용된 Network 구성과 환경설정 파일들

KENS를 이용하여 구성된 Network

KENS의 디버깅을 위하여 구성된 network는 아래 그림과 같다.

그림 A.1. KENS의 테스트를 위해 구성된 네트워크

여기에는 KENS의 테스트를 위해 구성된 네트워크를 보여주는 기름이 있다

KENS와 KENS 응용 프로그램들의 최종 테스트를 위해서 구성된 네트워크의 구성도이다. 박스가 각각의 KENS 호스트를 나타내며, 박스 안의 문자열이 각 KENS 호스트의 이름을 나타낸다. 좀 더 큰 그림을 보기를 원하면 여기를 클릭하기 바란다.

KENS 호스트 cli의 환경 설정

cli.conf

[KENS]
server_name=cli
udp_port=9000
tcp_port=9001
log_level=ip_layer,tcp_layer,sock,link_layer

default_route=192.168.0.1

[seth0]
address=192.168.0.2
netmask=255.255.255.0

cli_seth0

192.168.0.1     127.0.0.1:9052
192.168.0.2     127.0.0.1:9002

KENS 호스트 svr의 환경 설정

svr.conf

[KENS]
server_name=svr
udp_port=9150
tcp_port=9151
log_level=ip_layer,tcp_layer,sock,link_layer

default_route=10.0.0.1

[seth0]
address=10.0.0.2
netmask=255.255.255.0

svr_seth0

10.0.0.1    127.0.0.1:9103
10.0.0.2    127.0.0.1:9152

KENS 호스트 gw1의 환경 설정

gw1.conf

[KENS]
server_name=gw1
udp_port=9050
tcp_port=9051
log_level=ip_layer,tcp_layer,sock,link_layer

default_route=10.10.0.2

[seth0]
address=192.168.0.1
netmask=255.255.255.0

[seth1]
address=10.10.0.1
netmask=255.255.255.0

gw1_seth0

192.168.0.1 127.0.0.1:9052
192.168.0.2 127.0.0.1:9002

gw1_seth1

10.10.0.1   127.0.0.1:9053
10.10.0.2   127.0.0.1:9102

gw1.route

net 10.0.0.0 netmask 255.255.255.0 gw 10.10.0.2 dev seth1

KENS 호스트 gw2의 환경 설정

gw2.conf

[KENS]
server_name=gw2
udp_port=9100
tcp_port=9101
log_level=ip_layer,tcp_layer,sock,link_layer

default_route=10.10.0.1

[seth0]
address=10.10.0.2
netmask=255.255.255.0

[seth1]
address=10.0.0.1
netmask=255.255.255.0

gw2_seth0

10.10.0.1   127.0.0.1:9053
10.10.0.2   127.0.0.1:9102

gw2_seth1

10.0.0.1    127.0.0.1:9103
10.0.0.2    127.0.0.1:9152

gw2.route

net 192.168.0.0 netmask 255.255.255.0 gw 10.10.0.1 dev seth0