티스토리 뷰

  인터넷 계층의 역할은 전송층으로부터 전달받은 데이터를 Network Access Layer의 도움으로 목적지까지 전송하는 것이다. 이를 구성하는 주된 요소는 IP주소와 라우팅, IP패킷의 분할과 재구축이다. 오늘은 네트워크 계층에서 사용되는 IP주소에 대해 알아보도록 하겠다.

 

  * IP패킷은 데이터링크의 속성에 따라 최대전송단위인 MTU 값이 달라지므로, MTU size에 맞게 분할(조각화)과 재구축(재조립)이 이루어진다.

  * 참고:  MTU와 분할 및 재구축 관련 포스팅 - [TCP/IP] 1. 네트워크 접근 계층, 그리고 데이터링크층과 MTU

  * IP주소는 네트워크에 연결된 여러 host 중 상대(수신host)를 식별하기 위해 사용되며, TCP/IP에서 통신하는 모든 host와 router에는 반드시 IP주소가 설정돼있어야 한다. (IP헤더를 보면 반드시 출발지와 목적지 주소가 필요하다는 것을 알 수 있다.)

 

 

 

  IP주소는 앞장에서 다룬 것처럼 32bits(4bytes)로 되어있다. 하지만 이진수로 되어있어 사람이 이해하기 어렵기 때문에 우리에게 익숙한 십진수 표기방식을 사용한다. 예를 들어 "10101100 00000001 00000001 00000001"은 "172.1.1.1"로 표현될 수 있다. IP주소로는 "00000000 00000000 00000000 00000000(0.0.0.0)"에서 "11111111 11111111 11111111 11111111(255.255.255.255)"까지 2^32개, 즉 4,294,967,296개의 값을 사용할 수 있다. 다시 말해 약 43억 대의 컴퓨터를 네트워크에 연결할 수 있단 얘긴데, 이 IP주소는 컴퓨터의 NIC에 설정된다. 일반적으로 host는 하나 이상의 IP주소를 가지며, 라우터는 2개 이상의 IP주소를 가진다.

 

  이러한 IP주소는 Network address 부와 Host address 부로 나누어지는데 Network부는 데이터링크의 세그먼트별로 할당되며, 각 세그먼트의 네트워크 주소는 중복될 수 없다. Host부는 하나의 세그먼트 안에서 중복되지 않는 값이다. 이렇게 Network부와 Host부를 나누어 IP를 할당하면 네트워크 전체에서 동일한 IP를 가진 장비는 존재할 수 없다. (IP주소는 유니크하다.)

 

 

 

  그렇다면 IP주소를 Network부와 Host부로 구분하는 기준은 무엇일까? 초창기에는 IP주소를 크게 A에서 D까지 네 가지 클래스로 나누었다. 하지만 각 클래스에서 하나의 네트워크 주소에 할당될 수 있는 Host 수가 너무 크기 때문에 IP주소가 낭비될 수 밖에 없는 구조였다. 특히 인터넷 규모가 커지면서 네트워크 주소가 턱없이 부족해지고, 이를 해결하기 위해 각 클래스를 더 작은 네트워크로 분할하여 더 많은 네트워크 주소를 사용할 수 있게 되었다. 즉, 클래스별로 정해진 Host부 주소를 서브 네트워크 주소로 사용한 것이다. 이에 따라 IP주소를 표기하기 위해 식별자가 추가되었다. 바로 서브넷마스크(넷마스크)이다.

 

 

[그림1. IP주소의 네 가지 클래스]

 

 

  IP주소를 4개의 클래스로 나누면 위 그림과 같다. (IP주소의 클래스도 자주 헷깔리는데 위 도식화된 그림을 기억하면 좋을 것 같다.)

 

1. A Class

  IP주소의 맨 앞 1bit가 '0'으로 시작된다. 처음 8개 bit까지가 Network부에 해당하므로 "0.0.0.0"에서 "127.0.0.0"까지 네트워크 주소로 사용가능하며, 각 네트워크마다 할당 가능한 host IP 수는 (2^32 - 2)개이다.

 

2. B Class

  IP주소의 맨 앞 2bit가 '10'으로 시작된다. 처음 16bit까지가 Network부에 해당하므로 "128.0.0.0"에서 "191.255.0.0"까지 네트워크 주소로 사용가능하며, 각 네트워크마다 할당 가능한 host IP 수는 (2^16 - 2)개이다.

 

3. C Class

  IP주소의 맨 앞 3bit가 '110'으로 시작된다. 처음 24bit까지가 Network부에 해당하므로 "192.0.0.0"에서 "223.255.255.0"까지 네트워크 주소로 사용가능하며, 각 네트워크마다 할당 가능한 host IP 수는 (2^8 - 2)개이다.

 

4. D Class

  IP주소의 맨 앞 4bit가 '1110'으로 시작된다. 32bit 모두가 Network부에 해당하므로 "224.0.0.0"에서 "239.255.255.255"까지 네트워크 주소로 사용가능하며, host 주소 부분이 따로 없다. 클래스 D는 멀티캐스트 주소로 사용된다. 멀티캐스트는 브로드캐스트가 발전한 개념이다. 브로드캐스트는 데이터링크의 동일한 세그먼트 상(즉, 같은 네트워크)의 모든 host 및 router에게 패킷을 forwarding하므로(패킷을 받은 host는 본인에게 필요가 없는 패킷은 파기함) 네트워크에 부하를 가져다주며, 같은 네트워크가 아니면 전달하지 않는다(라우터를 통과하지 않는다). 반면, 멀티캐스트는 특정 그룹에 속한 모든 host에게 패킷을 전송하므로 원하는 host에게만 패킷을 보낼 수 있고, 라우터 역시 통과할 수 있다.

 

 

  참고로 각 네트워크에서 첫번째에 해당하는 IP주소(host부 bit가 모두 0인 주소)는 네트워크 주소를 나타내고, 마지막에 해당하는 IP주소(host부 bit가 모두 1인 주소)는 브로드캐스트 주소로 사용되므로 각 클래스의 네트워크마다 사용가능한 host수는 전체 host부 IP 갯수 중에서 네트워크 주소와 브로드캐스트 주소를 제외시킨 값이다.

 

 

 

[그림2. IP주소와 서브넷팅]

 

 

  다시 본론으로 돌아와 IP주소의 서브넷팅에 대해 알아보자. 위 그림은 "172.16.1.33/28"이라는 서브넷팅된 IP주소를 가지고 서브넷마스크 주소, 네트워크 주소, 브로드캐스트 주소를 계산한 것이다. 맨 뒤의 "/28"은 서브넷 주소가 처음부터 몇 bit까지인지를 나타낸다. 따라서 172.16.1.33을 이진수로 표현했을 때 맨 앞부터 28개 bit가 네트워크 주소에 해당한다(물론 정확하게는 host부 값을 모두 0으로 해야 네트워크 IP주소가 된다).  또한 이 네트워크 주소에 해당하는 부분을 모두 '1'로 채우면 서브넷마스크 주소가 된다. 브로드캐스트는 해당 네트워크에서 host부 값을 모두 1로 채운 값이 된다.

 

  이처럼 클래스 구분을 무시하고 임의의 길이로 된 네트워크 주소를 사용하는 라우팅 방식을 CIDR(Classless Inter-network Domain Routing, 클래스에 구애받지 않는 조직간 라우팅)이라 한다. 예를 들면 조직간 라우팅 프로토콜인 BGP는 CIDR을 지원한다. 예를 들어 B클래스가 부족하면 C클래스를 여러 개 묶어서(Supernetting) B클래스 대역처럼 사용할 수 있다. 따라서 CIDR을 통해, IP주소 공간을 효과적으로 사용할 수 있을 뿐만 아니라 연속되는 여러 개의 대역을 하나의 대역으로 취급하면서 라우팅 테이블(정보량)을 줄일 수 있게 되었다.

 

  이와 반대로 VLSM(Variable Length Subnet Mask, 가변길이 서브넷마스크)는 조직 내에서도 부서마다 필요한 host ip 수를 고려하여, 재차 서브넷팅을 할 수 있도록 하는 개념이다. 예를 들어 서브넷마스크 길이가 "/24bit"인 경우 "/25bit"짜리 2개 대역을 사용할 수도 있고 "/25bit"짜리 1개와 "/26bit"짜리 2개 대역을 사용할 수도 있다. 이는 조직 내 부서마다 서브넷마스크 길이를 다르게 배포하여(외부에서는 알 수 없다.) IP주소의 사용율을 높여준다. VLSM을 지원하는 라우팅 프로토콜로는 RIP, OSPF, IS-IS, EIGRP(Extended IGRP), BGP-4 등이 있다.

 

 

 

  한마디로 CIDR은 축약, VLSM은 분할이다! 축약과 분할을 통해 IP주소를 효율적으로 사용함으로써 IP주소의 부족 문제는 어느정도 해결되었지만, 어쨌든 IP주소의 수는 여전히 한계가 있다. 만약 이때까지와 같이 모든 host와 router에 고유한 ip주소를 할당하게 되면 ip주소는 고갈되기 마련이다. 그렇다면 인터넷에 연결된 네트워크에만 고유한 ip를 할당하고, 인터넷에 연결되지 않는 네트워크에는 아무 ip나 할당하면 어떨까? 물론 이론상으로는 문제가 없다. 하지만 정책변경으로 그 네트워크를 인터넷에 연결하게 되거나, 실수로 인터넷 쪽으로 네트워크를 잘못 구성한 경우 문제가 된다. 따라서 인터넷에 연결되지 않은 독립된 네트워크에서만 사용할 수 있는 사설IP 대역을 지정하였다.

 

  각 클래스마다 사설IP 대역은 아래와 같다.

 

1. 클래스 A: 10.0.0.0/8

2. 클래스 B: 172.16.0.0/12

3. 클래스 C: 192.168.0.0/26

 

 

  초기에는 위 사설IP 대역이 인터넷과의 연결이 필요없는 네트워크에서만 이용되었다. 하지만 사설IP 주소를 공인IP(혹은 Global IP) 주소로 변경해주는 NAT(Network Address Translation) 기술이 등장하면서 사설IP를 가진 네트워크도 공인IP를 가진 인터넷 상의 host와 통신할 수 있게 되었다. 예를 들면 학교나 기업 내의 무수히 많은 pc들에는 사설IP를 할당하고, 이를 집선하는 메인 라우터에만 공인IP 주소를 설정하여, 사설IP를 가진 pc가 NAT를 통해 외부와 통신하는 것이다. 물론 이러한 사설IP 주소도 사설 네트워크 안에서는 고유해야 한다.

 

 

 

  NAT 기술을 통해 사설IP를 활용해 IP부족 현상을 어느정도 막을 수 있게 되었지만, 이는 공인IP를 사용하는 것에 비해 제약이 많다. 홈게이트웨이나 무선ap 뒷단에 물린 내 pc를 서버로 사용할 수 없다든지 말이다(?).. 아무튼 공인IP가 필요한 어플리케이션은 이용할 수 없다. 만일 내가 홈게이트웨이 없이 허브를 놓고 공인ip를 여러 개 받아가고자 한다면 ISP(통신사)에서는 아래처럼 제약을 걸 것이다.

 

(공인IP가 더 필요하면 돈을 더 내란 말이겠지? 아래 와이파이 접속pc 대수 제한은 사설ip를 받아갔는데도 트래픽 때문인지 host 수에 제한을 건다..ㅡㅡ; 얼마전까진 이런 문구가 뜬 적이 없는데 뭐냐, 넌..)

 

 

[그림3. 투썸플레이스 무선AP(wifi) 환경에서의 KT Olleh 인터넷 접속 PC 대수 제한]

 

 

 

  마지막으로 CIDR/VLSM, NAT 기술로도 완전히 해결될 수 없는 IP부족 현상을 해결하기 위해 궁극적으로 나아갈 방향은 IPv6라고 한다. 하지만 아직까지는 보급이 더디다. 그래도 각 ISP에서 IPv6에 대한 제반을 갖추기 위해 준비하고 있을테니 난 또 이것도 공부해야겠다. 쩝.. 아직 IPv6는 어려우니까 패스하고, 담에 알아보는 걸로..^^

 

 

[지난 글 보기]

[TCP/IP] 1. 네트워크 접근 계층, 그리고 데이터링크층과 MTU

[TCP/IP] 2. 가장 널리 보급된 데이터링크인 이더넷, 1000BASE-T의 의미는?

[TCP/IP] 3. 인터넷 계층의 모든 것(1): IP프로토콜, IP패킷, IP헤더의 구조

댓글