IP Subnet
Network/Network 2011. 12. 2. 17:391절. IP 번호
sub-networking 을 이해하려면 우선 IP 번호가 어떻게 만들어지고 관리되어지는지 알고 있어야 한다. 이러한 IP 번호에 대해서는TCP/IP 개요(2) 에서 간단하게 알아본적이 있는데 이번장에서는 IP 번호에 대해 좀더 자세한 내용을 알아보도록 할것이다.
이 문서는 IPv4 를 기준으로 설명할것이다.
1.1절. IP 번호는 호스트에 부여되는게 아닌 Interfaces 에 부여되는 것이다.
간혹 혼동할수도 있는데 있는데 IP 번호는 hosts 에 부여되는 것이 아닌, Interfaces(랜카드 혹은 이더넷 카드로 불리워지는)에 부여 되는 것이다. 모든 랜카드는 랜카드 고유의 번호(Ethernet Address) 를 가지고 있으며, 이 이더넷 번호에 IP 번호를 매핑시키는 방식으로 각각의 이더넷에 IP 번호를 부여하게 된다.
이렇게 호스트 기반이 아닌 Interfaces 기반으로 IP 가 부여됨으로, 우리는 하나의 호스트라 할지라고 Interfaces 의 수만충분하다면 여러개의 IP를 가질수 있도록 할수있다 - 물론 하나의 Interfaces 에 여러개의 IP 번호를 부여해줄수도 있겠지만, 이는 일반적인 방법이라고는 할수 없다 -.
보통 우리가 사용하는 호스트(PC)의 경우는 단지 하나의 인터페이스 만으로도 네트웍과 연결해서 대부분의 작업을 하는데 무리가 없겠지만, 라우터 같은경우에는 인접하고 있는 많은 라우터들중 원하는 라우터와 선별적으로 통신을 해야 함으로 당연히 여러개의 인터페이스를 가져야만하고, 각각의 인터페이스에 하나의 IP를 할당해서 사용하게 될것이다.
+------------+ | ROUTER A | | | | eth0<--|---------------> ROUTER B | eth1<--|---------------> ROUTER C | eth2<--|---------------> ROUTER D +------------+ |
1.2절. 점박이 4형제 표기법
아직까지 가장널리 사용되고 있는 IPv4 버젼의 경우 IP 어드레스를 위해서 32bit 주소체계를 나누며, 이것을 다시 8bit 씩 4개 자리로 나누어서 관리한다. 그리고 각각의 자리는 "."을 이용해서 구분한다. 그래서 192.168.182.145 와 같이 표시한다. 그러므로 이론상 0.0.0.0 에서부터 255.255.255.255 까지의 주소할당이 가능할것이다. 대략적으로 계산을 해보면 4294967296 개 만큼의 인터페이스에 IP 주소를 할당해 줄수 있다.
언뜻 생각하기에 40억이란 숫자는 터무니 없이 큰숫자로 보일수도 있으며, 이정도의 숫자라면 모든 PC의 Interface 에 IP 번호를 할당하는데, 문제가 없을 것으로 생각될수도 있지만, 안타깝게도 벌써 부터 인터페이스에 부여할 IP 번호 부족사태가 벌어지고 있다. 이유는 단지 PC 만이 인터넷에 연결되는게 아니기 때문이다. 조만간 냉장고, 세탁기, PDA, 공장자동화기기, 장난감 등 OS를 가질수 있는 모든 소형기기에까지 분명히 인터넷에 연결될것이기 때문이다.
어쨋든간에 우리는 IP 번호를 이용해서 각 인터페이스를 인터넷에서 유일한 것으로 만들어줄수 있다(사실 IP번호가 부족하고 그나마 각나라에 균등하게 분배된것이 아님으로 IP 번호 부족해결을 위한 다른 방법들 - 사설망 구성과 같은 - 을 사용 하지만 이 문제는 논외로 하겠다).
또한 IP 번호는 관리상의 이유로 클래스(Class)로 나누어서 관리되어지고 있다. 다음장에서 이 클래스에 대해서 알아보도록 하겠다.
1.3절. Class
IP 는 크게 3개의 클래스로 나뉜다.
Class 로 IP를 다시 나누는 이유는 몇번말했듯이 관리상의 목적이 가장크다고 할수 있다. 보통의 국가에서도 중앙정부에서 모든 행정을 관리하게 되면 너무 크고 복잡해짐으로 이걸 여러개의 부서로 나누고 다시 부서는 여러개의 과로 나누어서 관리하는데, 마찬가지로 IP 어드래스 역시 하나의 대규모의 IP 어드레스를 가지고 관리하는것보다는 여러개의 적은 개수의 대규모/중간규모의 네트워크로 나누어서 관리하는게 훨씬 편하기 때문이다.
이렇게 해서 IP 어드레스는 A, B, C 클래스로 나누어서 관리하게 된다. 나누는 방법은 간단하다. 위에서 IP 어드래스는 8bit 씩 4개의 영역으로 나뉘어서 계산한다고 했었는데, 이 영역은 다시 네트웍영역과 호스트 영역으로 나뉜다. 네트웍영역은 Internic 등의 기관에서 할당해준 고정된 IP 영역이며, 호스트 영역은 자신이 관리 가능한 IP 영역이 된다. 또한 최상위(네트웍영역)의 3bit 를 이용해서 클래스를 구분한다. 즉 1번째 bit 가 0이라면 A 클래스 2번째 bit 가 0 이라면 B 클래스 3번째 비트가 0 이라면 C 클래스 이런식으로 나누는 것이다.
01234567012345670123456701234567 +- NET 영역 +- HOST 영역 | | |======|-----------------------| +------+-------+-------+-------+ |0 | | | | A Class +------+-------+-------+-------+ |==============|---------------| +------+-------+-------+-------+ |10 | | | | B Class +------+-------+-------+-------+ |======================|-------| +------+-------+-------+-------+ |110 | | | | C Class +------+-------+-------+-------+ |
먼저 A 클래스를 보면 최상위 1개 비트가 이미 예약이 되어 있음으로 실제 IP를 만드는데에는 7개 비트를 사용가능할것이다. 고로 2^7 하면 128 이된다. 그러므로 관리 가능한 IP 범위는 0 - 127 이 될것이다. 그러나 0은 사용할수가 없으며 마찬가지로 127 은 루프백 어드레스로 사용하기 위해서 예약되어 있음으로 사용할수 없다. 그러므로 A 클래스의 IP 영역은 1 - 126 이 될것이다. 또한 A 클래스에 포함된 각각의 IP의 경우 관리할수 있는 호스트의 범위는 2^24 이 될것이다. 이것의 크기는 약 17000000 정도의 상당히 큰크기이므로, 국가등에 부여한다.
B 클래스를 보면 최상위 2개 비트가 예약되어 있음으로 관리 가능한 아이피 범위는 2^6(64) 가 될것이다. 그러므로 A 클래스가 사용하고 있는 1 - 126 이후로 사용이 가능함으로 128 에서 부터 191(128 + 64) 이 될것이다. (흠... 외 128+64 는 192 인데 191 이 되었는지는 설명할 필요가 없겠죠?) 그리고 관리 가능한 호스트는 2^16 개가 될것이다. 지역정부 혹은 꽤 큰규모의 대학교등에 할당해준다.
나머지 192 - 254 까지는 C 클래스가 되며 관리가능한 아이피의 범위는 2^8 개가 될것이다.
1.4절. 예약된 IP
우리는 보통 여러가지 이유로 사설망등을 구성한다. 이러한 사설망에 포함된 컴퓨터들역시 IP 를 가지고 있어야만 서로 통신이 가능할것이다. 이론적으로 봤을때는 사설망에 포함된 컴퓨터들이라면 어차피 내부에서만 서로를 구분해줄수 있으면 됨으로 어떠한 아이피라도 사용이 가능할것이다.
그러나 이렇게 되면 외부 Internet 에 연결된 컴퓨터들과의 IP 가 서로 겹치는 문제가 발생할것이다. 이러한 문제는 발생하면 안될것이다. 이러한 문제를 해결하기 위해서 각 클래스 별로 사설망을 위한 IP 를 별도로 준비해두고 있다. 이들 주소는 오직 사설망구성을 위해서만 사용할수 있으며, Internet 에 연결된 컴퓨터(인터페이스)는 이들 IP 주소 영역내에 있는 IP 번호는 가질수가 없다.
2절. Subnet
서브넷이 사전적 의미는 특정 지역에서 관리되는 IP 영역을 몇개의 영역으로 나누어서 관리하는걸 말한다.
2.1절. 왜 subnetwork 를 하는가?
우리는 이미 앞장에서 IP 영역자체를 관리하기 위한 클래스에 대해서 알아보았다. 그런데 왜 다시 여기에 subnetwork 를 제공하게 되는걸까.
이러한 경우를 한번 생각해 보도록 하자. C 클래스 IP영역을 할당받아서 사용하고 있는데, 이중 하나의 호스트가 지나치게 많은 트래픽을 차지해서 다른 같은 영역의 호스트까지 이에 대한 영향을 심각하게 받을 것이다. 이러한 사이트를 관리하는건 상당히 고달플 것이다. 이럴경우 동일한 C클래스에 있는 호스트들이라 할지라도 관리상의 목적으로 서로 나누어서 관리하게 되면 (트래픽을 유발하는것과 그렇지 않은것을 나누는 식으로) 훨씬 관리가 편할것이다. 어쨋든 커다란 하나의 호스트영역을 관리하는 것 보다는 목적에 따라서 나누어서 관리하는게 여러모로 편할것이다.
이밖에도 몇가지 아래와 같은 이유들 때문에 호스트영역을 몇개의 영역으로 나누는 subnetworking 을 한다.
LAN 으로 구성할때 때때로 호스트들이 꽤 넓은 범위에 흩어져 있을수 있다. 그런데 이때 LAN으로 확장할수 있는 길이에는 한계가 있음으로 지역별로 네트웍을 다르게 구성해야 한다. 이럴때 subnetworking 으로 가까운 지역의 호스트끼러 서로 묶어서 관리할수 있다.
이러한 구성은 ISP 업체에서는 각각의 호스트가 지역적으로 넓게 퍼져 있을수 있음으로 매우 일반적으로 사용한다.
네트웍 트래픽이 너무 높아서 통신속도의 저하를 가져올때, 여러개의 서브네트웍으로 분리함으로써 통신속도를 높일수 있다.
보안이 필요한 호스트와 그렇지 않은 호스트 그룹으로 나누고자 할때, 예를 들어 인터넷 서비스를 해야하는 호스트들은 외부로 노출되어도 되지만 R&D 같은경우에는 중요한 기술적인 내용들을 보호해야함으로 별도로 관리되어야 할것이다.
2.2절. subnetwork 구성하기
다음과 같은 경우를 가정해 보자
210.211.231.001 .002 .003 +--------+ +--------+ +--------+ | Host 1 | | Host 2 | | Host 3 | Internet Service +--------+ +--------+ +--------+ ----------------------------------- | | +--------+ Internet ----->| Router | 210.211.231.000 +--------+ | | ----------------------------------- +--------+ +--------+ +--------+ | Host 1 | | Host 2 | | Host 3 | R&D +--------+ +--------+ +--------+ 210.211.231.129 .130 .131 |
그런데 궁금한게 있다. Router 는 그렇다면 어떻게 목적지 IP 를 검사하여서 이걸 원하는 인터페이스로 보낼수 있을까 ? 답은 네트마스트(net mask) 와 서브넷마스트(subnet mask)에 있다.
2.3절. net mask 와 submnet mask
net mask 는 인터넷 상에서 서브넷이 필요로 하지 않는 경우 사용되는 마스크로 어떤 비트들이 NET 영역이며, 어떤 부분이 HOST 영역인지를 계산(해석)하기 위해서 사용된다. 그러므로 각각의 클래스에 대한 넷마스크는 다음과 같이 정의될것이다.
표 3. Net Mask
클래스 | 넷마스트 | 비트 |
A | 255.0.0.0 | 11111111.00000000.00000000.00000000 |
B | 255.255.0.0 | 11111111.11111111.00000000.00000000 |
C | 255.255.255.0 | 11111111.11111111.11111111.00000000 |
위에서 발했듯이 서브넷의 구성은 서브넷마스크의 비트를 어떻게 조작해주느냐로 결정할수 있다. 즉 11111111.11111111.11111111.10000000(255.255.128) 로 서브넷 마스크 비트를 확장시켰다면 2^1(2) 개의 서브네트웍을 구성할수 있을것이다.
예를 들어서 C 클래스 영역을 가지며 Network address가 203.211.5.0 일때 subnetmask 를 255.255.255.128 로 했다면, 각각 사용가능한 host address 의 범위가 203.211.5.1 ~ 203.211.5.128, 203.211.5.129 ~ 203.211.5.254 인 2개의 서브네트웍을 구성할수 있을것이다.
2 개의 서브네트웍으로 구성되었다고 가정을 할때 이것을 라우팅하기 위해서 라우팅 테이블은 대충 다음과 같이 구성되어야 할것이다.
203.211.5.1/127 255.255.255.0 eth0 203.211.5.128/254 255.255.255.128 eth1 |
11001011.11010011.00000101.01111001 IP (203.211.5.121) 11111111.11111111.11111111.00000000 subnet mask 255.255.255.254 ----------------------------------------------------------------- 11001011.11010011.00000101.01111001 |
11001011.11010011.00000101.10001010 IP (203.211.5.138) 11111111.11111111.11111111.10000000 subnet mask 255.255.255.254 ----------------------------------------------------------------- 11001011.11010011.00000101.10001010 |
4개의 서브네트웍으로 구성하고 싶다면 11111111.11111111.11111111.11000000 으로 해주면 될것이다. 4개의 서브네트웍으로 구성하기로 했다면 범위는 다음과 같을것이다.
203.211.5.1/63 255.255.255.0 eth0 203.211.5.64/127 255.255.255.64 eth1 203.211.5.128/191 255.255.255.128 eth2 203.211.5.192/254 255.255.255.192 eth3 |
11001011.11010011.00000101.01111001 IP (203.211.5.121) 11111111.11111111.11111111.01000000 subnet mask 255.255.255.64 ----------------------------------------------------------------- 11001011.11010011.00000101.01111001 |
11001011.11010011.00000101.10010001 IP (203.211.5.145) 11111111.11111111.11111111.10000000 subnet mask 255.255.255.128 ----------------------------------------------------------------- 11001011.11010011.00000101.10010001 |
보통 서브넷을 나눌때는 4의 배수로 가지고 가는게 일반적이다. 아무래도 계산하기가 좀더 수월하기 때문이다. 보면 알겟지만 서브넷계산하는게 꽤 혼동스럽기 때문이다. (컴퓨터입장에서 봤을때는 별 문제가 없겠지만)
'Network > Network' 카테고리의 다른 글
block & non-block (0) | 2011.12.22 |
---|---|
socket select/poll (0) | 2011.12.22 |
멀티캐스트 원리 (0) | 2011.12.02 |
gethostbyname() 도메인 이름으로 hostent 정보를 구함 (0) | 2011.12.01 |
inet_addr, inet_aton (1) | 2011.12.01 |