[Network] IP, Subnet, Gateway, Routing Table, DNS 개념 정리
포스트
취소

[Network] IP, Subnet, Gateway, Routing Table, DNS 개념 정리

개요

하이스코어 프로젝트에서 OCI로 서버를 구축하고 사용중인데, 자주 보게되는 용어들을 정확히 알 필요성을 느껴서 정리하게 되었습니다.

IP (아이피)

ip는 인터넷에 연결된 모든 장치에 할당되는 고유 식별 장치입니다. 비유하자면 일종의 도로명 주소같은 개념입니다.

공용(Public) IP, 개인(Private) IP

IP는 사용 범위에 따라 공용과 개인 ip로 나뉩니다.

공용 IP는 전 세계에서 유일한 ip로, 주로 ISP에게 할당됩니다. 공용IP로 외부에서 직접적인 접근이 가능합니다.

개인 IP는 특정 네트워크에서만 유효한 주소입니다. 라우터나 공유기 같은 장치가 내부적으로 연결된 기기를 구분하기 위해 할당합니다. 그래서 외부에서는 내부 IP로 접근이 불가능합니다.

공용 IP를 도로명 주소라고 한다면, 개인 IP는 방 번호라고 볼 수 있습니다.

정적(Static) IP, 동적(Dynamic) IP

정적 IP는 IP가 바뀌면 안되는 기기에 주로 할당됩니다. 네이버 서버와 같이 많은 사람들이 찾는 기기는 IP가 바뀌면 혼란이 올 수 있기 때문에, 이런 서버와 같은 기기에 할당되는 IP는 한번 할당되면 고정됩니다.

동적 IP는 연결할때에 따라서 바뀌는 IP입니다. 공유기에 연결된 기기들은 공유기가 자동으로 IP를 할당하는데, 같은 이 IP가 동적 IP입니다. 이떄 동적 IP를 할당하는 프로토콜을 DHCP(Dynamic Host Configuration Protocol)이라고 합니다.

IPv4

처음 등장한 ip는 IPv4로, 32비트를 이용해 ip를 표현합니다. 이때 8비트씩 4 그룹으로 묶어서 표시하는데, 그래서 ip의 형식으 숫자.숫자.숫자.숫자 입니다. 이때 한 그룹을 옷텟(Octet)이라고 부릅니다.

192.168.0.1를 컴퓨터가 표현하면 11000000 10101000 00000000 00000001 로 표현됩니다.
옥텟은 8비트이기 때문에 각 옥텟은 0~255의 범위를 갖습니다. 그래서 ipv4는 0.0.0.0~255.255.255.255를 가질 수 있고, 총 255^4(약 42억개)를 할당할 수 있습니다.

그런데, 인터넷이 보급되면서 IPv4 영역이 부족해지는 시대가 오게됩니다. 그래서 영역을 확장한 IPv6가 고안됩니다.

IPv6

IPv6는 주소를 128비트로 표현합니다. 16비트씩 8그룹으로 나누고, 각 그룹은 :로 구분합니다. 그래서 IPv6 주소는 (16진수):(16진수):(16진수):(16진수):(16진수):(16진수):(16진수):(16진수) 입니다.

IPv6는 0:0:0:0:0:0:0:0~FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 범위를 가질 수 있고, 총 65,536^8(약 3.4x10^38개)를 할당할 수 있습니다. 범위에서 알 수 있듯이 IPv6는 IPv4처럼 고갈될 일이 거의 없으나, 교체 비용으로 인해 아직은 IPv4가 더 많이 쓰이고 있습니다.

IP 구조

IP는 네트워크 ID(Network ID)와 호스트 ID(Host ID)로 구분됩니다. 네트워크는 어떤 LAN인지 구분할 때 사용되고, 호스트는 LAN의 연결된 호스트 중 어떤 호스트인지 구분할 때 사용됩니다.
그렇다면 어떻게 네트워크 ID와 호스트 ID를 구분할까요? 그걸 구분하기 위해 IP Class가 도입되었습니다.

IP Class

IP 주소는 네트워크 규모에 따라 A,B,C,D,E 총 5개의 class로 나뉩니다. IP 주소의 시작비트를 통해 구분합니다.

Class A

ln1

가장 할당 범위가 넓은 클래스 입니다. IPv4 범위 중 절반을 차지합니다.

시작 비트가 0으로 시작하고, 첫 옥텟은 네트워크 ID, 나머지는 모두 호스트 ID입니다.
네트워크는 첫 비트를 제외한 7비트로 표현되는데, 0~127로 128개를 사용합니다. 이때 몇가지 127.0.0.1은 루프백으로 할당되어서, 0.0.0.0은 네트워크 주소로 할당되어 신규 할당이 제외됩니다.

호스트는 네트워크당 256^4개를 할당 할 수 있습니다. 이때 모두 0인 주소는 네트워크 주소로, 모두 1인 주소는 브로드케스트 주소로 할당되어 신규 할당이 제외됩니다.

Class B

ln1

시작 비트가 10으로 시작하고, 두 번쨰 옥텟까지 네트워크 ID, 나머지는 모두 호스트 ID로 사용됩니다.

네트워크는 128.0.0.0~191.255.0.0으로 총 16,384개를 사용합니다.
호스트는 네트워크당 256^2개 사용 가능합니다. Class A 와 마찬가지로 네트워크 주소와 브로드케스트 주소는 할당에서 제외됩니다.

Class C

ln1

시작 비트가 110으로 시작하고, 세 번쨰 옥텟까지 네트워크 ID, 마지막만 호스트 ID로 사용됩니다.

네트워크는 192.0.0.0~223.255.255.0으로 총 2,097,152개를 사용합니다.
호스트는 네트워크당 256개 사용 가능합니다. 다른 클래스와 마찬가지로 네트워크 주소와 브로드케스트 주소는 할당에서 제외됩니다.
Class C가 공유기에 연결되었을때 많이 보는 192.168.0.0 영역입니다.

Class D

시작 비트가 1110으로 시작합니다. 다른 클래스와 다르게 별도의 네트워크/호스트 구분이 없습니다.
Class D는 멀티캐스트(방송 등) 용도로, 일반적인 IP 주소로 할당되지 않습니다. 범위는 224.0.0.0~239.255.255.255입니다.

Class E

시작 비트가 1111으로 시작합니다. Class E 역시 다르게 별도의 네트워크/호스트 구분이 없습니다.
Class E는 연구용으로 예약된 주소로, 일반적인 IP 주소로 할당되지 않습니다. 범위는 240.0.0.0~255.255.255.255입니다.


참고로 IPv6에는 클래스 체계가 없습니다. 네트워크의 크기를 미리 고정해두는 방식이 비효율적이라고 판단해서 IPv6는 CIDR 방식으로 필요한 영역을 잘라서 사용합니다.

Subnet (서브넷)

서브넷은 하나의 네트워크를 논리적으로 쪼개서 작은 네트워크 단위를 뜻합니다.

Class A를 보면, 21억개의 ip를 할당할 수 있는 매우 큰 영역임을 알 수 있습니다. 만약 이 영역에서 특정 ip를 찾아야 한다면, 21억개의 호스트를 뒤져서 찾아야 합니다. 서브넷은 특정 영역만 논리적으로 쪼개서 이런 비효율을 개선할 수 있습니다. 이렇게 쪼개는걸 Subnetting(서브네팅)이라고 합니다.

Subnet Mask (서브넷 마스크)

서브넷 마스크는 서브네팅을 위해 대상 영역만 보여주고 나머지는 가리는 역할을 합니다.
Cloudflare 블로그의 예시를 가져와 설명하자면, A라는 회사에 소속된 B 직원에게 메일을 보낼 때, 부서를 이용해 먼저 선분류 후 B 직원에게 보낸다고 합시다. 이때 B직원의 이름은 ip, 부서 이름은 서브넷 마스크가 되는겁니다. 만약 선분류 작업이 없다면, 메일을 보내기 위해 회사에 있는 수많은 직원들을 일일이 찾아야 할겁니다.

Subnet Mask 표현 방법

Subnet Mask는 연속된 1과 0으로만 표현됩니다. 예를 들면 11111111 00000000 00000000 0000000 이런식으로 표현되는건 가능한데, 11111111 11011011 11110000 00000000 이런건 불가능합니다.

원래 서브넷 마스크는 네트워크 ID와 호스트 ID를 구분하기 위해 사용되었습니다. 그래서 Class A의 기본 서브넷은 255.0.0.0로 표기되었습니다. 해석하자면 첫 번째 옥텟인 8비트들은 네트워크 ID니까 변경이 불가능 하고, 그 다음부터 0인 부분은 호스트 ID니까 변경이 가능하다 라는 뜻 입니다.

이 개념을 응용해서 호스트 영역을 자르는것도 가능합니다.
Class C의 192.168.0.0~192.168.0.255 영역을 특정 회사에 할당한다고 해봅시다. 근데 한 회사에 256개의 영역을 모두 주자니 너무 많은 영역을 한번에 주는것 같아서 절반만 주고싶은 상황입니다. Class C의 Deafault Subnet은 255.255.255.0 입니다.
그런데, 호스트 ID의 첫 비트를 서브넷 구분 비트로 사용하기로 하면 호스트 영역을 0~127, 128~255 두 개로 쪼개는게 가능합니다. 서브넷 마스크를 11111111 11111111 11111111 10000000로 변경하면 4옥텟의 첫 비트까지 네트워크 영역처럼 취급이 가능합니다.

이런식으로 호스트 영역에서 몇개의 비트를 구분 비트로 사용할지에 따라 2개, 4개, 8개, 16개… 나누는게 가능합니다. 그런데 마스크를 쓸 때 마다 11111111 11111111 11111111 10000000 이런식으로 쓰는게 너무 불편합니다. 다른 방법은 없을까요?

CIDR 표기법

CIDR(Classless Inter-Domain Routing) 표기법은 마스크 표현의 불편함을 줄이고자 사용되는 방법입니다.
서브넷 마스크는 1이 반드시 왼쪽부터 연속되어야 한다는 조건이 있습니다. 그래서 1이 몇개 있는지 개수로 표현해서 매우 간편하게 표기합니다.

이전에 예시를 들었던 192.168.0.0~192.168.0.255 범위 중 192.168.0.100이 어느 서브넷에 포함되는지 알고 싶을때, CIDR 표기법은 매우 간편하게 표현이 가능합니다. 바로 192.168.0.100/25 입니다. 25는 서브넷 마스크의 1 개수입니다. 그렇다면 해당 영역은 서브넷 마스크에 의해 0~127, 128~255로 나눠져 있음을 알 수 있습니다. 그 중에서 100은 첫 번째 영역에 해당함을 계산할 수 있습니다.

CIDR 표기법은 AWS나 OCI와 같이 인스턴스를 직접 구축해 본다면 정말 주구장창 보게되는 표기법 입니다. 방화벽, 영역 할당 등 많은 작업에서 쓰이는 표기법이니 알아두시면 정말 도움됩니다.

참고로 이런 CIDR 표기를 자동으로 계산해주는 사이트도 있습니다. 필요할때마다 계산하지 마시고 여기서 간편하게 계산하시면 됩니다.

LAN과 WAN

LAN은 Local Area Network의 약자입니다.

집에서 컴퓨터의 ip를 확인해보면 192.168.0.10 이런식으로 찍히는걸 본적이 있을겁니다. 해당 ip는 공유기나 스위치와 같은 여러 기기가 동시에 연결되는 상황에서 각 기기를 구분하기 위해 내부적으로 할당한 ip입니다. 그래서 외부에서 내부ip로 연결을 시도하면 실패하는것을 알 수 있습니다.

게이트웨이의 내부ip는 보통 마지막 자리를 1로 만들어서 192.168.0.1 이런식으로 할당한다고 합니다.

WAN은 Wide Area Network의 약자입니다. WAN은 LAN과 LAN을 연결하는 역할을 합니다. 게이트웨이는 WAN IP를 따로 할당받아서 다른 네트워크와 소통할 수 있습니다.

Gateway (게이트웨이)

게이트웨이는 서로 다른 네트워크를 연결하기 위한 출입구입니다. 가정에서 흔히 볼 수 있는 공유기도 게이트웨이의 일종으로 볼 수 있습니다.

ln1

게이트웨이는 내부적으로 여러 기기들을 묶어 구성된 LAN과 외부인 WAN을 연결해주는 역할을 합니다.

Default Gateway (기본 게이트웨이)

의도에 따라서 여러 게이트웨이를 만들 수 있습니다. 예로 들자면, WAN에 연결된 A 게이트웨이와 내부적인 사용을 위한 내부망에만 연결된 B 게이트웨이로 분리한 경우입니다. 이럴 경우에는 Default Gateway를 A로 지정해서 평소에는 네트워크에 접속된 상태로 사용하고, 내부망에 접속할 일이 있을때만 B 게이트웨이에 요청하는 방식으로 사용이 가능합니다.

Routing Table (라우팅 테이블)

라우팅 테이블은 라우터나 컴퓨터가 패킷을 보낼 때 어떤 경로를 선택할지 결정할때(Routing) 참조하는 이정표 같은 개념입니다.

Routing Table 구성 요소

라우팅 테이블은 여러 항목으로 구성됩니다.

Network Destination (네트워크 목적지)
패킷이 최종적으로 도착할 목적지 입니다. 일반적으로 IP주소로 표현되어 목적지를 가르킵니다.

Subnet Mask (서브넷 마스크)
Network Destination의 범위를 지정합니다. 네트워크 ID 영역이 어디까지고, 호스트 ID의 영역이 어디까진지 정의합니다.

Gateway (게이트웨이)
패킷을 목적지로 전달하기 위해 사용하는 다음 라우터의 IP입니다. 이때 목적지에 도달하기 위해 여러 라우터를 거치는 행위를 홉(hop)이라고 합니다.

Interface (인터페이스)
패킷을 네트워크로 내보낼때 사용되는 장치입니다. 컴퓨터에 꽃혀있는 이더넷 카드, 무선 네트워크 어댑터와 같은 네트워크 인터페이스에 해당합니다.
우분투 같은 os에서 네트워크 설정 할때 en6sp 뭐 이런 이름 보신적 있으실텐데, 이게 바로 네트워크 인터페이스의 이름입니다.

Metric (비용)
특정 경로의 비용입니다. 비용이 낮을수록 좋은 경로로 판단합니다.

Routing Table 구성 예시

목적지 (Destination) 서브넷 마스크 (Genmask) 게이트웨이 (Gateway) 인터페이스 (Iface) 설명
0.0.0.0 0.0.0.0 192.168.0.1 eth0 기본 경로 (Default Route)
모르는 주소는 무조건 공유기로 보냄
192.168.0.0 255.255.255.0 On-link (0.0.0.0) eth0 내부 네트워크
같은 망이므로 직접 전달함
127.0.0.0 255.0.0.0 On-link (127.0.0.1) lo 루프백 (Loopback)
내 자신에게 보내는 경로
10.20.30.40 255.255.255.255 192.168.0.5 eth0 특정 호스트 경로
특정 PC로 가는 전용 길

1번 항목은 어떤 항목에도 해당하지 않을 때 선택되는 기본 경로(Default Route) 입니다.
다른 게이트웨이로 전달해서 목적지를 찾아가게 합니다.

2번 항목은 192.168.0.0~192.168.0.255 범위가 목적지인 패킷들은 모두 내부 네트워크로 보냅니다.

3번 항목은 127.0.0.0~127.255.255.255 범위가 목적지인 패킷은 모두 루프백으로 처리합니다.

4번 항목은 정확히 10.20.30.40로 전달되는 패킷을 192.168.0.5 게이트웨이로 전달합니다.

Routing Table 동작 원리

라우팅 테이블은 네트워크 장치가 패킷을 목적지에 보낼 때 경로를 선택하기 위해 사용됩니다. 과정은 다음과 같습니다.

1. IP 확인
패킷의 목적지가 라우팅 테이블에 있는지 확인합니다.

2. 일치하는 항목 찾기
라우팅 테이블에서 일치하는 항목을 찾습니다. 이때 일치하는 항목이 여러개라면, 최장 접두사 일치 원칙(Longest Prefix Match)에 따라서 가장 정확하게 일치하는 항목을 선택합니다.

3. 게이트웨이 선택
선택된 라우팅 테이블 항목에서 게이트웨이를 확인하고, 다음 홉(next hop)으로 패킷을 전달합니다. 이 일련의 과정은 목적지에 도달할 때까지 반복됩니다.

DNS (Domain Name System)

DNS는 외우기 어려운 IP 주소를 도메인 (google.com과 같은)으로 찾아갈 수 있게 도메인을 IP로 변환해주는 시스템 입니다. DNS는 전 세계에 분산되어 계층적 구조로 구성된 거대한 데이터베이스 시스템입니다.

Domain 구조

도메인은 뒤에서부터 앞으로 해석합니다. www.google.com. 을 예시로 들겠습니다.

Root Domain 맨 뒤에있는 .은 일반적으로는 생략되어 모르지만, 이는 Root Domain이라고 합니다. 전 세계에 있는 13개의 원본 루트 서버가 있습니다.

Top-Level Domain (TLD)
.com은 TLD에 해당합니다. 국가(.kr, .jp)나 목적(.com, .org)을 나타냅니다.

Second-Level Domain (SLD)
.google과 같은 흔히 보는 상호는 SLD에 해당합니다.

Sub Domian
www와 같은 서브 도메인은 사이트 내부의 특정 영역을 구분합니다.

DNS 동작 과정

www.google.com.을 찾아가는 과정을 예로 설명하겠습니다.

  1. 웹브라우저에 www.google.com.이 입력되면 PC가 Local DNS(Resolver)에게 www.google.com.의 IP 주소를 질의합니다. Resolver는 보통 ISP에서 제공합니다.
  2. Resolver는 캐시를 먼저 확인하고, 캐시에 있으면 바로 응답합니다. 없다면 반복적 질의(Iterative Query)를 시작합니다.
  3. 반복적 질의를 진행합니다.
    Root 네임서버에게 .com의 관리자를 묻고, Root 네임서버는 .com을 갖고있는 TLD 서버의 주소를 제공합니다.
    TLD 네임서버에게 .google의 관리자를 묻고, TLD 네임서버는 .com을 갖고있는 Authoritative 네임 서버의 주소를 제공합니다.
    Authoritative 네임서버는 google.com의 ip 주소를 제공합니다.
  4. Resolver는 google.com의 ip주소를 캐시에 저장하고, 요청한 클라이언트에게 전달합니다.

네트워크에서 기본이라고 생각되는 Ip,Subnet, Gateway, Routing Table, DNS에 대해 알아봤습니다. OCI를 사용하면서 대략적으로만 알고있었는데, 정리하고 나니 앞으로 작업할때 어떤 역할을 하는 설정인지 명확히 알 수 있을것 같습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.