달력

2

« 2025/2 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
2008. 11. 13. 21:28

4-2. DHCP서버의 구현 Windows Networking2008. 11. 13. 21:28

 

DHCP서비스를 구현하기 전에 가장 먼저 할 일은 네트워크에서 IP Address관리방법에 대한 결정이 있어야 한다. 클래스 전체를 하나의 네트워크에서 쓸 것인지, 서브넷팅을 통해서 사용을 할 것인지에 대한 결정이 되었다면 이번에는 각 네트워크마다 사용할 호스트ID의 범위중에서 어떠한 IP를 라우터에게 할당을 하고, 어떠한 IP를 서버들에게 할당을 할 것이고, 어떠한 IP DHCP를 통해서 클라이언트에게 할당한 것인지 등을 결정하는 과정을 의미한다. 간단하게 A회사의 IP Address 관리테이블을 만들어 보았다.

 

<그림4-4. A회사 IP Address 관리 테이블>

 

이제 클라이언트를 위한 DHCP서비스를 구현해 보도록 하겠다. 네트워크에는 DHCP서버가 있어야 하고, 당연히 클라이언트도 구성이 되어야 한다. DHCP서버는 네트워킹 서비스이므로 서버제품군에서 구현될 수 있다. 먼저 DHCP서버를 설정해 보겠다.

 

Windows Server 2003이 설치될 때 DHCP, DNS 등의 네트워크 서비스는 기본적으로 설치되지 않는다. 구현을 하고자 할 때 추가로 설치를 해야 하는데 제어판의 프로그램 추가/제거를 통해서 설치할 수 있다.

 

4-2-1. DHCP서비스 설치

 


<그림4-5. DHCP서비스 설치>

 

제어판의 프로그램추가/제거를 열고 "Windows구성요소 추가"를 선택하면 잠시후 "Windows구성요소"창이 열린다리스트를 찾아보면 "네트워킹 서비스"가 있는데 이것은 DHCP, DNS, WINS 등의 네트워킹 서비스들 전체의 묶음이다. -네트워킹 서비스 앞의 체크박스를 클릭하면 전체 네트워킹 서비스들이 설치가 되므로 체크박스 대신에 글자 부분을 클릭한다.- <자세히>버튼을 누르면 리스트에서 "DHCP(동적 호스트 구성 프로토콜)"를 찾을 수 있다. 체크하고 <확인>을 누르면 설치를 시작한다. Windows서버의 원본CD-Rom이 요구된다. 원본CD중에서도 i386 폴더가 셋업을 위한 폴더이다. 원본CD위치를 묻는 메시지가 뜬다면 원본CD를 넣고 i386폴더를 지정해 주면 셋업이 시작된다.

 

잠시후 설치가 끝났다는 메시지가 나오면 DHCP서비스가 추가된 것이다. 관리도구에 "DHCP" 라는 관리메뉴가 추가된 것을 볼 수 있는데, 클릭하면 <그림4-6>과 같은 그림을 만날 수 있다.

<그림4-6. DHCP 관리콘솔>

 

그림을 보면 친절하게도 오른쪽 패널에 설치방법에 대해서 설명을 해 주고 있다. 그리고 왼쪽패널의 서버이름 부분을 보면 아래쪽으로 향한 빨간색 화살표를 확인할 수 있다. DHCP서비스가 멈춰져 있다는 것을 말한다.

 

4-2-2. DHCP권한부여 작업 - (Active Directory 도메인 환경에서만 적용됨)

 

<그림4-6>에서 오른쪽 패널의 설명을 읽어보면 "DHCP서버가 IP 주소를 발급하기 전에 범위를 만들고 DHCP서버에 권한을 부여해야 합니다"라고 이야기한다. 범위라 하면 클라이언트들에게 발급할 IP Address를 구성하라는 뜻인 것 같은데, 권한을 부여하라구? 이렇듯 Windows Server 2003 DHCP서비스는 설치만 한다고 동작하는 것이 아니다. DHCP서버가 동작할 수 있도록 권한이 부여가 되어야만 DHCP서버는 동작을 하게 된다.

이것은 아무나 할 수 있는 작업은 아니다. 도메인에서 이러한 작업을 할 수 있는 사용자는 기본적으로 "관리자"로 제한된다. 정확히 말하면 도메인의 "Enterprise Admins"라는 그룹의 멤버가 이러한 작업을 할 수 있다.

이것은 어디까지나 회사의 네트워크 환경이 Active Directory도메인으로 구성되어 있을 때의 상황이다. 만일 회사가 도메인 모델을 채택하지 않고 워크그룹 환경으로 구성되어 독립된 서버에서 DHCP서비스를 구현하고 있다면 이 과정은 건너 뛰고 바로 다음 작업인 DHCP서버 구성으로 넘어간다.

 


 <그림4-7. DHCP서버 권한부여>

 

DHCP서버에 권한을 부여하기 위해서는 DHCP관리콘솔을 이용한다. 관리콘솔에서 서버이름을 클릭하고 마우스 오른쪽 버튼을 누른후 "권한부여"를 선택하면 간단히 권한이 부여된다. 권한이 부여된 DHCP서버의 리스트를 확인하거나, 여러대의 DHCP서버를 관리하고자 한다면 다른 방법도 있다. 관리콘솔에서 DHCP항목을 클릭하고 마우스 오른쪽 버튼을 누르면 "권한이 부여된 서버관리"라는 메뉴를 볼 수가 있다<그림4-8>

 


 <그림4-8. 권한이 부여된 DHCP서버 관리메뉴>

 

<그림4-8>의 메뉴를 클릭하면 Active Directory에서 권한이 부여된 DHCP서버의 리스트를 볼 수가 있고 다른 DHCP서버에게 권한을 부여하거나 리스트에서 DHCP서버를 제거하는 것도 가능하다.



 <그림4-9.권한이 부여된 DHCP서버관리>

 

DHCP서버에게 권한을 부여하고 나면 관리콘솔의 왼쪽패널의 서버이름 옆에 위로 향한 녹색 화살표를 확인할 수 있다. DHCP서비스가 시작된 것이고, 오른쪽 패널의 설명도 처음 DHCP서비스를 추가했을 때와는 다른 설명을 보여주고 있다. <그림4-10>



 <그림4-10. DHCP서비스가 시작된 DHCP관리콘솔>

 

4-2-3. DHCP서버 구성

 

DHCP서비스가 시작되면 DHCP서버는 브로드캐스트를 통해서 DHCP Discover 메시지를 날리는 클라이언트에게 IP Address를 발급해 주어야 하는데 이렇게 하기 위해서는 당연히 DHCP서버는 클라이언트를 위한 IP Address Pool을 가지고 있어야 한다. IP Address 발급을 위한 범위를 만들고 클라이언트를 위한 추가설정을 해 주어야 하는 것이다.

 

예제에서 DHCP서비스를 하는 blueapple이라는 서버는 192.168.5.0 네트워크를 위해 IP를 발급하고자 한다.



<그림4-11. 새 범위 추가 메뉴>

 

서버이름을 클릭하고 마우스 오른쪽 버튼을 눌러서 "새 범위"를 추가한다

 


 <그림4-12.새 범위 추가-범위이름>

 

범위이름을 입력해야 하는데, 이것은 실제 서비스와는 아무런 상관이 없다. 관리자가 알아보기 쉽게 이름과 설명을 주면 된다. 여러개의 네트워크를 DHCP서버가 지원해야 할 때 각각의 범위를 구별하기 쉽게 이름을 부여한다. 예제에서는 '2층 네트워크'라고 입력했다



 <그림4-13. 새 범위 추가-IP주소 범위>

 

DHCP클라이언트에게 발급할 IP Address의 범위와 적합한 서브넷마스크를 입력해야 한다. 하나의 DHCP서버는 하나의 네트워크당 하나의 IP범위 관리영역만 가질 수가 있다는 것을 염두에 둔다. 만일 192.168.5.11~100까지가 DHCP클라이언트용 IP Address라고 가정을 했을 때, 51~60까지가 서버들에게 고정IP로 발급한 부분이라서 제외해야 한다고 하더라도 192.168.5.11~50까지의 하나의 범위를 만들고 추가로 192.168.5.61~100까지의 영역을 만들 수는 없다. 그럴 경우에는 일단 전체범위를 잡은 다음에 고정IP로 사용할 IP가 범위에 포함되어 있다면 다음 과정에서 그 특정범위만큼을 제외하는 방법을 사용해야



<그림4-14. 새 범위 추가- 제외주소 추가>

 

필요하다면, IP범위중에서 제외할 특정 IP IP범위를 추가한다. DHCP서버는 단순한다. 클라이언트가 IP를 요청했을 때 자신의 IP범위중에서 사용가능한 IP를 골라서 망설이지 않고 IP 발급을 한다. 만일 Web서버에게 192.168.5.20 IP Address가 셋팅되어 있다고 가정을 했을 때, DHCP서버의 설정에192.168.5.20 IP가 사용가능한 상태로 되어 있다면 DHCP클라이언트는 192.168.5.20 IP를 발급받게 된다.

 

이 경우 네트워크에서 이미 사용되고 있는 IP를 발급받은 해당 클라이언트는 정상적으로 TCP/IP를 사용할 수가 없게 된다. 관리자가 해결해 주면 되겠지만 간혹의 경우에는 먼저 이 IP Address가 설정된 Web 서버가 제대로 동작하지 못하는 경우가 발생할 수도 있으므로 IP Address의 충돌이 생길 소지가 있는 부분에는 특별히 신경을 써야 한다.

 

Windows2000 이상의 서버에서 DHCP서비스를 구현한다면 서버의 고급옵션에서 충돌감지시도횟수를 할당하여 DHCP클라이언트에게 IP를 할당하기 전에 먼저 IP사용유무를 테스트하게 할 수도 있다. 이번장의 후반부에서 다시 한번 언급된다.

 

<그림4-14>에서 보듯이 제외할 주소를 추가하는 방법은 두가지이다. IP Address를 하나씩 추가할 수도 있고, 범위를 지정해서 추가하는 방법이 있다.



<그림4-15. 새 범위 추가- 임대기간 결정>

 

클라이언트에게 IP를 발급할 때 결정해 줄 임대기간을 지정한다. 기본값은 8일이다. 임대기간이 길어질수록 IP Address 갱신주기가 길어질 것이기 때문에 IP Address가 충분히 여유가 있다면 기간을 더 길게 설정하는 것이 좋다. 네트워크에서 DHCP트래픽의 비중은 극히 일부분이지만 DHCP 관련된 네트워크 트래픽을 최소화 할 수 있는 방법이 된다. 반대의 상황이라면? 당연히 기간을 줄여야 할 것이다.

 


 <그림4-16. 새 범위 추가 - DHCP옵션구성>

 

지금까지 위에서는 클라이언트에게 발급할 IP Address Subnet Mask를 구성하였는데, 클라이언트들의 TCP/IP설정에는 Default Gateway, DNS, WINS등의 추가 설정이 필요하다. DHCP서버는 이러한 사항들을 'DHCP옵션'으로 처리해 주고 있다. DHCP옵션을 구성하는 그림이 나오는데 지금 구성할 수도 있고, 나중에 추가로 작업하는 것도 가능하다. "아니오"를 통해서 마법사를 마쳐도 기본적인 DHCP구성은 끝난 것이다. 계속 구성을 해 보도록 하겠다



<그림4-17. 새 범위 추가 - DHCP옵션구성 - Router>

 

클라이언트에게 할당할 Router, Default Gateway로 설정될 IP Address를 입력하고 <추가>버튼을 누릅니다.



<그림4-18. 새 범위 추가 - DHCP옵션구성 - DNS서버>

 

DNS를 구성하는 과정인데 <그림4-18>의 예제처럼 IP주소만 입력해 주어도 동작하는 데는 문제가 없다. 그렇지만 도메인 환경에서의 작업을 고려한다면 부모도메인의 항목에도 도메인 이름을 입력할 필요가 있다. 예를 들어서 사용자가 속한 도메인이 secure.pe.kr 이라고 하면 '부모도메인'항목에 'secure.pe.kr'이라고 입력을 한다. 그렇게 해 주면 사용자가 hostA.secure.pe.kr 이라는 이름의 호스트를 찾고자 할 때 hostA 라고만 입력을 해도 실제 DNS에 쿼리가 날아갈 때는 hostA.secure.pe.kr 라는 이름으로 요청을 한다.

 

또한 DNS서버의 IP를 하나만 주는 것보다는 2개를 할당하여 하나의 DNS서버가 문제가 있을 경우를 대비하는 것이 좋다. DHCP클라이언트는 DNS서버의 IP 2개를 가지게 되며 첫 번째 DNS서버가 문제가 있을시 두 번째 DNS서버를 통해서 호스트이름을 IP Address로 변환하는 작업을 처리할 수 있다. 회사에 DNS서버가 하나만 구현이 되어 있다면 추가로 ISP DNS, 외부의 DNS서버를 두 번째 DNS서버로 셋팅하는 것도 하나의 방법이다. DNS는 아주 중요한 서비스중의 하나이다. DNS에 대해서는 5장에서 자세히 다루도록 하겠다.

 


<그림4-19. 새 범위 추가 - DHCP옵션구성 - WINS서버>

 

WINS서버의 IP를 입력한다. 역시 하나보다는 두 개를 사용하는 것이 좋다. 물론 네트워크에 WINS서버가 적어도 2개 이상 있다는 전제가 따라야 한다. WINS서버는 "NetBIOS이름풀이"를 위해 필요한 서버이다. 6장에서 자세히 다룬다.



<그림4-20. 새 범위 추가 - DHCP옵션구성 - 범위 활성화>

 

이제 옵션구성도 끝났다. 192.168.5.0 네트워크의 IP범위를 활성화 할 필요가 있다. 활성화 하기 전까지는 DHCP서버는 클라이언트의 요청에 응답하지 않다. 만일 추가로 구성을 더 해야 할 필요가 있다면 "아니오. 나중에 활성화하겠다."를 선택해서 DHCP서버가 IP를 발급하지 못하도록 한다. 나중에 DHCP관리콘솔을 통해서 얼마든지 활성화 작업은 가능하다.

 


<그림4-21. 새 범위 추가 - 새 범위 마법사 완료>

 DHCP서버에 '새 범위 마법사'를 완료하는 그림이다.



<그림4-22. DHCP서버에 범위가 추가된 그림>


<
그림4-22>에서는 blueapple.secure.pe.kr 이라는 이름의 DHCP서버에 192.168.5.0 네트워크의 IP범위가 설정된 그림을 보여준다. 왼쪽패널의 '주소풀'을 클릭하면 오른쪽으로 IP주소 범위를 보여주는 그림을 볼 수 있다. 그림을 보면 192.168.5.11부터 192.168.5.100 까지가 범위로 되어 있고, 두 번째 리스트에는 192.168.5.20이 제외된 IP주소임을 보여준다. 결국 이 설정에서는 192.168.5.11~192.168.5.19, 192.168.5.21~192.168.5.100까지 총 89개의 IP가 사용가능하다는 것을 알 수 있다



<그림4-23. DHCP 범위 옵션 확인>

 

DHCP관리콘솔의 192.168.5.0 범위의 '범위옵션'을 눌러보면 오른쪽 패널에 위에서 설정한 몇가지 DHCP옵션이 나오는 것을 확인할 수 있다. 이것은 마이크로소프트의 네트워크를 구축할 때 항상 따라다니는 기본 DHCP옵션들이다.

 

* DHCP서버 구성시 기본적인 옵션

003  라우터

006  DNS서버

044  WINS/NBNS서버

046  WINS/NBT노드유형

 

각 옵션값들의 설명은 각각의 장에서 따로 다루도록 한다.

 

이제 DHCP서버의 구성은 마쳤다. 다음엔 DHCP클라이언트의 설정을 구성해야 할 차례이다. 그래야 이 DHCP서버로부터 TCP/IP 구성을 받아갈 수 있다.

:
Posted by 새벽예찬
2008. 11. 13. 21:18

4-1. DHCP의 이해 Windows Networking2008. 11. 13. 21:18


당신은 회사의 시스템 관리자이다. 사용자들이 네트워크 활동을 할 수 있도록 하기 위해서는 네트워크의 모든 호스트에게 IP Address를 할당하는 작업이 필요하다. 처음 한번만 잘 해주면 된다는 생각에 일일이 수작업으로 PC마다 IP Address를 잘 설정해 주었지만 심심치 않게 새로운 시스템도 늘어나고, 몇몇 사용자들의 호기심(?) 때문에 툭하면 IP Address로 인한 네트워크 장애가 발생하고 있다. 한 두 대도 아니고 수 많은 시스템을 관리해야 하는 관리자로서는 이러한 작업이 부담이 될 수 밖에 없다.

 

이러한 IP Address 관리작업을 자동화하면 해결된다. 바로 DHCP (Dynamic Host Configuration Protocol)가 그 해답이다.

 

마이크로소프트는 서버OS제품군에서 DHCP서버 서비스를 지원한다. 이때 DHCP서버로 셋팅된 컴퓨터는 클라이언트들에게 할당할 IP Address Pool을 유지하고 있으면서 DHCP프로토콜을 이용해서 IP Address발급을 요청하는 클라이언트에게 IP Address를 할당한다.

 

DHCP서비스를 DVD대여점의 프로세스와 유사하다. DVD 대여점이 DVD타이틀을 대여한다면 DHCP서버는 IP Address를 대여하는 역할을 한다. 완전히 소유권이 넘어간 것이 아니라 임대의 형식을 이용하는 만큼 당연히 기간이 만료되기 전에 반납을 해야 하며, 계속 임대를 원한다면 갱신요청을 보내서 임대기간을 연장해야 한다. 아래의 <그림4-1>과 같은 환경을 가정해 보자.

 

 
< 그림4-1. DHCP 서버와 클라이언트 환경>

 

<그림4-1>에서 볼 수 있듯이 하나의 네트워크가 있고, 그 네트워크에는 DHCP서버, DHCP클라이언트, Non-DHCP클라이언트가 있을 수 있다. Non-DHCP클라이언트는 DHCP서버로부터 IP를 할당받지 않고 고정IP를 설정한 호스트를 의미한다. DHCP클라이언트는 IP Address가 변경될 수 있는(유동의) 소지가 있는 호스트이므로, IP가 변경됐을 때 네트워크의 원활한 소통에 문제가 있을 수 있는 서버역할을 하는 컴퓨터들의 경우는 고정 IP를 할당해야 한다. 예를 들면 웹서버, DNS서버, 메일서버, 도메인컨트롤러 등 서버들의 경우이다.

 

DHCP클라이언트는 시스템이 시작됨과 동시에 DHCP서버를 찾는 메시지를 네트워크에 발송하여 IP Address임대를 요청하게 되며, DHCP서버는 이러한 클라이언트의 요청에 응답하여 자신의 DHCP Database에서 IP Address를 임대한다. 그 과정을 <그림4-2>와 같이 정리하였다.



<그림4-2.DHCP Process>

 

위의 그림을 보면 4가지 단계로 나뉘어 있는 것을 알 수가 있는데 자세한 과정은 다음과 같다.

 

(1) Discover : DHCP클라이언트는 부팅이 시작되는 동안에는 IP Address를 가지고 있지 않다. 부팅이 되고 네트워크가 시작되면 먼저 IP Address를 셋팅하여 TCP/IP를 초기화하려는 시도를 한다. 그 방법으로써 DHCP서버를 찾는 요청을 만들어서 패킷을 브로드캐스트한다. 이것이 "Discover"과정이다

 

(2) Offer : Discover 메시지를 받은 DHCP서버는 사용가능한 IP Address 하나를 담은 DHCP패킷을 만들고, 역시 네트워크에 브로드캐스트를 이용해서 전파한다. 만일 한 네트워크에 여러대의 DHCP서버가 있었다면 서버마다 같은 작업을 한다. 이 과정이 "Offer"이다.

 

(3) Request : DHCP서버로부터 IP Address를 받은 DHCP클라이언트가 그 즉시 이 IP Address를 사용할 수 있는 것은 아니다. DHCP클라이언트는 서버로부터 할당받은 IP Address와 이 IP Address를 임대해준 서버의 IP를 담은 패킷을 만들어서 네트워크에 다시 브로드캐스트를 보낸다. DHCP서버가 여러대 있어서 서버마다 클라이언트에게 각기 다른 IP Address를 발송할 수 있는 상황이 있기에 이러한 작업이 진행되는 것이다. 이 과정이 할당받은 IP를 사용하겠다는 요청인 "Request"이다.

 

(4) Ack : DHCP클라이언트의 Request브로드캐스트를 받은 DHCP서버는 둘중의 한가지 작업을 할 수 있다. 자신이 보낸 IP Address가 채택되지 않았다면 DHCP서버는 다시 IP Database에 유지하고, 자신이 보낸 IP가 채택되었다면 IP임대기간, DNS, Default Gateway, WINS등의 DHCP옵션값을 담은 "확인(Acknowledgment) "패킷을 만들어서 최종적으로 브로드캐스트로 발송한다.

 

이것을 마지막으로 클라이언트는 TCP/IP를 초기화하고, 이때부터는 IP Address를 이용한 Unicast 통신이 가능해진다. 복잡해 보일 수 있지만 이 DHCP Broadcast가 네트워크에서 차지하는 것은 극히 일부분일 뿐이다. 중요한 것은 이 네가지 과정이 모두 브로드캐스트 통신이라는 것이다. 그것은 DHCP 클라이언트로 설정된 호스트가 DHCP서버로부터 IP Address를 얻기 전까지는 IP Address가 없다는 것에서부터 기인된다. 자신이 IP Address가 셋팅되지 않은 상태이니 DHCP서버의 특정한 IP를 향해 메시지를 날리는 것은 불가능할 수밖에 없다.

 

 DHCP Process를 네트워크모니터를 이용해서 캡처하였다.

 

<그림4-3.DHCP Process 캡처 그림>

 

그렇다면 회사의 네트워크가 브로드캐스트 도메인으로 나뉜 상황, 즉 두 개 이상의 네트워크로 세그먼트된 상황에서의 DHCP는 추가로 고려해야 할 사항이 발생한다. 두 개의 네트워크의 모든 호스트들이 DHCP클라이언트로 설정이 되었을 때 한쪽 네트워크에만 DHCP서버가 있다면 DHCP서버가 없는 쪽 네트워크의 DHCP클라이언트의 요청은 전달이 될 수 없다는 것을 의미한다. DHCP서버가 있는 네트워크까지 DHCP클라이언트의 요청이 넘어가야 할 것인데 이 요청이 브로드캐스트를 이용하므로 네트워크의 가운데에 있는 라우터가 이 브로드캐스트를 넘겨주지 않기 때문이다.

 

뒤에서 설명하겠지만 이러한 경우라도 역시 얼마든지 DHCP는 구현이 가능한다. 결론부터 말하자면 IP Address를 관리하는데 DHCP서비스를 이용하자는 것이다. 많은 관리자들이 DHCP의 편리성을 알면서도 사용하지 않고 있다. 물론 이유는 있다. 특정 사용자가 임의로 고정IP를 사용함으로써 IP충돌이 생길 수 있다는데 그 이유가 있고, 또 하나는 특정 사용자가 임의로 셋팅한 DHCP Server 때문에 정상적인 DHCP서버가 제대로 서비스를 하지 못하다는 것을 들 수가 있다. 그러한 것은 또다른 측면의 정책을 통해서 해결할 수 있다. 이를 테면 사용자가 임의로 IP주소를 바꿀 수 없도록 제어판의 네트워크 설정에 대한 접근을 제한하는 것도 한가지 방안이 될 수 있다.

 

또한 Active Directory의 인증을 얻은 DHCP서버만 동작하도록 되어 있는가 하면, DHCP Client DNS에 자동적으로 등록하는 등 Windows NT 4.0 DHCP 서버에 비해서 Windows Server 2003 DHCP서비스는 개선된 기능을 제공하고 있다.

:
Posted by 새벽예찬
2008. 11. 12. 13:03

3-4. Certificate Authority(인증기관) Windows Networking2008. 11. 12. 13:03


3-4-1.인증기관의 필요성

 

공용키 암호화가 어떻게 동작하는지 위에서 설명했다. 앨리스가 보내는 데이터를 암호화하기 위해서는 먼저 밥의 공용키를 얻어야 한다고 했는데, 이때 앨리스는 밥으로부터 공용키를 얻고 나서 한가지 의문이 생긴다. 자신이 받은 공용키가 진짜 밥의 공용키일까? 밥을 가장한 이브의 공용키는 아닐까?” 하는 의문이 들 것이다. 실제 환경에 적용시켜 보자. 여기서 밥은 웹서버에 해당하고, 앨리스는 웹브라우저에 해당한다. 당신은 인터넷 쇼핑몰을 운영하는 웹서버에 접속한 다음 마음에 드는 물건을 장바구니에 담았다. 마지막으로 구매를 결정하고 [결제하기]버튼을 클릭한 후 신용카드 번호, 유효기간 등의 개인정보를 웹서버에게 제공하려고 한다. 이때 안전하게 데이터를 보내기 위해 웹서버의 공용키를 웹서버로부터 받았다. 당신은 이 공용키를 이용해서 웹서버로 전송했지만 알고보니 이 공용키를 제공했던 것은 악의의 제3자였고, 당신의 중요한 개인정보는 외부로 유출이 되게 되었다.

 

이것을 해결하기 위해서는 당신이 사용하는 웹브라우저는 웹서버로부터 공용키를 얻게 되면 이것이 진짜 거래의 상대방인 웹서버가 발행한 공용키인지 확인해야 할 필요가 있다. 어떻게 확인할 것인가?

 

이것은 전자상거래가 오프라인상의 실제상거래에서도 마찬가지이다. 가게에서 물건을 하고 신용카드로 대금을 지불한다고 가정하면 가게에서는 고객을 믿고 물건을 내 주지는 않는다. 3의 기관인 신용카드 회사(은행)를 믿고 물건을 내 주게 된다. 이것처럼 디지털 세계에서도 거래의 양자간의 각종 불신요소들을 해결하기 위하여 제3의 기관의 필요성이 대두된다.

 

인증기관(Certificate Authority, CA)은 그러한 필요성에서 의미를 찾을 수 있다. 인증기관은 서버의 신원을 증명해 준다. 때로는 클라이언트의 신원을 증명해 주기도 한다. 서버나 클라이언트가 디지털 세계에서 하고자 하는 작업에 신뢰를 부여하기 위한 인증서를 발행하는 작업, 이것이 인증기관의 주된 업무라고 할 수 있다. <그림3-5>를 통해서 인증기관의 역할을 알아보도록 하자.



<그림3-5. 인증기관(CA)의 역할>

 

그림의 예제는 웹서버와 사용자와의 통신을 그림으로 나타낸 것이다. 안전한 거래를 위해서 먼저 웹서버는 한 쌍의 공용키와 개인키를 생성한다(). 개인키를 자신의 하드디스크에 안전하게 저장을 한 다음 공용키를 웹서버에 게시를 한다. 사용자들이 웹서버로 보내는 데이터를 웹서버의 공용키를 이용해서 암호화해서 보낼 수 있도록 하기 위한 조치이다. 하지만 사용자가 웹서버의 공용키를 신뢰할 수 없다는 것이 문제이다.

 

이에 웹서버는 웹서버에서 사용할 한 쌍의 키를 생성한 다음 공용키를 인증받기 위한 과정을 거친다. 자신의 공용키와 서버의 정보등을 첨부해서 CA에게 인증서 발급요청을 넘긴다(). CA는 인증서 발급요청 정보를 잘 살펴보고 하자가 없다면 인증서를 발행하게 된다. 이 인증서에는 웹서버가 제시했던 공용키, 웹서버의 정보, 인증서의 주체, 마지막으로 CA의 전자서명이 들어있다. 결국 웹서버의 공용키를 제3자에 해당하는 CA가 인증을 해 주었다는 뜻이다().

 

이제 웹서버는 공용키만을 게시하는 것 대신에 CA로부터 받은 인증서(Certificate)’를 게시하게 되고, 사용자가 웹서버로 중요한 데이터를 보내기 전에 웹서버로부터 인증서를 얻는다(). (이 인증서에는 웹서버의 공용키가 저장되어 있음을 기억하라) 인증서를 받은 사용자는 인증서를 발행한 인증기관(CA)가 믿을만한 인증기관인지, 인증서의 날짜는 유효한지, 인증서의 주체와 현재 접근하는 사이트의 주소는 일치하는 지 등의 내용을 확인한다().

 

모든 확인이 끝났으면 이제 인증서안에 있는 공용키를 이용해서 자신이 보내는 데이터를 암호화할 수 있다. 믿고 거래할 수 있게 된 것이다. 이때의 인증서의 역할은 서버의 신원증명에 해당하는 사항이다.

 

반대로 생각할 수 있는 인증서의 용도는 인터넷 뱅킹에서 찾아볼 수 있다. 인터넷 뱅킹을 사용하기 위해서 우리는 먼저 은행을 직접 방문하여 인터넷 뱅킹 사용 신청서를 제출하고 사용자 계정을 발급받는다. 그것으로 끝나는 것이 아니라 자신의 컴퓨터에서 인터넷 뱅킹을 하기 위해서는 먼저 은행의 서버에 연결한 다음 인증서를 발급받아야 하는데 이때의 인증서는 클라이언트의 신원을 증명하기 위한 인증서에 해당한다.  

 

 

 

3-4-2.내부CA와 외부CA

 

인증기관을 크게 두가지로 구분해 볼 수 있다. 내부CA와 외부CA로 나누어 보겠다. 여기서 내부CA는 회사에서 임의로 설치한 내부적인 사용목적의 CA가 되겠고, 외부CA는 외부의 다른 서버 혹은 클라이언트와의 통신을 위해 사용할 수 있는 상업용CA라고 할 수 있다. 상업용CA중 대표적인 CA를 들라고 하면 ‘Verisign(베리사인)’을 들 수 있다. 관련분야에서 한마디로 잘 나가는 회사이다. 관심있게 보면 인터넷 쇼핑몰 웹서버의 상당수가 베리사인의 인증서를 사용하는 것을 알 수 있다.

 

웹서버를 운영하는데 내부CA로부터 인증서를 받을 수도 있고, 외부CA로부터 인증서를 받을 수 있다. 차이가 있다면 금전적인 부분을 먼저 들 수 있는데 외부CA로부터 웹서버 인증서를 하나 받으려면 보통 1년에 100만원 이상의 비용을 지불해야 한다. 상당수의 인터넷 쇼핑몰이 영세성을 면하지 못하고 있는 현실을 고려할 때 거리감을 느끼게 만드는 금액이다. 하지만 그러한 상업용 웹사이트의 경우 필요성을 찾을 수 있게 되는데, 그림을 통해서 접근을 해 보자.



<그림3-6. 내부CA의 인증서를 사용한 웹서버>

 

<그림3-6>의 화면은 내부CA로부터 인증서를 받은 웹서버로 https://ssl.secure.pe.kr 를 통해서 접근했을 때 클라이언트의 화면에서 팝업되는 경고메시지이다. 3가지 항목중에서 첫번째 항목에는 노란색 느낌표가 들어있는 세모상자의 아이콘을 볼 수 있다. 메시지를 읽어보면 신뢰 여부를 결정한 적이 없는 회사에서 발급한 보안 인증서입니다. 인증 기관의 신뢰 여부를 결정하려면 인증서를 확인하십시오.’라고 되어 있다. 당신이 관리하는 웹서버가 클라이언트에게 위와 같은 메시지를 주고 있다고 생각을 해 보면 어떠한가? 한글번역된 신뢰여부를 결정한 적이 없다라는 경고메시지도 치명적이라는 생각이 들게 만드는데, 이러한 메시지를 받은 사용자들이 선뜻 자신의 신용카드 정보등을 제공하고 싶어질까? 이 질문에 대해서는 중요한 정보를 제공하고 싶지는 않지만 그래도 거래는 이루어질 것이다.’라고 개인적으로 생각한다. 그만큼 사용자들이 시스템이 내 보내는 오류, 경고 메시지에 둔감하기 때문에 가능한 일일 것이다. 실제로 국내에서 몇백만명 이상의 회원을 확보한 대규모 웹사이트들도 여전히 상당수의 사이트에서는 이러한 경고메시지를 발생시키는 웹사이트를 찾아 볼 수 있는 것이 현실이다.

 

언제까지 그렇게 사용자들이 무관심할 수 있을까? 라는 생각을 해 보면 그 시점까지가 내부CA를 이용해서 인증서를 발급받을 수 있는 시기라고 생각된다.

 

[인증서 보기]버튼을 눌러서 인증서를 확인하면 <그림3-7>과 같다.



<그림3-7. 인증기관(CA)의 역할>

 

그림에서 보면 발급대상이 ssl.secure.pe.kr 이다. 클라이언트가 접근할 때 https://ssl.secure.pe.kr 였으니 발급대상과 사이트 이름은 일치했다. 유효기간도 경과되지 않았으니 문제가 없다. <그림3-6>에서는 이 2가지 항목에 대해서는 녹색 체크 표시 아이콘을 보여준다. 하지만 인증서를 발행한 기관에 대한 신뢰성이 문제가 되는데 이것은 클라이언트가 신뢰하는 인증기관의 목록에서 웹서버의 인증서를 발급한 인증기관을 찾지 못했기 때문에 생기는 결과이다. 클라이언트 컴퓨터에서 인터넷 익스플로러 à도구à인터넷 옵션à내용탭à인증서순서로 접근해 보면 신뢰할 수 있는 인증기관의 목록이 이미 정의되어 있는 것을 알 수 있다. 여기에서 웹서버가 현재 사용하는 인증서를 발급해 준 인증기관의 이름을 찾지 못했다는 것이 경고메시지의 에러표시가 뜻하는 내용이다.

 


<그림3-8. 신뢰된 루트 인증 기관 목록>

 

내부CA를 사용하면서 외부의 클라이언트의 웹브라우저에게 이것을 속이는 것은 불가능한 방법이다. 그렇기 때문에 에러메시지는 어쩔 수 없는 결과가 될 것이다. 해결할 수 있는 방법은 이 신뢰된 루트 인증기관의 목록에 있는 인증기관(CA)으로부터 인증서를 받아서 사용하는 방법이다.



<그림3-9. 정상적인 인증서의 정보>

 

<그림3-9>에서는 아무런 에러가 없는 잘 설정된 인증서의 정보를 보여준다. 누구나 알만한 대기업들의 웹사이트들도 이러한 PKI를 도입한 것이 그리 오래 되지 않은 일이다. 그중에서도 상당수의 기업들은 제대로 설정되지 않은 사이트를 오픈하고 있는 실정이니 이제 시작이라 어쩔 수 없는 것인가?’라는 생각을 가지게 만든다. Windows Server 2003 CA서비스를 추가하는 방법에 대해서는 9장에서 다룬다.

:
Posted by 새벽예찬
2008. 11. 12. 13:03

3-3. Public Key (공용키) = 비대칭키 Windows Networking2008. 11. 12. 13:03


3-3-1.Public Key Infrastructure ?

 

보통 줄여서 PKI라고 부르는 Public Key 구조는 앞에서 설명한 대칭키 기법과는 다른 알고리즘을 가지고 있다. 물론 암호화를 하겠다는 기본적인 생각은 차이가 없다. 대칭키를 사용하는데 있어서의 문제점으로 2가지를 거론했는데 Public Key는 이것을 해결해 주고 있다.

 

Public Key를 다른 용어로 표현한다면 비대칭키, 페어키(Pair Key)라는 용어를 들 수 있다. 용어에서 느껴지는 것이 있을 것이다. 앞에서 설명한 대칭키 알고리즘은 잠그는 키(암호화키)와 푸는 키(복호화키)가 동일하다는 의미에서 대칭키라고 불리운다고 했다. 그렇다면 비대칭키라는 뜻은 이 두개의 키가 서로 같지 않다는 것을 의미하는 것? 그렇다. Public Key알고리즘에서는 암호화키와 복호화키가 한쌍의 키(Pair Key)를 이루고 있다.

 

이 한쌍의 키는 Public Key(공용키) Private Key(개인키)로 구성되어 있다. 공용키는 누구라도 사용할 수 있도록 공개가 되며, 개인키는 HDD, Smart Card등의 공간에 보관하면서 오로지 키쌍을 만든 주체만 사용할 수 있다는 것이 보장되어야 한다.

 

이 키들은 다음과 같이 사용된다. Public Key 기법을 사용하기 위해서는 먼저 공용키개인키라는 한쌍의 키를 생성해야 하고, 공용키로 암호화한 데이터는 오직 해당 공용키와 한쌍으로 생성된 개인키로만 해독할 수 있다는 것이다. 그렇다고 무조건 공용키는 암호화키이고 개인키는 복호화키라는 개념은 아니다. 반대상황도 있다. 개인키로 데이터를 암호화하면? 이번에는 한쌍에 해당하는 공용키로만 해독이 가능하다.

 

공용키는 이름에서 느껴지는 것처럼 누구나 사용할 수 있는 키다. 공개가 되는 키라는 뜻이다. 이 키는 웹서버에 게시되거나 파일서버에 공유되거나 안전하지 않은 전자메일을 통해서 상대방에게 보내져도 아무 문제가 없다. 대칭키에서 가졌던 비밀키 전송의 문제점을 해결해 주는 것이다. 예를 들어 웹서버가 키쌍을 만든다음 앨리스에게 공용키를 전송해 주었다고 하자. ‘앨리스는 공용키를 이용해서 웹서버로 보내는 데이터를 암호화할 것이다. ‘이브역시 이 공용키를 구하는 것이 어렵지 않다. 하지만 공용키를 이용해서 앨리스의 암호화된 데이터를 해독하는 것은 불가능하다. 공용키로 암호화된 데이터는 한쌍이 되는 개인키로만 해독이 가능하기 때문이다.

그러다 보니 이제 웹서버는 1만명의 회원을 위해서 1만개의 키를 생성할 필요가 없다. 오직 하나의 공용키만 가지면 되는 것이다. 1만명의 회원들이 동일한 공용키를 가지게 될 테지만 이들은 공용키로 암호화를 할 수는 있지만 공용키로 암호화된 데이터를 해독하는데 사용할 수는 없다는 것을 기억하라.

 

개념을 알고 나면 단지 그렇구나! 라고 생각할 수 있겠지만 처음 이러한 알고리즘을 만든 사람들은 대단하다는 생각이 든다. Public Key 알고리즘은 MIT공대에서 개발되었다고 한다. 개발한 사람들의 이니셜을 딴 RSA 프로토콜이 가장 널리 사용되고 있다.

 

3-3-2.Public Key 암호화 (Confidentiality제공)

 

Public Key를 이용한 암호화에 대해서 <그림3-2>를 보면서 살펴보도록 하자. 앨리스가 밥에게 데이터를 전송하려고 한다. 중요한 데이터인데 이브의 도청이 염려스럽다. 안전하게 보내기 위해서 데이터를 암호화하기로 결정했는데 암호화키가 필요하다. 암호화키로써 데이터를 암호화해서 보내면 데이터를 받은 밥은 복호화를 해야 한다. 역시 복호화키가 필요할 것이다.



<그림3-2. 공용키를 이용한 암호화>

 

먼저 앨리스는 밥의 공용키를 구하는 것이 선행되어야 한다. 그 다음에 자신이 보내고자 하는 데이터를 밥의 공용키로서 암호화하여 전송해 준다. 밥은 암호화된 메시지를 받은 다음 앨리스가 암호화하는데 사용한 공용키와 한쌍으로 생성해 두었던 개인키를 이용해서 복호화하게 된다. 결국 데이터를 꺼낼 수가 있게 되었다.

 

한가지는 정리하고 가자. PKI를 이용하고자 할 때 상대방에게 안전하게 암호화된 데이터를 전송하고 싶다면 상대방의 공용키를 얻는 것이 첫번째 할일이다. 데이터에는 여러가지가 있을 것이다. 인터넷 쇼핑몰이 운영되고 있는 웹서버로 신용카드와 유효기간 등의 정보를 보낼 수도 있을 것이고, 회사의 중요데이터를 담은 전자메일 메시지일 수도 있다. 웹서버와의 안전한 통신을 위해서는 웹서버로부터, 전자메일을 보내고자 한다면 상대방으로부터, 먼저 할 일은 공용키를 얻어내는 과정이 필요하다는 것이다. 그 공용키로써 암호화를 했을 때 해독할 수 있는 사람은 오직 공용키와 쌍이 되는 개인키를 소유한 사람이다.

 

3-3-3.Private Key 암호화 (Authenticity제공)

 

이번엔 다른 관점이다. 개인키를 이용한 암호화가 어떠한 용도로 사용되는지에 대해 정리해 본다. 이번엔 밥의 입장에서 고려를 해 보자. 밥이 앨리스라고 주장(?)하는 사람으로부터 메시지를 받았다고 가정한다. 밥은 자신이 받은 메시지가 정말 앨리스가 보낸 것인지를 확인하고 싶어한다.

 

현실세계에서 요즘 거의 종이에 펜을 이용해서 글씨를 쓰고 편지를 보내는 일이 드문일이 되었다. 우리는 무엇인가 문서를 만들고 나서 자신이 확인했다는 표시로 자필서명이라는 것을 하곤 한다. 그러면 상대방은 그 서명을 통해서 받은 편지를 신뢰한다. 디지털 세상에서도 이와 동일한 알고리즘의 작업이 행해지고 있다.

 

앨리스는 밥에게 보낼 메시지를 만든 다음 자신이 보냈다는 것을 증명하기 위해 서명을 한다. 바로 전자서명이 되는 것이다. 서명이 유효하기 위해서는 지켜져야 할 조건이 있다. 당사자가 아닌 다른 사람은 동일한 서명을 할 수 있어서는 안된다는 것이다. 그렇다면 앨리스가 밥에게 보낼 메시지에 서명을 할때는 다른 사람은 가지고 있지 못한 자신만이 가진 유일한 증표를 사용해야 할 것이다. 그것은 바로 자신의 Private Key(개인키)를 이용하는 것이다. 앞에서 공용키는 누구에게나 공개가 되지만 개인키는 오직 키쌍을 생성한 주체만이 가지고 있다고 한 것을 기억하면 될 것이다. 과정을 <그림3-3>을 통해서 설명한다.



<그림3-3. 개인키를 이용한 암호화>

 

그림에서 앨리스는 밥에게 데이터를 전송하고자 한다. 밥에게 자신이 보내는 메시지라는 것을 신뢰할 수 있도록 하기 위해서 자신만이 가지고 있는 개인키를 이용하여 메시지를 암호화한다. 이것을 가리켜서 “Digital Signature (전자서명)”이라고 부른다. 결국 앨리스는 자신이 서명한 메시지를 네트워크를 통해서 밥에게 보낸다. 이 메시지를 받은 밥은 앨리스의 공용키를 이용해서 복호화를 하고, 앨리스의 공용키로써 복호화가 이루어지면 자신이 받은 메시지가 앨리스가 보낸 것이 맞다고 판단을 한다. 앨리스를 가장한 제3자가 보낸 메시지라면 앨리스의 공용키로 해독이 되지 않을 것이다.

 

만일 이 메시지를 도중에 이브가 가로챘다면? 이브는 당연히 이 메시지를 읽을 수가 있다. 앨리스의 공용키만 있다면 얼마든지 해독이 가능할 것이기 때문이다. 기밀성은 제공되지 않는다는 것을 의미한다.

 

이렇듯 개인키를 이용해서 암호화하는 것(전자서명)은 제3자가 데이터를 열지 못하게 하기 위한 방법은 아니다. 다만 상대방에게 자신을 가장한 제3자가 아닌 진짜 자신이 보낸 메시지라는 것을 알려주기 위한 방법일 뿐이다.

 


공용키와 개인키의 사용용도


(1)   공용키 : 데이터를 암호화하여 기밀성을 유지한다. 또한 상대방이 개인키로 암호화한 메시지를 해독하여 상대방을 확인할 용도로 사용한다.

(2)
  
개인키 : 상대방이 자신의 공용키를 이용해 암호화해서 보낸 메시지를 해독하는데 사용한다. 또한 자신의 메시지에 전자서명을 만드는데 사용한다.

 

3-3-4.Hash함수와 Digest (Integrity 제공)

 

개인키를 이용한 전자서명과 더불어 추가로 고려해야 하는 내용이 있다. 밥이 앨리스로부터 데이터를 받았을 때 밥은 이 데이터가 앨리스가 보낸 원본데이터 그대로인지, 즉 중간에서 변조가 되었다거나 바이러스코드가 추가되었다거나 하는 등의 훼손된 것은 아닌지를 알고 싶다는 것이다. 결국 무결성(integrity)이 보장되어야 한다는 것인데, 이것은 바로 Hash(해시)라고 부르는 함수(Function)와 관련이 있다.

 

해시는 주로 원본을 감추고 확인하기 위한 용도의 함수인데, ‘단방향 함수이며 원본이 1비트만 달라져도 두 개의 문서는 서로 다른 결과값을 가진다는 특징을 가지고 있다. Y=f(x) 라는 일반적인 공식에 대입시켜 보자. 해시함수 역시 모든 함수가 그렇듯이 x값을 대입시키면 결과값(y)이 나오는데, 거꾸로 y값을 가지고는 x가 무엇이었는지를 구할 수가 없다는 특징을 가진 함수이기 때문에 단방향 함수라고 부른다. 이것은 네트워크 상에서 상당히 유용하게 쓰일 수 있다. 어떤 사용자가 서버로 자신의 암호인 1234 를 전송하고 있다고 가정을 했을 때, 1234를 그대로 전송하면 제3자의 도청위험에 노출되게 된다. 하지만 1234를 그대로 전송하는 것이 아니라 해시함수를 이용해서 해시하여 전송하게 되면 설사 제3자가 이 패킷을 도청했다고 하더라도 1234라는 암호는 감출 수가 있기 때문이다.

 

3자는 이 패킷을 가지고 원래 암호를 알아내기 위해 노력하겠지만 해시함수의 특성상 원본을 알아내는 것은 어렵다고 판단된다. 해킹에 조금 관심을 가진 독자라면 흔히 패스워드 크랙킹 툴들에 대한 이야기를 접할 수 있을 것이다. 이러한 암호 크랙킹 툴들중에는 사전공격(Dictionary Attack)’이라는 공격방법을 이용하는 툴들이 많은데, 이러한 툴들은 해시값을 역으로 추적해서 원본데이터를 알아내는 것이 아니라 원본데이터를 유추하는 방식을 사용한다. 즉 암호를 짐작하여 생성한 다음 해시함수를 이용하여 해시하고 그 값을 자신이 네트워크에서 훔쳐낸 값과 비교하는 방법을 이용한다. 두 값이 같으면 자신이 유추한 암호가 사용자의 암호라고 판단하는 것이다. 이 때 원본데이터에 해당하는 단어들을 정의한 사전파일을 사용하고 있어서 이를 사전공격(Dictionary Attack)’이라고 한다. 대부분의 보안지침에서 사전에서 쉽게 찾을 수 있는 단어를 암호로 사용하지 말라라고 하는 이유는 바로 이러한 공격의 위험을 염두에 둔 것이다.

 

원본데이터를 해시함수를 이용하여 계산하여 나오는 값을 Digest(요약)이라고 부른다. 원본데이터중에서 뽑아낸 요약된 비트라는 의미에서다.

 

구체적으로 무결성(Integrity)을 보장하기 위해서 어떻게 해시함수가 사용되는지 <그림3-4>를 통해서 설명한다. 그림의 번호순으로 차근차근 접근해 보자.



<그림3-4. 해시함수를 이용한 무결성 보장>

 

그림에서는 앨리스가 밥에게 데이터를 전송하려고 한다. 먼저 앨리스는 데이터를 해시하여 다이제스트를 생성한다. 다이제스트는 해시함수를 이용하여 얻은 결과값이다. 이 다이제스트를 자신의 개인키를 이용하여 암호화한다. 개인키를 가진 사람만이 할 수 있는 이 작업이 전자서명이라고 설명한 바 있다. 그 다음에 네트워크를 통해서 밥에게 전자서명된 데이터를 전송한다. ‘전자서명된 데이터라는 표현을 잘 음미해 보라. 앨리스가 전자서명을 어떻게 만든 것인지를 보면 결국 앨리스가 보내는 전자서명된 데이터가 의미하는 것은 원본데이터+다이제스트라는 것을 알 수 있을 것이다.


이 메시지를 받은 밥은 몇 가지 작업을 거친다
. 먼저 앨리스가 보낸 메시지라는 것을 확인하기 위해 앨리스의 공용키를 이용해서 전자서명이라는 암호문을 해독한다. 이 복호화의 결과로 얻는 것은 앨리스가 보내준 다이제스트이다. 그 다음에 원본데이터를 앨리스가 사용한 것과 동일한 해시함수로 해시하여 다이제스트를 생성한다. 그리고 2개의 다이제스트를 비교하는 일을 한다. 2개의 다이제스트가 정확히 일치한다는 것이 밝혀지면 다이제스트를 생성한 원본이 동일하는 것을 증명해 주는 것이다. 밥이 받은 데이터가 도중에 훼손되었다면 밥이 직접 생성한 다이제스트는 앨리스가 만들어서 보낸 다이제스트와 불일치라는 결과를 보일 것이다.

 

이러한 방법을 이용해서 데이터 무결성을 보장해 줄 수 있다.

그림의 내용을 다시 정리해 보았다.



Alice는 자신이 만든 데이터를 Hash한 다음 자신의 개인키로 서명한다.

② 전자서명된 원본 데이터를 전송한다.

Bob Alice의 공용키를 이용하여 전자서명을 해독한후 Alice의 신원을 확인하고 Digest를 꺼낸다.

④ 받은 데이터를 동일한 함수로 Hash하여 Digest를 생성한다.

⑤ 이 두 Digest를 비교하여 정확히 일치하면 원본의 훼손이 없었다는 것(무결성)이 보장된다. Digest가 다른 결과가 나왔다면 원본이 훼손되었다는 의미한다.

 

:
Posted by 새벽예찬
2008. 11. 12. 13:02

3-2. Symmetric Key (대칭키) Windows Networking2008. 11. 12. 13:02


오래된 암호화 방법이다. 대칭키 알고리즘을 흔히 비밀키 알고리즘이라고도 부른다. A B만이 아는 비밀키를 이용해서 암호화 통신을 한다는데서 기인한다. 여기에서 핵심은 대칭키라는데 있다. 키가 대칭을 이룬다? 이것은 암호화키와 복호화키가 동일하다(대칭을 이룬다)라는 데서 정답을 얻을 수 있다.


 

<그림3-1. 대칭키 알고리즘>

 

<그림3-1>의 예제에서 보듯이 대칭키 알고리즘에서는 암호화를 할 때 사용하는 키와 복호화를 할 때 사용하는 키가 동일해야 한다. Alice‘1234’를 키로서 데이터를 암호화했다면 Bob역시 ‘1234’라는 키를 알아야만 복호화를 할 수 있다는 것이다. 이 대칭키 알고리즘을 사용하는 대표적인 암호화 프로토콜로는 DES(Data Encryption Standard, 56bit, ‘데쓰프로토콜로도 읽는다.), 3DES(Triple DES, 168bit)가 있다. DES를 세번 반복하는 3DES는 상대적으로 안전하기는 하지만 당연히 키 길이가 길어짐으로써 더 느려진다는 단점이 있다. 56bit키를 사용하는 DES는 사용을 권장하지 않는다. 현재 대부분의 상업용 암호화는 128비트 이상의 암호화가 구현되는 것이 일반적이다.

 

이러한 대칭키 알고리즘은 작은 키 길이를 사용함으로써 빠르게 암호화와 복호화가 이루어진다는 장점이 있지만 몇가지 문제점을 안고 있다.

 

첫번째 문제는 암호화 키 교환의 어려움이다. Alice‘1234’라는 암호화키를 이용해서 암호문을 만들었다면 암호화된 메시지를 받은 Bob은 역시 ‘1234’라는 키를 알아야만 한다. Bob은 이 키를 어떻게 알 수 있을까? 이때 사용된 암호화키는 웹사이트에 게시하거나 공유폴더에 저장해 둘수는 없다. Bob이 아닌 제3자가 이 Key를 가져간다면 Alice의 암호문을 해독하는 것이 가능하기 때문이다. 전자메일을 사용해서 key를 전송하는 것 역시 조금은 낫지만 바람직한 방법은 아니다. 결국 안전한 방법은 디스켓에 담아서 직접 상대방에게 가져다 주는 방법을 사용해야 할 것이다. 번거로운 일이 아닐 수 없다. 이것을 해결하기 위해서 SSL, Kerberos등의 다른 암호화 방법과 더불어 키 교환을 제공하고 있지만 대칭키 알고리즘 자체로만 보자면 고려되어야 할 부분이다.

 

두번째 문제는 키 관리의 어려움을 들 수 있다. 예를 들어서 웹사이트 하나가 있고 1만명의 회원이 있다고 하자. 1만명의 모든 회원들은 웹서버에 신용카드번호, 유효기간, 비밀번호 등을 전송해야 하는데 당연히 고려할 점은 웹서버가 아닌 어느 누구도 이 데이터를 열수 있어서는 안된다. 이 경우 키는 몇 개가 필요할까? 웹서버가 한대이니 키도 한 개만 있으면 좋겠지만 아쉽게도 키는 1만개가 있어야 한다. 1만명의 회원들에게 각각 고유한 비밀키를 할당해 주어야 한다는 것이다. Alice라는 회원과 Eve라는 회원의 키가 동일하다면 Alice가 암호화한 데이터를 Eve도 해독할 수 있기 때문이다. 그렇게 되면 Confidentiality는 깨지고 만다.

 

이것에 비해 PKI는 보다 유연한 관리를 가능하게 만든다. 하지만 다음장에서 설명할 PKI는 대칭키 방식에 비해서 키 길이가 길고 알고리즘이 복잡하여 성능면에서 상대적으로 떨어진다. 그런 이유로 현재 사용되는 형태를 보면 대칭키 알고리즘과 공용키 알고리즘이 공존하여 쓰이고 있는 형태이다.


:
Posted by 새벽예찬
2008. 11. 12. 13:01

3-1.암호화(Encryption)의 역할 Windows Networking2008. 11. 12. 13:01


암호화가 왜 필요한가? 이것이 하고자 하는 목표는 뚜렷하다. A B에게 데이터를 전송할 때 이 데이터는 B가 아닌 다른 어느 누구도 들여다 봐서는 안된다는 것이다. 그것을 만족시키기 위해서는 A B만이 알고 있는 방법을 이용해서 원본 데이터를 위장할 필요가 있다. 3자는 A가 보내는 데이터를 네트워크에서 훔쳐낼 수는 있지만 A가 보낸 완전한 원본 데이터를 알아낼 수는 없다. 그 방법은 B만이 알고 있기 때문이다.


A
B에게 보내는 데이터의 종류는 중요하지 않다. A B라는 인터넷쇼핑몰에서 물건을 구입하고 자신의 신용카드 번호를 넘겨주는 것일 수도 있고, A B라는 사용자에게 회사의 기밀을 담고 있는 전자메일을 전송하는 것일 수도 있다. 어떠한 유형의 데이터이든지 상대방이 아닌 다른 사람은 데이터를 열수 없도록 하기 위해서는 암호화와 같은 방법이 필요하다.

 

현재 이러한 암호화가 제공하고자 하는 것, 즉 업계에서 암호화를 통해서 얻고자 하는 요구사항은 크게 4가지로 정리해 볼 수 있다. 잘 정리해 보자. 앞으로의 내용들을 이해하는데 필수적인 사항들이다.

 

요구사항

내용

예제



Confidentiality (
기밀성)


Privacy
라고도 표현할 수 있다. A B에게 데이터를 보낼 때 B가 아닌 어느 누구도 이 데이터를 열어봐서는 안 된다는 것이다.


인터넷쇼핑몰에서 주문을 하고 신용카드로 결제를 하고자
신용카드 번호 와 유효기간을 입력했다. 이때 지켜야 할 데이터는 카드번호와 유효기간이다.


Authenticity

(신뢰성)


A
B에게 데이터를 보낼 때 데이터를 받은 B는 자신이 받은 데이터가 정말 A가 보낸 것이 맞는지 확인해야 한다는 것이다. 그러기 위해서 A는 자신의 신원을 B에게 증명할 수 있어야 한다.


B
지사는 본사로부터 가지고 있는 모든 외환을 처분하라는 지시를 전자메일로 받았다. 이 전자메일이 정말 본사로부터 온것인지 확인하기를 원한다.



Integrity

(무결성)


원본 데이터의 훼손이 없어야 한다는 것을 뜻한다
. 무결성이 보장된다는 것은 Confidentiality와는 다르다. A B로 보내는 데이터를 제3자가 열어볼 수도 있다. 그렇지만 제3자가 데이터를 변조하거나 바이러스 코드를 심는다면 무결성이 깨지는 것이다. B는 데이터를 받고서 A가 보낸 원본과 정확히 일치하는지 판단할 수 있어야 한다.


위에서
B지사는 본사로부터 온 전자메일이라는 것을 신뢰하게 되었다. 이번에는 데이터의 내용이 본사가 보낸 내용 그대로라는 확인이 필요하다. 3자가 중간에서 데이터를 변조했을 수도 있기 때문이다.



Non-repudiation (
부인방지)


전자상거래를 하는데
A B에게 돈을 받고서 오리발을 내민다. 혹은 B A에게 물건을 받고서 언제 주문했었느냐고 딴소리를 하고 있다. 이것을 방지할 필요가 있다는 것이다.


인터넷서점을 운영하는데 고객의 주문을 받아 책을 발송했는데 변심한 고객이 책을 주문한 적이 없다고 한다
. 책 주문의 마지막 과정에서 고객의 전자서명을 받음으로써 증거를 확보할 수 있다. 다만 실효성과 운영의 문제가 뒤따른다.


암호화를 통해서 위의
4가지 요구사항을 해결해야 한다. 암호화를 한다는 것은 데이터를 통신의 양자간에만 알 수 있는 방법을 통해서 데이터를 변경시키는 작업을 의미한다. 이때 방법에 해당하는 것이 바로 (Key)’이다. Key가 어떻게 사용되는가가 암호화를 이해하는데 가장 관건이 된다.

개념은 단순하다
.

A
는 데이터를 암호화키(Encryption Key)를 이용해서 걸어잠그고(암호화하고), B는 복호화키(Decryption Key)를 이용해서 해독하는 것이다.

:
Posted by 새벽예찬
2008. 11. 12. 12:58

3장. Public Key Infrastructure (PKI) Windows Networking2008. 11. 12. 12:58


요즘 IT관련지를 들여다 보면 빠지지 않고 등장하는 것이 VPN, 무선네트워크, PKI 등의 용어일 것이다. PKI를 이해할 때는 이것을 하나의 기술로만 이해하기보다는 하나의 커다란 인프라라고 이해할 필요가 있다. 전자상거래, 인터넷 뱅킹, 기밀 데이터의 보호, 사용자의 인증 등 안전한 데이터전송을 필요로 하는 수많은 분야에서 PKI기반의 보안이 구현되고 있고 이것에 대한 수요는 향후 보다 급속도로 확산되고 있다.

 

데이터를 보호하기 위한 기본적인 생각은 제3자는 읽을수 없도록 데이터를 암호화하자는 것이다. 필자는 독자들에게 암호학에 대해서 이야기 하자는 것이 아니다. 암호학에 관련한 내용은 필자도 모른다. 다만 암호화기술이 어떤 기본 알고리즘을 가지고 있고, 어떻게 네트워크 환경에 적용되어 사용되는지, 그리고 어떻게 당신이 관리하는 회사에서 응용을 할 수 있을 것인지에 대해 알아보자는 것이다. 기본 알고리즘 역시 몰라도 구현하는데는 큰 지장이 없지만, 서두에서 말했듯이 우리에게 비교적 생소한 기술이기 때문에 막연히 툴을 이용하여 구현하고자 한다면 상당히 어렵고 구현을 하고서도 내가 도대체 지금 무슨 작업을 한 거지?’라는 의문을 가지게 될 것이다.

:
Posted by 새벽예찬
2008. 11. 12. 12:54

[Note] IP 서브넷팅 빠른 계산 방법 Extra Articles2008. 11. 12. 12:54


<
문제> 218.55.9.0 C Class Network ID하나를 할당받았다. 회사에서는 6개의 물리적인 네트워크로 나뉘어 있다. 6개의 네트워크를 지원하기 위한 서브넷ID와 각 서브넷별 호스트ID의 범위를 구하면?

<계산>


(1) 6
개의 네트워크를 지원하기 위해 필요한 비트의 개수 산출 : 3 (23)


(2)
사용자 정의 서브넷 마스크를 계산하면 : 아래의 <그림2-25>을 참고한다. 255.255.255.224가 된다.



<그림2-25.서브넷ID 속산방법>

 

(3) 서브넷 ID 계산 : <그림2-25>에서 두 번째 박스를 살펴보면 화살표로 표기된 부분이 서브넷ID부분인데 여기서 가장 낮은 자리수를 십진수로 바꿔보면 32가 나온다. 이것은 32씩 증가하는 서브넷ID임을 보여준다. 0.32.64.96.....224 가 바로 서브넷 ID가 되는 것이다.


(4)
호스트ID의 범위 : 첫 번째 서브넷인 218.55.9.0의 경우는 당연히 가장 빠른 호스트의 ID 1부터 시작한다. 다음번 서브넷ID 32가 되기 전까지를 쓸 수 있지만 31은 쓸 수가 없다. 31 218.55.9.0 서브넷의 브로드캐스트 ID이기 때문이다. 두 번째 서브넷인 218.55.9.32의 경우는 역시 가장 빠른 호스트의 ID 32의 다음 숫자인 33부터 시작을 해서 다음번 서브넷인 64가 되기 전인 63까지이지만 63은 쓸 수가 없다. 218.55.9.32네트워크의 브로드캐스트 ID 63이 쓰이기 때문이다. 이런 원칙으로 계산을 해 보면 <그림2-25>안의 표와 같은 결과를 얻을 수 있다.
:
Posted by 새벽예찬
2008. 11. 12. 12:52

2-4. CIDR (Subnetting,Supernetting), VLSM Windows Networking2008. 11. 12. 12:52

 

2-4-1. CIDR - Subnetting

 

회사의 전체직원이 210명인 회사가 있다고 가정을 해 보겠다. 회사에서는 1인당 1대의 컴퓨터를 사용하고 있다. 회사에서는 보다 빠른 회선으로 업그레이드를 하면서 새로운 ISP로부터 인터넷 서비스를 받게 되고, 207.46.230.0 이라는 C Class Network ID를 할당받았다. 당신은 이 Network ID를 이용해서 회사의 클라이언트들에게 IP Address를 할당하는 작업을 해야 한다.

 

C Class Network ID 하나를 가지고 지원되는 호스트의 수는 최대 254까지이다. 회사의 전체 호스트 숫자가 210대이므로 C Class 하나만 가지면 충분히 지원할 수 있지만 이들

전체를 하나의 네트워크로 만들어 사용을 하기보다는 네트워크를 보다 작게 여러 개로 나누어 효율성을 기하고 싶다.

 

네트워크에 호스트수가 많아질수록 바로 브로드캐스트 통신이 문제가 되는데 네트워크에서는 이러한 브로드캐스트를 줄이는 방법으로 OSI 3계층 장비인 라우터를 통하여 네트워크를 여러개의 브로드캐스트 도메인으로 세그먼트하는 방법을 사용한다. 네트워크를 여러개로 나누면 각각의 네트워크에서 발생되는 브로드캐스트 패킷은 해당 네트워크에 한정되기 때문에 그만큼 효율적인 네트워크의 사용이 가능해 지는 것이다.

당신의 회사 역시 네트워크를 4개로 나눠서 한 세그먼트에 호스트의 숫자를 60대 미만으로 셋팅하고자 한다. 이러한 상황을 고려해 보겠다.

 

여기에서 당장에 혼란이 생긴다. 앞에서 서로 다른 물리적인 네트워크에서는 반드시 서로 다른 네트워크ID를 사용해야 한다고 했는데 당신은 ISP로부터 하나의 C Class 네트워크ID를 할당받았을 뿐이다. 이 하나의 네트워크ID 4개의 세그먼트에 나눠서 차례대로 할당할 수는 있지만 그렇게 했을 때 이들 서로간에는 서로 통신을 할 수가 없게 된다. 같은 네트워크ID를 가지고 물리적으로 서로 다른 네트워크에 위치해 있으니 통신이 안 되는 것은 당연한 일이다.

 

ISP에 추가로 C Class네트워크 ID 3개를 요청했지만 추가비용을 요구한다. 거기다가 가만히 생각해 보니, 각각 254개를 쓸 수 있는 C Class ID 3개 더 받아서 하나의 네트워크당 60개만 사용한다고 가정하니 나머지 194개씩의 IP는 버려질 수밖에 없는 노릇이다. IP Address의 낭비가 너무 심하다는 생각이 든다.

 

이것이 Class 체계의 IP Address가 가지는 맹점인 것이다. 보다 효율적인 방법은 없을까? 물론 있다. CIDR(Classless Inter Domain Routing)이라는 기법을 이용하여 IP Address를 보다 효율적으로 관리할 수 있다. 구현하는 방법은 의외로 간단하지만 처음 접근할 때 많이들 어려워하는 개념이다. 차근차근 접근해 보도록 하겠다. 실제로는 대기업 환경이나, ISP에서 쓰임새가 많은 기술이지만 시스템관리자에게는 상식적인 사항이 될 수 있다.

 

CIDR Subnetting Supernetting이라는 두가지로 구분해 볼 수 있다. 위의 예제의 경우에는 Subnetting이 필요한다. 할당받은 C Class ID는 네트워크 ID 3개의 옥텟(24bit)을 사용하고 호스트ID 1개의 옥텟(8bit)가 사용된다. 현재의 상황은 네트워크ID가 더 필요한 상황임을 고려하자. 해결방법은 호스트ID가 사용할 8bit중 일부를 네트워크ID용도로 전환하면 문제는 간단해 진다.

 

<그림2-21. CIDR기법- subnetting>

 

<그림2-21>에서 보듯이 호스트ID 8비트중에서 3비트를 네트워크ID 용도로 전환하여 사용하려고 한다. 이때 이 3비트를 "서브넷ID"라고 부르게 된다. 크게 본다면 네트워크ID에 포함될 수 있다. 좀 더 단계적으로 전체적인 계산방법을 알아보겠다.

 

2-4-2.  Subnetting 계산 방법

 

Subnetting을 계산할 때 익숙해지면 암산으로도 가능해진다. 하지만 지금은 단계별로 접근해 볼 것이다. 다섯단계로 구분을 해서 계산을 해 볼 것이다. 차근차근 한단계씩 이해하고 넘어가도록 하자.

 

2-4-2-① 회사에서 필요로 하는 네트워크의 수 결정

서브넷팅을 하기전 가장 먼저 할 일은 회사에서 필요로 하는 네트워크의 수를 파악하는 일이다. 이때 고려할 사항은 당장 필요한 것도 중요하지만 향후 네트워크의 확장이 고려된다면 네트워크의 여유가 있을 때 그 부분을 미리 고려하는 것도 필요한 일이다. 위의 예제상황에서는 총 4개의 네트워크가 필요하다고 결정되었다.

 

2-4-2-② 필요한 네트워크ID를 만들기 위해 전환할 bit수의 결정

에서 결정된 4개의 네트워크를 지원하려면 호스트ID가 사용하는 8개의 비트중에서 몇 개의 비트를 네트워크ID로 전환시켜 사용해야 할까? 22= 4라는 결과가 나오니 2개의 비트가 있으면 되겠다. ( 만일 6개의 네트워크가 필요하다면 어떻게 할까? 23=8이 되니 3개의 비트가 있으면 된다)

 

2-4-2-③ 서브넷 마스크(User defined Subnet Mask, Custom Subnet Mask) 계산

다음 해야 할 작업은 변경된 서브넷 마스크를 계산해야 한다. C Class의 기본서브넷 마스크는 255.255.255.0이었다. 이것은 C Class IP Address중에서 네트워크ID부분은 1, 호스트ID부분은 0으로 채운 결과 나온 값이었는데, 지금은 상황이 조금 달라졌다. 서브넷ID가 할당됨으로써 네트워크ID가 변동이 생겼으니 서브넷 마스크도 달라져야 한다. <그림2-22>에서는 변경된 서브넷 마스크가 계산되는 과정을 보여준다. 네 번째 옥텟의 호스트ID 8비트에서 6비트로 줄어들고 상대적으로 네트워크ID 2비트가 늘어났다. 일반적인 서브넷 마스크는 255.255.255.0 이었지만 호스트비트중 앞의 두 비트가 1로 바뀌었으므로 다시 계산하면 사용자정의된 서브넷 마스크는 255.255.255.192가 된다.

 

<그림
<2-22.
사용자 정의 서브넷 마스크 계산방법>

 

여기서 한가지 고려해 볼 것이 있는데, 서브넷 마스크가 바뀌었다는 것이 무엇을 의미할까? 앞에서 우리는 호스트가 TCP/IP통신을 하는 절차를 보았는데 그때 호스트는 목적지 호스트가 자신과 로컬에 있는지 원격지에 있는지를 결정하게 되었다. 그 방법으로 자신의 서브넷 마스크를 이용해서 자신과 목적지 호스트의 네트워크ID를 계산한 다음에 결과값을 살펴서 같으면 로컬, 다르면 원격지로 판단한다고 했다. 위에서 계산된 새로운 서브넷 마스크를 이용하면 하나의 C Class 207.46.230.0을 사용하더라도 범위에 따라서 서로 다른 네트워크ID라는 결과를 얻을 수가 있게 된다. 결국 하나의 C Class ID로써 여러개의 네트워크ID를 가진 효과를 내게 되는 것이다. 

 

2-4-2-④ 서브넷 ID 계산



 <
그림2-23. Subnet ID 계산>

 

서브넷팅된 Network ID (Subnet ID)를 계산해야 한다. 207.46.230.0 네트워크 ID는 건드릴 수 없다. 호스트 비트인 8비트 중에서 앞의 2비트를 서브넷ID로 사용하고자 하기 때문에 <그림2-23>에서 노란색부분인 Subnet ID 2비트로써 생성할 수 있는 모든 경우의 수를 구해본다. 위의 그림에서 보듯이 00, 01, 10, 11 이라는 4가지 경우의 수가 나온다. 이것을 십진수로 전환하면 각각 0,64,128,192가 된다. 결국 서브넷 ID를 정리하면 다음과 같다.

 

- 207.46.230.0

- 207.46.230.64

- 207.46.230.128

- 207.46.230.192

 

2-4-2-⑤ 서브넷별 호스트ID의 범위 계산

 

이제 마지막 단계이다. 각 서브네트워크별 사용할 호스트ID의 범위를 구해야 한다. ④에서 구한 4개의 서브넷ID마다 생성할 수 있는 호스트ID의 범위를 구하기 위해 <그림2-24>를 참고해 보겠다.


 <그림2-24. Host ID의 범위 계산>

 

<그림2-24>의 ①번 서브넷을 예로 들면, 서브넷팅을 하기 전 호스트비트는 8개를 사용할 수 있었지만 서브넷팅을 하고 앞의 2비트를 서브넷 용도로 전환시켰기에 남은 것은 6비트가 있다. 서브넷ID인 처음의 00은 그대로 두고 나머지 6비트를 이용해서 생성할 수 있는 가장 작은 수와 큰 수를 각각 구하면 호스트ID의 범위가 나온다. 여기서 주의할 것은 호스트비트가 전체가 0이되는 경우와 전체가 1이 되는 경우 두 가지를 제외하여야 한다는 것이다.

 

이미 설명한 바 있지만 호스트비트 전체가 0이되는 주소는 해당네트워크 자신을 나타내고, 전체가 1이되는 수는 해당 네트워크의 브로드캐스트 ID로 사용되기 때문에 호스트에게는 할당할 수 없다. TCP/IP등록정보를 열고 이러한 주소를 입력해 보면 실제로 입력이 되지 않고 에러가 발생하는 것을 확인할 수 있다. 이것을 십진수로 전환해 보면 1 62가 된다. 첫 번째 서브넷 ID 207.46.230.0 네트워크에서 쓸 수 있는 호스트ID의 범위는 207.46.230.1부터 207.46.230.62까지로 총 62개의 호스트ID를 사용할 수 있는 것이다. (26-2=62)

같은 방법으로 2~4번째 서브넷ID의 호스트ID의 범위를 구해보면 다음과 같다.

 

- 207.46.230.65~207.46.230.126

- 207.46.230.129~207.46.230.190

- 207.46.230.193~207.46.230.254

 

지금까지 몇단계를 거쳐서 서브넷팅 작업을 해 보았다. 단순히 IP Address의 클래스를 알아보았던 것에 비하면 조금 어렵다는 생각이 들 것이다. 하지만 분명히 필요성이 있는 것이기에 잘 익혀 두어야 한다.


2-4-3. CIDR 표기법

 

CIDR은 이진표기법을 사용한다. 위의 예제와 같이 서브넷팅된 상황이라면 207.46.230.2 라는 IP Address를 쓰는 호스트는 다음과 같이 표기할 수 있다.


  207.46.230.2/ 26


이것은 207.46.230.2 IP Address중에서 26비트가 네트워크ID임을 가리켜 준다. 결국 Subnet Mask 255.255.255.192라는 것을 알 수 있다.

지금까지 Subnetting의 개념과 구현방법에 대해서 알아보았다. 가장 많이 접할 수 있는 네트워크ID C Class를 통해서 예제를 만들어 보았다. B Class라면 더더욱 작업은 쉬워진다. 위의 방법을 토대로 하여 B Class 예제를 하나쯤 다루어 보기 바란다.

 

2-4-4. CIDR - Supernetting

 

Subnetting과는 반대의 개념으로 Supernetting을 구현할 수 있다. 상대적으로 중소규모의 회사 차원에서 수퍼넷팅이 구현될 필요는 없다. 개념적인 것을 알아두는 차원에서 다루어 보고자 한다. 한 회사가 192.168.1.0부터 192.168.5.0까지 5개의 네트워크ID를 사용하고 있다고 가정한다. 인터넷상에서 네트워크가 동작하기 위해서는 이 하나의 회사를 위해서 라우팅 테이블이 5개가 추가되어야만 할 것이다.

 

이경우 보다 효율적인 네트워크를 위해서 라우팅 테이블을 최적화하기를 원한다. 비록 C Class Network ID 5개라고 할지라도 라우팅 테이블에서는 5개가 아닌 1개의 라우팅 경로만으로 이 회사의 네트워크를 지원할 수 있다면 그만큼 인터넷의 라우터들은 성능의 향상을 가져올 수 있을 것이다. 이런 경우에 수퍼넷팅을 이용하여 라우팅 테이블을 최소화 하는 것이 가능한다.

 

보다 간단하게 이해를 돕자면 위의 회사에서 5개의 네트워크ID를 사용하는데 물리적으로 하나의 네트워크에 이 5개의 서로 다른 네트워크ID를 할당해서 사용하고 싶다는 뜻이다. 네트워크를 하나로 통합하고 싶다는 것을 의미한다. 어떻게 하면 될까? 역시 서브넷 마스크에 달려 있다는 생각이 들 것이다. 비록 서로 다른 네트워크이지만 서브넷 마스크를 가지고 계산을 했을 때 같은 네트워크ID라는 결과가 나오도록 서브넷 마스크를 조절한다면 이들은 서로 같은 네트워크에 있는 셈이 될 테니까. 어째 생각하면 쉬운 것 같다.

이것을 가리켜서 수퍼넷팅이라고 부른다. 수퍼네팅된 서브넷 마스크를 구하는 방법은 <그림2-26>과 같다.



<
그림2-26. 수퍼넷팅 계산방법>

 

255.255.248.0을 서브넷 마스크로 사용한다면 5개 네트워크의 어떠한 호스트ID를 사용하더라도 하나의 물리적인 네트워크에서 통신이 가능해진다.  예를 들어 192.168.1.100을 쓰는 호스트와 192.168.4.200을 쓰는 호스트가 물리적으로 하나의 세그먼트에 물려 있더라도 255.255.248.0을 사용하면 통신이 가능하다는 것을 말한다. 서로 같은 네트워크 ID라는 결과가 나오기 때문이다.

 

수퍼넷팅의 이해를 돕기 위하여 위와 같은 설명을 했으나 내부적인 네트워크에서는 위와 같은 처리를 할 이유가 없다. 이것은 어디까지나 인터넷 상에서 네트워크 경로를 최소화하여 보다 원활한 라우팅을 구현하는데 의의가 있다. ISP와 같은 대형 서비스 벤더에서 구현되는 방식이라고 이해하는 편이 좋겠다.

 

2-4-5. VLSM (Variable Length Subnet Mask)

 

마지막으로 한가지만 설명을 하고 마칠까 한다. 아래의 <그림2-27>을 보겠다. 이 회사는 192.168.200.0 C Class Network ID를 사용한다. 회사의 네트워크는 그림에서 보듯이 6개의 네트워크로 나뉘어 있는데 각 네트워크마다 서로 다른 노드(컴퓨터,라우터 등 하나의 포트를 차지하는 모든 디바이스를 총칭)를 가지고 있다. 이러한 상황에서 Subnetting을 통해서 6개의 네트워크에서 사용할 수 있는 ID들을 계산해 보고자 한다.

 

 
<
그림2-27. 6개로 세그먼트된 192.168.200.0 네트워크>


위의 상황을 지금까지 배웠던 서브넷팅의 방법으로 계산하려고 하면 뭔가 맞지 않는다는 것을 알 수가 있을 것이다. 6개의 네트워크를 지원해야 하니, 호스트비트 8비트중 3비트를 서브넷 비트로 써야 할 것이다. 거기까진 좋은데 3비트를 서브넷비트로 사용했을 경우 호스트ID로 사용할 비트가 5비트가 되니 5비트를 가지고 만들 수 있는 호스트ID의 수는 25-2=30개가 된다. 그러면 <그림2-27>에서 60node가 있는 네트워크에는 IP Address가 부족하게 된다. 60개의 IP Address를 확보하려면 적어도 6비트는 필요하다.(26-2=62) 8비트중 나머지 2개의 비트로 서브넷팅을 하면 되는데 문제는 그럴 경우 서브넷ID 4개밖에 나오지 않는다는 것이다. '응 안되는구나.. '라고만 판단하면 길은 정해져 있다. 네트워크의 수를 줄이거나, 추가로 C Class Network ID를 더 확보하거나, 사설 네트워크로 가는 방법이 있을 것이다.


그렇지만 회사의 전체 호스트수를 더해봐도 194대밖에 되지 않는데 최대 254개의 호스트를 지원하는 C Class 하나로써 이것을 지원하지 못한다는 것은 뭔가 석연치 않다. 이러한 경우 당신은 Subnetting을 효율적으로 운영할 수 있다. 각각의 네트워크에 필요한만큼만 호스트ID를 할당하는 방법을 사용하는데 방법은 다음과 같다.


전체의 서브넷ID를 한꺼번에 계산해서는 안된다. 필요한 부분마다 각각 계산을 해 나가는데 필요한 네트워크ID를 지원하기 위해 필요한 비트수를 계산하는 것이 아니라 필요한 호스트ID를 지원하기 위해 필요한 비트수를 먼저 계산한다. 호스트의 수가 많이 필요한 서브넷부터 먼저 계산해 나가는 편이 좋다.

 

(1) 60개 호스트를 지원하기 위한 서브네팅

 - 60개의 호스트를 지원하기 위해 필요한 호스트 비트수 = 6 (26-2=62)

 - 서브넷 마스크는 11111111.11111111.11111111.11000000 (남은 2비트로 서브네팅)

 - 서브넷ID는 서브넷ID중 낮은 자리수의 십진수를 구하면 -> 64 (64씩 증가하는 서브넷)

 - 호스트ID의 범위 2개를 구하면 -> 192.168.200.1~62, 192.168.200.65~126 / 26

 

(2) 30개 호스트를 지원하기 위한 서브네팅

 - 30개의 호스트를 지원하기 위해 필요한 호스트 비트수 = 5 (25-2=30)

 - 서브넷 마스크는 11111111.11111111.11111111.11100000 (남은 3비트로 서브네팅)

 - 서브넷ID는 서브넷ID중 낮은 자리수의 십진수를 구하면 -> 32 (32씩 증가하는 서브넷)

 - 호스트ID의 범위 2개를 구하면 -> 192.168.200.129~158, 192.168.200.161~190 / 27

   ( 1~127까지는 이미 앞의 네트워크에서 사용되었음을 유의한다.)

 

(3) 12개 호스트를 지원하기 위한 서브네팅

 - 12개의 호스트를 지원하기 위해 필요한 호스트 비트수 = 4 (24-2=14)

 - 서브넷 마스크는 11111111.11111111.11111111.11110000 (남은 4비트로 서브네팅)

 - 서브넷ID는 서브넷ID중 낮은 자리수의 십진수를 구하면 -> 16 (16씩 증가하는 서브넷)

 - 호스트ID의 범위 1개를 구하면 -> 192.168.200.193~206 / 28

   ( 1~191까지는 이미 다른 네트워크에서 사용되었음을 유의한다.)

 

(4) 2개 호스트를 지원하기 위한 서브네팅

 - 2개의 호스트를 지원하기 위해 필요한 호스트 비트수 = 2 (22-2=2)

 - 서브넷 마스크는 11111111.11111111.11111111.11111100 (남은 6비트로 서브네팅)

 - 서브넷ID는 서브넷ID중 낮은 자리수의 십진수를 구하면 -> 4 (4씩 증가하는 서브넷)

 - 호스트ID의 범위 1개를 구하면 -> 192.168.200.209~210 / 30

   ( 1~207까지는 이미 다른 네트워크에서 사용되었음을 유의한다.)

 

위와 같이 계산을 하여 아래의 <그림2-28>과 같이 IP Address를 배치하는 결과를 얻은 것이다. 가만히 살펴보면 이들 서브넷들은 앞에서의 일반적인 서브네팅과는 달리 서브넷마다 서브넷 마스크가 다르다는 것을 알 수가 있는데 이러한 기법을 가리켜서 "가변길이서브넷"(VLSM; Variable Length Subnet Mask) 기법이라고 한다.

 


 <그림2-28. VLSM을 이용한 서브네팅>

 

아직 서브넷팅이 익숙하지 않기 때문에 한꺼번에 4개의 서브넷팅이 부담스러울 수 있겠으나, 위와 같은 방법을 이용하면 보다 효율적인 IP Address 관리가 가능해진다. 전체 호스트에게 IP Address를 할당하고도 아직 192.168.200.212~254까지의 여분이 남아 있다. 추가로 네트워크가 더 생기더라도 할당할 여유가 있게 되었다. 앞의 서브넷팅을 완전히 이해하고 나면 VLSM의 필요성, 방법 등을 이해하기가 쉬울 것이다.

:
Posted by 새벽예찬

 

이글을 읽는 독자들은 대부분 20대 이상일 거라는 생각이다. 그렇다면 벌써 십진수와 이진수의 전환하는 계산법 등은 아주 오래전에 다루어 본 일일 것이다. 그 시절로 돌아가서 계산해 보겠다. 언제였던가? 초등학교때였나 아니면 중학교시절이었나.

 

(1) 십진수를 이진수로 전환하는 법

 

어떻게 했었더라? 하는 독자들이 있겠지만 한번만 보면.. ~!! 한다. 십진수를 더 이상 나누어지지 않을 때까지 계속 나누어서 그 나머지들을 아래에서부터 위로 순서대로 나열하면 된다.

  )    2)  218     (나머지)

          2)  109  ----  0

          2)   54  ----  1

          2)   27  ----  0

          2)   13  ----  1

          2)    6  ----  1

          2)    3  ----  0

                 1  ----  1

      더 이상 2로 나누어질 수 없다. 노란색 부분을 거꾸로 나열하면 11011010 이 된다. 이것은 "218"이라는 십진수를 2진수로 전환한 값이다.

 

(2) 이진수를 십진수로 전환하는 법

 

이진수에 각 자리수에 맞는 십진수를 곱해주면 되는데, 그것은 <그림2-17>에서 찾을 수 있다.

    1) 11111111 = (1x27)+(1x26)+(1x25)+(1x24)+(1x23)+(1x22)+(1x21)+(1x20)

                          = 128+64+32+16+8+4+2+1 = 255

    2) 11011010 = (1x27)+(1x26)+(0x25)+(1x24)+(1x23)+(0x22)+(1x21)+(0x20)

                          = 128+64+0+16+8+0+2+0 = 218



<그림2-17. 십진수 변환표>

 

위의 <그림2-17>십진수 변환표를 외워두면 편한다. 익숙해지면 전자계산기가 없이도 10진수와 2진수의 계산이 가능해진다. 예를 들어서 11110011을 십진수로 바꾸려면 전체가1인 경우 255에서 세,네 번째 자리수가 0이므로 거기에 해당하는 십진수인 8 4를 빼면 된다. 결국 255-8-4=243 이 답이 된다.

 

거꾸로 계산할 때도 마찬가지이다. 203을 이진수로 전환하려면 첫 번째 자리수부터 203이 될 때까지 계속 채워 나가면 된다. 11이면 128+64이니 합이 192가 된다. 6번째 자리까지 1을 채우면 111이 되어 합이 224로써 203을 넘으니 안 된다. 192에서 203이 되려면 11이 더 필요하다. 11에 해당하는 2진수는 1011이다. 결국 닶은 11001011 이 되는 것이다.

사실 필자 역시 안 해보면 금방 잊혀지는 것중의 하나이지만 급할 때 도움이 된다. 적어도 자리수 정도는 기억을 해 두는 것이 좋다.

 

(3) 전자계산기 이용

 

윈도우즈OS에는 보조프로그램에서 계산기를 제공한다. 이것을 이용하면 계산이 용이하다. 계산기 프로그램을 열고, 보기 메뉴에서 "공학용"으로 바꾼다. 왼쪽위에 Hex,Dec,Oct,Bin 이라는 라디오버튼이 있는데 각각 16,10,8,2진수를 의미한다. 이진수 11001011을 십진수로 전환하고 싶다면 먼저 Bin을 선택하고 11001011를 입력한후, <Dec>버튼을 선택하면 된다.


 


<그림2-18. 보조프로그램의 계산기 - 공학용으로 보기>
:
Posted by 새벽예찬
2008. 11. 11. 13:02

2-3. Subnet Mask, Default Gateway Windows Networking2008. 11. 11. 13:02


앞의 'IP Address의 이해'장에서 IP Address의 개요에 대한 설명을 한 바 있다. IP Address는 네트워크ID와 호스트ID로 나누어진 다는 것을 알았다. 저번 예제에서 동과 우체국으로 나뉘어졌던 것을 대신해서 이번에는 실제로 라우터와 컴퓨터를 놓고, IP Address를 할당해 보았다. <그림2-15>를 보면서 이야기한다. 예제는 131.107.0.0 1331.108.0.0 이라는 두 개의 네트워크로 구성된 환경이다. 이들 네트워크에는 A,B,C라는 세대의 컴퓨터가 있고 각각 적절한 IP Address, Subnet Mask, Default Gateway가 할당되어 있다.  



<그림2-15. 2개의 네트워크 ID>

 

예제에서 131.107.0.0네트워크에 있는 "B" "C"와 통신을 하고자 한다. 통신의 종류는 너무나도 다양하다. 간단하게 B에서 "ping 131.108.0.2"라는 명령을 날릴 경우도 있을 것이고, C컴퓨터가 서비스하는 웹서비스에 B가 웹 브라우저를 띄우고 "http://131.108.0.2"를 입력한 경우도 있을 수 있다. 어떠한 종류의 작업이건 결국은 IP Address를 이용한 통신을 하는 것이기에 B C IP Address를 목적지로 하는 메시지를 날려 보내야만 한다.

 

이 단원의 처음에 "같은 동에 속한 사람들끼리는 직접 편지를 교환하고, 다른 동으로 편지를 보내기 위해서는 반드시 우체국을 이용해야 한다."라는 가정을 한 바 있다. 바꿔 말하면 컴퓨터는 TCP/IP통신을 할 때 자신과 같은 네트워크에 속한 컴퓨터와는 직접 통신을 하고, 다른 네트워크에 속한 컴퓨터와 통신을 할 때는 '라우터"를 이용해야 한다는 것을 말한다.

 

이러한 이유로 B C에게 메시지를 보내고자 할 때 첫 번째 해야 할 일은 "C"라는 컴퓨터가 자신과 같은 네트워크에 있는지(로컬인지), 아니면 다른 네트워크에 있는지(원격지인지)를 결정해야 한다는 것이다. 이것을 구분하는 컴퓨터는 IP Address중에서 Network ID부분을 가려낸 다음 Network ID를 서로 비교해 보게 된다. 자신의 네트워크 ID와 상대방 컴퓨터의 네트워크ID가 같다면 당연히 같은 네트워크 임을 의미하고, 네트워크ID가 서로 다르다면 서로 다른 네트워크에 존재한다는 것을 나타내기 때문이다.

 

문제는 IP Address중에서 도대체 어디까지가 네트워크ID가 차지하는 부분인지를 알 방법이 필요하다는 것이다. 조금 더 자세히 말한다면 IP Address로 사용되는 32비트의 숫자중에서 몇비트가 네트워크ID가 사용하는 부분인지를 알아내야 할 필요성이 있는 것이다. 그것을 가리켜주는 것이 바로 Subnet Mask의 역할이다.

 

2-2-1. Subnet Mask

 

Subnet Mask IP Address중에서 네트워크ID 부분을 가려내는 역할을 담당한다. Subnet Mask를 잘못 입력하는 것은 통신불가능이라는 문제점을 야기시킬 수 있다. 서브넷 마스크가 IP Address중에서 네트워크ID를 가려내는 일을 하므로 서브넷 마스크가 잘못 할당되어 있으면 IP Address중에서 네트워크ID가 틀리게 가려질 수 있다. 결국은 같은 네트워크에 존재하는 호스트와 서로 다른 네트워크ID를 사용하게 되는 등의 문제가 생길수 있는 것이다. 서브넷 마스크를 제대로 사용하는 것은 중요한 일이다.

 

좀더 구체적으로 Subnet Mask를 통해서 어떻게 상대방 컴퓨터가 로컬인지 원격지인지를 가려내는지를 알아보겠다. 아래의 <그림2-16>에서는 B의 네트워크ID C의 네트워크 ID를 계산하는 방법을 그림으로 표현하였다. B컴퓨터는 통신을 하고자 할 때 가장 먼저 자신의 서브넷 마스크를 이용해서 자신의 IP Address와 상대방의 IP Address로부터 Network ID를 계산한다.



<그림2-16. 목적지 컴퓨터가 로컬인지 원격인지 결정하는 방법>

 

<그림2-16> "(1)B의 네트워크ID계산"을 보면, 131.107.3.100을 이진수로 전환했다. 자신의 서브넷 마스크인 255.255.0.0역시 이진수로 전환을 한 다음 And연산을 이용해서 두 수(bit)를 결합시켰다. Bit 에 대한 And연산은 두 수가 1일 때만 1이라는 결과를 나타낸다. (And연산 -> 1=, 0=거짓, 둘다 참일 때만 참).

 

값을 계산해 보면 세 번째의 그림인 Network ID결과값을 얻을 수 있다. 이것을 가만히 살펴보면 네트워크 ID결과값중에서 두 개의 옥텟은 IP Address의 두 개의 옥텟과 일치함을 알 수 있다. 서브넷 마스크의 두 개의 옥텟이 11111111.11111111 이므로 당연히 IP Address 쪽의 수자를 따라가게 된 것이다.  , 네 번째 옥텟은 00000000.00000000 이라는 결과를 보여주는데, 서브넷 마스크의 세,네 번째 옥텟이 00000000.00000000 이므로 (두 수중 둘 다 1일 때만 1, 결국 한쪽이라도 0이면 0이 나온다는 Bit And연산에 따라) 결과값 역시 00000000.00000000 이 나온 것이다. 결국 나온 결과값은 이것을 십진수로 전환하면 131.107.0.0 이라는 네트워크ID를 얻어낼 수 있다.

 

10000011.01101011.00000000.00000000 이라는 결과값을 십진수로 전환하면 131.107.0.0 이라는 네트워크ID가 계산된다. 당연한거 아닌가 싶지만 우리는 전체적인 그림을 보니까 당연해 보이지만 호스트 입장에서는 IP Address만 가지고 목적지 컴퓨터가 도대체 어느 위치에 존재하는지 심지어는 자신이 어느 위치에 존재하는지도 알 턱이 없다. 이들이 알고 있는 것이라고는 단지 IP Address, Subnet Mask 등의 숫자 몇 개가 고작인 것이다.

 

같은 방법으로 (2)에서는 C의 네트워크ID를 계산했다. 그 다음에 할 일은 B는 자신의 네트워크ID와 상대방인 C의 네트워크ID를 비교하는 일이다. 이 결과값이 일치하다면 이들 둘은 같은 네트워크ID를 사용하고 있다는 것을(로컬) 의미하며, 다르다면 다른 네트워크ID를 사용하고 있다는(원격지) 것을 의미한다.

 

결과값이 같다면 직접 로컬에서 통신을 시도할 것이지만 결과가 다르다면 로컬의 라우터의 도움을 받아야 C와 통신을 할 수가 있게 된다. 예제에서는 131.107.0.0 131.108.0.0이라는 서로 다른 결과를 보여준다. 서로 다른 물리적인 네트워크에 있다는 결과가 나왔다. 제대로 계산이 나왔다.

 

Subnet Mask가 잘못 입력된다면 통신이 실패한다는 말을 했는데 한가지 상황을 가정해 보겠다.

 

<그림2-15>에서 A B는 같은 네트워크에 있으며, 같은 네트워크ID 131.107.0.0을 사용하고 있다. 만일 B컴퓨터의 Subnet Mask 255.255.0.0이 아닌 255.255.255.0을 할당했다고 가정을 하고 결과를 살펴보겠다. B컴퓨터는 일단 A가 로컬에 있는지 원격지에 있는지를 알아내고자 시도를 할 것이고 자신의 서브넷 마스크인 255.255.255.0을 통해서 자신의 IP와 상대방의 IP중에서 네트워크 ID를 계산해 낼 것이다. <그림2-16>을 참고로 해서 결과값을 계산해 보면, B 131.107.3.0이라는 결과가 나오고, A 131.107.4.0이라는 결과가 나온다.

 

이것은 B A가 서로 다른 네트워크에 있음을 보여준다. 결국 실제로는 물리적으로 같은 네트워크에 있지만 서로 다른 네트워크ID를 가졌으므로 B는 직접 로컬통신을 시도하지 않고 라우터에게 패킷전송을 요청하게 된다. 이 패킷은 131.107.4.0 네트워크를 찾아서 외부로 나가게 되고, 결국 통신은 실패하게 된다. 이렇듯 잘못된 Subnet Mask를 부여했을 때에는 BA와 통신하는 것이 불가능하다. 같은 네트워크에 존재하면서도 네트워크ID가 다르다는 결과가 나왔기 때문이다.

 

또 한가지 경우, 만일 B의 서브넷 마스크가 255.0.0.0이 할당되어 있다면 어떻게 될까? 결과부터 말한다면 이번에는 같은 네트워크의 A와는 통신할 수 있지만 C와는 통신하는 것이 불가능하다. 차근차근 결과를 계산해보면 답이 나온다. 255.0.0.0 서브넷 마스크를 이용해서 B C IP Address에서 Network ID를 각각 계산해 보면 같은 결과인 131.0.0.0이 나온다. 물리적으로는 다른 네트워크에 위치해 있으면서 서로 같은 네트워크ID를 사용하게 되면 이들 둘은 통신을 할 수가 없게 되는 것이다.


이렇듯 Subnet Mask IP Address못지 않은 중요한 역할을 담당하고 있는데 이러한 Subnet Mask는 어떻게 할당되는 것일까? 이것도 기본적인 원칙이 있다
 

 

서브넷 마스크 결정방법

IP Address중 네트워크ID 부분은 1로 기록하고, 호스트ID  부분은 0으로 기록한다.

 

앞에서 각 클래스별로 Network ID가 사용하는 옥텟을 이야기한 바 있다. 거기에 따른 서브넷 마스크를 정리하면 <그림2-19>과 같다.



<그림2-19. Default Subnet Mask>

 

위와 같이 클래스별로 고정된 Subnet Mask를 할당하게 되는데 이것을 가리켜 "Default Subnet Mask"라고 부른다. 특별히 Default라는 표현을 썼다는 것은 뭔가 냄새를 풍긴다. 그렇지 않을 수도 있다는 것을 의미하는데, 각각 8비트, 16비트, 24비트 등으로 고정된 길이만큼 네트워크ID가 사용되는 것이 아닌, 클래스개념을 무시한 IP Address관리방법이 제공되기 때문이다. 이것을 CIDR(Classless Inter Domain Routing)이라고 한다. IP Address를 효율적으로 관리하기 위한 필수적인 개념인만큼 정리를 해 보도록 하겠다. 다음 장에서 CIDR, VLSM등에 대해서 설명한다.

 

2-2-2. Default Gateway

 

호스트가 TCP/IP통신을 할 때 가장 먼저 목적지 호스트가 자신과 같은 로컬에 있는지 원격지에 있는지를 판단한다고 했다. 이때 원격지에 있는 결과가 나오면 컴퓨터는 Default Gateway를 이용해서 통신을 하게 된다. 결국 Default Gateway를 정리하면 "자신의 네트워크에 있는 라우터의 로컬 인터페이스의 IP Address"라고 할 수 있다.

 

라우터도 역시 자신의 네트워크에 있는 하나의 호스트처럼 생각하면 된다. 하는일이 다를 뿐이지 통신에 있어서는 차이가 없다. 만일 목적지 호스트가 로컬에 있다면? 그때는 Default Gateway는 쓰임새가 없다. Default Gateway가 없어도 로컬네트워크와의 통신에는 아무런 문제가 없음을 말하는 것이다.

 


<그림2-20. 로컬 컴퓨터의 라우팅 테이블>

 

위의 그림은 Windows환경의 OS에서 라우팅 테이블을 확인해 보았다. Ipconfig 를 통해서 Default Gateway 192.168.5.1인 것을 알 수 있다. 그 다음에 Route print 명령을 실행하니 라우팅 테이블을 보여준다. 하이라이트된 부분을 보니 다음과 같다.

Network Destination            Netmask              Gateway              Interface               Metric

0.0.0.0                    0.0.0.0              192.168.5.1           192.168.5.5                  1

0.0.0.0 Default Gateway를 나타내는 테이블이다. 만일 이 호스트에서 “Ping 192.168.6.200”이라고 명령을 실행하였다면 192.168.6.0네트워크는 라우팅 테이블에 명시되어 있지 않은 네트워크이기 때문에 어디로 패킷을 내 보내야 할지 모르게 된다.

이때 이 호스트는 0.0.0.0 으로 시작하는 이 테이블을 이용해서 통신을 시도하게 된다. 네트워크로의 통신은 이 테이블 항목을 사용해서 통신을 시도한다. 이것을 해석해 보면, 192.168.5.5로 셋팅된 네트워크 어댑터 카드를 통해서 192.168.5.1에게 패킷을 내 보내라는 것을 의미한다. 결국, 네트워크 경로에 명시되지 않은 모든 네트워크를 목적지로 하는 패킷은 192.168.5.1에게 보내서 통신을 처리하라는 것을 알 수 있다. 이것이 기본게이트웨이 이다.

간혹 TCP/IP 등록정보에서 볼때는 기본게이트웨이가 잘 셋팅되어 있지만 라우팅테이블이 없어지는 경우가 발생한다. 이럴 경우는 당연히 이 호스트는 외부 인터넷 환경으로는 접근이 되지 않게 되는데 그때는 문제해결이 쉽지 않다. 문제해결을 위해 TCP/IP등록정보를 확인해 봐도 아무런 문제가 없기 때문이다. 그때 route print 명령을 이용하여 0.0.0.0 경로가 잘 살아있는지를 확인해 볼 필요가 있다. 만일 없다면 기본게이트웨이가 설정이 되어 있지만 없는것과 마찬가지이다. 그럴 때는 route add 명령을 이용해서 직접 추가해 주거나, TCP/IP등록정보를 열고 기본게이트웨이를 지웠다가 다시 생성해 주면 해결된다. 라우팅 테이블에 0.0.0.0 경로가 살아났는지 확인하는 것은 당연한 일이다.

:
Posted by 새벽예찬
2008. 11. 11. 13:01

2-2. IP Addressing Windows Networking2008. 11. 11. 13:01


<그림2-7>에서의 호스트는 IP Address로써 "192.168.5.3"이라는 숫자를 사용하고 있다. IP Address를 살펴보면 3자리 숫자가 4개가 모여있고, 사이사이에는 dot로써 구분을 해 주고 있다. 3자리 숫자는 우리에게 익숙한 10진법으로 표기가 되어 있는 것을 알 수 있다.

<그림2-7. TCP/IP 등록정보>

 

그렇다면 아래의 그림을 보자.

 

<그림2-8. IP Address 입력 오류 메시지>

 

TCP/IP 구성을 수동으로 하다 보면 가끔 <그림2-8>와 같은 메시지를 받는 경우가 있다. <그림2-8>의 메시지를 보면 256이라는 숫자를 입력하려고 시도했을 때 "256의 항목이 올바르지 않다. 0~255사이의 값을 지정하라"는 메시지를 보여주고 있다. 이상한 생각이 든다. 10진수라면 3자리를 가지고 만들 수 있는 가장큰 수는 999 여야 하는데, 256을 넣었더니 입력이 되지 않고 0부터 255사이의 값을 지정하라고 한다. 그렇다. 10진수로 표기를 하고 있지만 내부적으로는 10진수가 아닌 것이다. 그렇다면 어떻게 구성이 되어 있을까?

 

IP Address는 디자인될 때 32개의 비트를 사용하여 IP Address를 만들어졌다. 다시 말하면 0 아니면 1인 값이 32개가 나란히 늘어서 있는 것이 IP Address를 구성하고 있다는 것을 의미한다. 아래의 <그림2-9>를 보면서 설명한다.



<그림2-9. IP Address 표기>

 

<그림2-9>에서는 192.168.5.2 라는 IP Address를 예제로 보여주고 있다. IP Address는 십진수도 아니고 세자리 숫자 4개가 3개의 dot(.)로 구분된 것도 아니다. 단지 0 아니면 1인 비트가 32자리가 쓰여 있을 뿐인 것이다. 32bit이니 결국 4Byte이다. 현재 우리가 사용하는 IP Address의 버전은 "4(Four)"이고 이 버전 4 32bit 4Byte체계의 IP Address를 사용하고 있다. 이러한 32bit숫자를 그대로 시스템의 IP Address로 사용한다면 우리가 사용하기는 꽤 어려울 것이다. 0아니면 1인 숫자가 32자리가 배열이 되어 있으면 사용하기가 어려울 수 밖에 없다. 그런 이유로 보다 편한 표기법을 채택하고 있다. 일단 8bit씩 나눠서 구분을 한다. 8bit 1Byte이니 구분하기가 한결 용이해진다. 이렇게 나뉜 하나하나의 단위를 "8"을 나타내는 "옥텟 (Octet)"라고 부른다. 32bit 8bit씩 나누니 4개의 8bit. 4개의 octet가 생겼다. 이들 octet octet를 구분하기 쉽게 하기 위해 dot(.)를 구분자로 사용하였다. 마지막으로 각각의 옥텟 단위별로 2진수를 10진수로 변환하여 놓은 것이 바로 우리가 사용하고 있는 IP Address이다.

 

아래의 <그림2-10>을 보겠다. 3단계로 나눠서 보면, 맨 위의 그림은 32개의 자리수를 가진 빈 상자가 있다. 여기에 0, 1 둘중의 한가지 숫자를 채울 수가 있을 것이다. 첫 번째의 옥텟만 가지고 계산을 해 보았다. 8bit 자리에 넣을 수 있는 가장 큰 숫자는 여덟 개의 비트 전체가 "1"로 만들어지는 숫자가 된다. "11111111"을 십진수로 계산하면 "255"라는 결과를 얻을 수 있다. 이렇게 되면 위에서의 의문이 풀린다. IP Address로 할당할 수 있는 최대숫자가 999가 아닌 255가 되는지를 알 수 있을 것이다. 그렇게 전체 옥텟을 채워보면 255.255.255.255가 나온다. 이것이 IP Address로 사용될 수 있는 가장 큰 주소이다.



<그림2-10. IP Address체계에서의 가장 큰 수>

 

위에서 우리는 IP Address 32개의 bit로 이루어진 값이라는 사실을 알 게 되었다. 이제 그러면 이러한 IP Address가 어떠한 체계로 관리가 되는지 알아보도록 하자. 현재 IP Address IANA(Internet Assigned Numbers Authority)라는 기관에서 관리되고 있다. IANA는 전체 IP Address를 관리하며 ISP(Internet Service Provider)들에게 IP Address를 발급하고, 일반 사용자들은 그러한 ISP로부터 IP를 할당받아서 호스트에게 할당하고 인터넷에 액세스하게 되는 것이다. 당연히 IP Address가 무작위로 할당되지는 않는다. IP Address Class 라는 특별한 개념에 근거하여 관리되고 있다. 자세히 알아보자.

:
Posted by 새벽예찬
2008. 11. 11. 13:00

2-1. IP Address의 이해 Windows Networking2008. 11. 11. 13:00


네트워크 통신을 위해TCP/IP를 사용하는 모든 컴퓨터들은 IP Address를 가지고 있다. IP Address는 당신의 컴퓨터를 네트워크에서 유일하게 구분해 줄 수 있는 고유번호를 의미한다. 굳이 TCP/IP를 전혀 모르더라도 집에서 전화, ADSL, 케이블모뎀 등을 통해서 인터넷에 접근한다거나,  친구에게 E-mail을 전송하고, PC방에서 어디 있는지 모르는 누군가와 채팅을 하거나, 네트워크 게임을 즐기고 있다면 이미 당신은 TCP/IP를 사용하고 있고 당신의 컴퓨터는 IP Address를 가지고 있어야만 한다. 네트워크 관리자가 이러한 IP Address의 체계에 대해서 잘 이해하고 관리할 수 있어야 한다는 것은 필수적이다.

 

이번 장에서는 TCP/IP를 구성하고 있는 IP Address, Subnet Mask, Default Gateway등의 역할들에 대해서 살펴보고, IP Address에 대해서 구체적으로 살펴보도록 한다.

 

컴퓨터에서 TCP/IP등록정보에 접근해 보면 아래의 <그림2-1> 혹은 <그림2-2>와 같은 두가지 유형의 설정을 확인할 수 있다.


<그림2-1.수동(정적) IP구성>

 


<그림2-2.자동(동적) IP구성>

 

분명히 위의 두 그림은 달라 보이지만, <그림2-2>의 경우도 보조프로그램의 명령프롬프트를 열고 "ipconfig"를 입력해 보면 TCP/IP의 구성을 확인할 수 있다.

<그림2-3. IPCONFIG Utility를 이용한 TCP/IP 구성 확인>

 

이렇듯 TCP/IP를 사용하기 위해서는 IP Address, Subnet Mask, Default Gateway등의 정보들이 구성이 되어 있어야 하는데 네트워크 관리자라면 당연히 이들의 역할들에 대한 명확한 이해를 해야 할 것이다. 어려운 수학은 아니지만 아무래도 숫자만 나오면 머리가 아파지기 시작하는 우리들로서는 차근차근 접근해 볼 필요가 있다. 먼저 IP Address에 대한 설명을 하도록 한다.

 

IP Address Network ID Host ID로 구성되어 있다. 갑자기 무슨 소리인가 싶겠지만 이것은 IP Address를 공부하는데 아주 중요한 개념이다.

 

IP Address = Network ID + Host ID

 

다른 통신도 마찬가지이긴 하지만 특히 TCP/IP통신은 우리들의 생활과도 아주 밀접한 연관성이 있다. 우리가 현실에서 외부 누군가와 편지를 주고 받는 과정이 TCP/IP통신과정과 아주 유사하다. 우리가 편지를 주고 받을 때의 상황을 상기하면서 이해를 하면 쉽다.

 

대한민국의 가구수가 얼마나 될까? 뭐 중요한 건 아니다. 얼마 전 뉴스를 보니 90년대 이후 빠르게 핵가족화가 진행 중이라는데, 남한의 가구수가 1,600만가구를 넘었다고 한다. 각 가구들을 구별하기 위해서 우리는 "번지"라는 개념을 사용하는데 그 번지가1번지부터 1,600만 번지까지 존재하는 것은 아니다. 행정구역이라는 개념으로 시, , ... 등을 구분하여 사용하며 최종적으로 번지라는 단위로써 각각의 가구들을 구분해 주고 있다.

 

만일 이러한 세부적인 단위를 사용하지 않고 전체가구가 개별적인 번지수 하나만으로 주소를 이루고 있다면 어떻게 될까? 물론 이 경우도 편지를 주고 받는 데는 문제가 없다. 1번지에 사는 사람은 100번지에 사는 사람에게 편지를 보내기 위해 편지 겉봉에 받을 사람 주소를 쓰고 우체국에 편지를 부칠 것이며, 우체국에서는 100번지인 주소를 찾아서 편지를 배달해 줄 것이다. 이때 우체국에서는 큰 노력이 필요하다. 대한민국 전체를 오로지 "번지"로만 나누었기에 100번지가 어디쯤 있는지 지도책을 펴 놓고 찾을 것이며 직접 그곳까지 배달을 해야 할 것이다. 우체국 입장에서는 자신이 배달해야 할 경로가 총 1600만 가지의 경우의 수가 있는 것이다.

 

조금 더 편한 방법은 무엇일까? 당연히 그것은 그룹으로 나누는 방법에서 찾을 수 있다. 여러개의 번지를 묶어서 그룹으로 나누면 그만큼 경로의 수가 줄어들기 때문에 배달업무에 효율성을 기할 수 있게 될 것이다. 개별적인 번지수까지 신경 쓸 이유는 없어지고 다만 그 주소가 속해있는 그룹에게 편지를 배달해 주면 되기 때문이다. Network ID도 바로 그러한 것이다.

 

전체 IP Address를 따로 따로 관리하기 보다는 Network ID라는 이름으로 그룹을 만들어서 Network ID 단위로 IP Address를 관리하면 그만큼 효율적으로 IP Address를 관리하고 무엇보다도 보다 원활한 편지배달작업에 해당하는 라우팅(Routing)이 가능해질 수 있기 때문이다.

 

Network ID에 관련한 중요한 개념 한가지를 챙겨보도록 하겠다. 그림을 예로 들어 설명을 한다. 우리가 실생활에서 편지를 보낼 때의 절차를 통해서 정리를 할 것인데, 먼저 2가지를 가정한다.

 

(1) 편지의 주소는 "" "번지"만으로 이루어져 있다.

(2) 같은 동에 속한 사람들끼리는 직접 편지를 교환하고, 다른 동으로 편지를 보내기 위해서는 반드시 우체국을 이용해야 한다.

 

예제에서는 "삼성동" "대치동"사이에 어떻게 편지가 교환이 되는지에 대한 그림을 보여준다. 예제에서 ""에 해당하는 것이 "Network ID"이고, "번지"에 해당하는 것이 "Host ID"가 된다. 우체국은 다른 네트워크 패킷을 라우팅해 주는 "라우터(Router)"에 해당한다.


<그림2-4. Network ID의 이해>

 

위의 <그림2-4> "삼성동 100번지"에 사는 사람이 "대치동 100번지"로 편지를 발송하는 상황이다.

 

"삼성동 100번지"에서는 편지(data)를 쓴 다음 겉봉투(packet)에 넣고 수신인 란에는 "대치동 100번지"라고 기록을 했다. 그 다음 편지를 발송하기 위해 첫 번째로 하는 일은 수신처가 자신과 같은 "(Network ID)"에 있는지 다른""에 있는지를 파악하는 일이다(). 같은 ""이라면 직접 편지를 배달할 것이고, 다른 ""이라면 "자신의 관할 우체국(로컬 라우터)"에게 편지배달을 요청해야 하기 때문이다

 

예제에서 수신처가 자신과는 다른 "대치동"관할에 있으므로 두 번째로 할 일은 "삼성동 우체국"으로 편지를 보내러 가야 한다().

 

삼성동우체국에서는 발신자의 주소는 중요하게 취급되지 않는다. 중요한 정보는 수신자의 주소인 "대치동 100번지"가 되는데, 그 중에서도 "대치동"이라는 "(Network ID)"정보가 필요할 뿐이다. 100번지라는 "번지(Host ID)"수는 의미가 없다. 자신이 직접 최종목적지까지 편지를 배달할 것은 아니기 때문이다. 그래서 삼성동우체국에서는 "대치동"이라는 목적지를 확인한 다음 그 목적지로 가기 위한 경로(Routing Table)를 확인하여 대치동 우체국으로 편지를 발송한다. 이때 발송방법은 여러 가지가 있을 것이다. 비행기, 자동차, 선박 등을 이용해서 상대방 우체국까지 편지를 발송해주게 된다().

 

대치동 우체국에서 편지를 받고서 자신의 관할영역임을 확인한 다음, 편지겉봉의 수신처 주소중 "번지"를 확인하게 된다. "100번지"라는 번지를 근거로 "대치동 100번지"의 우체통에 편지를 배달해 줄 수가 있게 된다.() 이렇듯 다른 "(Network ID)"으로 편지를 보내기 위해서는 반드시 자신의 관할 우체국(Local Router)의 도움을 받아야 하는 것을 확인할 수 있다.

 


 <그림2-5. Network ID의 이해 2>

 

<그림2-5>는 같은 ""에 있는 "삼성동 200번지"로 편지를 배달하고 있다. 과정은 앞의 예제와 다를바가 없다. 다만 편지를 작성한 다음 가장 먼저 수신처가 자신과 같은 동에 있는지 다른 동에 있는지를 판단해서 같은 동에 있다는 판단을 하였기에 우체국에 편지를 부치지 않고 직접 편지를 배달하고 있다.

 

당연한 것을 왜 설명하는지 의아해 하는 독자가 있을 것이다. 하지만 여기서 중요한 원칙 하나가 나온다. 물리적으로 같은 ""에 위치한 집들은 반드시 같은 ""의 주소를 할당받아야 하고 다른 ""에 위치한 집들은 반드시 다른 ""의 주소를 할당받아야 한다는 것이다. 다시 정리하면 같은 네트워크에 존재하는 컴퓨터들은 반드시 같은 "Network ID"를 사용해야 하고, 다른 네트워크에 존재하는 컴퓨터는 반드시 다른 "Network ID"를 사용해야 한다는 것을 의미한다. 아래의 <그림2-6>을 통해서 설명하도록 한다.

 


 <그림2-6. Network ID의 이해 3>

 

<그림2-6>의 상황은 "삼성동200번지"에 살던 <B>라는 사람이 "대치동"으로 이사를 했다. 당연히 대치동에서 새로운 번지를 할당 받아야 하겠지만 고집스럽게도 <B>는 물리적으로는 "대치동"관할에 있으면서 주소는 예전 그대로 "삼성동200번지"를 사용하고 있다고 가정해 보겠다. 결과적으로는 <B>는 어느 누구와도 편지를 주고 받을 수 없다. 왜 그럴지 살펴보겠다.

 

먼저 "삼성동100번지"에 있는 <A>와의 통신을 고려해 보면 <A><B>에게 편지를 보내기 위해 편지 겉봉에 "삼성동200번지"라는 주소를 기록할 것이다같은 "(네트워크ID)"에 있는 사람이기에 우체국에 편지를 부치는 것이 아니라 직접 편지를 배달하려고 시도를 하겠지만 실제로는 다른 ""으로 이사를 가 버린 <B>에게는 편지가 도착될 수가 없게 된다. 이번엔물리적으로 같은 ""에 위치한 "대치동100번지"<C><B>의 통신을 고려해 보겠다. <C>는 역시 <B>에게 편지를 부치기 위해 편지겉봉에 수신처주소에는 "삼성동200번지"를 사용할 것이다. 자신과 다른 ""에 위치해 있다는 것을 알 게 되고 직접 발송하는 것이 아니라 "대치동 우체국"에 발송을 요청하게 될 것이다. 대치동우체국에서는 목적지가 "삼성동"으로 되어 있으므로 "삼성동우체국"으로 편지를 보낼 것이고, 우체국에서는 번지를 확인해서 "200번지"를 찾게 되지만 실제로는 이사를 해 버린 <B>를 찾을 수가 없게 된다. 역시 편지발송이 실패하게 된다.

 

위에서 예제에 따르면 "같은 동에 사는 사람들은 주소역시 같은 동의 주소를 가져야 하며, 다른 동에 사는 사람과는 다른 동의 주소를 사용하여야 한다"라는 결과가 나온다. TCP/IP통신에 맞춰서 얘기해 보면 다음과 같다.

 

"같은 물리적인 네트워크에 존재하는 컴퓨터들은 반드시 같은 "Network ID"를 사용해야 하고, 다른 네트워크에 존재하는 컴퓨터는 반드시 다른 "Network ID"를 사용해야 한다".

 

이것은 TCP/IP를 사용하는 컴퓨터들간의 통신을 위해서 반드시 지켜져야 하는 원칙이다. 예를 들면 192.168.5.0이라는 네트워크 ID를 할당한 세그먼트에 A B가 있다면 이들 둘의 통신을 위해서는 A B는 동일하게 192.168.5.0 네트워크 ID를 사용하는 Host ID가 할당되어야만 한다. A에게 192.168.5.1을 할당하고, B에게 192.168.5.20을 할당했다면 둘은 통신이 되겠지만, 만일 B에게 192.168.6.20을 할당했다면 둘은 통신을 할 수가 없게 된다. 물리적으로 같은 네트워크에 서로 다른 네트워크ID가 할당되었기 때문이다. 192.168.5.1 192.168.6.20이 어디가 어떻게 다른 것인가? 이제부터 그런 내용을 배우게 된다.

 

잘 아는 사람들에게는 불필요한 정도로 부연설명을 했다. 하지만 이 개념은 IP Addressing, TCP/IP통신의 흐름을 이해라는데 필요한 너무나 중요한 개념이다. 꼭 이해하시고 넘어갈 것은 당부한다. 이제 본격적으로 IP Address에 대해서 살펴보도록 하겠다.
:
Posted by 새벽예찬
2008. 11. 10. 21:42

1-4. Microsoft Network Monitor Windows Networking2008. 11. 10. 21:42


네트워크 패킷 캡처 및 분석 도구

 

위에서 TCP/IP를 설명하면서 예제그림으로 네트워크 패킷을 캡처한 그림을 사용하였다. 네트워크 모니터는 마이크로소프트가 Windows NT Server, Windows 2000 Server, Windows Server2003Windows Server 제품에서 기본 제공되는 패킷 캡처 및 분석을 할 수 있는 도구이다. 네트워크 모니터를 이용하면 네트워크에 흐르는 신호를 수집하고, 이것을 네트워크의 각 계층별로 패킷을 풀어서 보여주므로 눈으로는 볼 수 없는 네트워크에 흘러다니는 패킷에 대한 자세한 정보를 관리자가 이용할 수 있게 해 준다.

 

네트워크 분석도구를 악용하는 경우도 있다. 그때는 모니터링(Monitering)이라는 용어보다는 스니핑(Sniffing)이라는 표현을 흔히들 사용하는데, 네트워크에서 다른 사용자가 보낸 패킷을 분석하여 그 사용자의 사용자계정, 암호, 중요한 데이터 등을 빼내려는 의도가 그것이다. 하지만 네트워크 관리자 입장에서는 그러한 용도보다는 네트워크 모니터를 통해서 사내의 네트워크 트래픽을 분석함으로써 다음과 같은 이점을 이용할 수 있다.

 

   네트워크에 불필요한 트래픽으로 인해 전체 성능에 영향을 주는 요인 분석

   네트워크에서 발생하는 각종 문제점 진단

   네트워크 프로세스의 정확한 이해

 

그럼 지금부터 마이크로소프트의 네트워크 모니터의 설치방법 및 사용법에 대해서 알아보겠다. 네트워크 모니터의 전체(Full)버전은 마이크로소프트사의 별도의 제품인 “System Management Server (SMS)”에 포함되어 있다. 그렇다면 Windows 서버 제품에 포함된 것은 그것과는 조금 다르다는 얘기인데? 그렇다. 네트워크 모니터의 Simple버전이다. 네트워크를 캡처하는데 따른 제약이 있지만 간단하게 사용하는 데는 큰 지장이 없다. 제약사항을 살펴보면 다른 네트워크에 있는 트래픽을 캡처하지는 못한다는 것과, 네트워크 모니터를 실행하고 있는 컴퓨터와 관련없는 패킷은 캡처를 하지 않는 다는 것이다. 그런 작업들을 위해서는 네트워크 모니터 전체버전을 설치해야만 한다.

 

네트워크 모니터는 두 가지 구성요소로 나뉘어 있다. 네트워크에서 패킷을 캡처하는 역할을 하는 “Network Monitor Agent”와 캡처한 패킷을 분석하는 “Network Monitor Tool”로 구분을 할 수가 있다. 네트워크환경에서는 항상 그렇다. 역할이 이렇게 분담되어 있다. 예를 들어 원격지의 서버를 원격으로 관리한다고 하면 원격지의 서버에는 그 서버의 상태를 수집하는 “Agent”가 설치가 되어야 하고, 수집한 정보를 분석하고 관리할 시스템에는 “Tool”이 설치가 되어야 하는 것이다.(, SNMP Agent SNMP Tools)

먼저 네트워크모니터를 설치해 보겠다. 제어판의 프로그램 추가/제거’ Windows 구성요소를 통해서 접근한다.

<그림1-17. 마이크로소프트 네트워크 모니터 도구 설치>

Windows 구성요소의 관리 및 모니터링 도구를 선택하고 <자세히>버튼을 누르면 네트워크 모니터 도구를 선택할 수 있다. 네트워크 모니터 툴을 설치하면 Network Monitor Agent는 자동으로 설치가 된다. Network Monitor Agent네트워크 모니터 드라이버라는 이름으로 설치된다. 확인을 하려면 네트워크연결의 등록정보를 열어서 볼 수 있다.


<그림1-18. Network Monitor Agent – 네트워크 모니터 드라이버 설치>

<그림1-18>에서는 네트워크 모니터 드라이버가 설치된 모습을 보여준다. 만일 설치가 안 되었다면 <설치>버튼을 눌러서 네트워크 구성 요소 유형선택그림에서 프로토콜을 눌러서 네트워크 모니터 드라이버를 설치할 수도 있다.

한 시스템에 네트워크 모니터 드라이버만 설치하고, 또 다른 시스템 네트워크 모니터 툴을 설치한 다음에 다른 시스템이 수집한 네트워크 패킷을 원격으로 툴을 통해 들여다 볼 수 있을까? 눈치 빠른 분들은 감을 잡았을 것이다. 정답은 이다. 네트워크가 여러 개로 나뉘어진 상황에서는 그런 방법이 유용하게 쓰일수 있다. 라우터를 통해서 물리적으로 여러 개로 나뉘어진 네트워크가 있을 때 관리자는 네트워크마다 한 시스템에 네트워크 모니터 드라이버를 올려두고, 관리자가 있는 네트워크에서 각 네트워크의 Agent가 수집한 정보를 툴로서 분석하는 것이 가능하다.

하지만 Windows 서버제품에 들어있는 것은 심플버전이라고 말한바 있다. 거기에 따른 제약사항에서 다른 네트워크의 트래픽을 캡처하지는 못한다고 했다. 결국 그러한 작업을 하려면 Network Monitor Full Version이 필요하다.

이제 설치가 끝났다. 관리도구를 보면 네트워크 모니터관리도구가 추가된 것을 확인할 수 있다. 실행해 보니 “Microsoft 네트워크 모니터라는 도구가 실행된다.

<그림1-19. Microsoft 네트워크 모니터 네트워크 선택화면>

처음 네트워크 모니터를 실행했을 때 지정된 네트워크가 없다라는 에러 메시지가 발생할 수 있다. 또 여러 개의 네트워크 어댑터 카드를 가지고 있다면 네트워크 패킷 캡처를 원하는 네트워크 어댑터 카드를 지정해 주어야 한다. 예를 들어서 Private Public 이라는 이름의 2개의 네트워크 연결을 가지고 있다면 어느 네트워크 어댑터 카드로 들어오는 패킷을 캡처할 것인지를 지정해야 한다는 것을 의미하는 것이다.

네트워크 모니터의 캡처메뉴의 네트워크를 선택한후, 로컬컴퓨터를 확장하고 원하는 NIC를 지정해 준다. NIC MAC Address를 가지고 구별을 해야 하므로 여러분의 서버에 설치된 NIC MAC Address를 알아야 한다. 그것은 간단하게 명령프롬프트에서 “ipconfig/all” 명령을 통해서 알아볼 수 있다.

<그림1-20. ipconfig/all 명령을 통해서 Physical(MAC) Address 확인>

그림에서 Physical Address 부분이 바로 MAC Address를 말한다. 하이픈(-)으로 구분된 12자리의 숫자가 보일 것이다. 예제에서 필자는 Private 어댑터 카드를 선택했다.

 

다음에 네트워크 모니터의 캡처메뉴에서 시작을 누르면 해당 네트워크 어댑터 카드로 들어오는 패킷들을 수집하기 시작한다. 시작을 해 보자.

<그림1-21. Microsoft 네트워크 모니터 패킷 캡처 시작>

그림에서는 캡처가 시작되었고, 오른쪽 패널을 보면 742개의 프레임이 현재 캡처가 되었음을 보여준다. 캡처를 멈추려면 메뉴중 캡처를 이용하거나, 도구아이콘을 이용한다. 캡처메뉴의 중지하고 보기를 선택했다.

<그림1-22. Microsoft 네트워크 모니터 캡처 중지하고 보기>

필자는 이 그림을 캡춰하기 위하여 Windows XP Professional 이 설치된 192.168.5.3 IP Address를 사용하는 시스템에서 네트워크모니터가 설치된 BLUEAPPLE이라는 이름의 서버로 몇가지 작업을 했다. 첫번째로 명령프롬프트에서 ping 192.168.5.1 이라는 명령을 수행했고, 시작메뉴의 명령창에서 \\BLUEAPPLE 이라는 명령을 내려서 BLUEAPPLE이라는 이름을 가진 서버의 공유자원에 접속하고자 시도했으며, 웹브라우저를 실행하고 http://192.168.5.1 을 이용해서 192.168.5.1의 웹서비스를 요청하는 작업을 했다.

 

캡처를 중지하고 캡처한 패킷을 보여주는 그림이 나오는데 하나하나씩이 패킷 하나에 해당한다. 제목줄을 보면 프레임, 시간, 원본MAC주소, 대상MAC주소, 프로토콜, 설명, 기타원본주소, 기타 대상 원본주소, 기타주소등을 볼 수 있다. 각각이 뭘하는 걸까? 라고 의심이 간다면 앞의 내용을 다시 한번 읽어보길 바란다. 위에서 세가지 작업 정도만 진행을 했었지만 실제 캡처된 패킷은 600개가 넘는다는 것을 알 수 있다.

 

실제 회사의 네트워크 환경에서 캡처를 했다면 어떨까? 5~10초 정도만 패킷 캡처를 해도 천개 이상의 패킷이 잡히기도 한다. 우리가 생각하는 것보다는 훨씬 더 엄청난 작업을 네트워크에서는 처리를 해 주고 있는 것이다. 이런 이유 때문에 여러분이 테스트를 하는 환경에서는 네트워크 모니터 전체버전보다는 오히려 Windows 서버제품에서 기본제공되는 심플버전이 더 좋을 수도 있을 것이다. 자신과 관계있는 패킷만 캡처를 하기 때문에 문제해결에는 딱 좋은 정도로 사용이 가능하니까 이만하면 쓸만한 도구라는 생각이 든다.

 

일단 네트워크 모니터의 설명항목을 보면 간단한 설명을 볼 수 있다. 익숙해지면 이것만으로도 어떤 패킷인지 바로 알 수 있다. 자세한 정보를 보려면 원하는 패킷에 해당하는 부분에서 더블클릭을 해 본다. 패킷을 계층별로 풀어헤친 자세한 패널을 들여다 볼 수 있을 것이다.

 

<그림1-23. Microsoft 네트워크 모니터 자세히 보기>

가운데 패널이 캡처한 패킷을 분석해서 자세히 보여주는 부분이고, 가장 아래쪽의 패널이 원본패킷과 가장 근접한 데이터에 해당하는 원시데이터부분이다. 16진수(Hexa) 코드를 들여다 볼 수가 있다.

너무나 많은 패킷중에서 여러분들이 원하는 정보를 보다 쉽게 찾을 수 있도록 네트워크 모니터는 필터링을 지원한다. 캡처한 데이터를 저장해 두었다가 나중에 분석을 할 수도 있다. 메뉴는 상당히 많아 보이지만 메뉴를 살펴보면 충분히 이해할 수 있는 도구이다. 이상으로 간단한 사용방법에 대해서 설명했다.

<그림1-24. Microsoft 네트워크 모니터 필터링>

이 네트워크 모니터를 통해서 특정 호스트가 브로드캐스트를 지속적으로 뿌리는 형태의 문제점들은 간단하게 진단이 가능하다. 그런 다음 문제가 되는 호스트를 네트워크에서 격리시키고 다시 네트워크 모니터링을 해보면 문제점이 사라진 것을 확인할 수 있다.

구체적으로 다른 형태의 문제해결에 어떻게 도움을 줄 수 있는가는 조금 더 접근해야 할 문제이다. 네트워크가 제대로 동작을 하지 않는 경우, 수많은 원인들이 있을 것이다. 예를 들어서 사용자가 로그온을 하지 못한다든가, 인터넷에 액세스가 되질 않는다든가, DNS 쿼리가 실패한다든가 하는 등의 문제가 발생했을 때, 네트워크 모니터를 실행시켜 두고 그러한 네트워크 테스트를 해 보면 당연히 네트워크에 뿌려져야 할 패킷이 외부로 나가지 않는다든가, 혹은 나가긴 하지만 엉뚱한 응답이 온다든가 하는 등의 문제점을 네트워크 모니터를 통해서 들여다 볼 수가 있는 것이다. 앞으로 설명하게 될 네트워킹 서비스 부분에서 문제점을 해결할 때 네트워크 모니터를 사용하게 되는 것을 볼 수 있을 것이다. 그런 사항들을 통해서 네트워크 모니터의 활용도는 여러분 스스로가 챙겨 나가길 바란다.

네트워크 모니터를 실행시켜서 패킷을 캡처를 했어도 어떤 패킷들이 호스트에서 나가고 들어와야 정상적인 상태인지를 알지 못한다면 그것은 무의미한 데이터가 될 뿐이다. 사실 이러한 패킷을 제대로 분석할 줄 아는 전문가를 주변에서 찾기는 쉽지 않다. 하지만 이러한 것들을 통해서 네트워크의 문제점을 진단하고 해결 할 수 있다는 것, 멋진 일이다.

:
Posted by 새벽예찬
2008. 11. 10. 21:36

1-3. TCP/IP 통신의 기본흐름 Windows Networking2008. 11. 10. 21:36


TCP/IP Protocol Suite
를 기초로 하여 이들의 전체흐름을 도식화 해 보았다. 그림에서는 http 라는 프로토콜을 쓰는 응용프로그램이 데이터를 만든 다음 TCP/IP를 이용해서 네트워크 어댑터 카드를 통해서 내 보내기까지의 과정을 계층별로 그린 것이다. 정리를 한다는 기분으로 꼭 한번 생각해 보고 넘어가기 바란다.

<그림1-15. TCP/IP 통신의 흐름>

 

<그림1-15>를 보면서 이해해 보자. 어플리케이션 계층에서는 데이터를 만들었다. 웹서버로부터 홈페이지를 요청하는 http Get Request 일수도 있겠다. 이것을 전송계층의 TCP가 처리를 하도록 아래로 내려보내고 있다.

TCP는 상위로부터 받은 데이터에다가 자신이 해야 할 추가작업을 하고 있다. 목적지 컴퓨터에서 이 데이터를 처리해야 할 포트번호, 자신의 포트 번호와으로 표기가 해 놓은 그 밖의 추가 정보를 TCP헤더라는 이름으로 붙이고 있다. 결국 데이터에 TCP헤더를 추가하여 패킷이 조금 커진 셈이다. 이 패킷을 특별히 세그먼트라고 부른다. TCP 세그먼트라고 부르는 것이다. TCP 는 이 세그먼트라고 불리우는 패킷을 하위의 계층으로 내려보내주면 역할이 끝난다. 하위의 계층에는 IP가 있다.

 

IP는 역시 TCP가 내려보낸 패킷에 자신이 해야할 일 작업을 더한다. IP가 하는 일은 패킷배달부 역할을 한다. 배달이 제대로 되려면 당연히 주소정보를 추가해야 한다. 받을 컴퓨터 IP주소, 자신의 IP주소 등 기타 추가로 많은 정보를 추가한 IP 헤더라는 것을 붙인다. 이것을 IP Packet 이라고 부른다. IP는 이것을 물리적 계층으로 내려보내야 한다.

 

예제의 네트워크는 이더넷(EtherNet)환경이다. 물리적인 환경에서는 MAC Address를 통해서 각각의 카드를 식별한다고 했다.  ARP를 이용해서 MAC Address를 알아낸 다음 이더넷 이 네트워크에서는 이더넷 환경에서 통신이 가능한프레임이라고 부르는 패킷이 만들어 져야 한다. 이더넷에서는 상위 계층으로부터 받은 IP Packet에 수신측 MAC Address, 송신측 MAC Address 등으로 구성된 이더넷 헤더를 추가하고, 수신측에서 패킷의 손상유무를 확인하기 위한 CRCTrailer로써 추가한 다음 비로소 물리적인 네트워크에 전송을 해 주게 된다. 이것이 TCP/IP의 통신의 흐름이다.

 

여기서 응용프로그램이 만든 원본 데이터는 변화가 없었다는 것을 알 수 있다. 다만 각각의 계층에서 프로토콜들이 해야할 작업들을 충실히 했던 것뿐이다. 당연히 하위계층으로 내려갈수록 패킷의 크기는 커질 수 밖에 없다. 헤더가 계속 추가되고 있으니 당연한 결과이다. 각각의 프로토콜에서 처리해야 할 데이터에 해당하는 부분도 역시 점점 더 커지고 있다.  IP계층 입장에서 보자면 데이터에 해당되는 부분은 원본데이터에 TCP헤더부분이 더해진 것이 데이터 부분에 해당한다. 이렇듯 각각의 프로토콜 입장에서 몸통(Body)부분에 해당되는 영역을 Payload 라고 부른다. 정리하면 EtherNet패킷의 Payload IP 패킷이 되고, IP패킷의 Payload TCP Segment 가 될 것이며, TCP패킷의 Payload는 응용프로그램의 데이터가 되는 것이다.

 

이러한 과정을 거쳐서 네트워크로 나간 패킷은 어떻게 될까? 이 패킷의 헤더에는 목적지의 MAC Address가 있으므로 패킷을 받게 되는 네트워크 어댑터 카드들은 자신의 MAC Address에 해당하는 패킷인지를 확인한 후 맞다면 받아들이게 되고, 자신의 패킷이 아니라면 무시한다. ARP Broadcast와 같은 브로드캐스트 패킷은 네트워크의 모든 컴퓨터들이 받게 되는 메시지이다. 이것도 당연히 받아들이게 된다. 결국 자신의 MAC Address에 해당하는 패킷과 브로드캐스드 주소를 가진 패킷이 네트워크 어댑터 카드들이 받아 들이게 되는 패킷이다.

 

패킷을 받은 네트워크 어댑터 카드는 이 패킷을 꼬리에 붙어 있는 CRC를 통해서 손상이 없음을 확인한 다음 이더넷 헤더부분을 제거하고 처리해야 할 몸통부분만을 상위의 프로토콜에게 올려준다. IP는 역시 헤더부분을 들여다 보는데 여기에는 목적지의 IP Address정보가 제공된다. 이것이 자신의 IP Address인지 확인을 한다. 아니라면? 역시 버리고, 목적지의 IP Address가 자신의 IP Address와 일치하다면 헤더를 제거하고, 상위의 프로토콜인 TCP UDP에게 올려보낸다. 어떤 프로토콜에게 올려보낼것인지는 IP헤더에 기록이 되어 있다. 예제의 경우는 TCP였다. IP계층으로부터 패킷을 넘겨받은 TCP는 헤더를 읽어서 목적지 포트번호를 확인한 다음 헤더를 제거하고 포트번호에 해당하는 응용프로그램에 데이터를 올려보낸다. 예제에서는 http 프로토콜이었으니 포트번호 80번이었을 것이다. 웹서비스에게 이 데이터를 넘겨주면 통신을 마치게 된다. 이런 과정을 통해서 송신측 컴퓨터의 응용프로그램이 만든 데이터는 아무런 손상없이 수신측 응용프로그램까지 전달 될 수가 있었다. 이 모든 것은 TCP/IP 프로토콜이 해 주고 있는 작업이었다는 것을 알 수 있다.

 

지금까지 설명한 내용은 앞의 내용을 잘 이해했다면 알 수 있는 내용이었다. 다시금 정리를 했던 이유는 바로 다음의 내용때문이다. 이것을 조금 더 응용해서 하나의 그림만 더 살펴보고 이번 장을 마친다.

 

IP 패킷이 라우터를 경유해서 어떻게 다른 네트워크로 흘러가는가? 이것을 이해하는 것은 TCP/IP통신을 이해하는 것에 있어서 아주 중요한 대목이다. TCP/IP Protocol LAN에서 혹은 WAN에서 매체나 통신방법을 가리지 않고 사용할 수 있는 범용의 산업표준 프로토콜이다. 이번 그림을 통하여 IP Packet이 생성되어 라우터를 건너 목적지에 도착할 때까지 패킷의 변화를 살펴보고 흐름을 이해해 보고자 한다.

 

<그림1-16. IP Packet의 기본흐름 이해>


위의 예제에서는 A호스트와 B호스트는 라우터로 분리된 서로 다른 네트워크에 있고, TCP/IP 통신을 하고자 한다. IP Address MAC Address를 실제로 예를 들지 않고, IP4, MAC2 등과 같이 표현하였다. 실제로는 192.168.5.3 등과 같은 IP가 들어 있어야 한다. 물론 MAC Address 항목에는 6바이트로 이루어진 12자리의 숫자가 있어야 할 것이다. 상위의 계층은 고려하지 않고, Network계층과 Physical 계층만을 고려한 것이다.


A
호스트가 명령프롬프트에서 “ping IP4”라고 명령을 내렸다고 가정해 보겠다.


A
호스트는 B호스트의 IP Address IP4를 목적지로 하는 IP Packet을 만들어내고, 이것을 네트워크에 내 보내기 위해서는 해당 네트워크의 프레임이 생성이 되어야만 한다. IP4를 쓰는 B호스트의 MAC Address MAC4를 목적지로 하는 이더넷프레임이 만들어 진다. 그 다음에 이것을 네트워크에 흘려보내게 되면 안타깝게도 결과는 “Reply from IP4”라는 성공의 응답이 날아오는 것이 아니라 “Request Timeout”이라는 에러메시지를 받게 된다.


A
호스트가 B와 직접 통신을 할 수가 있을까? 단순히 그림상으로 봐도 안 된다는 걸 알 것이다. 중간에 라우터라고 하는 장비가 있고, A B가 통신을 위해서는 이 라우터를 넘어가야만 한다.

왜 직접 통신이 되지 않는 것인지 구체적으로 살펴보자. 지금 이 프레임의 목적지 MAC Address MAC4이다. A호스트가 네트워크에 패킷을 내 보냈을 때 A호스트가 속해 있는 모든 컴퓨터들이 이 패킷을 받게 된다. 라우터도 물론 이 패킷을 받게 된다. 이 패킷을 B호스트가 받기 위해서는 라우터가 넘겨줘야만 한다. 네트워크가 나뉘어 있기 때문이다.


라우터는 어떻게 동작할까? 호스트와 똑같이 생각하면 된다. 라우터의 NIC가 받아들이는 패킷은 목적지가 자신의 MAC Address MAC2이거나 브로드캐스트 어드레스인 패킷이다. 하지만 지금 라우터가 받은 MAC4는 그러한 것들에 해당되지 않는다. 당연히 라우터는 MAC4를 목적지로 하는 이더넷 프레임을 받게 되긴 하지만 그냥 버려버리고 만다. 자신이 처리할 패킷이 아니기 때문이다. 이런 이유로 통신이 실패하게 되는 것이다.


그래서 위와 같은 상황에서는 A호스트와 B호스트는 직접 통신을 할 방법은 없다. 반드시 라우터의 도움을 받아야만 한다.
하지만 분명히 우리는 위와 같은 상황보다 훨씬 복잡한 인터넷 환경에서도 원활하게 통신을 진행하고 있다. 어떻게 처리되는지를 이해해 보자. 바로 위에서 통신이 안되는 상황을 경험했었다. 하지만 자신과 같은 네트워크에 있는 호스트와 통신하는 방법과 자신과 다른 네트워크에 있는 호스트와 통신방법을 다르게 사용하면 해결할 수가 있다. 상대방 컴퓨터가 자신과 같은 네트워크에 있다면 직접 통신을 시도하고, 다른 네트워크에 있다면 라우터에게 전달요청을 맡기면 된다.


그래서 A호스트는 B호스트에게 데이터를 보내고자 할 때 가장 먼저 하는 작업이 바로 B호스트가 자신과 같은 로컬 네트워크에 있는지, 라우터 건너의 원격지 네트워크에 있는지를 판단한다. 그 판단의 방법으로 로컬 서브넷 마스크를 이용해서 상대방의 IP주소중에서 네트워크 ID를 구별해 내고, 자신이 속해있는 네트워크 ID와 비교작업을 한다. (여기에 대해서는2.IP Address관리에서 자세히 다룬다.) 판단결과, 로컬네트워크라는 결과가 나오면 직접 해당 호스트의 MAC주소를 찾기위한 ARP브로드캐스트를 사용하고, 원격지 네트워크라면 라우터에게 전송을 요청하기 위해 라우터의 NIC에 해당하는 MAC주소를 찾기 위한 ARP브로드캐스트를 전파한다.


또 한 이유로, 만일 A호스트가 IP4에 해당하는 MAC Address를 찾는 ARP Request Broadcast 메시지를 만들어서 네트워크에 전파한다면 역시 에러가 발생한다. ARP메시지가 브로드캐스트이기 때문에 라우터는 이 ARP 요청을 라우터 건너편으로 넘겨주지 않기 때문이다. 라우터로 분리가 된 네트워크에서는 라우터 바깥의 네트워크, 즉 원격지 네트워크의 호스트와 통신을 할때는 라우터의 도움이 필수적인 것이다.


예제에서는 서로 다른 네트워크 ID라는 결과가 나왔기 때문에 원격지에 있다고 판별이 되었다. 그러면 A호스트는 라우터를 건너야만 목적지의 시스템에 접근할 수 있다는 판단을 하고 라우터의 도움을 얻어서 전송을 하고자 한다. 먼저 A호스트의 Network Layer에서 IP B호스트의 IP Address IP4를 목적지로 하는 패킷을 만든다.(그림1-16- ①) 그렇지만 A호스트는 IP4 MAC Address를 찾고자 하는 ARP 브로드캐스트 요청을 만드는 것이 아니라 대신 메시지를 넘겨줄 라우터의 IP Address IP2 MAC Address를 찾는 ARP 브로드캐스트 요청을 만들어서 네트워크에 내 보내게 된다.

라우터는 이 ARP 요청에 대한 응답으로 자신의 MAC Address MAC2를 담은 ARP응답 메시지를 만들어서 A호스트에게 전달하게 되고 이렇게 되면 A호스트는 라우터의 MAC Address를 알게 된 것이다. MAC Address를 목적지로 하는 이더넷 프레임을 만들었다.(그림1-16-②)

A호스트는 B호스트로 보내기 위한 IP Packet을 라우터에게 요청하는 이더넷 프레임을 만드는 것이 가능해 진 것이다.


그 프레임은 라우터가 받아들이게 되고, 자신의 네트워크 인터페이스 카드가 가지는 MAC주소와 일치하기 때문에 CRC를 통해서 프레임의 무결성을 확인한 후, 헤더를 제거하고 데이터 부분에 해당하는 IP패킷을 네트워크 어댑터 카드 드라이버를 통해서 상위 계층에 해당하는 IP에게 전달한다.


라우터의 IP가 네트워크 어댑터 카드로부터 패킷을 받아서 목적지IP주소를 확인해 보면, MAC Address는 자신의 것이 맞았지만 목적지의 IP Address는 자신의 IP 주소와 하고, 그 패킷을 받아야 할 최종 목적지가 자신이 아니고 다른 호스트임을 알게 된다. 라우터가 아닌 일반호스트라면 이러한 경우에 자신의 패킷이 아니므로 버리면 그만이겠지만 라우터는 다르다. 이 패킷을 목적지까지 라우팅을 해 주는 것이 라우터의 임무이기 때문이다.


그때 라우터는 미리 정의된 자신의 라우팅 테이블을 근거로 목적지로 가기 위한 최적의 경로를 판단하고(그림1-16-③), 해당 네트워크로 새로운 물리적인 프레임을 만들어서 전송한다. (그림1-16-④) 이때 라우터가 만드는 프레임의 목적지 MAC주소는 또 다른 라우터의 MAC주소일 수도 있고, 특별한 호스트의 MAC주소일 수도 있다. 예제에서는 직접 IP4 MAC에 해당하는 MAC4 라는 주소를 목적지의 주소로 사용을 하였다. (그림1-16-⑤)


지금까지 <그림1-16>에 대한 설명을 했다. 차근차근 그림을 한번 들여다 보자. 특히 A호스트에서 라우터로 넘어가는 패킷, 라우터에서 B호스트로 가는 패킷의 IP Address, MAC Address부분의 변화를 신경쓰면서 이해해 보기 바란다.


여기서 한가지 알고 가야 할 것이 있다. 라우터를 통해서 다른 네트워크 패킷이 넘어가지만 IP주소의 변화는 전혀 없는 것을 알 수 있다. 단지 물리적인 네트워크의 프레임만 변화가 있을 뿐이다. 이것은 큰 의미를 준다. 우리가 IP 을 사용하여 지구 반대편의 웹서버를 찾아갈 때 웹 브라우저에서 발생시킨 패킷은 크고 작은, 혹은 서로 다른 수많은 네트워크를 경유해서 전송되지만 IP 계층 위의 계층의 데이터는 변화가 없다. 단지 그때 그때 상황에 맞도록 IP 계층 하위 계층에서의 변화만으로 전송이 가능하다는 것이다.


:
Posted by 새벽예찬