달력

5

« 2024/5 »

  • 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
  • 29
  • 30
  • 31
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 새벽예찬

 

이글을 읽는 독자들은 대부분 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. 10. 21:07

[Note] TCP 3 Way Handshake Extra Articles2008. 11. 10. 21:07


TCP 3 Way Handshake
가 진행되는 과정에 대해서 알아보도록 하겠다. TCP/IP Protocol에 대해서 처음 공부하는 독자라면 일단 지나쳐도 좋다. 하지만 다음에 다시 한번 들여다 봐야 할 것이다.

TCP 3 Way Handshake TCP/IP프로토콜을 이용해서 통신을 하는 응용프로그램이 데이터를 전송하기 전에 먼저 정확한 전송을 보장하기 위해 상대방 컴퓨터와 사전에 세션을 수립하는 과정을 의미한다. 이름이 재미있다. 영어 그대로 보면세방향으로 악수를 한다?” 라고 표현을 했는데, 맞는 표현이다. 이 과정에서 송신측과 수신측에 총 3개의 패킷이 생성이 되기 때문이다. 캡처한 그림을 들여다 보라.

<그림1-6. 네트워크 모니터로 캡처한 그림 – TCP 3 Way Handshake1>

그림에서 하이라이트된 부분을 보면 192.168.5.3 이라는 IP주소를 사용하는 컴퓨터가 BLUEAPPLE이라는 이름의 컴퓨터로 HTTP Get Request를 보내는 것을 알 수 있다. BLUEAPPLE이 웹서비스를 하고 있다. 그런데 웹서비스를 요청하는 패킷의 앞에 TCP 패킷 3개가 더 있다는 것을 알 수 있다. 주의 깊게 보면 192.168.5.3 BLUEAPPLE에게 TCP패킷을 보내고 있고, BLUEAPPLE은 그에 대한 응답을 하고 있고, 다시 192.168.5.3이 뭔가 패킷을 보내고 있는 것이 보일 것이다. 이 과정이 TCP 3 Way handshake 이다. 그렇다면 이 과정에서 어떤 일이 생길까? 구체적으로 보도록 하자.


<그림1-7. TCP 3 way handshake의 과정>

먼저 송신측 호스트는 상대방과 통신을 원하고 있음을 알리는 뜻으로 TCP헤더의 SYN(Synchoronize) Flag 를 켠다. 켠다는(on) 것은 “1”로 설정함을 의미한다. 그리고 이 세그먼트(보통 TCP 패킷을 세그먼트라고 부른다.)의 일련번호(S/N)를 붙여서 세그먼트의 시작번호를 상대방에게 알려준다.(TCP 3 way handshake의 첫번째 과정)

수신측 호스트는 이 SYN Flag 신호에 대해서 응답을 하게 되는데 송신측 호스트가 보낸 패킷을 잘 받았다는 표시로 응답메시지를 만든다. ACK(Acknowledgement) Flag를 켜고, 상대방의 S/N에 대한 확인메시지를 발송해 주는 것이다. 예제에서 상대방의 S/N 100번이었기 때문에 S/N=100번을 잘 받았다는 응답으로 수신측 호스트는 다음에 받을것으로 기대되는 일련번호를 응답한다. 결국 100번에 1을 더하여 101번이라는 응답을 주게 된다. 그런 이유로 위의 예제에서 두번째 패킷의 ACK No 101번이 되었다. 이걸로 끝이 아니다. 자신이 보낼 패킷의 일련번호도 역시 발송하게 되므로 SYN Flag=on, 자신의 Sequence Number 200번부터 시작한다는 정보를 담아서 세그먼트를 만들게 되는데 이것은 결국 송신측과 수신측이 양방향 세션을 수립함을 의미하는 것이다.(TCP 3 way handshake의 두번째 과정)

마지막으로 송신측 호스트는 두번째 패킷에 대한 응답을 해 주게 되고, 그때부터 데이터의 전송이 시작된다. (TCP 3 way handshake의 세번째 과정)

조금 복잡한듯 하지만 익숙해 지면 간단히 찾을 수 있다. 네트워크모니터를 보면 설명부분에서 순서대로 S, A..S, A 로 시작하는 패킷이 있는 것이 보일 것이다 이 부분이 TCP 3 Way handshake를 하는 과정이다.

<그림1-8. 네트워크 모니터로 캡처한 그림 – TCP 3 Way Handshake2>


 

:
Posted by 새벽예찬

네트워크를 다루는 수많은 책들 중 빠지지 않는 것이 있다면 OSI 7 Layer에 관한 내용일 것이다. 그렇다면 왜 그렇게 강조를 하는 것일까? 당연한 얘기겠지만 그만큼 중요해서 일 것이다. 문제는 OSI 7 Layer라는 것이 사실 초보자들에게는 조금 어렵다는 것인데, 그렇다고 그냥 넘어가서는 안된다. OSI 7 Layer의 핵심은 네트워크라는 하나의 흐름을 몇 개의 계층형태로 정리를 하고 있다는 것이다. 필자가 이것을 중요하게 언급하는 이유는 이러한 계층모델을 이해하고 나서 다음 과정을 공부하는 것과 이해하지 못하고 다음 과정을 공부하는 것은 너무나 큰 차이가 있기 때문이다.


네트워크에서 찾을 수 있는 라우터, 스위치, 허브 등 각종 장비들과, 네트워크상에서 구현되는 웹서비스, 메일서비스 등의 어플리케이션들, 이들 어플리케이션이 만드는 데이터를 전송해 주는 역할을 하는 TCP/IP 프로토콜 등 이 모든 것들이 OSI 7 Layer라고 하는 계층모델과 밀접한 연관성이 있기 때문이다. 그런 이유로 이것을 이해하면 그만큼 네트워크를 이해하는 속도가 빨라지게 된다.  2시간 공부해야 할 것이 1시간이면 이해할 수가 있게 될 것이다. 그렇게 시간을 단축할 수 있다면 다음 단원들을 위해서 조금 시간을 더 투자해 볼만 하다는 생각아닌가?


그렇다면 왜 이렇게 네트워크를 계층구조로서 구분해서 이야기를 하고 있을까? 그것은 네트워크상에서 컴퓨터와 컴퓨터가 데이터를 주고 받는다는 것이 그리 만만치만은 않다는데 있다. 한 컴퓨터에서 응용프로그램을 실행한 다음 데이터를 만들어 내서 상대방 컴퓨터에 이 데이터를 전달하기까지는 많은 작업이 필요하다.


먼저 상대방 컴퓨터가 누구인지를 판단해야 하며, 상대방 컴퓨터가 이 데이터를 인식할 수 있도록 데이터 포맷을 결정해야 하고, 상대방 컴퓨터의 이름을 근거로 해서 상대방 컴퓨터를 찾아갈 수 있는 방법을 결정해야 하고, 또한 데이터가 전송되다가 문제가 생겼을 때 체크할 수 있는 방법도 제공이 되야 한다. 이 모든 것을 하나로서 처리하기는 현실적으로 어렵다. 네트워크를 처음 공부하는 사람들에게나 이러한 네트워크 프로그램 및 프로토콜을 만드는 개발자들 입장에서도 이 모든 통신과정을 한꺼번에 처리하려고 한다면 그만큼 어렵게 느껴질 수 밖에 없을 것이다.


ISO(
국제표준화기구;International Standard Organization)에서는 OSI(Open System Interconnection) Reference Model이라는 계층모델로써 네트워크에서 하나의 표준을 제시하고 있다. OSI Reference Model은 일곱 개의 계층으로 나뉘어 있다고 해서 OSI 7 Layer라고 부르는 것이다. 이것을 원어 그대로오에쓰아이 세븐 레이어혹은오에쓰아이 칠계층이라고 읽으면 된다. 계층모델은 네트워크를 하나로 바라보는 것이 아니라 네트워크 통신을 하는 과정을 단계별로 구분 지어서 각각의 계층별로 네트워크에 접근할 수 있게 해 준다. 결국 혼자서 다 처리하지 말고 맡은바 일만 제대로 처리를 하면 되는 분업을 통해서 효율성, 정확성을 기해 보자는 것이다.


예를 하나 들어보자. 당신이 지금 새로운 네트워크 프로그램을 개발하고 있다고 가정해 보겠다. 일단 먼저 해야 될 일은 사용자들이 컴퓨터를 켜고 실행할 수 있도록 사용자 인터페이스를 개발해야 할 것이고, 다음에 할 일은 이 응용프로그램이 만드는 데이터를 네트워크에 전송해야 할 것이므로 데이터를 실어나를 수 있는 프로토콜을 만들어 내야 할 것이다. TCP/IP와 같은 형태의 프로토콜을 개발해야 한다는 것을 의미한다.


그렇다고 이러한 프로토콜이 당신의 컴퓨터가 통신을 위해서 사용하는 랜케이블, 전화선 등에 데이터를 실어주지는 못한다. 그 작업은 바로 우리가 보통 랜카드라고 부르는 네트워크 어댑터 카드가 해 주는 일이다. 그래서 여러분은 다음 순서로 프로토콜이 네트워크 어댑터 카드에게 데이터 전송을 요청할 수 있도록 프로그래밍 해야만 할 것이다. 이런 일을 다 할 수 있는 개발자가 얼마나 있을까? 물론 한국의 개발자들이라면 해 내겠지만.


계층모델로 접근을 할때는 상황이 달라진다. 프로그램 개발자들은 응용프로그램을 개발한다. 그리고 나서 할일은 이 응용프로그램이 TCP/IP NetBEUI등의 프로토콜을 이용할 수 있도록 지정만 해 주면 된다. 프로토콜 개발자들은 응용프로그램으로부터 데이터를 넘겨 받아서 네트워크에서 통신하기 위한 약속들을 지키도록 몇가지 정보를 추가한 다음 네트워크 어댑터 카드로 보내주는 작업을 해 주면 된다. 네트워크 어댑터 카드는 프로토콜로부터 받은 데이터를 실제 케이블에 실어서 상대방 컴퓨터의 네트워크 어댑터 카드까지 갈 수 있도록 해 주면 된다. 각자 할일만 명확히 처리를 해 주면 되는 것이다. 계층모델을 가장 간단히 표현해 본 예제이다. 위와 같이 처리되는 것을 이해할 필요가 있다.


개발환경만 편해지는 것이 아니다. 더 큰 이점은 바로 당신, 시스템 관리자들에게 제공된다. 어느날 회사의 한 사용자가 인터넷이 안 된다고 불평을 하고 있다. 어떻게 해결해 주어야 할까? 사용자가 인터넷이라는 네트워크를 사용하기 위해 실행시킨 응용프로그램부터 추적을 해 봐야 할텐데 너무나 막연하진 않은가? 하지만 계층모델로 접근하면 보다 명확해 진다. 응용프로그램 자체가 문제가 생겼다면 데이터를 만들지도 못할 테니 당연히 네트워크에 실어보낼 수는 없을 것이다. , 데이터를 전송해 주는 프로토콜상의 문제라면 케이블이 불량이라거나, 허브가 꺼져 있다거나 하는 물리적인 문제와도 무관해진다. 라우터가 꺼져 있다거나 하는 물리적인 문제라면 역시 응용프로그램, 통신 프로토콜 등과도 무관해 지고. 이렇듯 문제가 생겼을 때 계층모델은 문제점을 계층별로 격리시켜서 문제해결을 하는데 도움을 주게 된다. 완전하지는 않더라도 보다 빠르게 문제점을 찾게 도와주는 것이다. , 케이블이 불량인 경우인데도 엉뚱하게 시스템을 껐다 켠다거나 하는 식의 시간낭비는 하지 않게 해 준다는 얘기다.


OSI Reference Model
7계층은 다음과 같다.


Layer 7 – Application

Layer 6 - Presentation

Layer 5 – Session

Layer 4 – Transport

Layer 3 – Network

Layer 2 – Data Link (MAC, LLC)

Layer 1 – Physical


이들을 외우라는 얘기는 아니다. 필자의 경험으로는 외운다고 해도 금방 잊게 될 것이다. 남들이 보기에 유식하게 보일 순 있어도 이것을 단순히 외운다고 큰 도움이 되지는 않는다. 다만 가장 기본이 되는 네트워크를 구분해 놓은 계층모델인 OSI 7 계층이 어떠한 계층들로 이루어져 있는지 살짝 들여다 봐 주기를 바란다. 각각의 계층이 어떤 역할을 하는지도 언급을 하지 않겠다. 그것보다는 네트워크를 계층구조로서 이해해 볼 것을 권한다.


위에서 이미 핵심을 예를 들었다. 다시 한번 마지막으로 정리를 해 보겠다. 한 컴퓨터에서 사용자가 웹브라우저를 실행하고, 네트워크에 있는 웹서버의 홈페이지에 접근을 한다고 가정을 해 볼까? 사용자는 웹브라우저라는 어플리케이션을 실행해야 한다. 이 어플리케이션은 사용자가 원하는 결과를 얻기 위해서 웹서버로 보내는 요청을 만들고 이 요청을 전달해줄 TCP/IP라는 프로토콜을 이용한다. TCP/IP 프로토콜은 네트워크 어댑터 카드에 데이터를 실어주고, 네트워크 어댑터 카드는 유선 혹은 무선을 이용해서 물리적인 환경으로 패킷을 전달한다.


하나의 흐름이지만 몇 개의 구성요소가 모여서 하나의 네트워크를 이룬다는 것을 알 수 있을 것이다. 이것이 네트워크이다. 이렇듯 계층(Layer)의 형태로 네트워크를 바라보는 눈을 키워야 한다. 우리가 무심코 사용하던 네트워크라는 것이이렇게 재미있구나라는 생각을 가지게 됐으면 하는 바램이다.


조금 이야기가 길어졌다. 한가지만 기억하자. 네트워크라는 것은 계층모델로서 이해 해야 겠구나! 라는 생각을 가져 주면 된다. OSI 7 계층은 하나의 표준안을 제시한 것이지 모든 네트워크 환경에 반드시 일곱개의 계층으로 나눠져야 한다는 것은 아니다. 위의 예제를 잘 들여다 보면 완전하진 않지만 계층모델의 기본흐름은 그대로 따르고 있는 것을 알 수 있다.

마지막으로 그림으로 정리를 해 보자.

:
Posted by 새벽예찬