LabHub

네트워크 기초 · IP 와 라우팅 · 이론

IP 주소와 서브넷 — 어디까지가 우리 동네인가

LabHub 에서 이어서 보기

한 줄 요약

IP 주소는 네트워크 부분과 호스트 부분으로 나뉘고, 그 경계를 정하는 것이 서브넷 마스크이며, 이 경계가 "직접 보낼 수 있는 상대"와 "게이트웨이에 맡겨야 하는 상대"를 가른다.

왜 이게 필요했나

전 세계의 모든 호스트를 한 표에 담을 수는 없다. 라우터가 40억 개의 항목을 뒤질 수는 없기 때문이다. 그래서 주소에 계층을 넣었다. 앞부분이 같은 주소들을 한 덩어리로 묶어 "이 덩어리는 저쪽으로"라고 한 줄에 적을 수 있게 만든 것이다.

어떻게 동작하나

192.168.10.37/24 에서 /24 는 앞 24비트가 네트워크 부분이라는 뜻이다. 즉 네트워크는 192.168.10.0, 호스트 부분은 마지막 8비트다.

호스트가 패킷을 보낼 때의 판단은 단순하다. 목적지 주소와 자기 주소에 각각 마스크를 씌워 네트워크 부분이 같으면 같은 네트워크이므로 ARP 로 상대의 MAC 주소를 알아내 직접 보낸다. 다르면 기본 게이트웨이의 MAC 주소로 보낸다. 이때 IP 헤더의 목적지는 최종 목적지 그대로이고 링크 계층의 목적지만 게이트웨이라는 점이 핵심이다.

라우터의 판단은 최장 접두사 일치(longest prefix match) 다. 라우팅 테이블에 10.0.0.0/810.1.2.0/24 가 둘 다 있고 목적지가 10.1.2.5 라면 더 구체적인 /24 쪽을 고른다. 기본 경로 0.0.0.0/0 은 접두사 길이가 0 이므로 언제나 마지막 후보다.

사설 주소 대역(10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)은 인터넷에서 라우팅되지 않는다. 그래서 밖으로 나갈 때 NAT 가 출발지 주소를 공인 주소로 바꾸고, 포트 번호로 어느 내부 호스트의 연결인지 기억한다. NAT 가 상태를 갖는다는 사실에서 여러 결과가 따라온다. 밖에서 안으로 먼저 연결을 걸 수 없고, 오래 조용한 연결은 NAT 표에서 지워져 끊긴다. 유휴 연결이 몇 분 뒤 조용히 죽는 현상의 흔한 원인이다.

현장에서 만나는 모습

쿠버네티스 클러스터를 만들 때 파드 CIDR, 서비스 CIDR, 노드 네트워크가 겹치면 라우팅이 조용히 망가진다. 겹친 구간의 트래픽이 엉뚱한 곳으로 가고, 증상은 "어떤 파드끼리만 통신이 안 된다"처럼 산발적으로 나타난다. 대역 설계는 클러스터를 만들기 전에 종이에 적어 두는 편이 낫다. 나중에 바꾸려면 클러스터를 다시 만들어야 하는 경우가 많다.

이어지는 퀴즈에서 확인할 것

마스크로 네트워크를 계산하고, 최장 접두사 일치로 다음 홉을 고르는 과정을 따라갈 수 있는지 확인한다.