안녕하세요~

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

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

슈퍼넷팅 시작하죠~_~


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

클래스 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

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


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


치킨...치느님...


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


치킨먹으러가야지

+ Recent posts