티스토리 뷰
IP 주소란?
먼저, 간단하게 인터넷이 어떻게 구성되어 있는지부터 봅시다.
인터넷은 이름처럼 [inter + network]입니다. 여러 개의 소규모 네트웍들이 연결되어서 거대한 네트웍을 이룬 것입니다. 학교 전산실에 있는 컴퓨터들을 이더넷(ethernet) 케이블 등을 이용해서 물리적으로 연결하면 소규모 네트웍이 됩니다. 이것을 LAN(Local Area Network)이라 합니다.
LAN은 또 다른 LAN과 연결될 수 있습니다. 그렇게 연결된 네트웍 역시 계속해서 다른 큰 네트웍에 연결되어 나갈 수 있습니다. 그것이 바로 인터넷입니다. IP 주소는 이런 거대한 네트웍인 인터넷상에서 어떤 한 컴퓨터를 찾아낼 수 있는 주소입니다.
"IP"는 "Internet Protocol"의 약자입니다. 이때 각 LAN은 입구 역할을 하는 컴퓨터를 통해 외부 네트웍과 연결됩니다. 그 컴퓨터를 Gateway라 합니다. 영어 단어 그대로 출입문의 역할을 하는 컴퓨터입니다.
처음 인터넷이 등장 했을 때는 오늘날처럼 이렇게 커질 것을 예상하지 못 했습니다. 인터넷을 만든 사람들은 32비트의 주소로 인터넷상의 모든 컴퓨터의 주소를 다 표현할 수 있을 것으로 생각했습니다. 32비트는 8비트 x 4입니다. 그리고 8비트는 8자리 이진수로 최소값이 00000000
, 최대값이 11111111
입니다. 00000000
은 십진수로 0
, 11111111
은 십진수로 255
이므로 8비트 IP 주소를 10진수로 표현하면 각 자리 숫자가 0 - 255로 이뤄진 4개의 숫자가 됩니다. 165.123.101.2처럼 됩니다.
32비트만 해도 256 x 256 x 256 x 256 = 4,294,967,296개의 IP 주소를 만들 수 있기 때문에 처음 인터넷이 시작되던 당시에는 충분할 것으로 생각했습니다. 그런데 인터넷이 폭발적으로 커지면서 32비트의 IP 주소만으로는 도저히 모든 주소를 다 표현할 수가 없게 됩니다.
최근 새로운 버전의 IP 주소인 IP version6(IPv6) 얘기가 나오는 것이 그런 까닭입니다. IPv6는 128비트입니다. 수학적으로 총 2128의 어마어마한 갯수가 되어서 모자랄 일은 없게 되는 것이죠. 동적 IP 주소(dynamic IP address)가 나타난 것도 IP 주소가 부족하기 때문입니다. 인터넷 서비스 공급자(ISP) 측에서 일시적인 IP 주소를 부여하는 것입니다. 동적 IP 주소는 접속을 끊었다가 다시 연결하면 바뀐 주소를 받게 됩니다. 동적 IP 주소만 갖고는 그 컴퓨터를 항상 찾아낼 수는 없습니다. IP 주소가 어떻게 이뤄져 있는지 자세히 알아 봅시다.
IP 주소의 구성
IP 주소는 크게 두 부분으로 구성되어 있습니다.
IP 주소 = 네트웍 넘버 + 호스트 넘버
네 개의 숫자 중 어디까지가 네트웍 넘버고 어디까지가 호스트 넘버냐에 따라 IP 주소는 세 개의 급(=class)으로 나뉩니다. 네 개의 숫자 중 첫 번째 숫자만 네트웍 주소고 나머지 세개의 숫자는 호스트 주소인 IP 주소를 Class A라 합니다. 첫 숫자는 반드시 0에서 127 사이에 있어야 하는 게 규칙입니다. Class A IP 주소의 예를 하나 들어봅시다.
53. x. x. x
53은 부여받은 숫자이고, 나머지 3개는 0-255 중의 하나의 값을 갖습니다. class A IP 주소를 할당받은 네트웍 관리자는 부여 받은 53 다음에 나오는 나머지 세 숫자를 자유롭게 특정 컴퓨터에 할당할 수 있습니다. 첫 번째 숫자만 네트웍 넘버이고 나머지 세 숫자는 호스트 넘버로 할당할 수 있습니다. 그렇다면 그 네트웍 관리자는 총 몇 개의 IP 주소를 자신의 네트웍에 속한 호스트에 할당할 수 있을까요? 세 개의 숫자를 원하는 대로 할당할 수 있고 각각은 0에서 255까지 쓸 수 있으므로 256 x 256 x 256개가 됩니다. 계산해 보면 16,777,216개입니다.(이 중 몇몇은 사용할 수 없습니다만.)
53. 50. 50. 50
53. 60. 61. 62
. . . . . . . . . .
53. 200.200.150
위의 주소들은 모두 Class A IP 주소입니다. Class A 주소는 할당할 수 있는 주소가 굉장히 많으므로 매우 큰 네트웍을 가진 큰 기관에만 주었습니다.
Class B는 앞의 두 숫자가 네트웍 넘버이고 뒤의 두 숫자는 호스트 넘버인 것입니다. 첫 번째 숫자는 128에서 191 사이의 값이어야 합니다.
130. 78. x. x
Class B IP 주소는 총 16,384개의 네트웍 넘버를 갖습니다. 그리고 각각의 네트웍 넘버 당 나머지 두 부분의 조합수인 256 x 256개(=65,536개)의 호스트 넘버를 갖습니다.
Class C 는 처음 세 숫자가 모두 네트웍 넘버이고 나머지 하나만 호스트 넘버인 IP 주소입니다. 첫 번째 숫자는 192부터 233까지의 값을 가질 수 있습니다.
205. 124. 101. x
Class C 에 속하는 IP 주소는 총 2,097,152개의 네트웍이 있으며 이들 각각은 254개의 호스트를 물려 놓을 수 있습니다. 맨 마지막 숫자만 0에서 255까지 호스트 넘버로 할당할 수 있는 것입니다. 0에서 255이면 256개인데 왜 254개일까요?
각 네트웍 클래스에서 네트웍 넘버를 제외한 나머지 숫자가 모두 0이거나 모두 255인 것은 특별한 용도가 있습니다. 예컨데, 130. 78. x . x라는 클래스 B 네트웍에 속하는 IP 주소 중 130. 78. 0. 0과 130. 78. 255. 255는 특수 용도가 있습니다. 나머지 숫자가 0인 주소는 'anonymous', 즉 네트웍 내의 호스트의 주소를 특별히 밝히지 않을 때 사용되는 주소입니다. 나머지 숫자가 255인 주소는 방송(broadcast) 주소입니다. 예를 들어, 130. 78. 255. 255라는 주소로 어떤 데이타를 보내면 130. 78. x . x에 물린 모든 호스트로 그 데이타가 다 전송됩니다.
그외에도 특수한 IP 주소가 있습니다. 각 클래스의 외부로는 데이타가 전송되지 않는 주소가 있습니다. 데이타 패킷이 게이트웨이를 거쳐서 외부로 나가지 않고 그 네트웍 안에서만 머무는 주소입니다. 이것을 'private address'라고 하며 다음과 같은 것이 있습니다.
클래스 A | 10. 0. 0. 0 |
클래스 B | 172. 16. 0. 0에서 172. 31. 0. 0까지 |
클래스 C | 192. 168. 0. 0에서 192. 168. 255. 0까지 |
마지막으로 루프백(loopback)이라는 특수한 주소가 있습니다. 127.0.0.1이 루프백 주소입니다. 컴퓨터 자신을 가리킬 때 사용되는 특수한 IP 주소입니다. 서버에 아파치 웹써버나 IIS를 인스톨한 경우 웹브라우져를 통해 서버 컴퓨터의 웹서버 프로그램에 접근하려면 주소창에 http://127.0.0.1
이라고 입력하거나 http://localhost
라고 입력하면 됩니다.
(Sub)Net Mask
네트웍 마스크(Network mask)는 감기 걸리면 쓰는 마스크처럼 IP 주소중 네트웍 부분을 가려줍니다. 네트웍 부분은 255로 호스트 부분은 0으로 지정해서 IP 주소의 어디까지가 네트웍 주소이고 어디서부터 호스트 주소인지를 알려줍니다.
Class | 첫 바이트 | Network mask |
Class A | 1 - 127 | 255. 0. 0. 0 |
Class B | 128 - 191 | 255. 255. 0. 0 |
Class C | 192 - 233 | 255. 255. 255. 0 |
클래스 A는 255가 첫째 자리에만 있으므로 IP 주소의 첫번째 숫자만이 네트웍 넘버입니다. 나머지는 호스트 넘버가 됩니다. 클래스 B,C도 마찬가지 방식으로 이해하면 됩니다. 서브넷은 'sub'이므로 네트웍 하방에 있는 또 다른 네트웍입니다. 클래스 B 주소를 하나 할당받았는데 그 밑에 몇 개의 작은 네트웍을 따로 더 만들었다면 작은 네트웍들이 서브넷입니다. 클래스 B 주소의 경우 253개의 클래스 C 네트웍으로 (서브넷으로) 나눌 수 있습니다. 서브넷 마스크는 그러한 서브넷을 구축했을 때 어디까지가 서로 네트웍에 물려있는지를 나타냅니다. 예를 들어 세 개의 호스트가 다음과 같은 IP 주소를 갖는다고 합시다.
호스트 a : 210. 170.1.1
호스트 b : 210. 170.1.2
호스트 c : 210. 170.2.1
이들 호스트의 써브넷 마스크를 모두 255.255.255.0으로 셋팅했다면, 즉 앞에서 세 자리까지가 네트웍 주소가 된다면 호스트 a와 호스트 b는 같은 네트웍에 물려 있는 것입니다. TCP/IP 프로토콜을 이용해서 직접 데이타를 전달할 수 있습니다. 네트웍 넘버를 나타내는 앞에서 세자리 까지의 숫자가 똑같기 때문에 같은 네트웍에 있는 것입니다. 하지만 호스트 c는 호스트 a와 직통으로 얘길 나눌 수 없습니다. 다른 네트웍에 속하기 때문입니다. 다른 네트웍에 접근하기 위해서는 gateway를 거쳐야만 합니다.
만약 위 네트웍의 써브넷 마스크를 255.255.0.0으로 셋팅하면 어떻게 될까요? 네트웍 넘버가 앞에서 두 자리까지이므로 위의 세 호스트들은 모두 210.170. x. x라는 동일 네트웍에 물려있는 것이 됩니다. 직통으로 대화가 가능합니다.
이런 방식으로 네트웍 하부의 서브넷을 원하는 대로 규정할 수 있습니다. 이처럼 TCP에 의해 만들어진 패킷이 네트웍상의 특정 컴퓨터(호스트)로 찾아가는 것을 담당하는 TCP 하방에 깔려있는 프로토콜을 IP라고 합니다. TCP/IP 프로토콜은 둘을 합친 것입니다.
'프로그래밍' 카테고리의 다른 글
프로그래밍 언어의 간단한 역사 (0) | 2020.07.02 |
---|---|
펄(Perl)의 사용자 입력처리: <> 연산자와 chomp (0) | 2020.06.30 |
펄(Perl)의 변수와 스칼라(scalar), 문자열 처리 (0) | 2020.06.30 |
펄(Perl) 프로그래밍 언어 개괄 (2) | 2020.06.24 |
리눅스 기본 명령어 (Linux basic commands) (0) | 2020.05.18 |