IP주소는 8비트 4개 총 32비트로 이루어져있다.
8비트는 2^8으로 0부터 255까지 256개의 수를 표현할 수 있다.
따라서 0.0.0.0 ~ 255.255.255.255까지 2^32개의 주소 표현 가능 -> 43억개
43억개나 되는 IP주소를 효율적으로 관리하기 위해 클래스라는 것이 등장.
클래서는 A,B,C,D 총 4가지가 있다.
클래스 A
- 32비트 중에서 가장 앞에 있는 비트가 0으로 시작하는 클래스
- 가장 앞에 있는 8비트를 네트워크 주소로 사용, 나머지 24비트를 호스트 주소로 사용
- 가장 첫번째 비트가 0으로 고정되어있으므로, 나머지 7비트로 표현할 수 있는 수는 2^7로 128개, 0부터 127까지 128개의 네트워크를 구분할 수 있다.
- 나머지 24비트로 2^24개(16,777,216)의 호스트를 구분할 수 있다.
- 실재로는 호스트부의 모든 비트가 0이거나 1인 주소는 호스트에 부여할 수 없음! 따라서 2개 뺴면 16,777,214개를 할당할 수 있다.
- 클래스 A는 1600만개의 호스트를 지정할 수 있는 네트워크가 128개 있다는 것을 기억하면 된다.
- 0.0.0.0 ~ 127.0.0.0 범위에 있음
클래스B
- 32비트 중에서 가장 앞에 있는 2비트가 10으로 시작하는 클래스
- 가장 앞 16비트를 네트워크 주소로 사용하고 나머지 16비트를 호스트 주소로 사용
- 16,384(2^14개, 네트워크 주소 16개 중에서 앞 두 비트는 10으로 고정되어 있으므로), 128.0~ 191.255까지 네트워크 주소로 사용
- 호스트 주소는 0.0~ 255.255까지 65,536개의 호스트를 구분할 수 있음, 실제로는 호스트부의 모든 비트가 0이거나 1인 주소는 호스트에 부여할 수 없음. 따라서 2개를 빼면 65,534개를 할당할 수 있음
- 만약 앞부분의 네트워크 주소를 130.5.0.0으로 정했다면 130.5.0.0~ 130.5.255.255까지 총 65,536개의 호스트에 IP를 부여할 수 있다는 의미이다.
클래스C
- 32비트 중에서 가장 앞에 있는 3비트가 110으로 시작하는 클래스
- 가장 앞에 있는 24비트를 네트워크 주소로 사용, 나머지 8비트는 호스트 주소로 사용
- 21비트로 표현할 수 있는 수는 2의 21승으로 2,097,152개의 네트워크를 구분할 수 있따.
- 즉, 192.0.0.0~ 223.255.255까지 네트워크 주소로 사용한다.
- 나머지 8비트는 호스트 주소로 사용하는데 8비트는 2의 8승으로 256개의 호스트 주소를 사용할 수 있다. (실제로는 호스트부의 모든 비트가 0이거나 1인 주소는 호스트에 부여할 수 없음! 따라서 2개를 뺴면 254개 할당 가능)
클래스D
- 32비트 중에서 가장 앞에 있는 4비트가 110으로 시작하는 클래스입니다.
- 32비트 모두를네트워크 주소로 사용한다.
- 클래스 D는 224.0.0.0 부터 239.255.255.255까지 나타낸다.
- 호스트를 지정할 수 없어서 멀티캐스트* 용도로 사용한다.
* 멀티캐스트: 1:N으로 전송하는 방식으로 특정 그룹에게 전송함. 특정 그룹에게만 데이터 전송할 수 있어 유니캐스트와 멀티캐스트의 단점을 보완하는 방식임. 멀티캐스트를 지원하는 자입가 있어야만 동작할 수 있다는 단점이 있음.
IP 주소에 클래스 표현 방법
IP 주소에 클래스를 표현하고 싶다면 IP 주소 뒤에 슬래쉬(/)를 적고 IP 주소의 앞에서 몇 번째까지가 네트워크 주소로 사용하는지 적어주면 됨. 만약 10.5.1.2라는 클래스 A의 IP 주소를 표기한다면 10.5.1.2/8로, 192.168.0.4라는 클래스 C의 IP 주소를 표기한다면 192.168.0.4/24로 표기
192.168.0.0은 호스트주소가 0이면 192.168.0이라는 네트워크 전체의 주소를 나타내는 용도로 쓰이기 때문에 호스트 주소로는 사용이 불가능하다.
192.168.0.255는 192.168.0이라는 네트워크의 모든 호스트, 즉 브로드캐스트 주소로 사용되기 때문에 호스트 주소로는 사용이 불가하다.
IP클래스의 한계
회사에 필요한 IP는 300개라고 가정하면
C클래스는 할당받을 수 없다. C클래스는 254개의 호스트만 할당받을 수 있기 때문에,
그래서 회사에서는 국제인터넷주소관리기구에 클래스 B를 요청한다.
클래스 B는 65,534개의 IP를 할당할 수 있다.
- 300개를 써도 65,234개나 남는다.
- 국제인터넷주소관리기구에서 제공할 수 있는 클래스 B의 네트워크는 16,384개이다.
이렇게 IP 주소가 낭비되는 문제를 해결하기 위해 서브넷 마스크라는 것을 생각해낸다.
서브넷마스크
서브넷 마스크는 클래스로 나뉘어 낭비되는 공간을 다시 한번 나누는 기술이다.
ex) IP주소가 300개 필요한 회사에 클래스B의 네트워크를 할당했다고 가정.
130.5.0.0/16으로 앞의 16비트를 네트워크 주소로 사용하고 뒤에 16비트를 호스트 주소로 사용한다.
여기서 서브넷 마스크는 호스트 주소의 앞 7개의 비트까지 네트워크 주소로 사용하기로 한다.
호스트 주소의 앞 7개까지 1로 채우면 서브넷 마스크는 255.255.254.0으로 표현된다.
130.5.0.0
10000010 00000101 00000000 00000000
11111111 11111111 11111110 00000000 이 두개를 AND 연산 하면
네트워크 부가 늘고 호스트부는 줄어든다.
130.5.0.0 부터 130.5.1.255까지 총 512개의 주소를 할당할 수 있게 된다.
따라서6만개 정도 낭비되다가 200개 정도만 낭비된다.
IP를 관리하기 쉽게 클래스로 나눴지만 부족한 IP를 아껴쓰기 위해 서브넷 마스크가 등장하게 된 것이다.
네트워크를 처음 구상할 때 43억개(2^32)의 IP주소면 충분하다고 생각했지만
인터넷이 폭발적으로 성장하면서 43억개는 턱없이 부족.
한 사람만 보더라도 그 사람이 사용하는 PC, 노트북, 핸드폰, 프린터 등 IP주소를 여러 개 사용한다.
지구에 IP주소를 사용하는 인구가 40억명이라고 가정하고 한 사람이 3개의 IP주소를 사용한다고 하면 적어도 120억개가 필요하다.
이렇게 사용자의 모든 장치에 고유한 IP를 부여하면 너무 많은 IP주소가 사용되므로
외부뫙 통신하는 곳에만 고유한 IP를 부여하고 LAN 환경에서는 가상의 IP를 부여하기로 한다.
여기서 가상의 IP를 Private IP라고 말한다.
그리고 외부와 통신하는 곳에 부여하는 고유한 IP를 Public IP라고 말한다.
집 내부에서는 Private IP로 PC, 노트북, 스마트폰을 구분하고 집 외부로 나갈 때는 Public IP하나로 나감(외부에서는 PC, 노트북, 스마트폰 구분 안됨)
Private IP주소는
10.0.0.0 ~ 10.255.255.255/8 클래스 A
172.16.0.0~ 172.31.255.255/12 클래스 B
192.168.0.0~ 192.168.255.255/16 클래스 C
로 대부분 사용자 PC에서 IP주소를 확인하면 여기에 해당한다.
ipconfig로 보면 같은 ip가 나올 수도 있다.
Q. IP주소는 고유해야 하는데 똑같은 주소면 통신을 못하는거 아닌가?
A. 맞다. IP주소는 고유해야한다.LAN영역에서 사용하는 Private IP주소는 라우터를 통해서 다른 네트워크로 이동하기 전에 Public IP로 바뀌어서 나가게 된다.
Public IP로 바뀌어서 나가면 고유한 주소로 통신할 수 있다.
이를 NAT(Network Address Translation)이라고 하고 NAT는 라우터를 배우고나서 자세히 알아보자.
NAT덕분에 사용자의 모든 기기에 Public IP 를 부여하지 않을 수 있게 되어 IP주소를 절약하게 됐다.
하지만 이 방법은 NAT Traversal이라는 문제가 발생하는 경우가 있고
IP가 부족한 근본적인 해결 방법이 되지 못하므로 IPv6가 개발되었다. IPv6는 무한대에 가까움