[네트워크] 혼공네트 독서 #6 - IP주소

2026. 1. 17. 23:31·CS/컴퓨터 네트워크

https://dev-dx2d2y-log.tistory.com/184

 

[네트워크] 혼공네트 독서 #5 - 네트워크 계층과 IPv4, IPv6 패킷구조, ARP

https://dev-dx2d2y-log.tistory.com/181 [네트워크] 혼공네트 독서 #4 - 네트워크 장비, 허브와 스위치https://dev-dx2d2y-log.tistory.com/180 [네트워크] 혼공네트 독서 #3 - 이더넷 프레임https://dev-dx2d2y-log.tistory.com/178

dev-dx2d2y-log.tistory.com

저번에는 네트워크 계층과 네트워크 계층에서 사용하는 프로토콜인 IP에 대해서 알아보았다. 이번에는 네트워크 계층을 좀 더 알아보도록 한다.


IP주소

네트워크계층에서 주구장창 나왔던 IP주소는 위와 같이 앞의 2바이트는 네트워크 주소, 뒤의 2바이트를 호스트 주소로 설정한다. 호스트가 어느 LAN에 해당하는지 나타내는 부분이 네트워크 주소, LAN 내에서 특정 호스트를 식별하는 부분이 호스트 주소에 해당한다. 네트워크, LAN 한 개 당 같은 네트워크 주소가, 같은 기기에 대해서 같은 호스트 주소가 할당된다.

 

위에서는 네트워크 주소와 호스트 주소가 IP주소의 반반씩 차지했지만, 그 범위는 유동적일 수 있다. 많은 호스트들에 IP주소를 부여하고 싶다면 호스트 주소를 3바이트, 네트워크 주소를 1바이트로 표현해도 되고, 호스트가 적다면 호스트 주소에 1바이트를 부여해도 된다.

 

따라서 네트워크 주소나 호스트 주소 중 어느부분에 더 많은 옥텟(바이트)을 할당할 지 고려를 해야한다. 그렇기 때문에 클래스라는 개념이 고안되었다.


클래스풀 주소체계

클래스는 네트워크 크기에 따라서 IP주소를 분류한다. 필요 호스트IP의 수에 따라서 네트워크의 크기를 가변적으로 조정하고, 이를 기반으로 IP주소를 관리하는 주소체계이다.

 

예시를 들어보면,

 

클래스A - 네트워크 1, 호스트 3

네트워크 주소에 할당되는 부분은 1옥텟, 호스트 주소에 할당되는 부분은 3옥텟을 가진다. 네트워크 부분의 첫 비트는 0으로 시작한다. 따라서 IP주소는 0.0.0.0 ~ 127.255.255.255 를 가질 수 있다. 가장 처음 주소가 0~127이면 클래스A임을 추측할 수 있다. 네트워크 주소로 2^7 개, 각 네트워크는 호스트 주소로 2^24 개를 가질 수 있다.

 

클래스B - 네트워크 2, 호스트 2

네트워크 부분이 2옥텟, 호스트 부분이 2옥텟으로 구성하고, 네트워크 부분의 첫 비트는 10을 시작한다. IP주소는 128.0.0.0 (1000 0000) ~ 191.255.255.255 (1011 1111) 로 구성할 수 있다. 첫 비트를 고정하는 이유는 클래스A와 구분되게하기 위해서 고정한다. 그래서 IP주소의 가장 처음 부분이 128~191이라면 B 클래스 주소임을 추측할 수 있다. 네트워크 주소로 2^14 개, 각 네트워크는 호스트 주소로 2^16 개를 가질 수 있다.

 

클래스C - 네트워크 3, 호스트 1

네트워크 부분이 4옥텟, 호스트 부분이 1옥텟으로 구성되고, 네트워크 부분의 첫 비트가 110으로 시작한다. IP주소는 192.0.0.0 (1100 0000) 부터 223.255.255.255 (1101 1111) 로 구성할 수 있다. 네트워크 주소로 2^21개, 각 네트워크는 호스트 주소로 2^8 개를 가질 수 있다.  IP주소가 192~223이라면 클래스C로 추측할 수 있다.

 

다만 호스트 주소는 예약되어 있는 부분이 있는데, 호스트 주소가 전부 0인 경우는 주로 해당 네트워크 자체를 의미하고, 호스트 주소가 전부 255 (비트가 전부 1) 인 경우는 브로드캐스트 주소를 나타낸다. 그래서 이 예약된 부분은 호스트 주소에서 제외해야한다.


클래스리스 주소체계

클래스풀 주소체계를 이용하면 호스트와 네트워크의 크기에 따라서 유동적으로 IP주소공간을 관리할 수 있다. 다만 문제는, 이렇게 유동적으로 IP주소공간을 할당하더라도, 클래스별 네트워크의 크기가 고정되어 있다.

 

예를들어서, 호스트가 많지 않을 것 같아서 호스트 IP주소를 클래스C로 설정했다. 여기서는 호스트IP주소를 254개 사용할 수 있는데, 약간 모자라서 클래스B로 IP주소체계를 바꿨더니 이번에는 호스트IP 주소를 65534개 사용할 수 있다. 그러면 낭비되는 호스트주소가 되게 많을 것이다. 문제는 클래스 A, B, C 이외에는 다른 주소체계도 사용할 수 없다.

 

그래서 클래스풀보다 더 유동적이며 정교한 주소체계인 클래스리스 추소체계가 등장했다. 클래스에 구애받지 않고 네트워크 영역을 나누어 호스트에게 IP주소를 할당하는 방식이다. 현대에서 주로 사용되는 방식이라고


서브넷 마스크

클래스풀은 클래스에 따라서 네트워크 주소와 호스트의 주소를 구분짓는 것이 용이했다. 하지만 클래스리스 주소체계는 클래스가 없으므로 이것을 알아서 구분해야한다.

서브넷 마스크(subnet mask)는 호스트 주소와 네트워크 주소를 구분짓는 역할을하며, IP주소 상에서 네트워크 주소는 1, 호스트 주소는 0으로 표기한 비트열을 의미한다. 진짜로 그냥 비트열을 의미한다. 그리고 네트워크 내에서 네트워크를 부분부분(subnetwork) 쪼개는 (mask) 비트열로 작동한다.

 

즉, 위처럼 IP주소와 서브넷마스크가 들어오면, 192.168.219가 네트워크 주소, 103이 호스트 주소임을 명시하게 되는 것이다.

클래스A에서는 서브넷마스크를 255.0.0.0

클래스B에서는 255.255.0.0

클래스C에서는 255.255.255.0 으로 설정되게 될 것이다.


서브네팅

그럼 IP주소와 어디부터 어디까지 네트워크 주소임을 명시한 서브넷 마스크를 가지고 이제 네트워크 주소와 호스트 주소를 분리해야한다. 이 때는 IP주소와 서브넷 마스크의 단순히 비트 AND 연산을 수행한다.

 

이렇게

그럼 비트AND 연산 결과가 0이 아닌 부분이 네트워크 주소가 되는 것이다. 네트워크 주소가 192.168.219라는 것을 알았다. 나머지 103 부분이 호스트 주소

 

지금은 옥텟 한 개씩 나눠서 네트워크 주소와 호스트 주소를 구분했지만, "클래스리스"라는 이름에서 알 수 있듯이, 옥텟 한 개가 아니라 비트 한 개를 단위로해서 네트워크 주소 호스트 주소를 구분할 수 있다.

 

이렇게 30번째 비트까지 네트워크 주소를 나타내는데 사용하고, 나머지 2개 비트를 호스트 주소를 나타내는데 사용하는 등, 클래스풀 체계보다 훨씬 다양하고 유연하게 네트워크 주소와 호스트 주소를 나눌 수 있다. 다 서브넷 마스크 덕분이다. 그러면 네트워크 주소는 192.168.219.100이 되는 것이다. 호스트 주소는 3.


CIDR 표기법

그러면 서브넷 마스크는 255.255.255.252처럼 십진수로 표현할 수도 있지만, 이런 방식은 기록해야하는 것이 좀 길어진다. 그래서 '서브넷 마스크 상의 1의 개수'로 서브넷 마스크를 표기하는 방식을 CIDR (Classless Inter-Domain Routing notation) 표기법이라고 한다.

 

바로 위의 예시로 들어보면, 서브넷 마스크는 IP주소 192.168.219.103과 서브넷 마스크의 1의 개수가 30개이므로

 

192.168.219.103/30

 

처럼 나타낼 수 있다.

 

만약

192.168.0.2/25

라는 표기가 있으면, 서브넷 마스크는 25번째 비트까지 1을 나타내므로 네트워크 주소는 192.168.0.0이된다. 그리고 호스트는 7배의 비트를 사용해서 나타낼 수 있으므로 네트워크 주소는 192.168.0.0 ~ 192.168.0.127 을 나타낼 수 있고, 양 끝 값이 각각 네트워크 자신과 브로드캐스트 주소를 사용한다.

 

다시 192.168.219.103/30의 예시를 들어보면, 서브넷 마스크는 30번째 비트까지 1을 나타내므로 네트워크 주소는 192.168.219.100이다. 2개 비트를 사용해 호스트 주소를 나타내므로 192.168.219.100 (맨 끝 옥텟이 01100100) 부터 192.168.219.103 (맨 끝 옥텟이 01100111) 까지가 사용 가능한 네트워크 범위이다.

 

그래서 네트워크 자신을 나타낼 때에는 192.168.219.100, 브로드캐스트 용도로는 192.168.219.103 IP를 사용할 수 있다. 즉, 저 위에서 예시를 든 IP는 네트워크 주소가 192.168.219.100 인 네트워크 내에서 브로드캐스트 용도로 사용하는 IP라는거.

 

실제로는 192.168.219.101과 192.168.219.102 두 개만이 호스트 주소로 사용할 수 있게되는 것이다.

 

서브넷 마스크를 사용하면 서브넷 마스크와 IP주소의 AND 연산으로 네트워크 주소를 구하고, 네트워크 주소에 해당하지 않는 비트들로 다시 호스트 주소를 구성할 수 있게되는 것이다.


공인IP / 사설IP

공인IP

공인IP는 전 세계에서 고유하다. 인터넷과 같이 네트워크 간 통신을 할 때 사용되는 IP주소가 공인 IP주소다. 네이버 서비스에 요청을 보낼 때, 수신지 IP주소는 공인IP주소다.


사설IP

사설 네트워크 내부에서 사용하는 IP주소다. 사설 네트워크는 외부에 공개되지 않는 네트워크다. 가정용 와이파이 등이 이에 해당한다. 가정이든, 기차역이든, 카페든 간에 와이파이에 연결된다면 그 와이파이의 LAN 안에 들어가는 것이다. 그리고 이러한 LAN 내부에서는 사설IP를 사용하게 된다.

 

사설IP는 사설 IP주소로 사용하도록 미리 예약된 IP 주소공간이 있다.

10.0.0.0/8 (10.0.0.0 ~ 10.255.255.255)

172.16.0.0/12 (172.16.0.0 ~ 172.31.255.255)

192.168.0.0/16 (192.168.0.0 ~ 192.168.255.255)

가 있다. 만약 와이파이 접속 등으로 사설IP를 사용하는 특정 LAN 내부로 들어가면 LAN 내부에서는 저 IP 대역 중에서 할당받아서 사용한다.

 

공인IP와 대비되는 사설IP의 가장 큰 특징은 공인IP는 전 세계에서 오직 한 개만 존재해야하기 때문에 IP주소가 겹치면 안된다. 하지만 사설IP 주소는 사설 네트워크 내에서만 통용되기 때문에 위의 사설 IP 대역만 맞춘다면 내 집에서 192.168.0.2를 사용하든 옆집에서 192.168.0.2를 사용하든 상관없다. 네트워크 내부에서만 겹치지 않으면 된다.

 

사설 IP 주소의 할당 주체는 일반적으로 라우터다. 즉, 라우터가 같다면 같은 네트워크 주소를 할당받는다.


NAT

사설IP를 사용하는 이유는 물론 외부에서 접근할 수 없도록 보안용도도 겸하지만 가장 큰 이유는 IP주소가 한정적이기 때문이다. 따라서 모든 호스트와 네트워크들에게 고유한 IP 주소를 부여하면 어느샌가 IP 주소를 사용할 수 없을터이니 사설IP주소를 사용해 IP주소가 겹치는 상황을 만든 것이다. 따라서 더많은 호스트들이 네트워크 주소를 할당받을 수 있는 것이다.

 

다만 문제는, 네트워크 내부에서만 정보를 교환할 때에는 사설IP에서의 IP 주소는 다른 사설IP의 호스트와 겹쳐도 되지만, 이것을 네트워크 외부와 통신하려면 사설IP 주소를 사용할 수 없다. IP 주소가 192.168.0.2라고만 적혀있다면 이게 누구의 IP인지 알 수 없기 때문.

 

그렇기 때문에 NAT(Network Address Translation)을 사용한다. 대부분의 라우터와 공유기들이 갖고 있는 기능으로, 사설 네트워크에서 외부로 나가는 요청에 대해서 송신지의 사설IP주소를 공인IP주소로 바꾸고, 외부에서 들어오는 요청에 대해서 수신지의 공인IP주소를 사설IP 주소로 바꾼다,

 

즉, 사설IP 주소를 네트워크 외부에서도 상대를 특정할 수 있는 공인IP 주소로 바꿔치기하고, 외부에서 공인IP로 들어온 요청을 사설 네트워크 내부에서 사용할 수 있도록 사설IP 주소로 바꾸는 작업을 수행한다.

 

CMD에 ipconfig를 입력하면 이렇게 뜨는데, 이를 통해서 내 사설IP 주소를 192.168.0.15/24임을 알 수 있다.


정적IP와 동적IP

사설 IP 내에서 호스트 주소를 어떻게 할당할까? 두 가지 방식이 있다.

정적할당

호스트 주소를 직접 입력한다. 수동으로 IP주소, 서브넷 마스크, 게이트웨이(라우터) 주소, DNS주소를 입력한다. (DNS는 05장에서 다룸)


동적할당

IP주소를 직접 할당받는 것이 아니라 IP주소나 관련 정보를 직접 입력하지 않아도 알아서 입력해주는 할당방식이다. 동적IP 주소는 미사용 시 회수되고, 할당받을 때마다 다른 주소를 할당받을 수 있다.

 

대표적인 프로토콜은 DHCP (Dynamic Host Configuration Protocol). IP 주소를 할당받고자하는 클라이언트 (호스트)가 DHCP 서버에 요청을 보내며 IP주소를 할당받는다. 일반적으로 라우터가 이 기능을 수행한다. 특정 호스트에게 DHCP 기능을 추가할 수도 있다.

 

cmd에 ipconfig /all 을 입력하면 위와같은 정보가 나오는데, 192.168.0.0 이라는 네트워크 주소를 가진 DHCP 서버 (일반적으로 라우터, 공유기)에게서 192.168.0.15라는 IP주소를 2026년 1월 17일 14:21에 할당받아 2026년 1월 18일 00:21까지 사용한다. 이렇게 DHCP 서버에서 할당받은 IP 주소는 사용기간이 정해져있다. 위를 보면 10시간 정도 임대시간이 정해져있음을 알 수 있다.


DHCP 과정

DHCP 서버와 클라이언트 (호스트)는 어떤 과정으로 IP를 할당받을까?

 

1. DHCP Discover - IP주소를 주세요

우선 클라이언트가 IP 주소를 할당받기 위해서 DHCP 서버를 찾아야한다. 브로드캐스트로 DHCP 서버를 찾는다. 아직 IP 주소가 없기 때문에 송신지 IP 주소는 0.0.0.0 으로 설정되며, 브로트캐스팅 과정은 데이터링크 계층에서 일어난다. 수신지 MAC주소를 FF:FF:FF:FF:FF:FF로 설정하면 브로드캐스팅된다.

 

2. DHCP Offer - 이 IP 주소면 괜찮나요?

DHCP 서버는 브로드캐스트 요청을 받으면 클라이언트에게 DHCP Offer 메시지를 보낸다. 여기에는 클라이언트에게 제안할 IP주소, 서브넷 마스크, 임대기간 등의 정보가 표함된다.

 

3. DHCP Request - 괜찮으니까 써도 되지요?

클라이언트가 받은 DHCP Offer에 대한 응답을 전송한다. 역시 브로드캐스트로 전송된다.

 

4. DCHP ACK - ㅇㅋ 쓰세용

DHCP 메시지는 마지막으로 클라이언트에게 DCHP ACK 메시지를 보낸다. 이를 메시지가 전송되면 클라이언트는 임대기간동안 IP 주소를 사용한다.

 

IP주소의 임대기간이 끝나면 클라이언트는 원칙적으로는 다시 이 과정을 거쳐서 IP를 할당받아야한다. 다만 임대기간이 끝나기 전에 임대기간을 연장할 수 있다 임대 기간이 끝나기 전 두 차례 자동으로 수행되며, 자동으로 수행되는 임대 갱신과정이 모두 끝나면 DHCP 서버로 반납된다.


번외: 왜 MAC주소와 IP주소의 호스트 주소를 같이 사용하는가?

외부 네트워크가 소통을 할 때 주로 호스트-라우터-라우터-...-라우터-라우터-호스트 순으로 패킷이 이동한다. 그리고 각 네트워크 장비에서 정보를 받는 주체는 L2 계층에 속한 NIC이다. 그래서 정보를 전달해주기 위해서는 MAC주소를 반드시 써야하는 것이다. NIC은 IP주소를 모르니까.

 

하지만 MAC주소는 48비트로 이루어져있어 모든 호스트가 모든 MAC주소를 알기 어렵다. 반면 IP주소는 192.168.0.15/24처럼 표기도 간편한 논리적 주소다. (MAC은 물리적 주소) 그래서 패킷통신에서는 간단히 "192.168.0.0에 정보를 넘기는구나"하고 라우팅 등의 기능을 사용해서 최종적으로 192.168.0.0인 네트워크 주소에 정보를 넘긴다.

 

192.168.0.0에서는 IP주소 192.168.0.15를 보고 여기에 대응되는 MAC 주소를 가진 호스트에게 최종적으로 이 정보를 넘긴다. 이는 ARP 과정을 통해 이루어진다.

 

 

'CS > 컴퓨터 네트워크' 카테고리의 다른 글

[네트워크] 혼공네트 독서 #8 - L4계층  (0) 2026.01.24
[네트워크] 혼공네트 독서 #7 - 라우팅, 라우팅테이블, 라우터  (0) 2026.01.23
[네트워크]IPv4 패킷필드에서 옵션은 무엇을 담당하는가?  (0) 2026.01.16
[네트워크] 혼공네트 독서 #5 - 네트워크 계층과 IPv4, IPv6 패킷구조, ARP  (1) 2026.01.15
[네트워크] 혼공네트 독서 #4 - 네트워크 장비, 허브와 스위치  (0) 2026.01.14
'CS/컴퓨터 네트워크' 카테고리의 다른 글
  • [네트워크] 혼공네트 독서 #8 - L4계층
  • [네트워크] 혼공네트 독서 #7 - 라우팅, 라우팅테이블, 라우터
  • [네트워크]IPv4 패킷필드에서 옵션은 무엇을 담당하는가?
  • [네트워크] 혼공네트 독서 #5 - 네트워크 계층과 IPv4, IPv6 패킷구조, ARP
컬러잇
컬러잇
탄천러너지망생
  • 컬러잇
    Color it
    컬러잇
  • 전체
    오늘
    어제
    • 분류 전체보기 (252)
      • 신년사 (3)
        • 2025년 (2)
        • 2026년 (1)
      • CS (79)
        • JVM (12)
        • 인프라 (6)
        • 백엔드 (22)
        • 논리회로 (5)
        • 언어구현 (1)
        • 인공지능 (1)
        • 코드설계 (3)
        • 컴퓨터구조 (9)
        • 데이터베이스 (4)
        • 컴퓨터 네트워크 (16)
      • 보안 (3)
        • 웹보안 (3)
        • AI보안 (0)
        • 시스템보안 (0)
        • 네트워크보안 (0)
      • 언어공부 (65)
        • Java | Kotlin (49)
        • JavaScript | TypeScript (9)
        • C | C++ (6)
      • 개인 프로젝트 (11)
        • [2025] Happy2SendingMails (3)
        • [2026] 골든리포트! (8)
        • 기타 이것저것 (0)
      • 팀 프로젝트 (29)
        • [2025][GDG]홍대 맛집 아카이빙 프로젝트 (29)
      • 알고리즘 (13)
        • 백준풀이기록 (11)
      • 에러 수정일지 (4)
      • 고찰 (33)
        • CEOS 23기 회고록 (9)
        • 놀이터 (0)
  • 링크

    • 교양있는컬러잇
  • 최근 글

  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.5
컬러잇
[네트워크] 혼공네트 독서 #6 - IP주소
상단으로

티스토리툴바