컴퓨터 네트워크에서 서로를 인식하고 소통하려면 각각의 기기에게 할당될 수 있는 고유 키가 필요합니다. 그렇지 않으면 통신하려고 하는 기기가 무엇인지를 알 방법이 없죠. 이러한 고유 키가 IP 주소입니다. 우리는 일상 속에서 주민등록번호, 차량번호, 계좌번호, 주문번호, 티켓번호 등의 고유식별번호를 접합니다. IP 주소는 기기별로 고유하게 할당되는 것이 아닌 네트워크 연결에 따라 할당되는 번호이기에 주문번호, 티켓번호와 비슷하다고 볼 수 있겠습니다.

IPv4

IP version 4 (IPv4) 는 32비트 주소로 우리에게 가장 익숙한 형태의 IP 주소입니다. 0에서 255 사이의 수 네 개로 구성되어 172.16.254.1와 같은 형태의 값을 가집니다. IPv4로 만들어낼 수 있는 주소의 개수는 256의 네 제곱인 총 4,294,967,296개가 됩니다.

세 자릿수를 사용하면서 왜 최대한으로 사용할 수 있는 999가 아닌 255까지만 사용할까요? 컴퓨터는 0과 1로 이루어진 언어라고 흔히 알고있지요. 그렇기에 컴퓨터에 저장하는 정보는 우리에게 익숙한 10진수가 아닌 2진수의 형태가 됩니다. IPv4의 각각의 부분은 8비트, 즉 8개의 0 또는 1로 이루어짐에 따라 2의 8제곱인 총 256가지의 수가 표현되고, 0을 포함하여 255까지의 세 자릿수까지 표현이 가능한겁니다. 이를 8비트를 나타내는 용어인 옥텟(octet)이라고 부르기도 하며 IPv4는 네 개의 옥텟으로 구성된다고 말할 수 있습니다.

네트워크 ID와 호스트 ID

IP 주소는 네트워크를 구분하는 네트워크 ID와 해당 네트워크에 속한 사용자를 나타내는 호스트 ID로 나뉩니다. 즉 같은 네트워크에 연결된 다른 기기라면 동일한 네트워크 ID를 공유하며 서로를 호스트 ID로만 구분하는 겁니다. 이렇게 하면 네트워크 단위로 관리하기 더 효율적이겠지요.

image1
출처: https://www.researchgate.net/figure/1-1-IPv4-Classes-Ranges_fig1_260622269

네트워크당 호스트를 얼마나 가질 수 있는지에 따라 Class를 나눌 수 있습니다. Class A의 첫 옥텟은 네트워크 주소, 나머지 세 옥텟은 호스트 주소가 됨에 따라 총 16,777,214 (224 - 2) 개의 호스트를 가질 수 있고, Class B는 처음 두 개의 옥텟은 네트워크 주소, 두 옥텟은 호스트 주소가 됨에 따라 총 65,534 (216 - 2) 개의 호스트를 갖게 되며 Class C는 처음 세 개의 옥텟은 네트워크 주소, 하나의 옥텟만이 호스트 주소가 되어 254 (28 - 2) 개의 호스트를 가집니다. Class D와 Reserved Address는 호스트를 따로 부여하지 않는데 여기서는 따로 언급하지 않겠습니다.

호스트 개수에서 2를 빼는 이유는 해당 네트워크의 첫 IP 주소는 네트워크 ID로, 마지막 IP 주소는 Broadcast ID로 할당되기 때문입니다. 네트워크 ID는 호스트 ID와 관계 없이 네트워크 단위로 연결할 때 사용되고, Broadcast ID는 네트워크 내부의 모든 호스트에 신호를 보내고자 할 때 사용됩니다.

네트워크 ID 부분을 X라 하고 호스트 ID 부분을 Y라 한다면 다음과 같은 형태가 됩니다.

Class 네트워크 ID (X) / 호스트 ID (Y) IP 주소 범위
A XXX.YYY.YYY.YYY 1.0.0.0 ~ 126.255.255.255
B XXX.XXX.YYY.YYY 128.0.0.0 ~ 191.255.255.255
C XXX.XXX.XXX.YYY 192.0.0.0 ~ 223.255.255.255

Subnet

Subnet은 네트워크 안의 네트워크라고 이해할 수 있습니다. Class A 네트워크를 사용한다고 하더라도 전체를 하나의 네트워크로 지정하기보다 필요에 따라 나눌 수 있다면 더 효율적이겠죠.

Subnet Mask

네트워크를 나누기 위해서는 어디까지를 네트워크 ID로 정할 것인지를 구분해주면 됩니다. IP 주소가 32비트, 즉 32개의 0 또는 1로 구성이 되어있다고 봤을 때 Subnet Mask는 네트워크 ID 부분을 1로, 나머지 뒷자리를 0으로 구분합니다. 아래의 예시를 봅니다.

  10진수 표기 2진수 표기
IPv4 주소 192.168.0.13 11000000.10101000.00000000.00001101
Subnet Mask 255.255.255.0 11111111.11111111.11111111.00000000

Subnet Mask의 2진수 표기에서 1에 해당하는 자릿수는 네트워크 ID로 구분하여 192.168.0이 네트워크 ID가 되고 마지막 자리인 13은 호스트 ID가 되는 겁니다. 흔히 Subnet Mask에 255면 네트워크 ID, 0이면 호스트 ID로 구분되기도 하죠. 그러나 네트워크 ID 자릿수가 옥텟으로 나눠떨어지지 않는다면 좀 더 복잡한 형태를 가질 수도 있습니다.

  10진수 표기 2진수 표기
IPv4 주소 172.16.1.9 10101100.00010000.00000001.00001001
Subnet Mask 255.255.224.0 11111111.11111111.11100000.00000000

위의 경우에는 IPv4 주소의 첫 19비트가 네트워크 ID가 됨에 따라 Subnet Mask는 2진수 표기에서 첫 19자리 수에 1이 들어가고 나머지에 0이 들어갑니다.

요약하자면 Subnet Mask는 0과 1로 네트워크 ID 부분과 호스트 ID 부분을 구분하는 방법입니다.

CIDR

Subnet의 구분을 네트워크 ID 자릿수의 개수로 나타낼 수도 있습니다. 이를 Classless Inter-Domain Routing (CIDR) 이라고 합니다. 이는 보통 IP 주소 뒤에 슬레시 (/) 다음에 자릿수를 나타내는 방식으로 표현됩니다.

10진수 표기 2진수 표기
63.255.173.183/20 00111111.11111111.10101101.10110111/20
   

위의 경우 63.255.173.183을 2진수로 나타내었을 때 처음 20자리를 네트워크 ID로 본다는 의미입니다.

Public IP / Private IP

image2
출처: https://www.avg.com/en/signal/public-vs-private-ip-address

IP 주소가 처음 만들어질 때 지금과 같은 IT의 발전을 예상하긴 어려웠고 IPv4 주소가 할당할 수 있는 약 40억 개의 IP 주소로는 부족해졌습니다. 이에 대한 해법중 하나로 Public IP와 Private IP를 구분하게 됩니다. 외부에서 접속할 수 있는 하나의 Public IP를 공유기에 할당하고, 공유기에 연결된 기기들에 대해서 Private IP를 할당하게 되는 겁니다. 이렇게 된다면 여러 기기를 하나의 Public IP로 묶어서 많은 IP 주소들이 절약되는 겁니다. 또한, Private IP는 다른 외부 네트워크 기기와 중복되어도 문제가 되지 않죠. 비유하자면 전국의 집 주소에 101호는 무수히 많지만 중복되어 사용되어도 문제가 없는 겁니다.

각 IPv4 Class 별로 다음의 주소들을 Private IP 주소로 사용합니다.

Class Private IP 주소 범위
A 10.0.0.0 ~ 10.255.255.255
B 172.16.0.0 ~ 172.31.255.255
C 192.168.0.0 ~ 192.168.255.255

Gateway

IP 주소 정보를 보면 기본 Gateway라는 주소가 있는 것을 볼 수가 있습니다. 이는 다른 네트워크와 연결해주는 접근점을 말하며 흔히 공유기의 주소가 되는 겁니다. 주로 로컬 네트워크에서 인터넷으로 연결해주는 역할을 하게 되지요. Router라고 부르기도 합니다.

DNS 서버

image3
출처: https://www.seobility.net/en/wiki/DNS_Server

Domain Name System (DNS) 서버에 대해서는 많은 이야기를 할 수 있지만 간단하게만 정리하겠습니다. 우리가 흔히 이용하는 네이버, 유튜브, 구글 등등의 웹사이트에 접속할 때 해당 웹사이트의 서버 IP가 필요합니다. 그러나 우리가 브라우저 주소창에 IP 주소를 일일이 쳐서 접속하지 않고 naver.com, youtube.com, google.com 같은 도메인 이름을 사용합니다. DNS 서버는 이러한 도메인 이름을 받아 IP 주소를 내어주는 역할을 합니다. 따라서 해당 웹사이트의 IP 주소를 외우고 다니지 않아도 되는 것이죠. 주로 통신사별로 DNS 서버가 있습니다.

통신사 DNS 서버 주소
KT 기본 DNS 서버 : 168.126.63.1보조 DNS 서버 : 168.126.63.2
LG U+ 기본 DNS 서버 : 164.124.101.2보조 DNS 서버 : 203.248.252.2
SKT 기본 DNS 서버 : 219.250.36.130보조 DNS 서버 : 210.220.163.82
Google 기본 DNS 서버 : 8.8.8.8보조 DNS 서버 : 8.8.4.4

DHCP 서버

기기별로 IP 주소를 직접 정해놓고 고정된 정적 IP 주소를 사용할 수도 있지만 그럴 경우 모든 기기가 항상 사용되지 않을 때 사용되지 않는 IP 주소는 낭비됩니다. 또한, IP 주소가 중복되는 경우를 피하기도 어렵죠. 이에 상황에 따라 IP 주소를 동적으로 할당해주는 방법을 생각해볼 수 있는데, Dynamic Host Configuration Protocol (DHCP) 서버가 이런 일을 수행하게 됩니다.

IP 주소 확인하기

자 이제 각자 IP 주소를 확인하는 방법을 살펴볼까요?

콘솔창에서 윈도우의 경우 ipconfig, 맥이나 리눅스의 경우 ifconfig를 치게 되면 다음과 같은 정보가 출력됩니다.

image4

저의 경우 VMware 가상머신을 사용하면서 생성된 IP 주소와 Wifi로 연결된 IP 주소가 나오네요. 192.168로 시작하는 걸 봐서 Class C Private IP 라는 걸 알 수 있습니다. 저는 윈도우를 사용하고 있는데 윈도우의 경우 ipconfig /all을 입력하면 Gateway, DNS 서버 등의 더 많은 정보를 볼 수 있습니다.

image5

저는 DHCP를 사용하여 동적 IP 주소를 가져오고 있고, 할당된 IPv4주소는 192.168.0.2이며, 서브넷 마스크가 255.255.255.0인 걸 봤을 때 192.168.0이 네트워크 ID네요. 공유기(게이트웨이)의 주소는 192.168.0.1이고 DNS 서버 주소를 봤을 때 저는 SKT DNS 서버를 사용하고 있습니다. IPv6 주소는 따로 언급하지 않았는데 이는 IPv4 주소의 32비트 주소의 부족함을 해결하기 위한 또다른 방법으로 무려 128비트로 확장된 주소입니다.

위의 주소는 전부 Private IP이기 때문에 위의 정보로는 저의 컴퓨터에 침투할 수 없습니다. Public IP를 알기 위해서는 구글에 ‘what is my ip’를 검색하면 확인할 수 있습니다.

image6

업데이트:

댓글남기기