Skip to content
난이도 면접 빈출문제은행 4

IP와 라우팅 ​

IP(Internet Protocol, 인터넷 프로토콜)는 패킷(packet)에 출발지와 목적지 주소를 붙여, 여러 네트워크를 건너 목적지까지 넘기는 네트워크 계층(network layer) 프로토콜(protocol)이다. 길목마다 있는 라우터(router)가 목적지 주소를 보고 다음 경로를 고르는데, 이 일을 라우팅(routing)이라고 한다.

IP의 역할 ​

IP는 패킷을 목적지까지 넘기려고 애쓰지만 도착을 약속하지는 않는다. 이를 최선 노력(best effort) 전달이라고 한다. 도중에 패킷이 버려지거나, 순서가 바뀌거나, 두 번 도착해도 IP는 알리지도 고치지도 않는다. 또 IP는 보내기 전에 상대와 연결을 맺지 않고 패킷 하나하나를 따로 처리하는 비연결형(connectionless) 프로토콜이다. 이렇게 단순하게 둔 덕분에 라우터는 빠르게 넘기기만 하면 되고, 신뢰성이 필요하면 위 계층의 TCP(Transmission Control Protocol, 전송 제어 프로토콜)가 맡는다.

IPv4 주소와 서브넷 마스크 ​

IPv4(Internet Protocol version 4, 인터넷 프로토콜 4판) 주소는 32비트이고, 8비트씩 끊어 192.168.10.77처럼 10진수 넷으로 적는다. 주소의 앞쪽 네트워크 부분은 어느 네트워크인지를, 뒤쪽 호스트(host) 부분은 그 네트워크 안의 어느 호스트인지를 나타낸다. 네트워크 부분이 같은 주소끼리는 같은 네트워크에 있으므로 라우터 없이 직접 주고받는다.

어디까지가 네트워크 부분인지는 서브넷 마스크(subnet mask)가 알려 준다. 서브넷 마스크는 네트워크 부분 비트를 1로, 호스트 부분 비트를 0으로 채운 32비트 값이다. CIDR(Classless Inter-Domain Routing, 클래스 없는 도메인 간 라우팅) 표기는 같은 정보를 슬래시 뒤 숫자로 적는다. /24는 앞 24비트가 네트워크 부분이라는 뜻이고, 서브넷 마스크 255.255.255.0과 같다. 큰 주소 범위를 이렇게 잘게 나눈 네트워크 하나하나를 서브넷(subnet)이라고 한다.

호스트 부분이 모두 0인 주소는 네트워크 자체를 가리키는 네트워크 주소다. 호스트 부분이 모두 1인 주소는 그 서브넷 전체에 보내는 브로드캐스트(broadcast) 주소다. 이 두 주소는 호스트에 주지 않는다. 192.168.10.77/26을 계산해 보자. 주소와 마스크를 비트마다 AND 하면(둘 다 1인 자리만 1로 남기면) 네트워크 주소가 나온다. 앞 3바이트는 마스크가 255, 곧 2진수(binary number)로 11111111이라 값이 그대로 남으므로 마지막 8비트만 보면 된다.

항목값마지막 8비트
주소192.168.10.7701001101
서브넷 마스크255.255.255.19211000000
네트워크 주소192.168.10.6401000000 (AND 결과)
브로드캐스트 주소192.168.10.12701111111 (호스트 6비트 모두 1)
호스트용 주소.65 ~ .126, 62개2⁶ = 64개에서 2개 제외

클래스 방식이 사라진 이유 ​

초기 IPv4는 주소 앞 비트로 네트워크 크기를 A·B·C 세 클래스(class)로만 정했다. 네트워크 부분이 A는 8비트, B는 16비트, C는 24비트였다. 크기가 세 가지뿐이라 낭비가 컸다. 호스트 300대가 필요한 조직은 254대까지인 C 클래스로는 모자라, 6만 5천 대 넘게 쓸 수 있는 B 클래스를 받아야 했다. IPv4 주소는 전부 합쳐도 약 43억 개뿐인데, 이 낭비로 주소가 빠르게 줄자 1993년 CIDR이 도입돼 네트워크 부분 길이를 비트 단위로 정하게 됐다. 지금은 클래스 구분 없이 /22, /26처럼 필요한 크기만큼 나눠 쓴다.

공인 IP와 사설 IP, NAT ​

공인 IP 주소(public IP address)는 인터넷 전체에서 유일한 주소로, ISP(Internet Service Provider, 인터넷 서비스 제공자)를 통해 배정받는다. 사설 IP 주소(private IP address)는 집·회사 네트워크 안에서만 쓰도록 떼어 둔 주소다. 누구나 허락 없이 쓸 수 있는 대신 인터넷으로 그대로 나갈 수는 없다. 대역은 RFC(Request for Comments, 인터넷 표준 문서) 1918이 정했다.

대역범위
10.0.0.0/810.0.0.0 ~ 10.255.255.255
172.16.0.0/12172.16.0.0 ~ 172.31.255.255
192.168.0.0/16192.168.0.0 ~ 192.168.255.255

사설 IP 주소를 쓰는 기기가 인터넷에 나가려면 NAT(Network Address Translation, 네트워크 주소 변환)가 필요하다. 공유기 같은 NAT 장비는 나가는 패킷의 출발지 사설 IP 주소를 자기 공인 IP 주소로 바꾸고, 돌아오는 응답의 목적지를 원래 사설 IP 주소로 되돌려 안으로 넘긴다.

여러 기기가 공인 IP 주소 하나를 함께 쓰면 주소만으로는 응답이 누구 것인지 가릴 수 없다. 그래서 출발지 포트(port) 번호까지 바꾸고 "공인 주소와 바꾼 포트 ↔ 사설 주소와 원래 포트" 짝을 표에 적어 둔다. 아래는 공유기의 공인 IP 주소가 203.0.113.5일 때의 예다.

안쪽(사설 주소:포트)바깥(공인 주소:포트)
192.168.0.10:50000203.0.113.5:40001
192.168.0.11:50000203.0.113.5:40002

두 기기가 같은 포트 50000을 써도 바깥 포트가 달라 응답을 제 주인에게 돌려준다. 이 방식을 NAPT(Network Address Port Translation, 네트워크 주소·포트 변환)라고 하며, 가정용 공유기가 하는 NAT는 대부분 NAPT다. NAT 덕분에 IPv4 주소 부족이 크게 늦춰졌지만, 바깥에서 먼저 안쪽 기기로 연결을 걸기는 어려워졌다. 변환 표의 짝은 안쪽 기기가 먼저 내보낸 패킷으로만 생기므로, 바깥에서 먼저 들어온 패킷은 어느 기기로 넘길지 알 수 없기 때문이다.

이어지는 내용은 IP와 라우팅 2에서 다룬다.

면접 포인트 ​

  • "서브넷 마스크가 뭔가요?" → IP 주소 중 네트워크 부분을 1로 표시한 값. 주소와 AND 하면 네트워크 주소. 호스트 수는 2^(호스트 비트) − 2.
  • "CIDR은 왜 나왔나요?" → A·B·C 클래스는 네트워크 크기가 세 가지뿐이라 주소 낭비가 컸다. CIDR은 네트워크 부분 길이를 비트 단위로 정한다.
  • "사설 IP와 NAT는?" → 10/8·172.16/12·192.168/16. NAT(대부분 NAPT)가 출발지 주소와 포트를 바꿔 공인 주소 하나를 여럿이 쓴다.
  • IP가 전달을 보장한다고 말하면 틀린다. IP는 최선 노력·비연결형이고, 신뢰성은 TCP의 몫이다.

관련 문서