안녕하세요~!! 이렇게 주말도 지나갔군요.

주말이 지나가도~ 포스팅은 계속됩니다~ to be continue(시간아 멈춰라 plzplzplz )


이번 포스팅은 네트워크 계층에서 사용하는 ip주소, 즉 IPv4주소에 대해서 이야기 해보려고 합니다.


IP주소의 길이는 4Byte(32Bit)입니다. 그럼 전 세계에 있는 IP주소의 갯수는 몇 개일까요? 2의 32개 승 입니다.(약 42억 개)

42억개라는 IP의 갯수는 많아 보이지만, 스마트폰의 개발 이후로 , 스마트 폰의 갯수보다 IP의 갯수가 적어졌습니다. 전 세계에 있는 모든 사람들이 스마트폰 혹은 노트북이 있다고 가정하면, IP가 부족하다는건 누구나 다 아는 사실입니다.

이것을 대체하기 위해서 IPv6이 나온겁니다.

하지만 IPv6이 사용되지 않는 이유는, 우리나라의 어느 기관이 IPv6으로 버전업을 시켰다고 해도, 미국에 있는 구글은 IPv4를 사용하고 있으면 통신이 되지 않습니다( 하나는 32Bit고 하나는 128Bit이기 때문이죠.)

전 세계적으로 IPv6을 사용하기 위해서는 어떻게 해야 하냐면..

전 세계에 있는 모든 기기를 동시에 종료하고, 동시에 IPv6으로 업그레이드 한 후 부팅하면 IPv6으로 작동하게 됩니다.


이미 저희가 사용하고 있는 컴퓨터,스마트폰에는 대부분 IPv6주소가 다 들어가 있습니다!  하지만 중간에 있는 라우터는 IP주소를 보기 때문에 옛날 라우터는 새 IPv6을 인식하지 못하기 때문에, 지금은 전 세계에 있는 장비들이 IPv6으로 변경이 된다면, 동시에 리부팅 한다고 계획되어 있다고 합니다. (허브,스위치는 아닙니다! IP주소를 보지 않습니다 !! )

하이튼 그렇고, 본론으로 들어가면


IP주소는 각 바이트당 점(도트)로 구분합니다. IP는 처음에 클래스 개념을 적용하여 IP주소를 지정했습니다. 아직 대부분의 인터넷은 클래스 기반의 주소를 사용하고 있고, 아닌곳도 있습니다.






클래스는 총 5개의 종류가 있습니다. - > 클래스 A,클래스 B,클래스 C,클래스 D,클래스 E


IP주소는 전체적으로 42억개가 있습니다. 그리고, 이 IP주소를 사용하기 위해서 5개의 클래스로 나누죠. ( 설마 5등분으로 나눈다고 생각하시진 않으시겠죠..?) 

컴퓨터는 2진법이기 때문에, 2등분 하는 것이 가장 좋다고 알려져 있습니다( android에서 image cache할 때도 2의 제곱으로 많이 하죠.)

그렇기 때문에 A클래스는 21억개가 되고, 나머지 21억개를 B,C,D,E클래스가 갖습니다.

그 다음 21억개(2의 32승 -1개) 를 반을 나눠서  B클래스에 10.5억개를 , 나머지를 CDE클래스들에게 줍니다. 또 반을쪼개서 C클래스와 DE, 반을쪼개서 D와 E . 이런식으로 나눕니다.(그림 참조 , D클래스부턴 공간을 위해 가로로 그렸습니다.)


이렇게 나누면 저희가 볼 땐 더 힘들어 지는 느낌이 팍팍 드는데!!! 하지만 이렇게 나눔으로써 계산이 참 편리해집니다.!!!!(어처피 내부에서 일어나는 거니까 우리랑 상관없찡)

다음 그림은 메모리를 표시해준 그림 입니다. 그리고 4Byte일 경우를 생각해서 그림에 Bit를 표시해 봤습니다. (해당 그림에선 비트를 생략했기 때문에 혼란이 있을 수 있으나, 32비트를 그리다가 더러워질 것을 생각해서 생략했습니다. 그리고 E클래스는 D클래스와 같은 넓이를 갖고 있지만, 사실상 E클래스가 D클래스보다 ½배 작습니다.)

이렇게 A클래스와 B클래스의 차이는 , 맨 왼쪽 Bit가 1이냐 아니냐의 차이 입니다. 

그리고 B클래스와 C클래스는 앞쪽의 bit의 갯수가 1개냐 2개냐에 따라서 좌지우지 하는 것 이죠.

이렇기 때문에 컴퓨터에서 모든 값을 2로 나누는 것이 제일 효율적인 겁니다.


그니까! 좀 더 쉽게 보면!!!

맨 앞쪽의 Bit가 0이면! A클래스 이다!

맨 앞쪽의 Bit가 1이면! 다음 Bit도 검사! 그 다음 Bit가 0이면 B클래스! 1이면 C클래스! 이런식으로 검사 하는것!

-> 이런것들을 분할 정복 알고리즘으로 많이 쓰기도 하지..

C언어에서는 Bit operation ( shift 연산자 )로 많이 사용하죠! - Bit operation을 사용하기 때문에 속도도 엄청 빠르죠!





그럼 여기에서 , 사용자가 보고 있는 10진수의 주소는 몇에서 몇 까지가 무슨 클래스인지를 인식할 수 있어야 합니다. 보통 저희가 사용하는 인터넷은 192.x~~, 172.x~~를 많이 사용합니다. 그럼 이제부터 알 수 있죠! 우리가 몇 클래스의 ip를 받아서 사용하고 있는지.

저희는 192와 172로 시작하는 IP를 많이 보게되죠!

192.x~로 시작하는 사용자는 C클래스 , 172로 시작하는 ip를 부여 받은 사람은 B클래스를 부여 받은 것 입니다.




위의 그림처럼 IP주소는 해당하는 각각의 클래스들( A,B,C,D,E클래스) 에 대해서, Netid와 Hosid로 나뉘어져 있습니다.. 이건 즉 사람도 성과 이름으로 이루어 져 있는 것 처럼말이죠. (일단 그룹핑을 한 것입니다.)

데이터가 계층화 되어 있는겁니다! ( 단계층 되어 있는건 이름만 있고 성이 없는 것! - 우리나라의 옛날 평민들이 성이 없는것과 같죠 .)

왜 이렇게 사용했냐면, 이름을 줄 때, 이름을 유일성때문에 이런 방법을 선택했습니다. 

이 세상에 유일성을 보장하고, 만약 성이 없다는것을 가정하면. 전 세계에 있는 사람들은 제가 이미 기호라는 이름을 선택했기 때문에, 다른 사람들은 기호라는 이름을 선택하지 못합니다. 하지만 성이 있다고 가정하면, 이기호,박기호,권기호 라는 이름을 갖을 수 있게 됩니다. (충돌이 나지 않는 것 입니다.)

IP주소는 전 세계에서 유일해야 하기 때문에 다음과 같은 방법을 선택한 것이죠. 그래서 IP도 사람과 같이 hosid와 netid로 나눈겁니다. - 3계층에서 IP로 상대방을 구분할 수 있어야 되니까요!


A클래스에서는 성을 표시하는 Network id가 1바이트, 그리고 이름을 표시하는 Hostid가 3바이트 입니다.

-A클래스에서는 성을 128개만 표현할 수 있지만( 왜 128개인지 잘 숙지 해야합니다!! ), 이름은 2의 24승개를 표현할 수 있습니다.

B클래스에서는 성을 표시하는 Network id가 2바이트 이름을 표시하는 Hostid가 2바이트 입니다.

- B클래스에서는 성을 2의 24개승을 표현할 수 있지만, 이름은 2의 24개승 밖에 표현을 하지 못합니다.

C클래스에서는 성을 표시하는 Network id가 3바이트 이름을 표시하는 Hostid가 1바이트 입니다.

-A클래스와 반대로 생각할 수 있죠!



여기서 생각을 해보고 넘어갑시다.

A클래스는 성 1개당 2의 24개승의 이름을 표기할 수 있습니다. 이 말은 즉, 그만큼 더 많은 자식을 갖을 수 있다는 뜻 입니다. 하지만 A클래스는 현재 미국에서( 미국에 달파라는 곳에서 인터넷이 시작했기 때문이죠 ,초기의 연구용 네트워크가 퍼진 경우. ) 거의 다 가지고 있습니다.

B클래스는 유럽, 일본, 그리고 한국도 조금 가지고 있습니다. 거의 1980년대에 B클래스까지 다 할당을 받아갔죠.

제가 다니고 있는 단국대학교는 C클래스 입니다. 그렇기 때문에 저희 학교 학생들이 다 사용하기에는 터무니 없이 부족하기 때문에 저희에겐 가상 IP를 발급해 줍니다. ( 192~ 172~ 이런 아이피들이죠. 이것들을 사설 아이피라 부릅니다. )



각 클래스는 고정된 수의 블럭을 갖습니다.

각 블럭은 고정된 크기를 갖는데, A클래스는 128개(2의 (8승 -1)개 ( 여기서 -1개를 하는 이유는 , 각 클래스마다 앞에 자신의 클래스를 나타내는 bit가 있기 때문에 자신의 클래스를 나타내는 bit를 빼준겁니다. 즉 A클래스에서는 맨 앞의 0이 A클래스를 나타내 주죠.))  , 블럭은 사람으로 보면 성씨를 갖고 있어야 자손을 퍼트릴 수 있죠. 이 성을 블럭이라 부릅니다.

컴퓨터는 2의 지수승으로 쪼개면, 뒷쪽은 똑같은 패턴으로 반복되고, 앞쪽은 0,1,2,3으로 순서가 증가가 됩니다.

이런 똑같은 블럭이 A클래스엔 128개가 있는겁니다.

그럼 A클래스는 이름 하나당.. 1600만개(2의 24승)의 IP를 갖을 수 있는거죠

여기서 못쓰는 IPid가 있습니다.

IPv4에서 Netid 0번,10번 ( 사설IP에서 사용) , 127번(루프백) 은 사용하지 못합니다. (A클라스에서 1600만개 *3개의 아이피를 사용하지 못합니다.)


그렇다면, 각 IP는 73.0.0.0 부터 255.255.255.255까지 IP를 줄 수 있다는 말이 되죠?

근데 여기에서도 또!!!!! 또~!!!!!!!!!!!!!! 사용하면 안되는 IP가 있습니다. 바로 73.0.0.0 ( 끝이 0 )인 경우는 그 집의 네트워크 주소( 권씨집안의 주소라 생각하면 편하죠! ) 입니다. 73.0.0.1부터 사용이 가능합니다. 그리고 255.255.255.255는 모두 라는 뜻 입니다.( 권씨집안의 모든 사람들은 들어라! 라는 뜻!) 이 주소는 같은 네트워크 주소 속에 있는 모든 컴퓨터들에게 데이터를 써서 보낼 때 이 주소를 사용합니다. - 보통 라우터를 254번을 줘버립니다.


정리를 해보면,

A클래스에서는 0,10,127 Netid를 못 쓰고, 블럭으로 들어가면 시작주소인 0번지와 맨 끝번지인 255번을 사용하지 못합니다 그리고 254번은 라우터한테 줘버립니다.


B클래스는 블럭의 수가 2의 14승개( 약 16000개) 입니다.(16-2개, B클래스를 나타내는 bit가 2개라서)

C클래스는 블럭의 수는 2의 21승(24-3) 약 200만개가 있습니다. 한 개의 블럭당 IP는 256개를 받을 수 있습니다. (수가 너무 적기 때문에, 교수님들의 사무실, 행정실 이런곳에만 공인IP가 들어가고 나머지 실습실 이런곳에는 사설IP가 들어가게 됩니다.)

C클래스는 보통 가정집 혹은 벤쳐에서 사용하게 됩니다.


D클래스는 멀티캐스트( 유료채널에서만 사용!)

E클래스는 미래에 사용하기 위하여 남겨둔 클래스 입니다.


벌써 세시 반을 넘겼네요~

포스팅을 대충써도 세시간이 넘다니~

상세하게 적으면 더 오래 걸리겠네요 ㅎㅎㅎㅎ

좀 더 자세한 포스팅은 아침 수업 다녀오고나서  랩실에서... 좀 더 상세하게 작성하도록 하겠습니다~


모두 굿나잇~

+ Recent posts