| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
- LLM
- Network
- CloudWatch
- Rag
- 티스토리챌린지
- CKA 기출문제
- Kubernetes
- docker
- 바이브코딩
- MySQL
- Spring
- SRE
- aws
- kotlin coroutine
- CKA
- 코틀린 코루틴의 정석
- PETERICA
- 기록으로 실력을 쌓자
- golang
- AI
- Claude
- kotlin
- go
- 오블완
- 정보처리기사 실기 기출문제
- minikube
- tucker의 go 언어 프로그래밍
- 공부
- Java
- AWS EKS
- Today
- Total
피터의 개발이야기
[Network] 07. 같은 동네와 다른 동네는 누가 판단할까? 본문

TCP/IP를 우편 시스템으로 이해하기 — Part 2. 편지에 두 종류의 주소가 필요한 이유
ㅁ 들어가며
앞의 글에서 ARP는 IPv4 주소에 대응하는 MAC 주소를 찾는다고 했다.
하지만 ARP Request는 같은 Broadcast Domain 안에서만 전달된다.
라우터는 일반적으로 이 브로드캐스트를 다른 네트워크로 넘기지 않는다.
PC A가 다음 목적지로 데이터를 보낸다고 생각해 보자.
내 IP 주소 : 192.168.10.70
목적지 A : 192.168.10.120
목적지 B : 192.168.10.130
세 주소가 모두 192.168.10으로 시작한다. 그러면 둘 다 같은 동네일까?
주소의 겉모습만으로는 알 수 없다.
PC는 패킷을 보내기 전에 먼저 다음 결정을 내려야 한다.
같은 네트워크라면 → 목적지의 MAC 주소를 ARP로 찾는다.
다른 네트워크라면 → 기본 게이트웨이의 MAC 주소를 ARP로 찾는다.
이 경계를 알려 주는 정보가 Subnet Mask이며, 이를 간단히 표현하는 방법이 Prefix Length다.
이번 글에서는 IPv4 주소의 비트 구조, /24의 의미, Network Address를 계산하는 AND 연산, On-link와 Off-link 판단을 살펴본다.
ㅁ 주소만 적으면 동네의 경계를 알 수 있을까?
192.168.10.70이라는 IPv4 주소를 보자.
사람이 읽기 쉽게 점으로 나뉜 네 개의 숫자로 표시하지만, 컴퓨터는 32개의 비트로 처리한다.
192 168 10 70
11000000 . 10101000 . 00001010 . 01000110
이 32비트 안에는 네트워크를 나타내는 부분과 그 네트워크 안의 호스트를 나타내는 부분이 함께 있다.
[ Network Portion ][ Host Portion ]
문제는 IP 주소만 봐서는 두 부분의 경계가 어디인지 알 수 없다는 점이다.
같은 192.168.10.70이라도 다음처럼 해석할 수 있다.
192.168.10.70/24 → 앞 24비트가 Network Portion
192.168.10.70/26 → 앞 26비트가 Network Portion
주소는 같지만 /24와 /26은 서로 다른 크기의 동네를 만든다.
IP 주소와 Prefix Length는 함께 있어야 완전한 네트워크 주소 정보를 표현할 수 있다.
ㅁ Subnet Mask는 경계선을 그린다
Subnet Mask도 IPv4 주소와 같은 32비트다.
네트워크 부분에는 연속된 1, 호스트 부분에는 연속된 0을 둔다.
IP Address : 11000000.10101000.00001010.01000110
Subnet Mask : 11111111.11111111.11111111.00000000
Subnet Mask를 십진수로 표현하면 다음과 같다.
255.255.255.0
앞에서부터 1인 비트가 24개이므로 더 간단히 /24라고 쓴다.
이를 CIDR Prefix Length라고 한다.
255.0.0.0 = /8
255.255.0.0 = /16
255.255.255.0 = /24
255.255.255.192 = /26
Prefix Length가 길수록 네트워크 부분이 많고 호스트 부분은 적어진다. 따라서 하나의 서브넷에 포함되는 주소의 수는 줄어든다.
/24 → Host bit 8개 → 2^8 = 256개 주소
/26 → Host bit 6개 → 2^6 = 64개 주소
/30 → Host bit 2개 → 2^2 = 4개 주소
과거의 Class A, B, C 방식보다 필요한 크기에 맞춰 Prefix Length를 정하는 CIDR(Classless Inter-Domain Routing) 방식이 현재 주소 표현과 라우팅의 기본이다.
ㅁ 동네 이름은 어떻게 계산할까?
호스트가 속한 네트워크를 나타내는 주소를 Network Address라고 한다.
IP 주소와 Subnet Mask를 비트 단위 AND 연산하면 Network Address를 구할 수 있다.
AND 연산은 두 비트가 모두 1일 때만 결과가 1이다.
192.168.10.70/24를 계산해 보자.
IP Address 11000000.10101000.00001010.01000110
Subnet Mask 11111111.11111111.11111111.00000000
----------------------------------- AND
Network 11000000.10101000.00001010.00000000
십진수로 바꾸면 다음과 같다.
192.168.10.0/24
Subnet Mask의 1 영역은 IP 주소의 네트워크 비트를 남기고, 0 영역은 호스트 비트를 모두 0으로 만든다.
그래서 Network Address는 해당 서브넷 자체를 나타낸다.
일반적인 IPv4 서브넷에서는 호스트 인터페이스에 Network Address를 할당하지 않는다.
ㅁ 목적지에도 내 마스크를 적용한다
PC가 목적지를 같은 네트워크로 판단할 때 목적지의 Subnet Mask를 물어보는 것은 아니다.
송신자는 자신의 인터페이스에 설정된 Prefix를 기준으로 목적지 주소가 연결된 네트워크에 포함되는지 판단한다.
다음 설정을 보자.
내 IP Address : 192.168.10.70
Subnet Mask : 255.255.255.192
Prefix Length : /26
/26의 마지막 옥텟 마스크는 192, 이진수로 11000000이다.
먼저 자신의 Network Address를 계산한다.
70 = 01000110
192 = 11000000
-------- AND
64 = 01000000
따라서 자신의 네트워크는 192.168.10.64/26이다.
목적지 192.168.10.120에도 같은 /26 마스크를 적용한다.
120 = 01111000
192 = 11000000
-------- AND
64 = 01000000
결과가 자신의 Network Address와 같은 192.168.10.64다.
따라서 같은 네트워크의 이웃, 즉 On-link Destination으로 판단한다.
이번에는 목적지 192.168.10.130을 계산한다.
130 = 10000010
192 = 11000000
-------- AND
128 = 10000000
결과는 192.168.10.128이다.
자신의 Network Address인 192.168.10.64와 다르다.
따라서 192.168.10.130은 직접 연결된 네트워크 밖의 Off-link Destination으로 판단한다.
주소 앞부분이 192.168.10으로 같아 보여도 /26 경계에서는 서로 다른 동네다.
ㅁ /26은 동네를 어떻게 나눌까?
192.168.10.0/24를 /26으로 더 작게 나누면 64개 주소씩 네 개의 서브넷이 생긴다.
| 서브넷 | Network Address | 일반 호스트 범위 | Broadcast Address |
| 첫 번째 | 192.168.10.0/26 | 192.168.10.1~62 | 192.168.10.63 |
| 두 번째 | 192.168.10.64/26 | 192.168.10.65~126 | 192.168.10.127 |
| 세 번째 | 192.168.10.128/26 | 192.168.10.129~190 | 192.168.10.191 |
| 네 번째 | 192.168.10.192/26 | 192.168.10.193~254 | 192.168.10.255 |
각 서브넷에서 호스트 비트가 모두 0이면 Network Address다.
호스트 비트가 모두 1이면 해당 서브넷의 모든 호스트를 대상으로 하는 Directed Broadcast Address다.
일반적인 호스트 주소로는 사용하지 않는다.
그래서 전통적인 일반 IPv4 서브넷에서는 전체 주소 수에서 Network Address와 Broadcast Address를 제외해
사용 가능한 호스트 주소 수를 계산한다.
/26 전체 주소 64개
일반 호스트 주소 62개
다만 모든 Prefix에 이 공식을 기계적으로 적용하면 안 된다. /31은 점대점 링크에서 두 주소를 모두 사용할 수 있도록 정의되어 있고, /32는 하나의 호스트 또는 경로를 나타내는 데 사용한다.
기본 계산법을 이해하되 실제 사용 방식에는 예외가 있다는 점을 함께 기억해야 한다.
ㅁ 같은 동네라면 누구의 MAC 주소를 찾을까?
Network Address 비교가 끝나면 실제 전달 대상이 결정된다.
ㅇ On-link Destination
목적지가 같은 네트워크에 있으면 목적지 호스트의 MAC 주소를 ARP로 찾는다.
IP Destination : 192.168.10.120
ARP Target IP : 192.168.10.120
Ethernet Target : 목적지 호스트의 MAC
ㅇ Off-link Destination
목적지가 다른 네트워크에 있으면 호스트가 직접 목적지 MAC을 찾지 않는다.
대신 라우팅 테이블에서 다음 홉을 찾고, 보통 기본 게이트웨이의 MAC 주소를 ARP로 조회한다.
IP Destination : 192.168.10.130
ARP Target IP : 기본 게이트웨이 IP
Ethernet Target : 기본 게이트웨이 MAC
IP 패킷의 Destination IP는 원래 목적지를 유지하지만 현재 이더넷 프레임은 게이트웨이에게 전달한다.
즉, Subnet Mask는 주소 범위를 설명하는 숫자에 그치지 않는다.
ARP로 누구를 찾을지 결정하는 경계선이다.
ㅁ 운영체제는 매번 직접 AND 계산을 할까?
개념적으로는 IP 주소와 마스크를 AND 연산해 같은 네트워크인지 판단한다고 설명할 수 있다.
실제 운영체제는 인터페이스 주소와 Prefix가 설정될 때 직접 연결된 네트워크에 대한 경로를 라우팅 테이블에 만든다.
예를 들어 다음 주소가 설정되어 있다고 하자.
192.168.10.70/26 dev eth0
라우팅 테이블에는 다음과 같은 Connected Route가 생길 수 있다.
192.168.10.64/26 dev eth0 scope link
목적지 192.168.10.120은 이 경로에 포함되므로 eth0에서 직접 찾는다.
192.168.10.130은 포함되지 않으므로 다른 경로나 기본 경로를 찾아야 한다.
목적지 IP
↓
Routing Table Lookup
↓
Connected Route와 일치 → On-link → 목적지 ARP
Gateway Route와 일치 → Off-link → Next-hop ARP
사용자가 비트 AND를 직접 수행하지 않더라도 Prefix를 기반으로 만들어진 라우팅 정보가 같은 판단을 수행한다.
ㅁ Subnet Mask를 잘못 적으면 어떤 일이 생길까?
IP 주소와 게이트웨이가 맞아 보여도 Subnet Mask가 틀리면 호스트가 목적지의 위치를 잘못 판단한다.
ㅇ 실제보다 넓게 설정한 경우
호스트의 실제 네트워크가 192.168.10.0/24인데 실수로 /16을 설정했다고 하자.
호스트는 192.168.20.10도 같은 네트워크에 있다고 판단할 수 있다. 게이트웨이로 보내지 않고 직접 ARP Request를 반복한다.
하지만 ARP 브로드캐스트는 라우터를 넘지 못하므로 대상의 MAC 주소를 얻지 못한다.
잘못된 판단: 같은 동네 → 목적지 ARP 반복 → 응답 없음
ㅇ 실제보다 좁게 설정한 경우
실제 네트워크가 /24인데 호스트만 /25로 설정했다고 하자.
같은 L2 네트워크의 192.168.10.200을 다른 네트워크로 판단해 게이트웨이로 보내려 한다.
게이트웨이 설정과 네트워크 기능에 따라 우회 통신이 되거나, 비효율적인 경로를 사용하거나, 통신이 실패할 수 있다. 중요한 것은 물리적으로 가까운 목적지를 호스트가 직접 이웃으로 판단하지 못한다는 점이다.
Subnet Mask 불일치는 “같은 스위치에 연결되어 있는데 왜 통신이 안 되지?”라는 장애를 만들 수 있다.
ㅁ VLAN과 Subnet은 같은 것일까?
VLAN은 L2 Broadcast Domain을 나누고 Subnet은 IP 주소의 L3 범위를 정의한다.
서로 다른 계층의 개념이다.
VLAN : Ethernet Broadcast의 경계
Subnet: IP Address와 On-link 판단의 경계
실무에서는 하나의 VLAN에 하나의 IP Subnet을 대응시키는 구성이 일반적이다.
VLAN 10 ↔ 192.168.10.0/24
VLAN 20 ↔ 192.168.20.0/24
이렇게 하면 L2 브로드캐스트 범위와 L3 On-link 범위가 일치해 이해하고 운영하기 쉽다.
하지만 두 개념이 자동으로 같은 것은 아니다.
- 같은 Subnet이라고 설정했지만 서로 다른 VLAN에 있으면 ARP Request가 경계를 넘지 못해 직접 통신할 수 없다.
- 같은 VLAN에 있어도 서로 다른 Subnet으로 설정하면 호스트는 상대를 Off-link로 판단해 게이트웨이를 찾는다.
물리적인 연결, VLAN, IP Prefix가 함께 맞아야 “같은 동네”라는 판단과 실제 전달 범위가 일치한다.
ㅁ 우편 비유를 네트워크 용어로 바꾸면
지금까지의 장면을 실제 네트워크 용어와 연결하면 다음과 같다.
| 우편 시스템의 모습 | 네트워크 용어 | 의미 |
| 전체 주소 | IPv4 Address | 32비트로 표현하는 논리 주소 |
| 동네와 집 번호의 경계선 | Subnet Mask | Network Portion과 Host Portion을 구분하는 32비트 값 |
| 앞에서부터 동네에 사용하는 비트 수 | Prefix Length | /24, /26처럼 네트워크 비트 수를 표현 |
| 동네 자체의 이름 | Network Address | IP 주소와 Subnet Mask를 AND한 결과 |
| 동네 모든 집을 부르는 주소 | Broadcast Address | 호스트 비트가 모두 1인 IPv4 주소 |
| 같은 동네의 목적지 | On-link | 직접 연결된 네트워크 안에 있는 목적지 |
| 다른 동네의 목적지 | Off-link | 라우터 또는 다음 홉을 거쳐야 하는 목적지 |
| 주소와 마스크를 겹쳐 보는 계산 | Bitwise AND | Network Address를 구하는 비트 연산 |
| 현재 인터페이스에 직접 붙은 동네 지도 | Connected Route | Prefix 설정으로 생성되는 직접 연결 경로 |
호스트의 판단 순서는 다음처럼 정리할 수 있다.
1. 자신의 IP Address와 Prefix로 Connected Network를 구한다.
2. 목적지 IP가 Connected Route에 포함되는지 확인한다.
3-1. 포함되면 On-link로 판단하고 목적지 IP를 ARP로 찾는다.
3-2. 포함되지 않으면 Off-link로 판단하고 다른 경로 또는 Gateway를 찾는다.
ㅁ 직접 계산하고 확인해 보기
다음 호스트를 기준으로 목적지가 On-link인지 Off-link인지 계산해 보자.
Host: 10.10.10.100/27
/27은 마지막 옥텟에서 앞 3비트가 네트워크 부분이므로 블록 크기는 32다.
서브넷 경계: 0, 32, 64, 96, 128, 160, 192, 224
10.10.10.100은 10.10.10.96/27에 속한다. 일반 호스트 범위는 .97~.126, Broadcast Address는 .127이다.
따라서 다음과 같이 판단할 수 있다.
Linux에서는 인터페이스의 IPv4 주소와 Prefix를 확인할 수 있다.
ip -4 address show
Connected Route와 기본 경로를 확인한다.
ip -4 route show
특정 목적지를 운영체제가 어떻게 판단하는지 확인한다.
ip route get 10.10.10.110
ip route get 10.10.10.130
On-link 목적지는 일반적으로 dev <interface>가 직접 표시되고,
게이트웨이를 사용하는 경로에는 via <gateway>가 나타난다.
정책 라우팅과 여러 인터페이스가 있는 환경에서는 결과가 더 복잡할 수 있다.
macOS에서는 다음 명령으로 인터페이스와 특정 목적지의 경로를 볼 수 있다.
ifconfig
route -n get 10.10.10.130
명령 결과에서 주소만 보지 말고 Prefix, 출력 인터페이스, Gateway가 함께 어떻게 선택되는지 살펴보자.
ㅁ 핵심 정리
- IPv4 주소는 32비트이며 Network Portion과 Host Portion을 함께 담는다.
- Subnet Mask는 연속된 1과 0으로 두 부분의 경계를 나타낸다.
- Prefix Length는
/24,/26처럼 네트워크 비트 수를 표현한다. - IP 주소와 Subnet Mask를 Bitwise AND하면 Network Address를 구할 수 있다.
- 호스트는 자신의 Prefix를 기준으로 목적지가 On-link인지 Off-link인지 판단한다.
- On-link 목적지는 목적지 MAC을 ARP로 찾고 Off-link 목적지는 다음 홉의 MAC을 찾는다.
- 실제 운영체제는 Prefix에서 만들어진 Connected Route를 포함한 라우팅 테이블을 조회한다.
- VLAN은 L2 경계이고 Subnet은 L3 주소 경계이며, 둘은 관련되지만 같은 개념이 아니다.
- 잘못된 Subnet Mask는 ARP 대상과 Gateway 선택을 바꿔 통신 장애를 만든다.
핵심 용어: IPv4 Address, Subnet Mask, Prefix Length, CIDR, Network Portion, Host Portion, Network Address, Broadcast Address, Bitwise AND, On-link, Off-link, Connected Route
Subnet Mask는 주소를 보기 좋게 나누는 숫자가 아니다. 목적지에게 직접 물을지, 우체국에 맡길지를 결정하는 경계선이다.
ㅁ 다음 이야기
호스트는 Subnet Mask와 라우팅 테이블을 사용해 목적지가 다른 네트워크에 있다는 사실을 알아냈다.
하지만 목적지까지의 모든 길을 알고 있는 것은 아니다.
동네 밖으로 나가는 편지를 처음 누구에게 맡겨야 할까?
다음 글에서는 「다른 동네의 편지는 누구에게 맡겨야 할까?」라는 질문을 통해 Default Gateway, Default Route, Next Hop, IP Forwarding과 라우터를 지날 때 프레임이 어떻게 바뀌는지 살펴본다.
'DevOps > Network' 카테고리의 다른 글
| [Network] 09. 라우터는 수많은 목적지의 길을 어떻게 고를까? (0) | 2026.07.16 |
|---|---|
| [Network] 08. 다른 동네의 편지는 누구에게 맡겨야 할까? (0) | 2026.07.16 |
| [Network] 06. IP 주소만 알면 바로 편지를 건넬 수 있을까? (0) | 2026.07.15 |
| [Network] 05. 한 건물을 여러 동네로 나눌 수 있을까? (1) | 2026.07.15 |
| [Network] 04.길이 원을 그리면 편지는 왜 끝없이 늘어날까? (0) | 2026.07.15 |
