안녕하세요~ 포스팅을 정말 오랜만에 하네요. 

그동안 돈에 눈이 멀어 외주도 정말 많이하고. 넥스터즈 활동도 하고~ 그동안 개발하던 앱도 업데이트하고~ 하나는 마무리하여 런칭을 앞두고 있어서 여유가 생겼네요ㅎㅎ

아! 런칭한 앱은 Gola~ 라는 먹거리 월드컵 앱입니다. 디자이너가 직접 디자인하여 깔끔한 UI를 갖고있는데요 . iOS, Android 둘 다 제공하고 있으니 한번 사용해보세요 ㅎㅎ

내일 새로운 외주 미팅이 있는데 외주가 성사되면 다시 얼마동안 안보일터이고~ 성사되지 않는다면 자주 찾아뵐 수 있겠네요 ㅋㅋㅋ

블로그는 항상 머리속에 "이번주엔 포스팅을 시작해야지!!! " 하고 있었지만 많은 정보를 한번에 포스팅하려니 겁을먹고 미루고 미루다 한가지 결심을 했습니다.

그 결심은 , 이제는 한 주제에 대해서 짧고 짧고 짧고!! 간략하게!(중요하죠.) 자세하도록 하나씩 포스팅하는게 좋겠다!! 라는거죠ㅋㅋㅋㅋㅋㅋ 

오늘은 스캐닝을 공부하면서 인터넷에 수 많은 키워드로 검색을 해봤는데, 아! 여기다! 싶을정도로 자세하게 적어놓은 글이 없더라구요.

답답한 나머지 스캐닝부분은 완벽하게 정리해서 올리겠다! 라는 마음을 갖게 되었습니다! 포스팅 시작하죠.


우리가 인터넷을 사용할 때 유선을 사용한다고 하면 먼저 랜선을 벽에 있는 포트에 잭을 꽂는게 우선이죠? 무선에서는 접속 가능한 네트워크를 찾습니다.

이런 특정 영역에 존재하는 네트워크를 식별하는 과정을 스캐닝이라고 합니다.


스캐닝은 검색하다,찾는다 라는 의미입니다.


스캐닝을 하기 위해선 무엇을 찾아라~~ 라고 명령할 수 있는 파라미터가 필요합니다.

조건에 맞는 네트워크를 찾기 위하여 파라미터가 필요한것이죠. 파라미터는 다음과 같습니다~!


1. BSSType 

인프라스트럭쳐 BSS를 찾아라, IBSS를 찾아라. 둘 다 찾아라.

이와 같이 BSSType는 기존에 여러분들이 생각했던거와 같이 2가지가 아니라 세가지입니다.

2. BSSID 

BSSID의 값을 대표적으로 AP의 물리주소를 사용합니다..
그렇기때문에, 특정 AP만 찾아라, 혹은 모든 AP만 찾아라 라고 명령할 수 있습니다.

이 값을 특정한 AP의 물리주소로 사용할 수 있다고 했는데요. 이 뜻은 집에 왔을땐 내가 등록한 물리주소, 즉 집에 있는 AP의 물리주소만 등록하여 집에있는 AP들만 잡아라~~ 라고 할 수 있습니다. 즉 나쁜마음을 갖고있는 이웃집에서 전송하는 AP는 잡지 말라고도 설정할 수 있죠. (반대로 물리주소를 사용하기 때문에 브로드캐스트 주소로 사용할 수 있죠.)

3. SSID 

BSSID는 맥 주소로 6바이트입니다. 이 값을 외우고 다니는사람은 없겠죠??ㅋㅋ 그렇기 때문에 나온것이 SSID입니다. 이 값은 인간을 위해서 나온값입니다. iptime / Olleh-5G와 같이 특정한 장소에 물어봤을 때, 친구보고 "야! 여기 와이파이 이름 뭐야!?"할 때 알려주는 이름이 SSID입니다.



스캔유형에는 능동스캐닝/수동스캐닝 두 종류가 있습니다.

능동스캐닝  - 스테이션(장치,기기,핸드폰(모바일))에서 AP에게 정기적으로 프로브 프레임 요청을 보내는것입니다. (보통 각 회사(휴대폰 기술)마다 다른데 비콘프레임이라고 부르는 회사도 많습니다.) 이건 이전에 공부한 ICMP 간청메시지와 비슷하죠. 

수동스캐닝 - 스테이션이 AP에게 프레임 요청을 보내지 않고 데이터를 수신하기만 하는것을 수동스캐닝이라 부릅니다. 이건 ICMP 라우터 광고메시지와 비슷하죠. 

스캐닝을 통하여 내가 어떤 AP 혹은 기지국에 포함되어있는지를 알아낼 수 있습니다.


옛날 나온 영화중  마이너리그 리포트라는 영화가 있었죠. 이 영화를 보면 톰 크로즈가 악당에게서 도망가던 중 어느 쇼핑몰에 들어간 장면이 나옵니다. 그 쇼핑몰에서는 톰 크루즈가 보는곳마다 "~~ 님 이 제품 사세요!" 라는식의 광고를 계속해서 보여주죠. 이 장면은 지금 이 시점에서 모두 구현이 되어있습니다.  요즘 백화점에 들어가면 핸드폰에 "~~제품 **%할인중입니다!" 라고 푸쉬가 날라오기도 하며 시럽어플을 사용하면 근처의 음식점을 지나갈때도 푸쉬를 날려줄때도 있습니다. 이런 푸쉬 알람들은 비콘에서 사용자의 디바이스에게 할인정보를 전송해주는것인데요. 이 개념은 수동스캐닝에서 발생된 개념을 활용한 실생활의 예입니다.

4. 채널목록.

이 파라미터를 보는순간 네트워크에는 특정한 채널 목록이 있구나~~ 라고 생각이 바로 듭니다. 아! 혹시 여러분은 집에서 사용하는 공유기의 채널을 설정해본적이 있으신가요? 

보통 모든 집에서 iptime을 많이 사용하죠. 저희 집에서도 iptime을 사용하는데요. iptime은 특별하게 가상 IP주소에서 채널을 설정할 수 있게끔 제공해줍니다. 

소비자가 채널을 설정하지 않는다면 공장에서 기본적으로 제공해주는 채널을 사용하게됩니다. 보통 1번대 채널을 많이 사용하죠. (실제로 채널 설정페이지로 들어가면 1번채널을 사용하고 있는 AP의 숫자가 굉장히 많습니다 )

AP가 제공하는 2.4Ghz에서는 1번부터 13번까지의 채널을 사용할 수 있습니다.(겹치지 않는 채널은 3개이며, KT에서는 4개를 제공해준다고 합니다!)

채널목록이 있다는 것은 1번채널을 뒤져라, 2번채널을 뒤져라 혹은 모든채널을 뒤져라 ! 라고 명령을 줄 수도 있는것이죠.
802.11ac를 지원한다면 5Ghz를 사용할 수 있는데요. 이 5Ghz가 제공하는 채널 갯수는 24개입니다. 

이와같이 채널들이 13개, 24개 이렇게 존재하니 사용자는 사용하기를 원하는 특정 채널목록 파라미터값을 주고, 원하는 채널만 스캔할 수도 있으며, 모든 채널을 찾을수 있습니다. 이런 채널목록을 알고있으면 원하는 채널에만 붙도록 하게끔 할 수 있다는 사실을 꼭 명심하세요!

-> 기본값은 모든 채널을 찾는것입니다. 그렇기 때문에 종종 wifi구역에 들어가도 wifi가 조금 늦게뜨는 경우는 채널을 탐색하기 때문에 늦게 출력되는겁니다.


5. 프로브 지연.

프로브는 탐사,탐침라는 뜻을 갖고있습니다. 스테이션은 해당 채널에 들어와서, 일정 시간동안 남의 소리가 안 들리면 프로브요청을 보냅니다. ( 광고가 안들리면 간청을 보내죠.) 이 말은 수동스캐닝을 하다가 아무 말도 안들린다면 능동스캐닝을 한다는 뜻이죠.

여기에서 일정 시간동안 남의 소리가 안들린다는것은 최소 채널 시간동안 다른 무선매체가 떠드는지 검사한다는 것인데요.  프로브 요청을 보내기 위해서 기다리는 시간을 프로브 지연이라고 합니다.

즉. 스테이션은 특정한 채널에 접속하자마자 능동 스캐닝을 발생시키지 않습니다. (프로브 요청을 보내지 않습니다.) 잠시 기다렸다가 광고가 없으면 프로브 요청을 보냅니다.

여기에서 사용하는 파라미터가 최소 채널 시간과 최대 채널 시간입니다. 스테이션은 최소 채널 시간 지연 및 최대 채널 시간을 지정해야합니다.

스테이션이 새로운 채널에 접속했을 때 처음은 프로브지연을 합니다. 즉 프로브 지연을 할 때 수동 스캐닝을 하는것이죠. 수동 스캐닝을 할 때, AP가 존재한다는 뜻은 내 주변에 하나 이상의 무선장치가 있다는 뜻입니다.

이 이야기는 현재 스테이션의 상태가 IBSS를 스캐닝하는것인지, 아니면 인프라스트럭쳐 BSS를 스캐닝하는것인지 모르기 때문에 하나 이상의 무선장치가 있어야 하는것이죠.

내 주변의 하나 이상의 무선장치가 있다면 광고/간청메시지를 보내거나 다른 메시지를 보내겠죠. 즉 적어도 하나 이상의 무선장치가 존재한다면 최소 시간만 기다리면 그 무선장치가 특정한 신호를 발생시킬것이다. 라고 인식할 수 있습니다. 이 이야기는 내 주변에 무선기기가 있다면 최소 시간동안 어떤 무선장치가 반드시 떠들것이다 라는 이야기가 되는것인데요. 만약 무선장치가 떠든다면 그때부터 광고메시지가 전송될때까지 기다리면 됩니다.

그럼 최소 채널 시간동안에만 기다리면 되는데, 최대 채널 시간은 왜 필요할까요?

최대 채널 시간은, 광고메시지나 데이터 프레임이 우선순위에 계속해서 밀릴 경우, 광고메시지를 받지 못할 만한 경우가 발행할 수 있기 때문입니다.(경쟁에서 계속 질 경우.)

자. 요약해보죠

스테이션은 AP만(인프라스트럭쳐 BSS만) 찾고있다고 가정하고, 스테이션은 새로운 채널에 접속해서 최소 채널 시간동안 기다렸습니다. 그러다가 다른 무선매체가 떠드는것은 들립니다. 하지만 광고메시지는 들어오지 않죠.(패킷이 최대 채널 시간동안 경쟁에서 계속 지기때문에) 그럴 경우 스테이션은 여기 근처에 AP가 있느냐! 라는 간청메시지를 보낼 수 있습니다.


다음 포스팅은 수동스캐닝/능동스캐닝에 대해서 좀 더 자세하게 알아보겠습니다.






아.. 안녕하세요

어제 밤 자러 갈 때, 앞으로 일이주동안은 포스팅 안해야지 마음먹고 떠났는데

또 이렇게 포스팅을 하네요 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

공부해야 하니까 ㅜㅜ


포스팅을 저녁먹고 여섯시부터 쓰기 시작합니다.


열시 이전에만 끝나길 기도하면서, 힘차게 공부해 봅시다!


라우팅 모듈과 라우팅 테이블의 위치



이전 포스팅에서 어떤 컴퓨터는 라우팅 테이블을 메모리에 올려서 관리한다고 했었죠. 사실 패킷이 들어오면 이 패킷을 가지고 라우팅 모듈속에서 패킷을 비교합니다.

A라는 컴퓨터가 추론해봤더니 Routing table에 N2로 가라고 나와 있다더라~ 라는 결과가 나왔습니다.

그러면 이 패킷을 그대로 내보내면서 Next-hop address를 보냅니다.


다시 말하면 이 세상의 컴퓨터는 직접전달과 간접전달로 이루어져 있다고 했습니다.

간접 전달이라면, 패킷이 들어오면 Routing table에서 검사 한 후, R2로 가라~~ 다른 라우터로 가라~~이런식으로 결과를 알려줬을겁니다.

직접 전달이라면, 패킷이 들어오면 같은 네트워크에 있기 때문에, Next-hope address에 목적지의 주소가 나오겠죠.

그러면서, 이전 어딘가 포스팅에서  " 하나의 세그먼트는 여러개의 데이터그램로 이루어져 있을 수 있습니다. " 라고 이야기 했습니다..

이것을 to fragmention module과정에서 일어나게 되는겁니다.

여기에서 Routing table에서 IP테이블을 배웠고, 여기에서 Next hope을 어떻게 찾느냐라는 방법도 공부했습니다.

Next hope을(경로를)찾는 방법은 , 이전 포스팅에서 배운 라우팅 지정 방법에 의거해서 찾습니다.

일단 우선순위를 알아야 하는데요, 첫째로 라우팅 테이블은 직접인지 아닌지를 검사합니다.

직접 전달이 아니라면(else if) 호스팅 지정 방식인지를 찾습니다.(네트워크 지정 전의 효율성을 포기하면서라도 전달해 줘야 하는 이유가 있으니까.)

그런 후 네트워크 지정 방식으로 전달해주며, 네트워크 지정도 없다면 디폴트 지정 방식으로 전달해줍니다.



라우팅 테이블

라우팅 테이블에 컬럼이 어떤것들이 있는지 외우려고 하면 힘들어집니다.

이것을 외우지 말고 이해해 봅시다.

라우팅 테이블은 3계층에서 패킷 하나가 도착했을 때, 패킷의 목적지 주소를 보고 라우팅 테이블을 쳐다봅니다.

라우팅 테이블을 쳐다보는 이유는 직접 전달인지, 간접 전달인지 판단하기 위해서 입니다. 만약 간접 테이블이라면 Next-hope을 찾기 위해서 입니다.

-여기에서 IPv4의 약점을 알 수 있는데요. 3계층에서 패킷이 도착할 때, 받는놈의 물리 주소만 보기 때문에 약점이죠! 그래서 스누핑이라는 기술이 생기는겁니다.

하이튼 여기에서 패킷을 이용하여 받는놈의 주소를 알고 있으면, 마스크를 이용해서 네트워크 주소를 알 수 있으며 네트워크 주소를 이용하여 같은 네트워크인지 다른 네트워크인지 알 수 있습니다. (간접전달 직접전달을 알 수 있음)

그러면 목적지로 가는 네트워크가 정해지면 직접전달일 시 바로 주면되고, 간접 전달일 시 Next-hope으로 보내줍니다. 그러면 Next hop의 정보가 있어야겠죠?

그 다음은 정보들은 Optional(Reference Count,Use , Interface)입니다

라우터는 팔이 여러개기 때문에 Interface로 표현합니다. 

Interface는 어떤 패킷이 들어와서 마스크를 해보니 어떤 조건을 만족하였고, 그 만족한 값에 대한 출구들의 정보가 interface에 저장되어 있죠.




그럼 테이블의 각 컬럼은 어떤 역할을 할까요ㅎㅎㅎ

마스크는 IP주소로부터 목적지 네트워크 주소 또는 서브네트워크 주소를 알 수 있습니다.

목적지 주소는 호스트 지정 라우팅일 경우 Host의 주소가 있을 것이고, 네트워크 지정 라우팅일 경우 네트워크의 주소가 나오겠죠?

다음 홉 주소는 패킷이 전달되어야 하는 라우터의 주소입니다.

Reference Count은 몇 번이나 사용했나 라는 값입니다. 이것은 자주 사용하는 부분을 알 수 있게끔 저장하는것 입니다.

Use는 사용자의 패킷이 몇번이나 전달했는지 값을 저장하는 컬럼 입니다.

Interface는 어떤 인터페이스로 나가라! 하는 값 입니다. (중요하죠)



그럼 여기에서 플래그를 설명 안했는데 그 이유는 플래그를 먼저 설명할려고..ㅎ

Flag는 Bit연산하기 위해서 사용합니다.

라우팅 테이블에서의 플래그.

플래그는 ibt operation이기 때문에 C언어로 작성할 때 char 변수 하나로 많이 사용합니다.

플래그에서의 U(UP)은 살있다 라는 뜻 입니다. 즉 라우터가 살아있다는 뜻으로, 라우터가 정상 작동을 하고 있다는 뜻이겠죠? 그럼 그 반대로는 D라는 flag가 있습니다.

D 라는것은 라우터가 죽었다, 라우터가 종료되었다 라는 뜻 입니다

G는 Gateway라는 뜻입니다. 목적지가 다른 네트워크에 있다면 간접전달을 하라는 뜻 입니다.(Next hope을 이용하여 라우터를 통하여 패킷을 보내라는 뜻이죠.)
H는 Host-Specific입니다. 즉 호스트 지정이라는건데, 라우팅 테이블은 대부분 네트워크 지정 주소이지만 이 필드는 호스트가 지정했기 때문에 우선권을 갖습니다.


라우팅 모듈이 진행되는 알고리즘입니다.


어떤 패킷이 라우팅으로 들어왔을때, 라우팅 테이블에는 여러 entry가 존재할텐데, 각각 하나씩 반복해서 마스크를 씌워봅니다. 만약 마스크를 씌웠는데 테이블 목적지 주소가 해당하는 라우팅 테이블에 존재한다면, G플래그가 있는지 검사합니다. G플래그가 있다는 것은, Gateway를 통과하여(간접 전달) 이동하기 위하여, Next-hope에 명시되어 있는 주소로 이동합니다.

하지만 G플래그가 없다는 것은, 직접전달입니다.(만약 U태그도 없다면 라우팅이 꺼져있거나 고장났거나 뭐 그런 상태겠죠?)

그럼 직접 전달을 해주고 종료하게 됩니다. 


자. 다음 그림을 분해해 봅시다.

일단 가장 상단-> 하단으로 갑시다.

처음 Site 193.14.5.0을 보면 하나의 네트워크라는것을 볼 수 있습니다.

시작주소가 193.14.5.0 이고, 네트워크 속에서 두개로 나뉘어서 각각의 시작주소가 193.14.5.160 그리고 193.14.5.192 인 것을 확인할 수 있는데요.

이것은 서브넷팅 된 것 입니다. ( 외부에서 볼 때는 193.13.5.0인 하나의 네트워크로 인식하겠죠?)

그리고 193.으로 시작하기 떄문에 C클래스 입니다. Default Mask는 11111111 11111111 11111111 00000000 입니다.

근데 내부적으로 서브넷팅이 일어났고, 각각의 시작주소는 193.14.5.160 / 193.14.5.192 입니다.

그럼 서브넷 마스크를 구할 수 있어야 하죠.

두 주소의 끝 주소를 비교해보면, 160/192 입니다. 두 주소의 차이는 32가 차이나죠. 그렇다는건, 한 블럭당 32개의 hostid가 있다는 뜻이고, 32비트는 2^5 이니, 3bit가 서브넷 된 것을 알 수 있습니다.

3bit가 서브넷 됬다는것은, 총 8개의 네트워크로 쪼개졌다는 것이겠죠 ㅎㅎ

그렇다는건 subnet mask는 255.255.255.224입니다.

그 아래의 193.14.5.165(m2)는 193.14.5.160으로 통하는 interface입니다. m2라는 값은 리눅스/유닉스 계열에서 사용하는 interface 명이고, MS계열에서는 193.14.5.165를 사용합니다 그렇기 때문에 그림에서 두 interface이름을 명시해 준 것이죠.

R2는 Default router로 , 직접 전달->호스트 지정-> 네트워크지정까지 찾아본 후 없으면, 0,0,0,0이랑 AND(&)해서 0,0,0,0이 나온다면(항상 참이겠죠) 상위개념의 Gateway로 이동하게 됩니다. - 여기에서 상위개념의 Gateway라고 했지만, 사실 Gateway는 콘솔이나 터미널에서 변경가능합니다-
그 아래를 보자~~~

111.0.0.0은 A클래스죠.(A클래스 0~127) 192.16.7.0과 194.17.21.0은 C클래스 입니다.


그럼 윗 그림을 보고 아랫그림을 보져.


다음 그림처럼, 보통 직접전달을 먼저 작성한 후 간접전달을 작성합니다.

이 테이블은 R1에 대한 라우팅 테이블입니다.

먼저, R1에 대하여 직접 연결되어 있는 네트워크를 지정해야 합니다.

그 네트워크 주소는 193.14.5.160 / 193.14.5.192 / 111.0.0.0 입니다. 근데 패킷이 들어올때 마스크를 알아야지 목적지를 알 수 있죠.

위에서 구했다 싶이, 193.14.5.160의 디폴트 마스크는 255.255.255.224입니다. 193.14.5.192도 똑같은 255.255.255.224죠.

그리고 111.25.19.20은 A클래스고 서브넷이나 슈퍼넷이 안되어 있으니 255.0.0.0 입니다. 이 세개는 직접 전달이기 떄문에 Next hop이 없습니다.

그리고 간접 전달이 아니기 때문에 G Flag도 없습니다. 그리고 호스트 주소 지정이 아니기 때문에 H인 Flag도 없습니다.

그 다음 interface를 보니 표에서 m0/m1/m2가 있습니다. 이런식으로 직접 전달 표가 완성이 됬습니다.

다음 표에 있는 내용과 같죠? 


가 다음 호스트 지정 주소가 있는지 확인해 봤는데, 있네요 ㅋㅋ

255.255.255.255로 마스크 해서 194.17.21.16이 나온다면, 그림에서는 다른 라우터를 한번 더 거쳐야 할 것입니다. 근데, 255.255.255.255로 비교하면 원래 비교했던 값이 튀어나오는데, 그 값이 다른 특정 호스트라면, 호스트 지정 방식으로 Next Hop을 111.20.18.14로 보내주겠다는 뜻 입니다.(Flag도 H죠?)

이제 간접전달을 그려보겠습니다.

255.255.255.0랑 마스크 해서 192.16.70 / 194.17.21.0 이 나온다면, 각각의 111.20.18.14/111.30.31.18로 보내줍니다.


근데 여기서 질문이 있을 수 있어요.

111.20.18.14로 보낸 다음에는 어떻게 보내요? 라고 ..? 엄청 기초적인 질문이 나올 수 있는데

그럼 패킷을 111.20.18.14로 패킷을 전송한 다음, 그 라우터를 기준으로 다시 라우팅 테이블을 작성하면 되겠죠?


그럼 여기에서 예제를 몇개 풀어보고 가죠.

1. 라우터 R1이 목적지 192.16.7.14로 가는 패킷 500개를 수신.

1.1 직접 전달 확인

    - 192.16.7.14 & 255.0.0.0            - > 192.0.0.0 ( 목적지 주소인 111.0.0.0과 부합안됨)

    - 192.16.7.14 & 255.255.255.224   - > 192.16.7.0( 목적지 주소인 193.14.5.160 / 193.14.5.192 두개 다 부합안됨 )

--> 직접 전달 실패 그 다음단계인 호스트 지정 전달을 확인함.

1.2 호스트 지정 확인

    - 192.16.7.14 & 255.255.255.255 - > 192.16.7.14 ( 표에 있는 194.17.21.16 과 부합안됨.)

--> 효율성을 어기고라도 보내는 패킷이 아님. 그렇다면, 다음으로 네트워크 전달이 맞는지 확인해야함.

1.3 네트워크 지정 전달 확인

    - 192.16.7.14 & 255.255.255.0    -  > 192.16.7.0 부합 ( 표의 destination address와 부합함.)

--> 네트워크 지정 전달도 부합하지 않았다면 디폴트 지정인 111.30.31.18로 전송했을텐데, 네트워크 지정에서 일치함으로써 인터페이스m0(MS표기법으론 111.15.17.32)으로 전달. U(사용필드) 500 증가


여기에서 패킷 500개가 들어왔는데, 이 패킷을 일일이 다 비교합니다. (라우터는 모든 패킷을 저장할 수 없잖아요! 하루에도 몇십~몇백만의 패킷을 처리하는데!)

그리고 그 패킷은 다 똑같은 목적지를 갖고 있는게 아니라, 다른 목적지를 갖는 패킷이 들어올 수도 있기 때문에 일일이 비교하는것이 좋습니다.

그래서 미리 발견된 것을 효율적으로 사용하기 위해서 3계층 스위치를 사용하는겁니다.


그럼 예제 2번!

2. 라우터 R1이 목적지 193.14.5.176으로 가는 패킷 100개 수신

2.1 직접 전달인지 확인하죠!

    - 193.14.5.176 & 255.0.0.0            -> 193.0.0.0 ( 목적지 주소인 111.0.0.0과 부합 안됨.)

    - 193.14.5.176 & 255.255.255.224  ->  193.14.5.160과 부합한다.

--> 여기에서는 라우팅 테이블의 2번째 entry에 부합했기 때문에 직접전달이 이루어진다. m2 interface로 전달됩니다. U(사용필드) 100 증가


마지막 3번!

3. 라우터 R1이 목적지 200.34.12.34로 가는 패킷 20개 수신

3.1 직접 전달 확인

    - 200.34.12.34 & 255.0.0.0             -> 200.0.0.0 ( 목적지 주소인 111.0.0.0과 부합 안됨)

    - 200.34.12.34 & 255.255.255.224   ->  200.34.12.32 ( 목적지 주소인 193.14.5.160/193.14.5.192 둘 다 부합안됨.)

-- > 목적지 200.34.12.34로 가는 패킷은 라우터 R1이랑 직접 연결되어있지 않다라는 결론이 나오면서, 호스트 지정 주소를 검사하게 됩니다.

3.2 호스트 지정 전달 확인

    - 200.34.12.34 & 255.255.255.255   -> 200.34.12.34 ( 목적지 주소인 194.17.21.16과 부합되지 않음.)

--> 효율성을 깨고라도 보내려고 하는 패킷이 아니다. 그러므로 다음단계인 네트워크 지정 주소 확인을 해야한다.

3.3 네트워크 지정 전달 확인

    - 200.34.12.34 & 255.255.255.0       -> 200.34.12.0 ( 목적지 주소인 192.16.7.0 / 194.17.21.0과 부합되지 않음.)

--> 네트워크 지정 전달 까지 부합하지 않으므로, 해당 라우터는 해당하는 패킷을 처리할 수 없으므로 디폴트 지정 전달 확인과 비교한다.

3.4 디폴트 지정 전달 확인

     - 200.34.12.34 & 0.0.0.0               ->0.0.0.0  ( 목적지 주소인 0.0.0.0과 부합함.)

--> 0.0.0.0과 AND(&)해서 목적지 주소인 0.0.0.0이 나왔으므로, 해당하는 Next Hope(111.30.31.18)로 전송합니다. 

--> 즉, 해당하는 패킷은 보다 상위 개념의 Gateway가 처리하도록 보내주는 것이죠. m0인터페이스에게 전달합니다. U(사용필드) 20 증가


이와같이 라우팅 테이블은 기계가 자동적으로 만들어줍니다. 하지만 사람도 그림만 보더라도 어떤 라우팅 테이블이 만들어질 수 있는지 알아야 기술자이며 전공자로 인정받을 수 있습니다. 그리고 기계가 잘못 만들었어도 잘못 만들었는지 알 수 있습니다.

그럼 다음 그림을 보고 라우팅 R1을 기준으로 라우팅 테이블을 만들어 봅시다.


일단 R1 기준으로 직접전달이 무엇이 있는지 확인해야 합니다.

이 포스팅을 읽으시는 분들은 "R1이 직접 전달할 수 있는 패킷은 2개군"이라고 생각할 수 있습니다.

저도 그렇게 생각했거든요ㅎㅎ 

근데 R3에게 보내는것은, R3의 입장에서 보면 R3만의 라우팅 테이블이 따로 있을 것이고, R3은 그 라우팅 테이블을 기준으로 직접전달과 간접 전달이 있을것입니다. 그렇기 때문에, R3에게 보내는것은 R1입장에서 간접전달로 인식하게 됩니다.

그렇다는건 직접전달할 수 있는 패킷은 134.18.0.0쪽으로 보내는 패킷인데, 134.18.0.0은 B클래스 입니다. 또한 디폴트 마스크는 11111111.11111111.00000000.00000000(255.255.0.0)이죠.

그렇다면 여기까지 알아낸 정보들을 표로 작성해 보겠습니다.


이런식으로 나오겠죠.


그럼 직접전달을 다 그려줬으니 이제 호스트 지정 전달 주소를 확인해 보겠습니다.

근데 그림으로만 봐서는 호스팅 지정 전달 주소가 있는지 없는지 사람으로썬 확인할 수 없습니다.(제가 관리자여서 직접 호스트 전달을 설정했다면 몰라도 ㅋㅋ)


그렇기 떄문에 네트워크 지정 전달 주소를 확인해 봅시다.

해당 그림에서는 3개의 네트워크가 있는데, 그 중 134.18.0.0은 직접 전달을 해줄 수 있습니다.

그렇다면, 간접 전달해 줄 수 있는 네트워크는 2개가 되겠죠.

그 네트워크의 주소는 각각 129.8.0.0(B클래스)/220.3.6.0(C클래스) 입니다. 

B클래스의 디폴트 마스크는 255.255.0.0

C클래스의 디폴트 마스크는 255.255.255.0 이죠. 또한, 둘 다 패킷을 전달해 주려면 222.13.16.40패킷으로 전달을 해줘야 합니다.

그리고 간접전달이기 떄문에 플래그에 G가 추가가 되겠고 Interface는 M1을 통하여 나갑니다.

이것을 바탕으로 간접전달까지 그림을 그려보도록 하죠.



여기까지가 간접 전달까지의 테이블을 작성한거죠.

그럼 마지막으로 디폴트 지정 전달로 보내는 것만 해주면 되겠죠.

디폴트 지정 마스크는 0.0.0.0이고, 도착지 주소는 0.0.0.0이 나오면 됩니다. 그리고 그림으로 봐서 Rest of the Internet으로 전송하기 위해서는 134.18.0.0네트워크를 거쳐서 134.18.5.2의 라우터를 거쳐서 가야합니다.

그럼 그것을 마지막으로 표로 그려보도록 하죠.



다음과 같이 라우팅 테이블이 완성되었습니다.

이해 되셨나요?ㅋㅋ



다음 그림. 그냥 혼자 보고 이해할 수 있죠?


(2),(3)은 서브넷팅 된 겁니다. 근데 이 주소는 클래스기반 주소인지 아니면 클래스가 없는 주소체계인지 모릅니다.

하지만 클래스 기반 주소체계라 가정하면 (2)-80.4.5.0 과 (3)-80.4.6.0은 두개다 주소면서도, 3바이트 끝쪽의 1바이트만 차이가 납니다. 

그리고 마지막바이트가 0인것으로 봐서, 255.255.255.0/24인 걸로 인식이 되는데 정확한 것은 알 수 없습니다.

사실 여기에서 라우팅 테이블은 Next Hop에 201.4.10.3 or 200.8.44.12 이런식으로 두개의 값이 적용되어 있진 않습니다. 저희가 보기 편하게끔 이렇게 작성해 놓은것이죠.

경유하는 네트워크와 지나치는 홉의 갯수가 같더라도 많은 경우의 수가 있습니다. R2라우터를 통해서 가면 1024byte당 1원을 내야 되는데 R3에게 보내면 공짜다! 이러면 R3에게 보내기도 하고 하는거죠. 이런것 때문에 or로 작성했습니다.

그리고 그림에서 Default 지정 주소 전달에서 Next hop의 주소는 나와있지 않기 때문에 알 수 없어서 물음표로 작성됬습니다.


아.. 마지막으로 하나만 더 하고 그만해야지 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ너무힘듬

쓰고 자야짓

이제는 표를 보고 그림을 그려봅시다. 실제로 이것을 더 많이 씁니다.

어디 회사같은곳에서 문제가 있으면, 라우팅 테이블을 보고나서 그림을 많이 그리죠. 보통 네트워크에 문제가 있을때도 표를 보고 많이 해결하곤 하죠.


라우터 R1이 의 라우팅 테이블이라고 하면, 라우팅R1은 직접 연결된 네트워크는 3개입니다.


그럼 이런 그림이 나오겠죠? 라우터 R1은 3개의 네트워크와 직접 연결되어 있고.

이제 표를 다시 보니, 호스트 지정 주소는 없고 간접 주소 지정은 2개가 있네요.

간접 주소 지정2개를 추가해서 그려보도록 하겠습니다.





이런식으로 그려지겠죠!??!?! 


여기에서 R2,R3의 각각의 라우터는 다른 네트워크랑 어떤 IP로 연결이 되어 있는지 모릅니다.

그건 즉, R2,3이 직접 연결, WAN연결 점-대-점 연결 여부를 라우팅 테이블로는 알 수 없습니다.

여기에 디폴트까지 추가해서 그려보도록 하겠습니다 




결과적으로 모든 그림이 그려지면 이렇게 되겠죠.



다음 포스팅은 내일이나 할께용

모두 즐거운 주말 보내십쇼



굿빠~~

오랜만에 포스팅 하네요


요즘 중간 레포트 쓴답시고 시간을 못냈죠 ㅠ

이제 시험도 일주일 남아서 이번 포스팅 후엔 2주뒤에 할 수도 있겠군.

그땐 폭풍 포스팅 해야겠네 ㅋㅋㅋ


오늘 포스팅은 직접 전달, 간접전달에 대해서 알아보고, 후반부에서는 라우팅의 4가지(다음 홉,호스트,네트워크,디폴트)를 보고 갈 예정입니다!


이번 강의를 이해하면 인터넷에서 데이터가 어떻게 다니는지 알 수 있습니다.

옛날 포스팅에서 라우터가 IP주소를 물리주소로 변경되고 이런 설명을 했었죠. 그 이야기의 심화과정 입니다.

인터넷에서 최종 목적지까지 패킷이 전달되는 방법은 2개가 있습니다. 방법이 많으면 어렵겠지만 2개라서 쉽죠 ㅎ..ㅎ

그 2개는 직접 전달과 간접 전달입니다.

이것은 제가 마치, 옛날 학교에서 시험볼때를 생각하면 쉽습니다 ㅋ

시험을 다 본후, 맨 뒷자리에 앉아있는 학생들은 시험지를 다 걷어서 선생님에게 직접 전달을 해주죠.

하지만 저같은 경우는 간접 전달로 맨 뒤에 있는 학생에게 넘겨주고, 마지막엔 그 학생이 선생님에게 직접전달을 해주죠.

이 세상에 있는 모든 인터넷은 직접 주거나, 몇번의 간접전달 후 직접전달로 이루어집니다.

즉, 이 세상의 인터넷에서 패킷은 0번 이상의 간접 전달과 무조건 1번의 직접 전달이 있어야 합니다.

이것을 오토마타라는 개념을 배우면 좋을텐데 아쉽네요 ㅎㅎ

오토마타는 *ndroid 이런식으로 검색하면 n앞에 무슨 단어가 오든 상관 없다는 표기입니다.

오타마타의 표기법은 워낙 다양하고, 저도 잘 알지 못하기 때문에 추후에 공부한 후 포스팅할 예정입니다.


오토마타를 알아야지 컴파일러를 이해할 수 있고, 컴파일러를 이해하면 파서를 이해할 수 있죠.

컴파일러를 이해하면 파서를 이해할 수 있고, 파서를 이해하면 자연어 처리라든지 이런걸 쉽게 이해할 수 있다는데..

졸업까지 2년 반 남았죠.. 그 때까지 이 모든것과 알고리즘과 OS와 토익과...진짜 미치네요ㅎㅎㅎㅎㅎㅎ


하이튼 그건그렇고 본론으로 돌아갑시다.

직접전달



직접전달의 뜻은 패킷의 목적지가 전달자와 같은 네트워크에 있는 경우를 직접전달이라 합니다.

즉, 패킷을 전달하려는 사람과 목적지가 같은 곳이면 직접 전달입니다.

그럼 컴퓨터에서 직접 전달인지 어떻게 알 수 있을까요? 같은 네트워크에 있는지 어떻게 알아낼까요?

이전 포스팅에서 공부했던 슈퍼넷팅과 비슷합니다~

네트워크의 주소가 같으면 (시작주소가 같으면)같은 네트워크라고 생각합니다. 시작주소를 알아내기 위해선 마스크를 사용할 것이고. 이 마스크는 슈퍼넷팅 되어있다면 슈퍼넷 마스크 일 것이고, 서브넷팅 되어 있다면 서브넷 마스크. 둘 다 아니라면 디폴트 마스크겠죠.



직접 전달인지 여부에 대해서 송신자는 어떻게 생각하냐면, 목적지 주소에서 네트워크 주소를 추출하여( 목적지 IP주소에 네트워크 마스크를 해주면) 송신자의 네트워크 주소와 비교해서 같으면 직접전달이고 아니면 간접전달이 이루어 집니다. 직접 전달이면 송신자는 목적지의 물리주소를 찾게 됩니다.

위 그림에서 보면 IP의 주소, A에서 P로갈 때, 출발지 주소 10에서 라우터의 주소 20을 알아내고, 그 주소를 봉투에 담아서 전송했었죠.

마지막에 Router2에서 보니까 P/95는 같은 네트워크라 직접적으로 전달을 했습니다.

직접 연결 되어 있으면 목적지의 물리주소를 알아내야 합니다.(IP주소로부터 물리주소를 찾음-ARP 이라고도 부름. 이것은 이전 포스팅에서 친구의 이름을 전화번호부에서 찾는 두 방법을 말했었죠! )

물리주소를 알아내는 방법으로는 두가지 방법이 있습니다. 내부 메모리의 테이블을 찾는 방법이 있고, 외부에 물어보는 방법(ARP)이 있습니다.

내부 메모리에서 찾는건 불가능합니다.( 우리가 사용하고 있는 wifi는 항상 다를것이고, 발급받은 IP주소도 다를것 이기 때문입니다.)

그래서 외부에 물어보는 방법을 많이 사용합니다.

하지만 이 부분은 중간고사가 끝난 이후 포스팅할 예정이므로, 여기에선 "  IP주소를 알아내면 물리주소를 알아낼 수 있다! "라고만 생각하고 넘어가면 됩니다.


간접전달.

간접전달은 윗 그림에도 나와있습니다. 보내는놈과 받는놈이 다른 네트워크에 있으면 간접 전달을 합니다.( 라우터를 찾습니다 - 아래에서 설명합니다. )

이것은 마치, 시험지를 걷어갈 때, 간접전달을 계속 하고, 마지막으로 직접 전달해주는것과 같죠.

패킷은 최종 목적지와 같은 물리적인 네트워크의 라우터에 도달할 때 까지를 간접전달이라 합니다. (여러 라우터를 경유하죠.)

이것은 위 그림에서 Sender가 P/95에게 전달하려고 봤더니, 같은 네트워크상에 없기 때문에 Router1에게 전달해 줍니다. 그리고 Router도 자신의 연결되어 있는 네트워크 중에 목적지와 직접 연결되어 있지 않아서 Router2에게 전달을 해줍니다. 그리고 Router2는 목적지와 같은 네트워크에 포함되어 있으므로 간접전달은 종료됩니다.

그럼 발송할 때 마다 라우터의 주소를 찾아냈는데, 라우터의 물리주소를 어떻게 알아냈을까요?

그럼 라우터의 IP주소를 알아내야지 라우터의 물리주소를 알아낼 수 있을겁니다. 이것은 라우팅 테이블을 이용하여 찾죠.

목적지 IP주소를 주면, 라우팅 테이블에서 라우터의 IP주소를 알 수 있습니다. 그리고 IP주소를 알아내면 내부 메모리 또는 ARP를 이용하여 물리주소를 알아낼 수 있습니다. -이런식으로 인터넷에서 반복적으로 전달이 되죠.



라우팅


라우팅은 데이터그램(3계층)을 위한 경로(다음 홉을)를 찾는 과정을 라우팅이라 합니다. - 이것은 강남역에서 신촌역으로 가는 방법을 설명했던 적이 있죠.

그러면 이 라우팅을 위해서 만든 테이블을 라우팅 테이블이라 합니다. 시스템 소프트웨어에는 전부 테이블로 되어 있습니다 이것도 테이블이라 부르죠.

라우팅 테이블만 있다면, 최종 IP주소만을 사용해서 전체 경로를 결정할 수 있습니다.

그런데, 문제가 생깁니다. 모든 IP주소에 대해서 모든 경로를 라우팅 테이블에 저장하게 되면, 라우팅 테이블의 크기가 너무 커집니다.

즉 이 문제는 요즘 서울 지하철이 정류장만 백개 가까이 되죠(더 많나?) 하지만 이 정류장 중, 임의의 정류장 2개의 최단경로를 다 찾아주는 경로를 저장한다면? 대충 계산한다면 공간 복잡도는 O(n²)입니다. ( 지하철 갯수를 n이라 가정. )근데 n²이기만 하면 되지만, 강남역에서 신촌역까지 갈 때 경유하는 모든 지하철도 저장을 한다면 테이블의 크기는 엄청나게 커지겠죠.

근데 " 지하철의 갯수가 얼마나 많다고 다 저장하면 되지 " 라는 생각을 갖을 수 있으나.. 전 세계에서 사용하는 IP의 갯수는 겁나 많습니다..^^;;

그럼 어떻게 연결을 해야 할까요?

이를 해결하기 위해, (테이블 크기를 줄이기 위해) 새로운 4가지의 기술이 등장했습니다. 

그 기술들은 다음과 같이 있습니다.

1. 다음 홉 라우팅

2. 네트워크 지정 라우팅

3. 호스트 지정 라우팅

4. 디폴트 지정 라우팅


가장 흔하게 사용하는것이, 다음 홉 라우팅을 사용합니다. ( 이건 옛날에 설명했던, 강남역에서 신촌역으로 갈 때, 교대역으로 가서 다시 물어보세요~ 하는 방법입니다.)

전체 경로의 대한 정보를 주는것 보단, 다음 홉의 정보를 주고, 다음 홉에서 다시 다음홉의 정보를 주는것 입니다.

그렇다면 다음 홉 라우팅을 함으로써, 라우팅 테이블에 강남-> 신촌역까지 갈 때 경유하는 경로를 생략할 수 있습니다.

다읍 홉 라우팅이 나오기 전의 원래 개념은 위의 그림에서의 A컴퓨터는 P라는 컴퓨터로 갈 때, A컴퓨터는 자신의 라우팅 테이블에 P로 갈 때 라우터1를 거쳐서 라우터2로 거쳐서 P로 가라! 이런식으로 저장되어 있겠죠. 즉 이건, 전 세계의 100대의 컴퓨터에게 전달이 되려면 100개의 행이 있어야 한다는 뜻 입니다.

그렇다는건 , 정리해보죠.

A는 P로 갈 때 Router1를 거쳐서 Router2를 거치고 P로 가라 

Router1은 P로갈 때 Router2를 거치고 P로 가라. 이런식으로 저장되어 있을 것 이고

마지막으론 Router는 직접 전달이 되어라 이렇게 라우팅 테이블에 저장되어 있겠죠.

하지만, 이것들도 전 세계의 네트워크라고 생각하면 .. 전달될 컴퓨터들을 한정지어서 저장할 순 없는 노릇이죠.

하지만 다음 홉을 쓰면, A는 HostP로 가고 싶으면, Router1에 가서 물어봐라, 그리고 Router1가 P1로 가고 싶으면, Router2로 가서 다시 물어봐라, Router2는 직접 도착해라! 이런식으로 저장하게 되는것이죠! (라우팅 테이블의 컬럼의 숫자가 줄어들겠네요!?)

하지만 이렇게 줄였어도, 강남에서 신촌, 혹은 강남에서 특정한 역까지 가는 경우의 수는 많습니다. 이것도 줄여야 하는데 어떻게 줄일까요?ㅠㅠㅠ(조금 뒤에 설명


네트워크 지정 라우팅



사실상 이해하기 위한 그림을 그리면서, 모든 정보를 내포하고 있게끔 그렷죠ㅎㅎ.. 정말 오래걸리네요ㅋㅋㅋ 그림 보면 이해가 되나요?

네트워크 지정 라우팅은 기존의 모든 주소를 저장하는 테이블 Routing Table A를 (이놈의 공간복잡도는 N2이죠.) 네트워크 갯수만큼 줄인 Routing TableB로 만든 것 입니다.

그렇다는건, 클래스 기반 주소에서 클래스B는 약 6만 5천개의 의 Host를 갖고 있지만, 이것들을 6만 5천개의 행으로 저장하는 것이 아니라, 1개의 열로 저장한다는 것을 의미합니다. 그러므로 routing entry가 줄겠죠! 

사실 이것때문에 네트워크 주소를 둔 것입니다 그리고 블럭을 준 것이죵ㅋ. ( 라우팅 테이블에 저장하기 위하여 대표주소를 정한 것!)

그럼 여기에서 이러한 궁금증이 생길 수 있습니다.

" 그렇다면, 네트워크 지정 라우팅을 함으로써, 컴퓨터 A,B,C,D 로 갈 수 있는 경로를 N2라는 네트워크로 저장했는데, 그렇다면 N2에서는 어느 컴퓨터로 갈지 어떻게 알지??? "

이러한 질문은 4개의 호스트에 대한 정보를 하나로 묶었는데, 그럼 S가 A로 보낼때 N2에게 보낸다는것인데, 그럼 N2에서 A로 어떻게 보내는거죠? 이런뜻으로도 질문을 할 수 있겠죠.

하지만 이러한 질문은 질문조차 틀렸습니다.

A,B,C,D에 대한 라우팅 테이블이 지워지고 N2로 가라는 네트워크 지정 라우팅 테이블은 S 컴퓨터에 저장되어 있습니다. 

그럼 S라는 컴퓨터는 A에게 가라! 라는 명령이 들어온다면 R1에게 보낼 것 입니다.

그러면 R1이라는 라우터는 자신의 네트워크에 A라는 컴퓨터가 있기 때문에 직접 전달을 하겠죠?

그럼 A라로 가라는 정보는 어디에 있을까요?

정답은 S가 보낸 패킷(데이터그램 - 3계층에서 보낸 정보)의 봉투(헤더)에 보면 목적지 IP가 작성되어 있습니다.

그렇기 때문에 Host 컴퓨터 S가 R1에게 보내면, R1은 그 봉투를 열어보고 그 봉투에 있는 목적지 IP가 자신의 IP인지 확인합니다.( 목적지 IP는 가장 맨 앞에 있다고 헀죠!)

그러면 R1는 패킷(데이터그램)을 열어서 헤더를 확인해 보니 N2에 있는 A라는 컴퓨터로 가는것 임을 인식하게 됩니다. 그리고 인식하고 보니 A라는 컴퓨터는 자신의 네트워크에 있는것을 인식하고 직접 전달하게 됩니다. (직접 전달할 시, R1은 N2를 알고 있으니, A의 물리주소를 내놔! 라고 하겠죠?)



호스트 지정 라우팅



네트워크 지정 라우팅의 반대 개념입니다. 아무것도 적용되지 않은 Routing Table의 개념은 공간복잡도가 O(N²)죠. 이것을 줄이기 위해서 네트워크 지정 라우팅을 사용한 것이구요. 하지만 그럼에도 불구하고, 호스트 지정 라우팅이 필요합니다.  왜냐하면 네트워크 지정 라우팅을 함으로써 엄청나게 효율적으로 공간을 줄일 수 있었습니다. 하지만 호스트 지정 라우팅은 다른 목적을 위해 효율성을 희생 시켜서 사용합니다.

이것은 시스템을 설계하면서 고려해야 할 부분입니다. 개발할 시 시간과 공간 복잡도를 항상 효율적으로 있게끔 개발을 해야합니다. 하지만 여기에서 멈추는 것이 아니라, 이런 효율성들은 다른 것들을 위해서 희생도 될 수 있다고 생각해야 합니다. 어떤 경유는 비 효율적이지만 한다는 뜻과 같죠.

관리자가 특정 경로로 패킷을 전달하는것을 ( 모든 네트워크는 효율적으로 패킷을 전달하지만 이 경우는 예외적으로 ) 어떤 특정 호스트 하나만 다른 경로로 가기를 원할 때 사용합니다.

이건 보안이 적용된 대화에서 사용할 수 있습니다. 만약 한국 대통령이 미국 대통령과 비밀 통화를 한다면 이것은 보안적으로 연결이 되어야 겠죠. 그렇다는건 이 연결은 같은 네트워크상에 있더라도 다른 네트워크와 같은 경로로 연결이 되어 있는것이 아니라 다른 경로로 연결이 되어 있다는 것을 뜻합니다.

예를들면, 제가 처음 여자친구에게 좋아하는 마음을 표현할 때, 전화를 하고, 편지를 주고받고 할 것입니다. 전화를 주고받을때도 다른 사람들이 제 통화를 안듣고 싶어 하기를 원하고 편지를 줄 때도 다른사람들은 보지 못하게 편지봉투에 넣어서 건네주죠. 하지만 여자친구가 아닌 다른 사람들에게 전달할 말이 있거나 할 때는, 그냥 종이에 써서 벽에 붙혀놓는다던가, 사람들이 있든 없든 아무곳에서 대화른 나눈다던가 하죠. ( 벽에 붙혀놓는 것이 네트워크 지정 라우팅 입니다.)

이와 같이 "여자친구와 통신하는 방법(벽에 붙히면 많은 사람들이 볼 수 있지만, 굳이 편지봉투에 넣어서 한명만 보게 하는 것)"과 "여자친구가 아닌 타인들이랑 통신하는 방법"의 차이가 호스트 지정 라우팅 입니다.

즉 이것은 경로를 지정할 수도 있습니다. 예를들면, 네트워크 상에서 특정한 라우터를 거쳐서 가게끔 테스트 해본다든지 경로를 정할 때 말입니다!(여자친구에게 도착하는걸 정하는 것 처럼)

위 그림을 통해서 보면, HostA에서 HostB로 갈 때에 가장 짧은 경로는 R3에게 갈 것이지만,( 네트워크 지정 라우팅이라면 R3으로 보내겠죠 ) 호스트 지정 라우팅을 사용한다면 R1을 거쳐서 R2로 보내고, R2에서 HostB로 보낼 수 있습니다. 이런건 R1을 테스트 할 때도 많이 사용하죠.



디폴트 라우팅




(그림 그릴때마다 넘나 힘드렁..뉴뉴 ㅠㅠ 솔까 여기까지 읽었으면 댓글좀 달아줘요ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ)

디폴트 라우팅이 다른 라우팅 들과 비교하면 제일 막강합니다! 이것이 있기 때문에 전 세계의 네트워크가 형성될 수 있는것이죠.

라우팅 테이블은 어느 네트워크로 갈려면 어디로 가라 아니면 저쪽으로 가라~ 이런식으로 지정을 합니다. 하지만 전 세계에 있는 모든 컴퓨터에 대한 정보를 다음 홉 지정 라우팅, 네트워크 지정 라우팅이나 호스트 지정 라우팅을 지정하여서 저장할 순 없습니다.

그럴 때 사용하는 것이 디폴트 라우팅입니다.

디폴트 라우팅은 내가 말한거에 대하여 해당하는 정보가 없으면 ~~로 보내라! 라는 거죠~ㅎㅎ

내가 알고 있는 정보는 알고 있기 때문에 그 네트워크를 찾으면 되지만, 그 네트워크를 모르면, 다른 사람에게 위임하는 것 입니다.

만약 학교라 생각하면, 학교에서 어느 선배/후배 혹은 동기의 번호를 모른다면 과사에 방문하여 조교선배한테 " ~~에게 이 정보를 대신 전달해 주세요! "라고 말 하면 조교행님은 그 정보를 대신 전해줍니다.  이해 가시나요? 

음.. 이해 안되는 사람들을 위해서 위의 그림으로 예를 들어봅시다.

우리나라의 네트워크에 KT가 있다고 가정해보자( 해외로 나갈때를 가정 -실제로 해외로 나갈때 혜전을 통해서 나가죠.)

우리가 미국에 있는 구글.com에 접속하려고 하면, 우리 컴퓨터에 구글로 갈 수 있는 정보가 없습니다. 보통 라우팅 테이블에서 디폴트로 등록되어 있는 정보는 같은 기관(네트워크)에 있는 정보밖에 모릅니다. 저희가 KT소속이라 하면, 저희는 일본,미국에 대한 정보를 모르는것은 당연한 것이겠죠?

그래서 구글.com으로 접속할때 저희 컴퓨터는 Default로 패킷을 컴퓨터 과학 네트워크로 보냅니다. 컴퓨터 과학 네트워크도 구글에 대한 정보가 없기 때문에 공과대학 네트워크로 전해집니다. 하지만 또 공과대학 네트워크에서는 단국대 네트워크로 정보를 보낼 것 이고, 이런식으로 쭉쭉 전달되서 최종적으로 구글에 도달하게 될 수 있는겁니다.

정리하자면  내가 어떤 컴퓨터인데, 내가 어떤 목적지 IP를 알아서 보내려고 했는데, 그 정보가 Routing table에 있으면 그 정보를 보고 전송하면 되지만, 만약 알아냈던 IP주소에 대한 정보가 Routing table에 없다면 전부 Default 네트워크로 보냅니다. 이런식으로 찾아간다면 전 세계에 있는 어떤곳이든 찾아갈 수 있습니다. Defualt IP의 값은 0.0.0.0입니다.

여기서 추론좀 해보져.

0.0.0.0은 부트스트랩시간에 사용하는 주소라 공부했습니다.

하지만 여기서 사용하는 0.0.0.0은 다릅니다. 부트스트랩 시간에 사용하는 0.0.0.0은 목적지 주소로 사용할 수 없었지만 여기에서는 네트워크 마스크가 0.0.0.0입니다.

여기에서 네트워크 마스크가 0.0.0.0이면, 어떤 값이 들어오든 AND(&)하면 0.0.0.0이 나옵니다. 

즉, 자신과 연결된 default gateway로 전송하죠.(자신과 연결된 default router로 보내는것)

갑자기 생각난건데, 0.0.0.0를 생각해보니 그럼 모두가 1인(255 .255 .255 .255)도 잠깐 복습하고 가죠.

모두가 1인것은 제한된 브로드캐스크라고 생각할 수 있지만, 이전 포스팅에서 배운 255.255.255.255은  IP/32인 마스크가 전부 1놈을 말하는거죠. 이것의 의미는 이 블럭의 IP주소는 1개밖에 없다라는 뜻이겠죠? 한개가 있다는 것은 네트워크 주소가 아니라 호스트의 주소라는 것이겠네요!


정적 라우팅과 동적 라우팅.

뭐 타이틀은 이렇게 걸어놨지만 생각해보면 벌거 없죠. CGI를 이해하고 있으면 그냥 지나치셔도 되는겁니다.

방금 전 처럼, 다음홉, 네트워크 , 호스트, 디폴트 이런방법들을 사용해서 테이블 크기를 줄였습니다.

이렇게 만들어진 테이블은 정적으로 만들 수 있고, 동적으로도 만들 수 있습니다.

컴퓨터에 있는 모든 정보는 정적이거나 동적입니다. 제가 갖고 있는 핸드폰의 연락처도 정적입니다.(사람이 개입한것)

그러면 사람이 개입하지 않아도 정보가 바뀌는것이 동적이죠.

이렇게 말 하면 감이 안오니 예시를 들어보겠습니다.

저희가 은행에 있으면 환율 정보나 주식정보가 실시간으로 변하는 것을 볼 수 있습니다.

하지만 이런것은 제가 개입하지 않아도 정보가 계속해서 변환하는것.

또한 네이버나 다음과 같은 어떤 포털사이트에서 로그인을 하면 로그인 부분이 제 정보창으로 변환되는것도 예시를 둘 수 있겠네요.

이런것들이 동적페이지라고 부르기도 합니다. ( 근데 이걸 서버단에서 동작하기 때문에 속도가 조금 늦어집니다.)

그래서 나온게 액티브 문서라는게 있죠~ 제 포스팅중 웹 1.1스펙에 대한 글을 보시면 설명이 있습니다.

그래서 컴퓨터의 모든 정보는 정적이나 동적으로 나뉘는 것 입니다.

여기서 정적 라우팅은 라우팅 테이블에 있는 모든 정보를 관리자가 직접 입력하게 해주는 것 입니다.

목적지별로 라우팅 테이블에 입력해 줍니다.( 이런거는 인터넷에 다른 수정이 발생하면, ...똥망 - 그래서 주로 실험실에서 사용하죠. )



동적 라우팅은 이것들을 라우터에 적용시켜서, 전 세계에 있는 모든 라우터들이 쌍방향 통신할 수 있게 해두는겁니다.

이것은 제가 아프리카에 있는 라우터와 통신하는데, 아프리카에 있는 라우터와 통신하던 경로에 있는 라우터가 죽게되면, 그 옆에 있는 라우터가 소문을 내기 시작합니다. " ~~로 가는 경로의 ~~라우터가 죽었대~~ " 이러면서 말이죠.

그래서 저희가 인식을 하고 경로를 찾아갈 수 있게끔 되는겁니다.

여기서 쓰는 프로토콜이 RIP,OSPF,BGP,다이젝스 알고리즘 같은것들이 있죠.

지금은 대부분 동적 라우팅으로 연결되어 있습니다.

그렇기 때문에 전 세계에 있는 어떤 라우터가 Shutdown이 되더라도 저희는 아무런 영향을 받지 않고 인터넷을 사용할 수 있게 되는것이죠.




정의 인용 및 참고한 서적 : TCP/IP프로토콜 제4판(Behrouz A. Forouzan) - MccGraw-Hill Korea 출판사.

아..배고파

치킨이 넘나 먹고싶은것..

결국 치킨은 못먹고왔죠

시간이 몇신데 ㅠㅠ포스팅이나 하구 얼렁 자야지 


A클래스와 B클래스는 이미 고갈됬고, 주소 낭비도 심했죠. 그리고 개인에게는 C클래스도 너무 큽니다.(C클래스도 개인에게는 낭비가 되죠.)

이렇한 문제 때문에 나온것이 클래스 없는 주소 지정입니다. 클래스 없는 주소 체계는, 낭비되고 있는 IP주소 때문에 "꼭 필요한 갯수만 나누어주자. 2명에게는 2개의 주소만 주고 400명에겐 400명에게 맞는 주소를 발급해주자"라는 곳에서부터 시작했습니다.

그런데 여전히 문제가 있습니다. 컴퓨터에서는 원하는 만큼 쪼갤 수 있다고 해도 항상 블럭에서의 주소의 수는 2의 거듭제곱이 되어야 합니다.

만약 IP주소가 11개 필요하더라도, 16개가 들어있는 블럭을 주거나 해야합니다.(마스크 때문이기도 한거죠!)

그리고 , 블럭이 N(2->4->8->16.. etc)개의 주소를 갖으면, 시작주소는 N으로 나누어져야 합니다.

그럼 여기에 256보다 작은 수면, 4번째 Byte가 N으로 나누어 떨어지면 됩니다.

-> N<256 - > 마지막 바이트가  N으로 나누어져야 함. 

-> 그렇다는건, 마지막 바이트가 0이 아니여도 시작주소가 될 수 있다는 것이죠!


그럼 여기에서 1024개의 주소를 갖는 블록의 시작 주소는?

주소의 갯수가 256개가 넘어가면, 세 번째 네번째 바이트가 N으로 나누어져야 합니다.

-> N<65,536(256²)

1024의 주소는, 256개의 한 블럭이 4개가 합쳐진 거죠? 그렇다는건, 세번째 바이트는 몇 일까요?

1024는 컴퓨터로 표현하려면 2바이트가 필요합니다. 1바이트는 256까지밖에 표현을 못하니까 추가적으로 1바이트가 더 필요한거죠.

그렇다는건 1024를 표현하려면 첫번째 바이트에는 4가 들어가 있고, 두번째 바이트는 0이 들어가 있습니다.(4x256^1 + 0x 256^0)

그러면 1024개의 주소를 갖는 블록의 시작 주소는 1024로 나누어 떨어지게 되는거죠.

즉, 그렇다는건 주소의 갯수가 256개가 넘는것들의 시작주소는 4번째 바이트가 0이 될 수 밖에 없습니다!!( 주소가 256개가 넘는것은 기본적으로 2바이트를 사용하는 것이고, 2바이트를 사용하게 된다면, 첫번째 바이트도 256으로 나누어 떨어져야 하는거죠. )

여기까지 이해 됬다면!!

1024개의 주소를 갖는 블록의 시작주소를 맞추라 하는 문제에서, 206.16.37.32같은 주소가 주어진다면, 바로 " 아 !! 어디서 낚시를해!! 마지막 바이트가 0이 아니자나!!"라고 생각할 수 있어야 합니다.

그리고 추가적으로 " 1024는, 256이 4개로 이루어져 있으니까, 3번째 바이트가 4로 나누어져야 하지!!! " 라고 생각할 수 있어야 하죠!



지금까지 클래스가 있는 주소체계에서는, 각 클래스(A클래스,B클래스,C클래스)가 주어지면 Default Mask를 알아낼 수 있었죠? 그리고, 서브넷 되거나 슈퍼넷이 되면 몇개의 블럭이 합쳐지고,분리 됬는지에 따라 해당하는 서브넷 마스크와 슈퍼넷 마스크를 알 수 있었습니다. 이 마스크를 이용하여 네트워크 주소를 추출한거죠. 그렇다면 클래스 없는 주소체계에서는 어떻게 주소를 알아낼까요? 

공통점은 IP주소와 마스크를 줘야 합니다.

클래스 기반 주소체계는 IP만 알아내면, 네트워크 마스크(디폴트 마스크)를 알 수 있지만, 슈퍼넷이 되었는지, 서브넷이 되었는지는 모릅니다.  마스크를 줘야지 알 수 있는거죠.

그렇다면 공통으로 만들어봅시다.

이 세개 ( 그냥 IP주소, 서브넷팅 된 주소, 슈퍼넷팅 된 주소 ) 를 다 합치면 IP주소와 마스크가 필요합니다.

저희가 클래스 주소 기반 주소 10.10.10.0이라 하면 , 이것만 있어도 충분히 많은 정보를 알 수 있습니다. A클래스이며 디폴트 마스크는 255.0.0.0입니다. 그렇다는건 여기의 시작주소는 10.0.0.0입니다. 그리고 여기에서 서브넷팅과 슈퍼넷팅을 하면 10.10.10.0과 함께, 서브넷 마스크나, 슈퍼넷 마스크 을 줘야 합쳐졋는지 쪼개졌는지 알 수 있습니다. 그러면 이 전체를 하나의 경우로 나누려고 하면 IP주소와 마스크만 있으면 됩니다.


그렇다면 클래스 주소 없는 주소 지정에서도 2가지의 주소 (IP주소,마스크)가 있어야 하죠.

여기에서는 슬래쉬 표기법을 사용합니다.

마스크는 255.255.255.224 = 11111111 11111111 11111111 11100000 이런식으로 주어지죠.

5개의 Bit가 0으로 바뀐 경우인데 이렇다는건 27개의 1을 갖고 있죠?

그렇다는건 IP주소/27( 1의 갯수 ) 이런식으로 표기합니다.

슬래쉬 표기법의 예를 하나 들어보죠.

205.16.37.24/29 라는 값이 주어졌다면, 여기에서 많은 정보를 알 수 있습니다. 일단 마스크는 11111111 11111111 11111111 11111000 이 되는거죠.

이 마스크에 AND(&)하면 205.16.37.24가 첫 주소인걸 알 수 있습니다. 물론 끝 주소는, +7인 205.16.37.31이죠.(3비트기 때문에 +7을 해야합니다.)

이해가 되셨나유~_~ 모르겠으면 댓글을 달아주십쇼~


아참!! 잊고갈뻔 했네요 ㅋㅋㅋㅋ

클래스 기반 주소체계에서는 Netid와 Hostid라고 이야기 했죠? 클래스 없는 주소 지정에서는 Prefix와 Subffix라 부릅니다.

방금 풀었던 문제에서의 Prefix는 29, Suffix은 3이 되는거죠~!!


그렇다면 마지막으로 문제 하나 풀고 갑시다.

주소 중 하나가 167.199.170.82/27이면 네트워크 주소는 어떻게 될까요?

일단 Prefix는 27개, Suffix는 5개. Subfix 5개로 표현 가능한 수는 31개. 그렇다면 마스크는 255.255.255.224(256-32).

167.199.170.82와 255.255.255.224를 AND(&)하면 시작주소는 167.199.170.64 ! ( 64 < 82 < 128이므로! )


클래스 없는 주소체계에서도 서브넷팅은 할 수 있습니다!


만약 회사의 사원이 1000명이라 하면, 1024개(1024는 슬래쉬가 10개가 필요하죠 그렇다는건 22비트가 1인것을 받으면 됩니다.)의 주소가 있는 블럭을 받은 후, 이것들을 부서별로 나눠서(서브넷팅 해서) 쓰면 됩니다.

근데 슈퍼넷팅은 필요가 없습니다. 이미 신청할때부터 필요한 갯수만큼 받으니까요~!



이번 포스팅은 생각보다 길지가 않네요( 시험기간에 포스팅해서 그래... )

다음 포스팅에서는 라우팅 하는 방법에 대해서 포스팅하도록 하겠습니다.

모두 굿밤~_~



안녕하세요~

서브넷팅을 포스팅 한 이후로는 방문자 수가 확 늘었네요~ㅎㅎ

포스팅을 한 날에는 방문자 수가 많고, 안한날에는 방문자수가 확확 줄어버리네요 ㅋㅋ 검색엔진에 포스팅 한 지 얼마 안된 사람의 블로그가 많이 노출되게 해놨나봐요~ 나중에 제꺼에도 적용시켜볼까 생각중ㅎㅎ

슈퍼넷팅 시작하죠~_~


이름만 봐도 슈퍼네팅은 서브넷팅의 반대죠~ 이것은 마치 덧셈을 잘하면, 뺄셈도 잘 하는것과 같다고 생각하면 쉬울것 같네요.. 

클래스 A와B는 고갈되었고, 클래스C마저도 이미 고갈되었죠. 그 중 클래스C의 주소는 너무 작기때문에 기관들의 필요한 IP갯수에 만족을 충족시키지 못합니다.

그렇기 때문에 기관들이 부족한 주소를 C클래스로 충족하기 위해서 여러 블록의 C클래스를 할당받고, 할당받은 C클래스들을 합쳐버리는 겁니다.

즉 , 여러개의 C클래스의 블록을 받고 이것을 합쳐버리는 것을 슈퍼넷팅( Supernetting )이라 합니다.

예를들면 주소가 1000개가 필요한 기관이 있다고 하면, 이 기관은 C클래스의 4개의 블록이 필요합니다.(256*4개)

슈퍼넷팅으로 봤을 때 C클래스는 3번째 바이트가 중요합니다. 



다음 그림은 C클래스 네트워크 4개를 합친 그림입니다.

다음 그림을 보면 이상한 점이 몇 군데 있죠??ㅋㅋㅋㅋ( 지금까지 포스팅을 열심히 읽으셨다면 분명 이해 하셨을거라 믿어 의심치 않습니다!!)


X.Y.35.255는 브로드캐스트 주소로, 직접 브로드캐스트 주소입니다~ 라우터도 하나인 것이 맞고~ 곰곰히 보니까~ 뭐지~ 싶죠 ?ㅋㅋㅋ

위의 그림에서 슈퍼네트워크는 C블록 4개가 합쳐져서 하나의 네트워크가 만들어졌습니다. 그리고 각각의 블록의 255번들의 3개가 살아있죠. 근데, X.Y.33.0/34.0/35.0은 왜 안쓸까요?

0번 주소는 왜 안쓰고 255번은 쓸까요? 쓸꺼면 둘 다 쓰고 안쓸거면 둘 다 쓰지 말던가 ㅋㅋㅋ 사람 헷갈리게 하죠?

왜 그런지 저 중간고사 끝날때까지 다들 곰곰히 고민해 보자구요! 댓글고고싱 ㅎㅎ



슈퍼넷팅을 하지 않았을 경우의 문제점을 보고 갑시다!

라우터는 각 주소의 블럭을 개별적으로 처리합니다. 왜냐하면 C클래스라는 것은 국제적으로 공인된 기관 하나가 어떤 기관에게 나눠주는 것 이기 때문에,  전 세계적으로 나눠준 블럭들을 누구에게 나눠졌는지 찾아볼 수 있어야 합니다. 그렇다는건, 라우터도 블럭주소를 개별적으로 다 처리할 수 있어야 합니다.

정 반대인 이야기 이지만,이 이야기는 서브넷팅에서도 했습니다.

서브넷팅은 밖에서 볼 때는 하나의 블럭으로 쳐다보지만, 내부적으로 봤을땐 4개의 블럭으로 인식합니다.

즉 슈퍼넷팅은, 4개의 블럭이 합쳐져도 밖에서 볼 때는 네개의 블럭으로 인식합니다. 그리고 내부에서 볼 땐 하나의 블럭으로 인식하겠죠.

이 말은, 라우터는 주소 블럭 하나를 하나의 엔트리로 라우팅 테이블에 등록한다는 뜻 입니다.

이 말은 무슨뜻이냐면, 단국대는 4개의 C클래스를 받았습니다. 그리고 내부적으로 슈퍼넷팅이 이루어졌죠. 하지만 미국에서 볼 때는, 저희가 단국대 내에서 인터넷을 사용할 때, 첫번째 블럭의 IP를 할당받았을 수도 있고, 두번째 블럭의 IP를 할당받았을 수도 있습니다.  세번째의 블럭을 받을 수도 있고, 네번째 블럭을 받을 수 있죠. 

제가 어느 블럭을 받았든 미국에서 볼 때는 제가 받은 블럭을 찾아오게 됩니다.(첫번째면 첫번째로, 두번째면 두번째블럭으로~) 

즉, 미국이 볼 때 단국대는, C클래스 4개가 단국대에 등록되어 있다 라고 생각하지 않고, 첫번째 블록을 봤을 때, "아 이것은 단국대에 할당되어 있구나"라고 생각합니다. 

즉 , 인간은 단국대가 C클래스 1번부터 4번까지 4개의 블럭을 받았다고 치면, 이 블럭들이 묶여있다고 생각하는데, 라우터는 각각의 블럭들이 다른 기관에 할당되었을 거라 생각하고, 1번블럭은 단국대, 2번 블럭은 단국대, 3번블럭은 단국대, 4번블럭은 단국대 이런식으로 기억합니다.

왜냐하면, 모든 블럭들이 다른 기관에 할당되어 있을 수 있기 때문에 모든 것을 하나의 규칙으로 처리하기 때문이죠!! 즉 라우터는 어느 블럭 하나는 어디로가고, 이 블럭은 어디로 가고, 이런식으로 기억하고 있습니다!

이런식으로 기억하게 되면, 라우터의 엔트리가 증가하게 됩니다. 그리고 잘 생각 해보면 이걸 라우터가 C1,C2,C3,C4 이렇게 한 튜플(행,row)에 저장하면 좋겠지만, 4개의 튜플(4개의 행,row)로 처리하는겁니다. 주소의 블럭 수가 N개면 N개의 테이블이 생성이 되는거죠. ( 마치 DB설계시 1차 정규화랑 비슷하죠?ㅋㅋ )

그런데, 외부에서만 이렇게 보면 문제가 없습니다. 하지만, 단국대 내부에서도 이것들을 다 각각을 관리해야 합니다. 단국대 내부에서 C1,C2,C3,C4이 하나에 네트워크로 되어있지만, 제가 C1에 있든, C2에 있든, C3에 있든 C4에 있든 어느 IP로 패킷을 보내든지 단국대 내에 있으면 데이터가 밖으로 안 나가고 한번에 전달이 될겁니다.

그럼에도 불구하고, 내부에 있는 모든 장비들이 이것들을 다른 네트워크로 분류하고 있으면 메모리를 많이 차지합니다. 그렇기 때문에 슈퍼넷팅을 해버리는 것이 이런 문제점들을 없애버리는 것이죠.


그렇다면, 슈퍼넷팅을 하기 위한 조건에는 무엇이 있을까요?

슈퍼넷팅은 서브넷팅과 유사하다고 했죠. 덧셈을 할 줄 알면 마이너스도 할 줄 알다싶이, 서브넷팅도 할 줄 알면 슈퍼넷팅도 할 줄 알아야 합니다. 서브넷팅 할때는 2의 지수승으로 나눌 수 있었습니다. 

그러면, 슈퍼넷팅을 하기 위한 규칙을 보고 갑시다 ㅋ

1. 슈퍼넷팅도 합칠때도 2의 지수승으로 합칠 수 있습니다.(3개나 5개는 합칠 수 없습니다. - 2진법의 특징때문에 그래유~) 



2. 합치는 블록의 공간이 연속적이어야 합니다. 

-> 만약 한 메모리를 8조각으로 나누어서 볼 때, 1,2,7,8의 메모리는 합칠 수 없습니다. 논리적으로는 1,2,7,8을 하나의 덩어리로 보자고 하면 합칠 순 있지만 1,2,7,8을 하나의 연속된 메모리로 합칠 순 없습니다. 그렇기 때문에 합치기 위해서는 2개 단위로 합치던가, 아니면 4개씩 합치던가 8개씩 합치던가 해야 합니다.(첫번째 조건)

그리고 2개든 4개든 8개든 연속적으로 위치해야 합칠 수 있습니다.

3. 슈퍼 블럭에서(합쳐진 블럭에서) 첫 주소의 3번째 바이트 ( 합쳐진 블럭은 결국 첫 번째의 블럭이 존재하죠. 그리고 그  첫번째 블럭은 4바이트로 되어있죠! ) 는 C클래스이기 때문에 netid이지만, C클래스와 같은 길이의 netid가 아닙니다. ( 슈퍼넷팅 되었기 때문에 bit가 왼쪽으로 shitf됨.)

-> 세번째 바이트가 블럭의 수로 공평하게 나뉘어 질 수 있어야 합니다. ( 즉, 블럭의 수가 N이면, 세번째 바이트는 N으로 나눌 수 있어야 합니다.)


예를들어 , N을 2라고 하면 슈퍼넷팅 할 수 있는 메모리는 1,2 / 3,4 / 5,6 / 7,8 로 할 수 있죠.

이 중에 5,6번을 슈퍼넷팅 했다고 생각해 봅시다. (실제로 컴퓨터에서는 숫자는 0번부터 시작하니, 4,5번째 블럭이라고 생각하셔야 합니다.)

그럼 시작 주소는 X.Y.4.0입니다. 그럼 시작주소의 3번째 바이트는 4 입니다. 이 숫자 4는 N인 2로 나누어 집니다. 그렇기 때문에 합칠 수 있습니다.


그럼 반대로 생각해봅시다.(안되는 경우로!)

6,7번블록은 합칠 수 없을까요?( 이것도 컴퓨터는 0번째부터 시작하기 때문에, 5,6번 블록이라 생각하시면 됩니다)

그럼 X.Y.5.0이 시작 주소인데, 이 주소의 3번째 바이트는 N인, 2가 5를 나누어 떨어질 수 없기 때문에 이것을 안된다고 생각하겠죠?( 이걸 외워서 하면 이렇게 생각하겠죠!!)

물론 맞죠, 틀린 이야기는 아닙니다~!! ( 놀랐을꺼야...ㅎㅎㅎㅎㅎ이해해)

왜 합칠 수 없냐! 라는것을 알 수 있어야 하죠. 



서브넷팅은 마스크를 오른쪽으로 1의 갯수가 늘어난다고 했죠. 그럼 슈퍼넷팅은 왼쪽으로 1의 갯수가 줄어야 합니다.

그럼 4개가 슈퍼넷팅이 됬으면 2개의 BIT가 왼쪽으로 줄어야 하고, 8개의 블럭이 슈퍼넷팅 됬으면 3개의 BIT이 0으로 변경되어야 하죠.

그렇다는건, 슈퍼넷팅 된 것들은 슈퍼넷팅 마스크(슈퍼넷 마스크)도 달라야 한다는건데, 마스크를 AND했을 때 주소가 같게 나와야 하기 때문이죠.


그럼 만약 600개의 주소가 필요합니다. 슈퍼넷팅은 몇개가 필요할까요??

---> 4개.

왜나하면 C클래스는 하나의 블럭당 256개의 주소를 갖고 있기 때문이죠.

정확한 갯수로는 3개만 있으면 되지만, 3은 2의 지수승이 아니기 때문에 합칠수가 없는겁니다. (3개로 나눌 시 1번조건에 위배됨)

그럼 N=4개가 합쳐져야 합니다. 그럼 세번째 바이트가 4로 나누어 떨어져야 합니다. 

다음 주어진 IP주소중에 슈퍼넷팅이 가능한 주소는 무엇일까요?

198.47.32.0 / 198.47.33.0 / 198.47.34.0

198.47.32.0 / 198.47.42.0 / 198.47.52.0 / 198.47.62.0

198.47.31.0 / 198.47.32.0 / 198.47.33.0 / 198.47.52.0

198.47.32.0 / 198.47.33.0 / 198.47.34.0 / 198.47.35.0

생각해보시고 댓글로 고고고



슈퍼넷 마스크



서브넷팅에서 중요하다 했던 서브넷 마스크처럼, 슈퍼넷팅에서도 슈퍼넷 마스크가 중요합니다!! 주소의 범위와, 첫번째 주소를 알아내기 위해서 필요하죠!

슈퍼넷 마스크 어렵지 않아요! 그저~ 서브넷의 반대일 뿐이에요!

서브넷은 디폴트 마스크에서 오른쪽으로 BIT를 0을 1로 만들어줬죠!!

슈퍼넷 마스크는 그 반대입니다! 디폴트 마스크에서 왼쪽방향으로 0에서 1로 만들어 주면 되죠!

그렇다는건, 네트워크 아이디 숫자가 줄어들고, 호스트 아이디 숫자는 증가한다는 뜻이죠!


지금 이렇게 공부를 해도 이미 IP주소는 고갈이 되었기 때문에 슈퍼넷팅과 서브넷팅을 할 일은 없습니다.

근데 이것과 비슷한 일은 언제든지 발생합니다. 컴퓨터의 자원은 0이랑 1로 이루어져 있습니다. 그렇기 때문에 Bit단위로 데이터를 다루는 프로그램을 작성하게 되면 슈퍼넷팅과 서브넷팅에 관련된 이슈를 다루게 됩니다. 저 역시 환풍기 8개를 1바이트로 다루는 프로그램을 개발할 당시에도 bit갖고 많이 놀았죠ㅋㅋ



그럼 음~~ 슈퍼넷 마스크를 알아내는 방법을 알아야 겠죠?

만약 16개의 C클래스 블록으로 슈퍼 네트워크를 만드려고 합니다. 슈퍼넷 마스크는 무엇인가요?


문제에 다 답이 나와 있죠 ㅋㅋ

만약 16개의 -> 4비트 필요하다. 슈퍼넷 마스크는 뭐냐? => 원래 C클래스의 디폴트 마스크에서 4비트를 0으로 만들어준다!

그럼 슈퍼넷 마스크는
11111111 11111111 11110000 00000000이죠! 여기에서 4비트가 1에서 0으로 변환 된거니, 4비트를 숫자로 표현하면 최대 15 입니다. 그렇기 때문에 256-15=240이 되는거죠! 그러므로,  슈퍼넷 마스크를 10진수로 표현하면 255.255.240.0 이 됩니다.


그럼 한 문제를 풀고 갑시다!

블록의 수가 4인데, 첫 주소가 198.47.31.0일 수 있을까요?

사실 이 문제는 세번째 바이트를 보면, 31은 4로 나누어질 수 없다 라고 바로 정답이 도출되지만, 안되는 이유들을 모두 알고 있으면 좋습니다. (면접에서 물어볼 수도 있는거죠.)

그렇기 때문에~ 이 부분에 대해서 조건 3개를 하나하나 따져봅시다. 

먼저 첫번째 조건으로, 블록의 수는 2의 지수승이 되어야 한다는 것은 4개니까 참이 되겠죠.

두번째 조건으로 슈퍼넷팅은 연속된 메모리 공간에만 가능하다. -> 만약 연속적으로 주어지면 가능하겠지만, 문제에서 주어진 IP주소는 없으므로 참인지 아닌지는 모르겠으니까 이건 배재하죠! ( 정확한 문제는 어느어느 주소인지도 다 제공을 해줄겁니다! )

세번째 조건은 3번째 Byte가 4로 나누어 떨어져야 합니다. 이 부분은 31은 4로 나누어 떨어지지지 않습니다.

이 주소의 슈퍼넷 마스크는 255.255.252.0입니다. 이 마스크와 198.47.31.0을 AND(&) 하면 198.47.28.0 이 나옵니다( 이 주소가 시작주소가 되어야 하죠.)

따라서 198.27.31.0은 4개의 블록의 슈퍼넷 첫 주소가 될 수 없죠!


방금 보여드린 예는 CountExample라는 방식으로 예를 보여드렸습니다. CountExample은 반대의 경우로도 생각해 보자는 이야기죠.

198.27.31.0를 시작주소라 가정하고, 시작주소와 슈퍼넷 마스크를 대입해 보는 경우입니다.

블록의 수가 4개면 2bit를 슈퍼넷 한건데, 그럼 슈퍼넷 마스크는 255.255.252.0이며, 이것을 198.27.31.0과 AND했을 경우 서로 같은 값이 나오면 시작주소로 사용할 수 있죠! 근데, 198.27.31.0은 시작주소가 될 수 없다는 결론이 나왔기 때문에, 첫 주소가 될 수 없습니다.


그럼 마지막 예제! 첫 주소 알아내기!

슈퍼넷은 205.16.32.0이라는 첫 주소와 255.255.248.0이라는 슈퍼넷 마스크를 갖고 있습니다. 라우터는 아래 보기와 같은 목적지 주소를 갖는 3개의 패킷을 받았습니다. 어느 패킷이 슈퍼넷에 속하는지 추측해 보죠!

1. 205.16.37.44

2. 205.16.42.56

3. 205.17.33.76

정답은 댓글로 고고씽! 댓글을 달으셨지만, 틀린분들은 이메일로 해설 해드리겠습니다 ㅎㅎ 이메일 주소도 같이 남겨주세요 ; )


아..포스팅 하는데 자꾸 치킨생각이 나서 집중이 안되네요


치킨...치느님...


다음 포스팅은 클래스 없는 주소 지정으로 찾아뵙겠습니다.


치킨먹으러가야지

고만 쓸라고 이전 포스팅 마무리 했는데ㅎㅎ..

내일 할라고 했는데~

내일은 내일의 할 일이 생길것 같다

하고 자야지!!


서브넷팅은 클래스 A와 B를 더 작은 개념의 주소로 쪼개는 것 입니다.


서브넷팅은 왜 등장했는지 알아야 합니다.

클래스 기반의 주소체계의 문제점은 클래스 A,B클래스의 주소가 낭비되는 것 때문에 나왔습니다.

이 낭비되는것을 나눠서 부족한 C클래스들에게 나눠주기 위해서 나왔습니다.

주로 클래스 A,B는 서브넷팅을 해서 클래스C가 슈퍼넷팅 할 수 있게 도와줍니다.


서브넷팅

자신의 네트워크 주소를 더 작은 서브네트워크 주소로 나누는 것 입니다. ( 자신이 발급받은 네트워크 블럭을 여러조각으로 나누어 주는것.)

서브네트워크는 2의 배수로 나눌 수 있습니다.


단국대학교가 B클래스를 받았으면, 2의 14승개 만큼 사용할 수 있습니다.

하지만 이렇게 많은 컴퓨터들의 하나의 네트워크로 묶어서 사용하면, 한 컴퓨터가 데이터를 전송하면, 다른 컴퓨터들은 자신의 데이터가 아니면 다 데이터를 버려야 합니다. 그리고 모든 컴퓨터중 적어도 2개의 컴퓨터가 데이터를 보낼 확률은 매우 높습니다. ( CSMA/CD가 발생하겠죠. )


이런걸 방지하기 위해서 이전에 포스팅에서 말 했다싶이, 

단국대 네트워크는 중규모로 공과대학 네트워크, 자연대 네트워크, 융합기술대학 네트워크, 이렇게 나뉩니다. 

소규모로는 공과대학의 1층 네트워크,2층 네트워크,3층 네트워크 이런식으로 나뉩니다.

그렇기 때문에 이 속에서 트래픽이 전송되고 받을 수 있습니다. 실제로 모든 네트워크는 이런식으로 서브넷팅이 되어 있습니다. ( 저도 공부하면서 이 부분에서 와.. 인간은 정말 똑똑하다 생각 많이했습니다ㅋㅋㅋㅋ)


( 그림 그리는게 젤 오래 걸려여..자고싶다)

위 그림은 4개로 나눈건데요, 4개로 나눈건 2비트가 사용이 됩니다.

기존의  IPv4주소기반 B클래스는 netid를 2바이트, hostid를 2 바이트를 사용합니다.

하지만 4개로 나누기 위해서 hostid의 2bit를 netid로 변경했습니다.

R1의 네트워크를 4개로 나눴습니다. 각각의 네트워크를 연결하기 위해서 라우터가 연결하고 있습니다. 내부적으로 4개의 네트워크가 있지만, 이 네트워크는 밖에서 볼 때는 하나의 네트워크로 보입니다.

여기서 상상을 해봅시다. 

141.14.0.0이라는 네트워크 주소가 지급이 됬습니다.

이것을 4개로 나눈다 하면, 네트워크 주소가 4개가 나오죠?

그럼 각각의 네트워크 주소는 몇번일까요?

순서대로 정리해 봅시다.

1. 256을 2로 나눈다. -> A. 0~127/ B. 128~256이 나옵니다.

2. 나온 네트워크 주소 A와 B를 또 2로 나눕니다. -> A. 0~63 / B. 64~127/ C.128~191 /D. 192~255번 으로 나뉩니다.

3. 이걸 외우지 말고 2진법으로 표기해 보세요.ㅎㅎㅎㅎㅎ 보는순간 규칙을 발견할겁니다.

2비트로 표현할 수 있는 숫자의 갯수는 4개입니다.

그럼 4개로 나누고 싶으면 2비트가 필요한거겠죠?

8개가 필요하면 3비트로 쪼개면되고. 3비트로 쪼개면 8개가 나옵니다. 

이렇게 나눌 수 있어야 합니다. 이해되쓰~~~~??? 


자. 그럼 정리해봅시다.

1. 앞의 그림에서 외부 네트워크는 141.14.0.0 네트워크가 네 개의 물리적인 서브 네트워크로 나누어진 것을 인식하지 못합니다. ( 외부에서는 단국대가 자연대, 공대, 공공인재대학 이렇게 나누어져 있는지 모릅니다. 외부에선 그냥 단국대 네트워크로 인식함. )

2. 외부에서 볼 때에는 위에 있는 그림에 나와있는 네트워크를 하나의 네트워크로 인식함.

3. 호스트 141.14.192.2로 가는 패킷은 항상 R1 라우터에 도착 ( 외부에서는 4개로 나누어져 있는지 모르니까 항상 R1에게 보내줌.)

4. R1에서부터 IP주소 해석 방법이 달라짐( 왜냐하면, R1 라우터는 141.14.0.0 네트워크가 네 개의 서브 네트워크로 나누어져 있음을 알기 때문이다.)

5. R1 라우터는 패킷을 141.14.192.0 네트워크로 전달


그런데 다시 말하면, 우리가 지금까지 외부에서(단국대밖에서) 141.14.192.2 하면 서브네팅 됬다는 것을 모르기 때문에, 클래스 기반의 주소체계를 쳐다봅니다.

그럼 네트워크 마스크(디폴트 마스크)를 해서 141.14.0.0으로 만듭니다. 그런 후, R1에게 보냅니다.

그런데 R1은 내부적으로 서브넷팅이 됬다는 것을 알고 있습니다. 그렇기 때문에, R1은 디폴트 마스크로 다 지워버리지 못하죠.

그렇기 때문에, 그 뒤에 있는 192(141.14.192.0)를 살려야 합니다. 그럼 이제 이것을 어떻게 뜯어낼까 하는게 문제죠.



위 그림을 보면서 기존의 서브넷 마스크와, 서브넷 마스크의 차이점을 봅시다.


네트워크 마스크는, 블록 또는 네트워크 주소를 알아내기 위해서 사용합니다. 서브 네트워크가 없는 곳에서 사용하죠.

하지만 서브넷 마스크는 서브 네트워크의 주소를 알기 위해서 사용합니다.




그럼 서브넷 주소를 계산해볼까요?

서브넷 주소는 정석적인(Straight) 방법과 편법적인(Short Cut)방법으로 나뉩니다.

먼저 Straight방법을 많이 연습해 보고 Short Cut으로 넘어가시길 권장합니다.

정석적인 방법은, IP주소와 서브넷 마스크를 AND해서 계산했죠.

이 계산법은 서브넷팅을 몇개로 쪼갯는지(몇 bit를 썻는지)를 보시면 됩니다.

위의 그림에서는 4개로 쪼갯기 때문에, subnetid가 2bit가 추가가 됬죠. 여기에서 조금 얍새가 있습니다. 처음 2개의 bit가 1 1 으로 시작하기 때문에, 이 mask를 통과하면 0, 혹은 64이상이 됩니다.( 이 말을 읽고나서 바로 이해하셔야 합니다! )

쉽죠??ㅋㅋㅋ


디폴트 마스크와 서브넷 마스크에 대해서 봅시다.

서브 네트워크의 수는, 디폴트 마스크에서 0이 1로 바뀐 비트의 수로 계산하면 됩니다. 만약 3개가 바뀌었다면 8개겠죠?

그럼 서브 네트워크에 속하는 IP의 주소수는 몇개일까요?

서브넷 마스크에서 0인 비트의 수로 계산하면 됩니다.

앞의 그림에서는 0이 13개 있으니까( 255.255.192.0은 11111111.11111111.11000000,00000000 임. -0은 총 13개)

그럼 2¹³=8192개의 IP주소 생성 가능합니다.


자자 그럼 짧게 문제??같은거 풀어보고 갑시다.

회사에서 상사가 7개의 서브넷팅을 원합니다 몇개로 나눌까요?

-> 2³ = 8개 (1개버림)

그럼 상사가 17개 필요하다고 합니다. 몇개로 나눌까요?

-> 2의 5승개(32개로 만듬, 왜냐하면 16개만 만들면 1개가 모자라기 때문에)


여기서의 서브넷팅의 장담점을 간단하게 보고 갈까요?

장점은 

트래픽을 분리할 수 있습니다.( 지역화 해서 분리)

그럼 유니캐스트 같은경우는 스위치 쓰면 서브넷팅 안해도 되지 않나요!?!!?!? 라는 질문이 나올 수 있지만 그럼 되려 물어봐 주겠다.

그럼 브로드 캐스트는 어떻게 할껀데?

할 말이없죠? ㅋㅋㅋ

서로 방송을 할 때 충돌이 나지 않아야 하기 때문에 서브넷팅으로 나누는게 좋지요. 트래픽이 충돌나는것도 막을 수 있고.

근데 서브넷팅을 많이 하면 라우터의 갯수가 많아지기때문에 돈이 많이 듭니다. 그리고 전체적으로 브로드캐스팅 하기가 어려워 집니다.

하나의 블럭만 있으면 한번만 하면 되는데, 블럭이 여러개면 여러번의 방송을 해야되기 때문이다.



오늘 알고리즘도 포스팅 할 예정이였는데 벌써 두시네요ㅋㅋㅋㅋㅋㅋㅋ

내일부턴 할 시간이 없는데.....아쉽다 ㅠㅠㅠ 시간복잡도 빅오표기법 재귀 시간복잡도 등등 많이 공부해놨는데 아쉽네요~!!

이번주에는 이제 안드로이드를 공부할 예정이라 포스팅을 못하겠네요. 다음주는 시험기간이고..

빠르면 다다음주에 봅시다!

그 다음 포스팅은 슈퍼넷팅부터 뵙도록 하겠습니다.


굿밤^^

멀티 홈드 장치.




핸드폰과 노트북이 아니여도, 한 장비가 두개 이상의 IP주소를 갖을 수 있는데, 이것을 멀티 홈드 디바이스라고 합니다. 이것은 마치 자취생들이 집 주소를 2개 갖고 있는거랑 마찬가지 입니다. 자취-사설IP / 진짜집-공인IP  - 대표적인것이 라우터 , 핸드폰으로 노트북 테더링 하는것도 라우터 역활을 하는거임. 근데 핸드폰은 무선랜의 IP가 있고 3G,LTE의 IP를 갖고 있습니다. 노트북도 무선LAN주소와 유선LAN주소를 두개 잡을 수 있는데 이 또한 멀티 홈드 장치죠.

멀티 홈드 장치 정리 : IP주소를 두 개 이상 가지는 장치 / 대표적인 예로는 라우터가 있음 / 호스트도 두 개 이상의 IP주소를 가질 수 있음(ex.노트북)




클래스 A와 클래스 B는 지금도 엄청 많이 낭비되고 있습니다.

앞 포스팅에서 왜 낭비되는지 설명 했었죠? 그래도~ 못봤을 분들을 위해서 간략히 설명하고 넘어가죠.

만약 클래스 B를 예로 들면, 한국 어느 기업,회사같은 곳에서 클래스B주소를 받았다고 가정하면..

아니 우리학교(단국대학교)를 가정해서, 우리 학교가 클래스B블럭을 받았습니다. 

이 IP주소(여기서 말하는 IP주소는 hostid )를 모두 사용하기 위해선 모든 학생들이 핸드폰과 노트북을 들고와서, 모두 공인IP로 연결 해야지.... 그래도 남겠다


이 정도이기 때문에 많이 남을 것 입니다. 단국대학교가 죽전 천안의 학부생과 교수 직원들 다 합치면 3만명정도 된다고 하죠. 그래도 남습니다.(약 5천개가 남겠네요)




그렇기 때문에 클래스 A,B는 남습니다. 하지만 클래스 C같은 부분은 현저하게 부족합니다. 블록의 갯수는 클래스 A,B보다 많겠지만 hostid는 클래스 A,B에게 쨉도 안될 만큼 적지요. 


그래서 나는 처음 공부할 때 이런 생각을 했죠. 

"클래스를 줬기 때문에 IP가 낭비되고 있는거 아니야?? 왜 이런짓꺼리를 함???"

-> 역시 사람은 다 똑같은 생각을 하나보다.. 이 때문에 클래스가 없는 주소도 있습니다ㅎㅎㅎㅎ소름~~




클래스A에서 사용하지 말아야 했던 블럭은 0번,10번,127번 이 세개 입니다. 



클래스 A에서 0번이면 이 주소의 시작주소는 0,0,0,0 이죠?! 이 주소는 현재 네트웤에 있는 호스트를 나타냅니다. 이거때문에 A클래스의 블럭하나를 날려 먹은거죠.

블럭 하나를 날려먹은 0.0.0.0을 어디에 쓸까요?! 

이건 어떤 디바이스를 처음 부팅 시(Bootstrap 시간에), IP주소가 없습니다. 디바이스가 부팅 된 후, 전파를 잡고 그 전파에 유심정보를 흘려보내서 통신사로 하여금 IP를 받아도록 합니다. 그렇다면 IP를 받아오기 전까지 IP가 없죠!? 어?? 인터넷은 IP가 있어야 통신할 수 있는데?? 처음 폰 켰을때 IP가 어디에 있어!?!?!!?!?! ( 그래서 스마트폰도 처음 켜면 LTE찾는데 시간걸림 )

ㅋㅋㅋ무슨 말인지 이해 되나요?

이 때 인터넷주소로 사용하는 주소입니다. 즉 IP가 없을때 사용하는 IP죠 0.0.0.0은 이 때 사용합니다.

아! 0.0.0.0은 항상 클래스 A주소입니다.


그럼 모두 0 인 것이 있으면 모두 1인것도 있겠죠?!

모두 1 인것은, E클래스에 속합니다. E클래스에서는 단 하나의 주소만 알면 되는데, 모두 1인 것은 목적지로만 사용될 수 있는 브로드캐스트 주소입니다.

인터넷에서 나와 연결되어 있는 모든 장비들에게 전달해!! 이럴 때 사용합니다.

근데 재미있는게 브로드 캐스트는 2개가 있습니다.

직접,제한된 이렇게 두개가 있죠.


윗 그림에서 Specific은 특정하게 정해진 숫자가 있다는 뜻 입니다-직접 브로드 캐스트 주소는 *.255.255.255이렇게 되죠.
네트워크 주소는 앞이 살아있고 뒷 부분이 0이고.( *.*.*.0 )

직접 브로드캐스트는 앞이 살아있고 뒷 부분이 255이고.( *.*.*.255 )


현재 네트워크에 있는 특정 호스트는

만약 제가 강의를 듣고 있는 한 강의실에 경고 출신이 3명이 있다고 가정하면,(우리나라에 제가 나온 시흥능곡고를 능곡고 라고 부르는 것 처럼, 경고가 3개가 있습니다.)

이 경고는 표준말로 경고입니다. 이러면 경기도 고등학교고, 사투리로 경고 라 하면 경북고, 경남에 있는 경남고도 경고라 합니다.

이걸 어떻게 알아보면, 억양으로 알아봅니다.

경기도의 경고는 억양이 일정하고, 경북은 억양이 앞쪽에 있습니다. 경남은 억양이 뒷 쪽에 있습니다.

현재 네트워크에 있는 특정 호스트도 이거와 같습니다. 한 네트워크 속에 있는 hostid(억양)만 보면 누구인지 알아볼 수 있습니다.



클래스 A에 있는 블럭 중 쓸 수 없는 주소가 3개가 있습니다.

0,10,127 이렇게 세 개 있다고 했죠.

그 중 127에 대해서 공부해 봅시다.




여기에 127은 루프백 주소입니다. 루프백은 갔다가 돌아온다는 뜻 입니다 자기 자신에게 날라온다는 뜻이죠.

루프백은 인터넷에서 테스트(디버깅)시 많이 사용합니다.



이게 정말 좋은 주소죠!!

이게 없으면 국가프로젝트를 진행에 많은 어려움이 있을겁니다.

국가 프로젝트중 기밀 프로젝트는 한번 들어가면 못 나오는 곳에서 진행한다고 들었습니다.

여기에선 인터넷도 안통하고 오로지 자신이 갖고 있는 기술로만 개발을 해야 하는데, 이 때 네트워크를 사용해야되는 부분에서 사용할 수 있습니다.( 자기 자신에게 요청을 날린다던지 등등등)

여기에서 재미있는점은 컴퓨터 A 한 대 있습니다. A 컴퓨터 속에 클라이언트 프로세스가 있고, 서버 프로세스가 있습니다. 그리고 서로 다른 컴퓨터 B에 서버 프로세스가 있습니다.

클라이언트 프로세스(A)가 자신의 서버 프로세스(A)에 요청하고 응답 받는것과,

클라이언트 프로세스(A)가 다른 컴퓨터의 서버 프로세스(B)에 요청하고 응답 받는것과 같을까요?


답 : 같습니다.

왜냐하면, 프로세스들끼리 통신할 때 주소가 3개있죠. 물리 논리 서비스지점주소.

프로세스끼리 통신할 때는 서비스 지점 주소만 사용하죠.

A클라이언트는 서버와 통신할 때 어떤 컴퓨터의 어떤 프로세스를 사용할 지 2개의 주소(ip,port)가 필요합니다.

즉. A의 클라이언트가 자신의 서버와 통신할때 2개의 주소(루프백 주소,포트)를 사용하고, B의 서버와 통신할 때도 2개의 주소(B의 IP주소, 포트)를 사용합니다.

그렇기 때문에 로컬에서 테스트를 하더라도 코드를 따로 작성해야 하는 것이 아닌 하나의 코드로 로컬과 원격에서 테스트 가능하게 되는겁니다.


루프백 정리 : 컴퓨터에 설치된 소프트웨어 실험을 위해 사용 / 시스템 바깥으로 패킷이 전송되지 않음 / ping 시험, 내부 프로세스간의 통신 / 목적지 주소로만 사용됨 / 클래스 A의 주소.


네트워크 주소.

네트워크 주소에는 2가지가 있습니다.

직접 브로드캐스트 주소 , 제한된 브로드캐스트 주소




직접 브로드 캐스트 주소

직접 브로드캐스트는 클래스 A,B,C에서 HostID가 모두 1인 주소를 의미합니다.

이 말은 블럭의 값은 살아있고, 뒤의 모두 1인 주소를 의미합니다.

이 주소는 라우터가 특정 네트워크에 있는 컴퓨터에 방송할때 사용합니다.( 내가 지정하는 너! 그래 *번 네트워크! 그 네트워크에 있는 애들은 다 ~~ 들어!! )


제한된 브로드캐스트는 NetID/Hostid가 다 1인것을 제한된 브로드 캐스트라 합니다.

이건 호스트가 이 네트워크에 있는 내에 있는 모든 컴퓨터에게 " 너네 다 들어!!"라고 하는것과 같습니다.


이 두개가 어떻게 다를까요??

왜 두개가 달라야 할까요?

다른말로 하면, 라우터도 제한된 브로드캐스트 쓰면 안되고! 라우터 앞에는 네트워크 주소를 써야되고 호스트는 안 써도 될까요?

그 이.유.는!

1. 브로드캐스트의 위험성.

브로드 캐스트주소까지 다 받을 것이냐(테더링 쓸 때 주로 나오죠.)!

이건 강의실을 빗대어 표현하면 쉽습니다.

교수님이 강의실에서 강의하고 있는 내용을 뒷문 문짝에서 몰래 브로드캐스트를 한다고 생각하면, 교수님이 하신 말씀은 전 세계로 퍼져나갑니다.

그럼 옆 반에 있는 다른 교수님의 수업에도 영향이 있을 것이며, 옆반 교수님의 수업 내용도 저희 반에 브로드캐스트 되겠죠.

그럼 즉 데이터가 섞이게 됩니다.(충돌이 발생- 재전송함.) 특별한 경우에는 가능하긴 하지만, 대부분은 문제가 생가게 됩니다.


그래서, 라우터가 있고 어떤 네트워크가 있을 때, 그 네트워크에 있는 컴퓨터에게 전부 255.255.255.255로 어떤 메시지든 방송이든 빵~~ 쏘면 같은 네트워크에 있는 다른 컴퓨터들은 "아 , 내가 받아야 하는 주소구나 "라고 하면서 모두가 받을것 입니다. 

하.지.만 여기에서 라우터가 브로드 캐스트를 쏜다고 생각하면??????

심각하죠 ㅋㅋㅋㅋㅋ

라우터에 연결된 모든 네트워크에 방송됩니다. ( 라우터가 팔이 3개라고 하면, 3개의 네트워크에 방송이 나가는것이죠 그럼 여러 네트워크가 시끄러워지는것이죠.)


이럴때 라우터는 제한된 브로드캐스트 주소를 사용하는게 아니라 직접 브로드 캐스트를 이용하여 특정 네트워크를 지목해서 사용할 수 있게 합니다.




제한된 브로드캐스트 주소는 , 호스트가 특정 네트워크 내의 모든 호스트에게 송신합니다.

바로 이전 줄에서 설명했다싶이, 제한된 브로드캐스트는, 한 네트워크만 설정해서 방송을 내보낼 수 있습니다.



사설주소.

-사설 용도를 위해 할당

-NAT(Network Address Translator)를 필요로 함.

전 세계적으로 ip주소는 모자라기 때문에, 모든 사람들이 사용하기 위해 사설IP가 있음.

A클래스에서는 10번 B클래스에선 172. C클래스에선 192번.






인터넷에서 NAT 라우터라는것이 있습니다. NAT는 왜 라우터냐면, 사설주소와, 클래스(A,B,C)와 각각 연결해 주는 것이 NAT라우터(네트워크 주소를 변경해 주는 역할을 함) 입니다.

위 그림의 상황에서는 컴퓨터가 데이터를 전송할 때 자신의 IP를 172.18.3.1로 전송을 합니다. 그럼 NAT Router는, 자신이 받은 공인 IP로 변경해서 전송합니다.

그런 뒤, 요청에 대한 응답을 받을때도, 200.24.5.8이라는 IP로 들어오지만 NAT Router를 거쳐서 172.18.3.1로 변경되서 들어옵니다.


그럼, 여기에서 사설IP와 공인IP로 변경해주는 정보는 어디에 저장될까요??

그건 NAT Router에 Translation Table에 저장되는데, 위 그림을 바탕으로 예를 들어보면



이런식으로 저장됩니다

아..연속으로 포스팅하니..힘드네여....

포스팅만....여섯시간...했나.....................하

오늘 서브넷팅까지 하려고 했는데ㅎㅎㅎ

다음 포스팅에서 서브넷팅을 만나뵙도록 하겠습니다. 

모두빠용~~

안녕하세요 ~ 


요 몇일동안 포스팅을 못했네요~

학교 수업 외에 이것저것 하려니 몸이 따라주질 않네요 ㅜㅜ

지금도 일곱시밖에 안됬지만 엄청 피곤피곤~

얼른 포스팅 하고 집 가서 자야지 ㅋㅋㅋㅋ

아!! 어제 파리바게트에서 꿀식빵 사묵었는데 맛있더라구요 ㅎ..ㅎ 

빵에 꿀 발라져 있는것 처럼 보이지만 버터가 발라져 있어서, 후라이팬에 요리조리 구워 먹으니까 맛있어염ㅋ..ㅋ

함 드셔보세요 ㅎㅎㅎㅎ



이제 딴소리 그만하고, 공부합시다.

오늘은 마스크부터 시작하려 합니다.


디폴트 마스크와 서브넷 마스크는 bit operation 을 주로 사용합니다. 이 부분을 공부 하면서 " 아.. C언어도 따로 포스팅을 해야겠군 " 이라는 생각이 많이 들었습니다. 마스크 내부에서 shift를 사용하기 때문에, 이를 정확히 이해 하려면 C언어에서 shift연산자를 이용해서 많이 갖고 놀아봐야 이해가 빠를 것 같습니다.......앞으로 C언어의 포스팅도 늘려야 하나 생각이 드네요ㅎㅎㅎㅎㅎㅎ


흠흠 또 이상한곳으로 빠지네 ㅋㅋㅋ 

시작하죠.


네트워크 주소인 첫 주소는 목적지 주소로 패킷을 전송하는데 사용되므로 매우 중요합니다. 인터넷이 n개의 네트워크로 구성되어 있고 라우터는 m개의 인터페이스를 가지고 있다고 가정합시다. 임의의 호스트로부터 패킷이 라우터에 도착하면 라우터는 패킷이 어떤 네트워크로 보내져야 하는지 알아야 합니다. 라우터는 패킷이 어떤 인터페이스를 통해 전송되어야 하는지 알아야 합니다. 패킷이 네트워크에 도착 하려면 네트워크 주소를 통하여 알아냅니다( 이부분은 나중에 포스팅할 예정입니다.)네트워크 주소를 찾은 후 라우터는 라우팅 테이블을 참조하여 패킷이 전송되어야 할 인터페이스를 찾습니다. 네트워크 주소는 실제로 네트워크의 식별자 입니다.  각 네트워크는 네트워크 주소에 의해 식별됩니다.


네트워크 주소는 네트워크의 식별자 입니다.


여기에서 지난 포스팅에서 했던 이야기를 훑어보고 가겠습니다.

블럭속에서 사용할 수 없는 주소가 몇 번 몇 번 있었다고 했죠~?



-> 블럭 속에선 0번과 255번을 사용할 수 없다고 했습니다!


0번은 네트워크 주소는 블록에서 첫 번째 주소입니다.

0번 주소는 인터넷에 속하는 네트워크를 나타내기 때문에, 라우팅에서 사용합니다.

A,B,C 클래스 어떤 클래스가 됬든 하나의 블럭은 하나의 기관에 부여할 수 있습니다. 기관은 그 주소를 이용하여 잘 나눠서 사용하죠. 이 말은 즉슨, IP를 보면 어디 기관인지를 알 수 있습니다.

예를들어 단국대 IP가 있습니다. 단국대 학생이 IP를 이용해서 인터넷에서 무슨 행동을 하면, 모든 인터넷은 " 아 재 단국대 학생인데! " 라는 생각과 함께, 단국대 학생인 것을 인식하게 됩니다. 이런 원리로 북한이 한국에게 해킹이나 디도스 공격을 날렸을 시 알 수 있는것이죠. ( 북한에게 할당된 IP는 없지만, 북한은 중국에게 IP를 빌려서 사용하고 있습니다. )


이와같이 IP를 알아내면, 해당하는 IP의 블럭이 어디에 소속되어 있는지 알 수 있습니다. 예를들어 10.0.0.0 블럭은 나사에 등록되어 있고~~ 17.0.0.0블럭은 단국대에 할당되어 있고~~ 이런식으로 알 수 있는거죠~

이 주소를 주어지면 많은 정보를 알 수 있습니다. 

만약 17.0.0.1 아이피가 있다고 가정합시다.

가장 먼저 할 수 있는 것이, 해당 주소는 A클래스인 것을 알 수 있습니다.( 너무 기초적이죠ㅋㅋㅋㅋ )

그리고, 네트웤주소는 17번 이며, 17.0.0.1부터 17.255.255.255번 까지 나타낼 수 있습니다.(물론 맨 앞의 번호 0 과 255번호는 사용할 수 없습니다.)


이와 같이 네트워크 주소를 주면 클래스를 알 수 있고, 블럭을 알 수 있고 블럭의 범위도 알 수 있습니다.


그러면 네트워크가주소가 아니라 우리가 사용하고 있는 IP주소를 보면 그 IP주소로 부터 네트워크 주소를 알아 낼 수 있는것이 문제입니다!!!!!


이것을 알 수 있어야 하죠!!! 매우 중요합니다! 그래야지 IP주소로부터 네트워크 주소를 알아낼 수 있어야지 그 네트워크주소로부터 클래스와 블럭의 갯수, 그리고 블럭의 범위를 알 수 있기 때문입니다. 그리고 라우팅에 사용할 수 있죠!


기계는 이것을 마스크를 이용해서 계산합니다.


만약 임의의 IP주소 134.45.72.2 라는 IP를 발급받았습니다.

인간인 우리는 보자마자 " 아 블럭의 숫자가 128보단 크고 192보단 작으니 B클래스겠네 쉽고만 " 이라고 말하죠.

하지만 기계는 하드웨어적으로 bit operation을 사용해서 처리할 수 있습니다.

Bit을 왼쪽으로 shift하게되면 ( 이 값은 레지스터에 들어가죠 ! ), 가장 앞에 있던 bit가 register에 input이 되면서, 이 값을 가지고 1이냐 0이냐를 판별할 수 있게 되는거죠.




이와 같이 어떤 IP주소가 들어오게 되면 shift해서 주소를 인식합니다.



위 그림만 봐서는 감이 오질 않는다!


네 그래서 방금 언급한 134.45.78.2를 bit으로 표현 한번 더 해드리죠!





이제 이해가 되시나요!!!

이런 것이 Default Mask ( Network Mask ) 입니다!


인터넷 내의 라우터는 패킷의 목적지 주소로부터 네트워크 주소를 추출하기 위하여 알고리즘을 사용합니다. 알고리즘에 접목시키 위하여 네트워크 마스크를 사용합니다. 클래스기반 주소지정에서의 네트워크 마스크 또는 디폴트 마스크는 n개의 왼쪽 비트들은 1이고(32-n)개의 오른쪽 비트들은 0인 32비트 수 입니다.


패킷의 목적지 주소로부터 네트워크 주소를 추출하기 위하여 AND연산을 사용합니다. 목적지 주소(또는 블록 내의 임의의 주소)가 디폴트 마스크와 AND되면 결과는 네트워크 주소로 나옵니다(위 그림처럼)

라우터는 주소와 마스크에 대해 2진법 또는 16진법으로 AND연산을 적용하지만 클래스가 없는 주소지정에서는 빠른 방법을 사용합니다(10진법 표기법을 사용하여 마스크를 지정한다.)

디폴트 마스크는 블록 내의 주소 수와 마지막 주소를 찾기 위하여 사용될 수 있습니다.



아..졸립네요 다음껏도 포스팅 하고 갈까 말까 고민이 심히 되는데~~


다들 저녁은 드셨나요




서브네팅은 다음 포스팅에서 뵙도록 하겠습니다~


모두 열공~

+ Recent posts