임대일

혼자 공부하는 네트워크: Chapter 03: 네트워크 계층 본문

네트워크

혼자 공부하는 네트워크: Chapter 03: 네트워크 계층

limdae94 2024. 10. 9. 13:57
 

혼자 공부하는 네트워크 | 강민철 - 교보문고

혼자 공부하는 네트워크 | 혼자 해도 충분하다! 1:1 과외하듯 배우는 네트워크 자습서『혼자 공부하는 네트워크』는 개발자의 필수 지식인 네트워크를 기본부터 제대로 학습할 수 있도록 돕는

product.kyobobook.co.kr

 

03-1 LAN을 넘어서는 네트워크 계층

물리 계층과 데이터 링크 계층의 네트워크 범위는 일반적으로 LAN에 한정된다. 하지만 LAN을 넘어서 다른 네트워크와 통신하기 위해서는 네트워크 계층이 필수적이다. 네트워크 계층에서는 IP 주소를 이용해 송수신지 대상을 지정하고, 다른 네트워크에 이르는 경로를 결정하는 라우팅을 통해 다른 네트워크와 통신한다.

 

데이터 링크 계층의 한계 

물리 계층과 데이터 링크 계층만으로 LAN을 넘어서 다른 도시나 다른 국가에 있는 친구와 통신한다고 생각해보자. 데이터 링크 계층에는 송수신지를 특정할 수 있는 정보인 MAC 주소라는 개념이 있다. 이 정보를 바탕으로 다른 도시, 다른 국가에 있는 수신지로 전송할 수 있을 것 처럼 가능성이 보인다고 생각할 수 있다.

 

그러나 결론부터 말하자면 물리 계층과 데이터 링크 계층만으로는 LAN을 넘어서 통신하기 어렵다. 대표적으로 두 가지 이유가 있다. 이 이유는 앞으로 학습할 네트워크 계층의 핵심 기능과 직결된다.

 

1. 물리 계층과 데이터 링크 계층만으로는 다른 네트워크까지의 도달 경로를 파악하기 어렵다.

예를 들어 LAN A에 속한 호스트 "민철"이가 LAN B에 속한 호스트 "영수"에게 전송하는 패킷은 다양한 경로를 통해 이동할 수 있다. 통신을 빠르게 주고받으려면 이 중에 최적의 경로로 패킷이 이동해야 할 것이다. 이렇게 패킷이 이동할 최적의 경로를 결정하는 것을 라우팅(Routing)이라고 한다.

 

2. 물리 계층과 데이터 링크 계층의 장비로는 라우팅을 수행할 수 없다.

네트워크 계층의 장비를 통해 가능하다. 라우팅을 수행하는 대표적인 장비는 라우터(Router)가 있다. 따라서 네트워크 계층이 있어야 네트워크 간의 라우팅이 가능하다. 라우터의 개념과 라우터가 라우팅을 수행하는 다양한 방법에 대해 곧 학습할 예정이다.

 

3. 물리 계층과 데이터 링크 계층은 기본적으로 LAN을 다루는 계층이다.

하지만 LAN에 속한 호스트끼리만 통신하지는 않는다. 여러 컴퓨터와 지구 반대편에 있는 친구의 컴퓨터가 정보를 주고받는다면, 해당 패킷은 서로에게 도달하기까지 수많은 네트워크 장비를 거치며 다양한 경로를 통해 이동한다.

 

4. MAC 주소만으로는 모든 네트워크에 속한 호스트의 위치를 특정하기 어렵다.

택배의 수신인 역할을 하는 정보가 MAC 주소라면, 수신지 역할을 하는 정보가 네트워크 계층의 IP 주소이다. 택배 배송 과정에서 "수신인"과 "수신지"를 모두 활용하고 "수신인"보다 "수신지"를 우선으로 고려하는 것처럼, 네트워크에서도 MAC 주소와 IP 주소를 함께 사용하고, 기본적으로 IP 주소를 우선으로 활용한다. 따라서 네트워크 계층의 IP 주소를 이용해 네트워크 상의 호스트를 식별할 수 있다.

 

5. 현실적으로 모든 호스트가 네트워크에 속한 모든 호스트의 MAC 주소를 서로 알고 있기란 어렵다.

그래서 MAC 주소만으로는 이 세상에 있는 모든 호스트를 특정하기는 어렵다. 네트워크를 통해 정보를 주고받는 과정은 택배를 송수신하는 과정과 같고, MAC 주소는 네트워크 인터페이스(NIC)마다 할당된 일종의 개인 정보와 같다. 택배를 보낼 때 받는 사람의 개인 정보만 택배에 작성하고 보내지는 않는다. 특정하는 인물 정보 외에 당연히 수신지도 작성해야 한다. 수신지를 작성하지 않는다면 받는 사람의 정보를 전혀 알 수 없기 때문이다. 택배를 받는 사람의 위치가 언제든 변할 수도 있다. 네트워크에서도 마찬가지이다.

  • 수신지(IP 주소): 서울시 혼공 마을 네트워크 3층
  • 수신인(MAC 주소): 강민철

MAC 주소를 물리 주소라고도 부르는 것처럼 IP 주소는 논리 주소라고도 부른다. MAC 주소는 일반적으로 NIC마다 할당되는 고정된 주소이지만, IP 주소는 호스트에 직접 할당이 가능하다. DHCP(Dynamic Host Configuration Protocol)라는 특정 프로토콜을 통해 자동으로 할당받거나 사용자가 직접 할당할 수도 있고, 한 호스트가 복수의 IP 주소를 가질 수도 있다.

 

정리하면, 물리 계층과 데이터 링크 계층만으로는 네트워크 간의 통신은 어렵다. 네트워크 계층이 다른 네트워크와의 통신을 가능하게 한다. 이는 IP 주소를 이용해 수신지 주소를 설정하거나, 해당 수신지까지의 최적 경로를 결정하는 라우팅이 네트워크 계층에서 이루어지기 때문이다.

 

인터넷 프로토콜

네트워크 계층의 가장 핵심적인 프로토콜 하나를 꼽자면 단연 인터넷 프로토콜(Internet Protocol)이다. IP는 IPv4, IPv6 두 가지 버전이 있다. 일반적으로 IP 혹은 IP 주소를 이야기할 때는 주로 IPv4를 의미하는 경우가 많다. 앞으로 설명 또한 IPv4를 중심으로 살펴본다.

 

IP 주소 형태

IP 주소는 4바이트(32비트)로 주소를 표현한다. 숫자당 8비트로 표현되기에 0~255범위 안에 있는 네 개의 10진수로 표기된다. 각 10진수는 점(.)으로 구분되며, 점으로 구분된 8비트(0~255 범위의 10진수)를 옥텟(Octet)이라고 한다. 192.168.1.1 각각은 8비트로 표현된 옥텟이다.

192.168.1.1

 

IP의 기능

IP의 기능은 다양하지만 대표적인 기능에는 크게 두 가지가 있다. IP 주소 지정IP 단편화이다. IP를 정의한 인터네 표준 문서(RFC 791)에서도 이를 명확히 명시하고 있다. 이 두 역할을 중심으로 IPv4와 IPv6를 알아본다.

// RFC 791 일부
The internet protocol implements two basic functions: addressing and fragmentation.

 

IP 주소 지정(IP Addressing)은 IP 주소를 바탕으로 송수신 대상을 지정하는 것을 의미한다. IP 단편화(IP Fragmentation)는 전송하고자 하는 패킷의 크기가 MTU라는 최대 전송 단위보다 클 경우, 이를 MTU 크기 이하의 복수의 패킷으로 나누는 것을 의미한다.

 

MTU(Maximum Transmission Unit)란 한 번에 전송 가능한 IP 패킷의 최대 크기를 의미한다. IP 패킷의 헤더도 MTU 크기에 포함된다는 점에 유의해야 한다. 일반적인 MTU 크기는 1500바이트이며, MTU 크기 이하로 나누어진 패킷은 수신지에 도착하면 다시 재조립한다.

 

RFC 문서

RFC(Request for Comments) 문서는 네트워크/인터넷 관련 신기술 제안, 의견 등을 남긴 문서이다. 언뜻 들으면 가볍게 느껴질 수 있는 이름과는 다르게 일부 RFC는 오늘날까지 사용되는 인터넷 표준이 되기도 한다.

 

인터넷 표준이 된 RFC를 비롯한 영향력이 있는 RFC 문서에는 번호가 부여된다. 인터넷 표준 문서인 RFC 791처럼 번호를 부여받은 RFC 문서는 새로운 RFC 문서로 개정 출판이 될지언정 폐기되거나 수정되지 않기 때문에 RFC 791을 검색하면 어렵지 않게 원문을 확인할 수 있다.

 

앞으로 IP로 주고받는 패킷에는 어떠한 정보가 포함되어 있어서 IP 주소 지정과 IP 단편화가 가능한지 IPv4 패킷부터 천천히 학습한다.

 

IPv4

프레임의 데이터 필드에는 상위 계층에서 전달받거나 상위 계층으로 전달해야 할 내용이 명시된다. 따라서 IPv4 패킷은 프레임의 페이로드 데이터 필드에 명시된다.

프레임 페이로드(데이터) 안에 상위 계층 데이터인 IPv4 패킷 정보가 포함되어 있다.
이더넷 패킷 구조
IPv4 패킷 구조

 

IPv4 패킷은 위의 그림처럼 여러 필드로 구성된다. 모든 필드 중에서도 가장 핵심이 되는 부분인 필드는 식별자(Identification), 플래그(Flag), 단편화 오프셋(Fragment offset), TTL, 프로토콜(Protocol), 송신지 IP 주소(Source Address), 수신지 IP 주소(Destination Address) 총 7가지이다. 이 중에서 식별자, 플래그, 단편화 오프셋 필드는 IP 단편화 기능에 관여하고, 송신지 IP 주소, 수신지 IP 주소 지정 기능에 관여한다.

 

식별자

식별자(Identification)는 패킷에 할당된 번호이다. 만약 메시지 전송 과정에서 IPv4 패킷이 여러 조각으로 쪼개져서 전송되었다면, 수신지에서는 이들을 재조립해야 한다. 이때 잘게 쪼개져서 수신지에 도착한 IPv4 패킷들이 어떤 메시지에서부터 쪼개졌는지를 인식하기 위해 식별자를 사용한다.

 

플래그

플래그(Flags)는 총 세 개의 비트로 구성된 필드이다. 이 중에서 첫 번째 비트는 항상 0으로 예약된 비트로 현재 사용하지 않는다. 사용되는 나머지 두 개의 비트 중에서 하나는 DF라는 이름이 붙은 비트이다. "Don't Fragment"의 약어로, IP 단편화를 수행하지 말라는 표시이다. 만일 이 비트가 1로 설정되어 있다면 IP 단편화를 수행하지 않고, 0으로 설정되어 있다면 IP 단편화가 가능하다. DF 비트가 1로 설정되었다고 해도 패킷의 크기가 너무 크다면 이는 폐기된다.

 

또 하나의 비트는 MF라는 비트이다. 이는 "More Fragment"의 약어로, 단편화된 패킷이 더 있는지를 나타낸다. 0이라면 이 패킷이 마지막 패킷임을 의미하고, 1이라면 쪼개진 패킷이 아직 더 있다는 것을 의미한다.

 

단편화 오프셋

단편화 오프셋(Fragment Offset)은 패킷이 단편화되기 전에 패킷의 초기 데이터에서 몇 번째로 떨어진 패킷인지를 나타낸다. 단편화되어 전송되는 패킷들은 수신지에 순서대로 도착하지 않을 수 있다. 따라서 수신지가 패킷들을 순서대로 재조합하려면 단편화된 패킷이 초기 데이터에서 몇 번째 데이터에 해당하는 패킷인지 알아야 한다. 이를 판단하기 위해 단편화 오프셋이 활용된다.

  • 단편화 오프셋 0
  • 단편화 오프셋 1480: 첫 데이터로부터 1480만큼 떨어진 패킷
  • 단편화 오프셋 2960: 첫 데이터로부터 2960만큼 떨어진 패킷

TTL

TTL(Time To Live)는 패킷의 수명을 의미한다. 멀리 떨어진 호스트끼리 통신할 때 패킷은 여러 라우터를 거쳐 이동할 수 있다. 패킷이 하나의 라우터를 거칠 때마다 TTL이 1씩 감소하며, TTL 값이 0으로 떨어진 패킷은 폐기된다.

 

패킷이 호스트 또는 라우터에 한 번 전달되는 것을 홉(Hop)이라고 한다. 즉, TTL 필드의 값은 홉마다 1씩 감소된다. TTL 필드의 존재 이유는 무의미한 패킷이 네트워크상에 지속적으로 남아있는 것을 방지하기 위함이다. TTL 필드가 0이 되면 해당 패킷은 폐기되고, 패킷을 송신한 호스트에게 시간 초과(Time Exceeded) 메시지가 전송된다. 이를 알려주는 프로토콜이 ICMP(Internet Control Message Protocol)이다.

 

프로토콜

IP패킷의 프로토콜(Protocol)은 상위 계층의 프로토콜이 무엇인지 나타내는 필드이다. 예를 들어서 전송 계층의 대표적인 프로토콜인 TCP는 6번, UDP는 17번이다.

 

송신지 IP 주소와 수신지 IP 주소

송신지 IP 주소(Source IP Address)수신지 IP 주소(Destination IP Address)에서는 이름 그대로 송신지의 IPv4 주소를 알 수 있다.

 

요약하면 IPv4 식별자, 플래그, 단편화 오프셋으로 단편화와 재조립을 할 수 있고, 프로토콜 필드로 상위 계층 프로토콜을 알 수 있으며, TTL로 패킷의 남은 수명을 파악할 수 있다. 또한 송신지 IP 주소, 수신지 IP 주소를 통해 IP 주소를 지정할 수 있다.

 

IPv6

IPv4 주소는 4바이트(32비트)로 표현되고, 0~255 범위의 네 개의 10진수로 표기되는 주소라고 했다. 그리고 이 주소를 이용해 네트워크 상의 호스트를 식별할 수 있다. 이론적으로 할당 가능한 IPv4 주소는 총 2의 32승으로 약 43억 개이다. 전 세계 인구가 하나씩 IP 주소를 가지고 있어도 부족한 숫자이다. 그런데 우리가 주변만 해도 IP 주소를 가질 수 있는 장치가 스마트폰, 데스크톱, 노트북, 냉장고, TV 등 여러 개이다. 결국 약 43억 개라는 IPv4의 주소 총량은 쉽게 고갈될 수 있다. 이러한 이유에서 등장한 것이 IPv6이다.

 

IPv6 주소는 16바이트(128비트)로 주소를 표현할 수 있고 콜론(:)으로 구분된 8개 그룹의 16진수로 표기된다. 다시 말해 할당 가능한 IPv6 주소는 이론적으로 2의 128승 개로 사실상 무한에 가까운 개수를 할당할 수 있다.

192.168.1.1 // IPv4 주소
2001:0230:abcd:ffff:0000:0000:ffff:1111 // IPv6 주소

IPv6 패킷은 다음 그림과 같다. IPv6 패킷의 기본 헤더는 IPv4에 비해 간소화되어 있다. 다음 헤더(Next Header), 홉 제한(Hop Limit), 송신지 IP 주소(Source Address), 수신지 IP 주소(Destination Address) 이 네 개의 주요 필드를 살펴보자.

 

다음 헤더

다음 헤더(Next Header) 필드는 상위 계층의 프로토콜을 가리키거나 확장 헤더를 가리킨다. "IPv6의 기본 헤더는 IPv4에 비해 간소화되어 있다"라고 했다. 위의 그림에 표현된 IPv6의 헤더는 기본 헤더이다. IPv6는 추가적인 헤더 정보가 필요할 경우에 기본 헤더와 더룰어 확장 헤더(Extension Header)라는 추가 헤더를 가질 수 있다.

 

확장 헤더는 기본 헤더와 페이로드 데이터 사이에 위치한다. 또한 마치 꼬리에 꼬리를 물듯 또 다른 확장 헤더를 가질 수 있다.

 

확장 헤더의 종류는 다양하기 때문에 상황에 맞는 다양한 정보를 운반할 수 있다. 암기할 필요는 없지만 대표적인 확장 헤더 종류에 눈도장을 찍어 보자면, 송신지에서 수신지에 이르는 모든 경로의 네트워크 장비가 패킷을 검사하도록 하는 홉 간 옵션(Hop-By-Hop Options), 수신지에서만 패킷을 검사하도록 하는 수신지 옵션(Destination Options), 라우팅 관련 정보를 운반하는 라우팅(Routing), 단편화를 위한 단편(Fragment), 암호화 인증을 위한 ESP(Encapsulating Security Payload), AH(Authentication Header) 확장 헤더가 있다. IPv6는 IPv4와 달리 기본 헤더에 단편화 관련 필드가 없고, 단편화 확장 헤더를 통해 단편화가 이루어진다.

 

홉 제한

홉 제한(Hop Limit) 필드는 IPv4 패킷의 TTL 필드와 비슷하게 패킷의 수명을 나타내는 필드이다.

 

송신지 IP 주소와 수신지 IP 주소

송신지 주소(Source Address)수신지 주소(Destination Address)를 통해 IPv6 주소 지정이 가능하다. IPv4 패킷은 옵션이나 패딩 필드는 헤더에 포함되어 있는 정보이지만, 선택적으로 존재한다. 즉, IPv4 헤더 길이는 가변적이다. 반면 IPv6 기본 헤더는 40바이트로 고정적이다. IPv6 또한 현재 유망한 프로토콜로 떠오르고 있는 만큼 다수의 장비에서 지원한다. 그래도 아직까지는 일반적으로 IPv4가 많이 사용된다.

 

ARP

택배를 전송할 때 송신지 주소와 송신자, 수신지 주소와 수신자를 함께 명시하되 수신자보다는 수신지를 먼저 고려하는 것처럼, MAC 주소와 IP 주소는 함게 사용하지만, 기본적으로는 IP 주소를 사용한다고 했다. 이 과정에서 "상대 호스트의 IP 주소는 알지만, MAC 주소는 알지 못하는 상황"이 있을 수 있다. 이럴 때 ARP라는 프로토콜을 사용한다. ARP(Address Resolution Protocol)는 IP 주소를 통해 MAC 주소를 알아내는 프로토콜이다. 동일 네트워크 내에 있는 송수신 대상의 IP 주소를 통해 MAC 주소를 알아낼 수 있다.

 

네트워크에서 기본적으로 사용되는 주소는 IP 주소이지만, 패킷을 올바르게 송신하려면 상대 호스트의 MAC 주소까지 알아야 한다. ARP의 동작 과정은 ARP 요청, ARP 응답, ARP 테이블 갱신 세 가지 순서로 수행된다. 참고로 MAC 주소 학습의 주체는 스위치이다. "스위치가 MAC 주소를 학습했다고 해서 호스트들끼리 서로 MAC 주소를 학습하는 것은 아니다."

 

1. 스위치의 역할: 스위치는 네트워크 장비로, 각 포트에 연결된 장치(호스트)의 MAC 주소를 학습하고 저장한다. 이 정보를 사용해 스위치는 패킷을 올바른 목적지로 전달한다. 예를 들어, 호스트 A가 호스트 B에게 데이터를 보낼 때 스위치는 A가 어느 포트에 연결되어 있는지 MAC 주소를 기반으로 알고, 패킷을 B로 보내는 역할을 한다.

 

2. MAC 주소 학습 과정: 스위치는 각 포트에 연결된 장치들이 보내는 트래픽을 확인하면서 각 장치의 MAC 주소를 학습한다. 이 정보를 MAC 주소 테이블에 저장하고, 해당 MAC 주소가 어느 포트에 연결된 장치인지를 기록한다. 이후 스위치는 목적지 MAC 주소를 바탕으로 그 MAC 주소가 어떤 포트에 있는지 확인하고 데이터를 정확한 포트로 전달한다.

 

3. 호스트는 MAC 주소를 학습하지 않는다: 스위치가 MAC 주소를 학습하는 것이지, 네트워크에 연결된 컴퓨터(호스트)들이 서로의 MAC 주소를 학습하는 것은 아니다. 호스트 간의 MAC 주소 확인은 주로 ARP를 통해 이루어진다. 예를 들어, 호스트 A가 호스트 B와 통신하기 위해 B의 MAC 주소를 알아야 할 때, A는 ARP 요청을 통해 B의 IP 주소에 해당하는 MAC 주소를 알아낸다. 이는 네트워크 레벨에서의 일시적인 작업으로, 스위치의 MAC 주소 학습과는 별개의 과정이다.

 

4. 스위치와 호스트의 차이: 스위치는 여러 장치 간의 네트워크 트래픽을 관리하고 전달하는 장비로, 이를 위해 MAC 주소를 학습하고 관리한다. 반면 호스트(컴퓨터, 서버 등)는 다른 장치와 통신할 때 ARP 프로토콜을 사용해 일시적으로 MAC 주소를 확인할 뿐, 이를 저장하고 관리하는 역할은 하지 않는다.

 

결론적으로, 스위치가 MAC 주소를 학습하고 이를 바탕으로 네트워크 트래픽을 처리하는 것과 호스트들이 통신을 위해 ARP를 사용하는 과정은 다른 개념이며, 스위치의 MAC 주소 학습이 호스트 간의 MAC 주소 학습을 의미하지는 않는다.

 

1. ARP 요청

우선 A는 네트워크 내의 모든 호스트에게 브로드캐스트 메시지를 보낸다. 이 메시지는 ARP 요청(ARP Request)라는 ARP 패킷이다. ARP 요청은 "10.0.0.2와 통신하고 싶은데, 이 분의 MAC 주소가 무엇인가요?"라고 모두에게 소리치는 것과 같다. 브로드캐스트는 자신을 제외한 네트워크상의 모든 호스트에게 전송하는 방식이다.

 

2. ARP 응답

네트워크 내의 모든 호스트가 ARP 요청 메시지만 수신하지만, B를 제외한 나머지 호스트는 자신의 IP 주소가 아니므로 이를 무시한다. B는 자신의 MAC 주소를 담은 메시지를 A에게 전송한다. 이 유니캐스트 메시지는 ARP 응답(ARP Response)이라는 ARP 패킷이다. B의 MAC 주소가 포함된 메시지를 수신한 A는 B의 MAC 주소를 알게 된다. 유니캐스트는 하나의 수신지에 메시지를 전송하는 방식이다.

 

ARP 패킷

ARP 요청, ARP 응답 과정에서는 ARP 패킷이 전송된다. ARP 패킷은 다음과 같은 형식으로, 프레임의 페이로드에 포함되어 전송된다. ARP 패킷에서 핵심적인 필드에 대해 학습한다. ARP(Address Resolution Protocol) 패킷은 데이터 링크 계층에서 주로 사용된다. ARP는 네트워크 계층인 IPv4와 데이터 링크 계층인 이더넷 사이에서 MAC 주소와 IP 주소를 매핑하는 역할을 한다.

 

따라서, ARP 패킷은 데이터 링크 계층의 이더넷 프레임에 포함되어 전송되며, 독립적인 프로토콜로 작동한다. 네트워크 계층인 IP 패킷에 포함되는 것이 아니라 이더넷 프레임의 페이로드로 ARP 요청이나 응답이 전달된다.

ARP 패킷 구조

오퍼레이션 코드(Opcode: Operation Code)
ARP 패킷의 유형을 나타낸다. ARP 요청의 경우 1, ARP 응답의 경우 2로 설정된다.

 

송신지 하드웨어 주소(Sender Hardware Address)수신지 하드웨어 주소(Target Hardware Address)
각각 송신지와 수신지의 MAC 주소가 명시된다. 참고로, ARP 요청 시 이더넷 프레임의 "수신지 MAC 주소"에는 브로드캐스트 메시지임을 나타내는 ff:ff:ff:ff:ff:ff가 명시되고, ARP 패킷의 "수신지 하드웨어 주소"에는 00:00:00:00:00:00이 명시된다.

 

송신지 프로토콜 주소(Sender Protocol Address)와 수신지 프로토콜 주소(Target Protocol Address)
각각 송신지와 수신지의 IP 주소가 명시된다.

 

3. ARP 테이블 갱신

ARP를 활용할 수 있는 모든 호스트는 ARP 테이블(ARP Table)이라는 정보를 유지한다. ARP 테이블은 IP 주소와 그에 맞는 MAC 주소 테이블을 대응하는 표이다. A가 ARP 요청과 ARP 응답 단계를 통해 B의 MAC 주소를 알게 되면 호스트 B의 IP 주소와 MAC 주소의 연관 관계를 ARP 테이블에 추가한다. 이 ARP 테이블은 일정 시간이 지나면 삭제되고, 임의로 삭제할 수도 있다. 여기까지 이루어지면 앞으로 A는 B와 통신할 때 굳이 브로드캐스트로 ARP 요청을 보낼 필요가 없어진다. ARP 테이블은 ARP 캐시(ARP Cache), ARP 캐시 테이블(ARP Cache Table)이라고도 부른다. ARP 테이블을 직접 확인하는 명령어는 arp -a 이다. IP 주소와 그에 대응된 MAC 주소를 볼 수 있다.

 

ARP는 "동일 네트워크" 내에 있는 호스트의 IP 주소를 통해 MAC 주소를 알아내는 프로토콜이라고 했다. 그렇다면 통신하고자 하는 호스트 A와 B가 서로 다른 네트워크에 속해 있으면 어떻게 될까? 라우터 간 통신을 주고받게 된다. 단, ARP만 사용하지 않는다.

  • ARP는 동일 네트워크에 속한 호스트의 MAC 주소를 알아내기 위해 사용하는 프로토콜이다.
  • 다른 네트워크에 속한 호스트에게 패킷을 보내야 할 경우 네트워크 외부로 나가기 위한 장비(라우터)의 MAC 주소를 알아내어 패킷을 전송한다.

IP 단편화를 피하는 방법

IP의 대표적인 기능으로 IP 주소 지정과 IP 단편화를 설명했다. IP 단편화는 되도록 하지 않는 것이 좋다. 데이터가 여러 패킷으로 쪼개지면 자연스레 전송해야 할 패킷의 헤더들도 많아지고, 이는 불필요한 트래픽 증가와 대역폭 낭비로 이어지는 원인이 될 수 있다. 쪼개진 IP 패킷들을 하나로 합치는 과정에서 발생하는 부하도 성능 저하를 야기할 수 있다. 따라서 IP 단편화는 가급적 피하는 것이 좋다.

 

IP 단편화를 피하기 위해 IP 패킷을 주고받는 모든 호스트의 "처리 가능한 MTU 크기"를 고려해야 한다. 가령 호스트 A, B가 여러 라우터를 거쳐 서로 IP 패킷을 주고받는다고 가정하자. 호스트 A, B가 처리할 수 있는 MTU 크기가 아무리 커도 라우터가 해당 MTU 크기를 지원하지 않으면 IP 단편화를 해야 한다. 따라서 IP 단편화를 피하려면 "IP 단편화 없이 받을 수 있는 최대 크기"만큼만 전송해야 한다. 이 크기를 경로 MTU(Path MTU)라고 한다. 다시 말해 IP 단편화를 피하는 방법은 경로 MTU만큼의 데이터를 전송하는 것이다.

 

경로 MTU를 구하고 해당 크기만큼만 송수신하여 IP 단편화를 회피하는 기술을 경로 MTU 발견(Path MTU Discovery)이라고 한다. 오늘날 네트워크에서는 대부분 이를 지원하고, 처리 가능한 최대 MTU 크기도 대부분 균일하기 때문에 IP 단편화는 자주 수행되지 않는다.

 

실제 IP 패킷을 관찰해 보면, 대부분의 IP 패킷에 DF 플래그가 설정되어 있는 거을 볼 수 있다. 이는 오늘날 네트워크에서는 대부분 경로 MTU 발견을 지원한다는 것을 보여준다. 경로 MTU 발견은 기본적으로 DF 플래그를 설정한 채 동작하기 때문이다. DF 플래그는 "IP 단편화를 수행하지 말라"라는 플래그라고 설명했다. 가령 어떤 호스트로부터 처리 불가능한 크기(처리 가능한 MTU 크기를 넘어선) IP 패킷을 전달받았는데, 해당 IP 패킷에 DF 플래그가 설정되어 있다면 IP 패킷을 전달한 호스트에게 "DF 플래그가 설정되어 있는데, 이걸 단편화 없이 처리할 수 없습니다"라는 특정 오류 메시지를 전달하게 된다. 그럼 IP 패킷을 전달한 호스트는 이 오류 메시지를 받지 않을 때까지 데이터 크기를 점차 줄이게 된다. 이렇게 서로의 경로 MTU를 알아가게 된다.

 

03-2 IP 주소

택배 배송 과정에서 "수신인"보다는 "수신지"를 우선으로 고려하듯, 네트워크 통신에서도 IP 주소가 기본으로 사용된다. 그만큼 네트워크 계층의 IP 주소는 네트워크에서 핵심적인 역할을 담당한다. 하나의 IP 주소는 크게 네트워크 주소와 호스트 주소로 이루어진다. "네트워크를 표현하는 부분"과 "호스트를 표현하는 부분"으로 이루어져 있다고 생각해도 좋다. 전자는 호스트가 속한 특정 네트워크를 식별하는 역할을 하며, 후자는 네트워크 내에서 특정 호스트를 식별하는 역할을 수행한다.

 

네트워크 주소와 호스트 주소

네트워크 주소는 네트워크 ID, 네트워크 식별자(Network Identifier) 등으로 부르기도 하며, 호스트 주소는 호스트 ID, 호스트 식별자(Host Identifier) 등으로도 부른다. 예를 들어 다음은 네트워크 주소가 16비트, 호스트 주소가 16비트인 IP 주소이다.

172.16.12.45
10101100.00010000.00001100.00101101

호스트 주소 공간을 크게 할당하면 호스트가 할당되지 않은 다수의 IP 주소가 낭비될 수 있다. 반대로 무조건 호스트 주소 공간을 작게 할당하면 호스트가 사용할 IP 주소가 부족해질 수 있다. 이런 고민을 해결하기 위해 생겨난 개념이 바로 IP 주소의 클래스(Class)이다.

 

클래스풀 주소 체계

클래스는 네트워크 크기에 따라 IP 주소를 분류하는 기준이다. 클래스를 이용하면 필요한 호스트 IP 개수에 따라 네트워크 크기를 가변적으로 조정해 네트워크 주소와 호스트 주소를 구획할 수 있다. 클래스를 기반으로 IP 주소를 관리하는 주소 체계를 클래스풀 주소 체계(Classful addressing)라고 한다.

 

실제 클래스를 보면 다음과 같다. 총 다섯 개의 클래스가 있다. 각각 A 클래스, B 클래스, C 클래스, D 클래스, E 클래스이다. 이 중 D와 E 클래스는 각각 멀티캐스트를 위한 클래스, 특수한 목적을 위해 예약된 클래스이기 때문에, 네트워크의 크기를 나누는 데에 실질적으로 사용되는 클래스는 A, B, C 클래스이다.

A, B,C 클래스

먼저 A 클래스는 B와 C 클래스에 비해 할당 가능한 호스트 주소의 수가 많다. 네트워크 주소는 비트 "0"으로 시작하고 1옥텟으로 구성되며, 호스트 주소는 3옥텟으로 구성된다. 즉, 이론상으로 2의 7승(128)개의 A 클래스 네트워크가 존재할 수 있고, 2의 24승(16,777,216)개의 호스트 주소를 가질 수 있다. A 클래스로 나타낼 수 있는 IP 주소의 최소값을 10진수로 표현하는 0.0.0.0, 최대값을 10진수로 표현하면 127.255.255.255이다. 요컨대 가장 처음 옥텟의 주소가 0~127일 경우 A 클래스 주소임을 짐작할 수 있다.

  • A 클래스
    • B, C 클래스에 비해 할당 가능한 호스트 주소의 수가 많다.
    • 네트워크 주소는 비트 0으로 시작하는 1옥텟이며, 호스트 주소는 3옥텟으로 구성된다.
    • 이론상 2^7(128)개의 A 클래스 네트워크가 존재할 수 있으며,
      2^24(16,777,216)개의 호스트 주소를 가질 수 있다.
    • A 클래스의 IP 주소의 범위는 0.0.0.0 ~ 127.255.255.255 이며,
      처음 옥텟의 주소가 0~127일 경우 A 클래스 주소임을 짐작할 수 있다.
  • B 클래스
    • 네트워크 주소는 비트 10으로 시작하는 2옥텟이며, 호스트 주소도 2옥텍으로 구성된다.
    • 이론상 2^14(16,384)개의 B 클래스 네트워크가 존재할 수 있으며,
      2^16(65,534)개의 호스트 주소를 가질 수 있다.
    • B 클래스의 IP 주소의 범위는 128.0.0.0 ~ 191.255.255.255 이며,
      처음 옥텟의 주소가 128~191일 경우 B 클래스 주소임을 짐작할 수 있다.
  • C 클래스
    • 네트워크 주소는 비트 110으로 시자하는 3옥텟이며, 호스트 주소는 1옥텟으로 구성된다.
    • 이론상 2^21(2,097,152)개의 C 클래스 네트워크가 존재할 수 있으며,
      2^8(256)개의 호스트 주소를 가질 수 있다.
    • C 클래스의 IP 주소의 범위는 192.0.0.0 ~ 223.255.255.255 이며,
      처음 옥텟의 주소가 192~223일 경우 C 클래스 주소임을 짐작할 수 있다.

다만 호스트의 주소 공간을 모두 사용할 수 있는 것은 아니다. 호스트 주소가 전부 0인 IP 주소와 호스트 주소가 전부 1인 IP 주소는 특정 호스트를 지칭하는 IP 주소로 활용할 수 없다. 전자는 해당 네트워크 자체를 의미하는 네트워크 주소로 사용되고, 후자는 브로드캐스트를 위한 주소로 사용되기 때문이다.

 

즉, A 클래스는 이론상으로는 2의 24승(16,777,216)개의 주소를 호스트에 할당할 수 있지만, 실제로 할당 가능한 주소는 16,777,216 - 2개인 16,777,214개이다. 마찬가지로 B 클래스는 이론상 2의 16승(65,536)개의 주소를 호스트에 할당할 수 있지만, 실제로 할당 가능한 주소는 65,536 - 2개인 65,534개, C 클래스는 이론상 2의 8승(256)개의 주소를 호스트에 할당할 수 있지만, 실제로 호스트에게 할당 가능한 주소는 256 - 2개인 254개이다.

 

 

클래스리스 주소 체계

이처럼 클래스풀 주소 체계를 이용하면 네트워크의 영역을 결정하고 할당 가능한 호스트의 주소 공간을 유동적으로 관리할 수 있지만, 이 방식에는 한계가 있다. 클래스별 네트워크의 크기가 고정되어 있기에 여전히 다수의 IP 주소가 낭비될 가능성이 크다는 문제가 있다.

 

단적인 예로 A 클래스 네트워크 하나당 할당 가능한 호스트 IP 주소는 1,600만 개 이상이고, B 클래스 네트워크 하나당 할당 가능한 호스트 IP 주소는 6만 개가 넘는다. 단일 조직에서 이 정도의 호스트가 필요한 경우는 많지 않다. 게다가 사전에 정해진 A, B, C 클래스 외에는 다른 크기는 네트워크를 구성할 수도 없다.

 

예를 들어 300명의 직원이 사용할 컴퓨터들은 동일한 네트워크로 구성하고 싶을 때, 클래스풀 주소 체계에서는 어쩔 수 없이 B 클래스 주소를 이용해야만 한다. C 클래스 주소는 호스트에게 할당할 수 있는 IP 주소가 254개뿐이기 때문이다.

그래서 클래스풀 주소 체계보다 더 유동적이고 정교하게 네트워크를 구획할 수 있는 클래스리스 주소 체계(Classless Addreesing)가 등장했다. 이름처럼 클래스 개념 없이(Classless) 클래스에 구애받지 않고 네트워크의 영역을 나누어서 호스트에게 IP 주소 공간을 할당하는 방식이다. 오늘날 주로 사용되는 방식으로, 이번 학습에서 가장 중요한 핵심이다.

 

서브넷 마스크

클래스풀 주소 체계는 클래스를 이용해 네트워크 주소와 호스트 주소를 구분하지만, 클래스리스 주소 체계는 클래스를 이용하지 않으므로 IP 주소상에서 네트워크 주소와 호스트 주소를 구분 짓는 점은 임의의 지점이 될 수 있다 .클래스리스 주소 체계에서는 네트워크와 호스트를 구분 짓는 수단으로 서브넷 마스크를 이용한다.

 

서브넷 마스크(Subnet Mask)는 IP 주소상에서 네트워크 주소는 1, 호스트 주소는 0으로 표기한 비트열을 의미한다. 네트워크 내에 부분적인 네트워크(서브네트워크: Subnetwork)구분 짓는(마스크: Mask) 비트열인 셈이다. 서브넷 마스크를 이용해 클래스를 원하는 크기로 더 잘게 쪼개어 사용하는 거을 서브네팅(Subnetting)이라고 한다.

 

서브네트워크는 IP 주소의 네트워크 주소로 구분 가능한 네트워크의 부분 집합이다. 서브넷(Subnet)이라고 줄여서 부르기도 한다. 서브넷과 서브네팅은 네트워크를 이야기할 때 자주 등장하는 용어이기 때문에 익숙해지는 것이 좋다. 클래스풀 주소 체계에서 A 클래스의 네트워크 주소는 8비트, B 클래스의 네트워크 주소는 16비트, C 클래스의 네트워크 주소는 24비트로 이루어져 있다. 그렇기에 A, B, C 클래스의 기본 서브넷 마스크는 다음과 같다.

  • A 클래스: 255.0.0.0(11111111.00000000.00000000.00000000)
  • B 클래스: 255.255.0.0(11111111.11111111.00000000.00000000)
  • C 클래스: 255.255.255.0(11111111.11111111.11111111.00000000)

 

서브네팅: 비트 AND 연산

서브넷 마스크를 이용해 네트워크 주소와 호스트 주소를 짓는 방법은 단순하다. IP 주소와 서브넷 마스크를 비트 AND 연산하면 된다. 비트 AND 연산(Bitwise AND operation)이란 피연산자가 모두 1인 경우에는 1, 아닌 경우에는 0이 되는 연산이다. 다음 그림처럼 말이다.

 

다음과 같은 IP 주소와 서브넷 마스크가 있다고 가정해보자.

  • IP 주소: 192.168.219.13
  • 서브넷 마스크: 255.255.255.0

이 IP 주소와 서브넷 마스크를 2진수로 표기하면 다음과 같다.

  • IP주소: 11000000.10101000.11011011.01100111
  • 서브넷 마스크: 11111111.11111111.11111111.00000000

이 둘에 대해 비트 AND 연산을 수행하면 다음 결과처럼 네트워크 주소를 구할 수 있다.

  • 비트 AND 연산(네트워크 주소): 11000000.10101000.11011011.00000000 = 192.168.219.0

사용된 서브넷 마스크에서 0이 8개이므로 호스트 주소는 8비트로 표현 가능하다. 따라서 실제로 할당 가능한 호스트 IP 주소는 호스트 주소가 모두 0인 네트워크 주소 192.168.219.0과 호스트 주소가 모두 1인 브로드캐스트 주소 192.168.219.255를 제외한 192.168.219.1~129.168.219.254, 즉 254개가 된다.

 

정리하면, 클래스리스 주소 체계는 클래스가 아니라 서브넷 마스크를 이용해 네트워크 주소와 호스트 주소를 구분하는 IP 주소 체계이다. 또한 서브넷 마스크와 IP 주소 간에 비트 AND 연산을 수행하면 IP 주소 내의 네트워크 주소를 알아낼 수 있다.

 

서브넷 마스크 표기: CIDR 표기법

서브넷 마스크를 표기하는 방법은 다음과 같이 크게 두 가지가 있다.

  • 앞의 예시와 같이 서브넷 마스크를 255.255.255.0, 255.255.255.252처럼 10진수로 직접 표기하는 방법
  • IP주소/서브넷 마스크상의 1의 개수 형식으로 표기하는 방법

여기서 두 번째 방식인 IP 주소/서브넷 마스크상의 1의 개수로 표기하는 형식을 CIDR 표기법(CIDR: Classless Inter-Domain Routing Notation)이라고 부른다. IP 주소와 서브넷 마스크를 함께 표현할 수 있는 간단한 표기로 많이 활용된다. 예를 들어서 C 클래스의 기본 서브넷 마스크는 255.255.255.0이다. 이를 2진수로 표기하면 11111111.11111111.11111111.00000000이다. 1이 총 24개이므로 CIDR 표기법을 따르면 다음과 같이 /24로 표기할 수 있다.

  • CIDR 표기법: 192.168.219.103/24

192.168.0.2/25라는 표기가 있다고 가정해보자. 이는 어떤 네트워크에 속한 어떤 호스트를 가리킬까? 우선 네트워크 주소와 호스트 주소를 구해보자. IP 주소를 나타내는 192.168.0.2를 2진수로 표현하면 11000000.10101000.00000000.00000010이다. 그리고 서브넷 마스크를 나타내는 /25는 1이 총 25개, 11111111.11111111.11111111.10000000을 의미한다. 10진수로 표현하면 255.255.255.128과 같다.

 

서브넷 마스크를 IP 주소 192.168.0.2와 비트 AND 연산을 하면 그 결과는 192.168.0.0이다. 즉, 네트워크 주소는 192.168.0.0이 된다. 호스트는 7비트로 표현할 수 있다. 할당 가능한 호스트 IP 주소의 범위는 네트워크 주소 192.168.0.0과 브로드캐스트 주소 192.168.0.127을 제외하면 192.168.0.1~192.168.0.126이 된다. 즉, 192.168.0.2/25는 총 126개의 호스트를 할당할 수 있는 192.168.0.0이라는 네트워크에 속한 2라는 호스트를 의미한다.

 

공인 IP 주소와 사설 IP 주소

지금까지의 IP 주소 설명을 보면 "IP 주소는 마치 MAC 주소와 같은 유일한 주소"라고 생각할 수도 있다. "IP 주소는 고갈될 수 있다", "IP 주소는 낭비될 수 있다."라고 표현으니 말이다. 하지만 사실 이는 반만 맞는 이야기이다. 전 세계에는 고유한 IP 주소가 있고, 고유하지 않은 IP 주소도 있다. 지금까지는 전자에 대해 설명했다. 이를 공인 IP 주소라고 한다.

 

공인 IP 주소

공인 IP 주소(Public IP Address)는 전 세계에서 고유한 IP 주소이다. 네트워크 간의 통신, 이를테면 이더넷을 이용할 때 사용하는 IP 주소가 바로 공인 IP 주소이다. 공인 IP 주소는 ISP나 공인 IP 주소 할당 기관을 통해 할당받을 수 있다.

 

사설 IP 주소와 NAT

사설 IP 주소(Private IP Address)란 사설 네트워크에서 사용하기 위한 IP 주소이다. 사설 네트워크란 인터넷, 외부 네트워크에 공개되지 않은 네트워크를 의미한다. 우리가 사용하는 모든 네트워크 기기의 IP 주소를 전부 별도로 신청해서 할당받지는 않았을 것이다. 그 이유는 LAN 내의 많은 호스트는 사설 IP 주소를 사용하기 때문이다. IP 주소 공간 중에서 사설 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 주소의 할당 주체는 일반적으로 라우터이다. 할당받은 사설 IP 주소는 해당 호스트가 속한 사설 네트워크상에서만 유효한 주소이므로, 얼마든지 다른 네트워크상의 사설 IP 주소와 중복될 수 있다.

 

예를 들어 위에 명시한 사설 IP 주소 범위에 속하는 192.168.0.2라는 주소도 타 사설 네트워크 내 호스트와 얼마든지 중복될 수 있다. 그래서 192.168.0.2라는 사설 IP 주소만으로는 일반적인 인터넷 접속을 비롯한 외부 네트워크 간의 통신이 어렵다.

 

그렇다면 사설 IP 주소를 사용하는 호스트가 외부 네트워크와 통신하려면 어떻게 해야 할까? 이때 사용되는 기술이 NAT이다. NAT(Network Access Translation)는 IP 주소를 변환하는 기술이다. 주로 네트워크 내부에서 사용되는 사설 IP 주소와 네트워크 외부에서 사용되는 공인 IP 주소를 변환하는 데 사용된다. NAT를 통해 사설 IP 주소를 사용하는 여러 호스트는 적은 수의 공인 IP 주소를 공유할 수 있다.

 

대부분의 라우터와 (가정용) 공유기는 NAT 기능을 내장하고 있다. 그렇기에 사용자의 사설 네트워크상에서 만들어진 패킷 속 사설 IP 주소는 공유기를 거쳐 공인 IP로 변경되고, 외부 네트워크로 전송된다. 반대로 외부 네트워크로부터 받은 패킷 속 공인 IP 주소는 공유기를 거쳐 사설 IP 주소로 변경되어 사용자의 사설 네트워크 속 호스트에게 이르게 된다.

 

NAT의 동작 방식을 보다 정확히 이해하려면 전송 계층의 포트라는 개념을 이해해야 한다. 다만 이번 절에서는 공인 IP 주소와 사설 IP 주소의 차이점과 NAT가 어떤 기술인지만 이해해도 좋다.

 

사용자 컴퓨터의 공인 IP 주소와 사설 IP 주소를 간단히 확인해보자. 윈도우 운영체제 사용자는 명령 프롬프트(CMD)에 ipconfig 명령을 입력하면 현재 IP(IPv4) 주소를 조회할 수 있다. 만일 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16 중 하나가 보인다면, 이는 사설 IP 주소이다.

 

네이버나 구글 같은 검색 사이트에서도 IP 주소를 확인할 수 있다. 사용자가 컴퓨터 웹 브라우저에서 www.naver.com 혹은 www.google.com을 입력했을 때 웹 페이지가 보이는 것은 네이버나 구글의 서버 호스트와 사용자의 컴퓨터가 패킷을 주고받는 과정이라고 볼 수 있다. 이때 네이버나 구글의 서버 호스트가 인식한 사용자의 IP 주소는 사설 IP 주소가 아닌 공인 IP 주소이다.

 

정적 IP 주소와 동적 IP 주소

이제 호스트에 IP 주소를 할당하는 방법에 대해 학습하자. 여기에는 크게 두 가지 방법이 있다. 하나는 정적 할당이고, 또 하나는 동적 할당이다. 전자는 수작업을 통해 이루어지고, 후자는 일반적으로 DHCP라는 프로토콜을 통해 이루어진다.

 

정적 할당

정적 할당은 호스트에 직접 수작업으로 IP 주소를 부여하는 방식이다. 이렇게 할당된 IP 주소를 정적 IP 주소(Static IP Address)라고 부른다. 윈도우나 맥OS 등의 운영체제에서 네트워크 설정을 확인해 보면, 다음 화면처럼 IP 주소를 수동으로 설정할 수 있는 항목이 있다. 이곳에서 정적 IP 주소를 부여할 수 있다. 정적 IP 주소를 부여하기 위해 입력해야 하는 값은 대체로 유사하다.

 

일반적으로 부여하고자 하는 IP 주소, 서브넷 마스크, 게이트웨이(라우터) 주소, DNS 주소를 입력한다. 그러면 해당 호스트는 입력한 IP 주소에 해당하는 고정된 주소를 가지게 된다.

 

기본 게이트웨이

게이트웨이(Gateway)의 일반적인 의미는 서로 다른 네트워크를 연결하는 하드웨어적/소프트웨어적 수단을 의미한다. 그중에서도 기본 네트워크(Default Gateway)는 호스트가 속한 네트워크 외부로 나가기 위한 기본적인 첫 경로(첫 번째 홉)를 의미한다.

 

그래서 기본 게이트웨이는 네트워크 외부와 연결된 라우터(공유기)의 주소를 의미하는 경우가 많다. IP 할당의 맥락에서 사용된 "게이트웨이"라는 용어는 기본 게이트웨이를 의미하기 때문에, 윈도우의 IP 설정 편집에서 [게이트웨이] 항목과 [라우터] 항목에는 공통적으로 기본 게이트웨이 역할을 하는 라우터(공유기)의 주소를 적어주면 된다.

 

동적 할당과 DHCP

IP 주소를 정적으로만 할당하다 보면 호스트의 수가 많아질 경우 관리가 곤란해질 수 있다. 의도치 않게 잘못된 IP 주소를 입력할 수도 있고, 중복된 IP 주소를 입력할 수도 있다.

 

이럴 때 사용 가능한 IP 주소 할당 방식이 바로 동적 할당이다. 동적 할당은 정적 할당과 달리 IP 주소를 직접 일일이 입력하지 않아도 호스트에 IP 주소가 동적으로 할당되는 방식이다. 이렇게 할당된 IP 주소를 동적 IP 주소(Dynamic IP Address)라고 부른다.

 

동적 IP 주소는 사용되지 않을 경우 회수되고, 할당받을 때마다 다른 주소로 받을 수 있다. 사용자가 스마트폰이나 노트북을 이용할 때 수동으로 IP 주소를 설정하지 않고도 인터넷을 이용할 수 있는 것은 십중팔구 IP 주소가 동적으로 할당되었기 때문이다. 그만큼 동적 할당과 동적 IP 주소는 아주 일상적으로 사용된다.

 

IP 동적 할당에 사용되는 대표적인 프로토콜이 바로 DHCP(Dynamic Host Configuration Protocol)이다. 사용자가 동적 IP 주소를 일상적으로 사용하는 만큼, DHCP 또한 빈번히 사용된다. 그렇다면 DHCP는 호스트에게 IP 주소를 어떻게 할당하는 것일까? DHCP는 사실 응용 계층에 속하지만, 네트워크 계층의 개념을 이해하는 데 큰 도움이 되므로 이번 학습에서 동작 과정을 살펴본다.

 

IPv4 주소를 동적으로 할당하는 프로토콜은 DHCPv4이고, IPv6 주소를 동적으로 할당하는 프로토콜은 DHCPv6이다. 이어질 내용은 DHCPv4를 기본으로 설명한다.

 

DHCP를 통한 IP 주소 할당은 IP 주소를 할당받고자 하는 호스트(이하 클라이언트)와 해당 호스트에게 IP 주소를 제공하는 DHCP 서버(DHCP Server) 간에 메시지를 주고받음으로써 이루어진다. 여기서 DHCP 서버의 역할은 일반적으로 라우터(공유기)가 수행하지만, 특정 호스트에 DHCP 서버 기능을 추가할 수도 있다. DHCP 서버는 클라이언트에게 할당 가능한 IP 주소 목록을 관리하다가, 클라이언트가 요청할 때 IP 주소를 할당한다.

 

유의할 점은 DHCP로 할당받은 IP 주소는 사용 기간(임대 기간)이 정해져 있다는 점이다. 임대 기간은 DHCP 서버에서 설정하기 나름이지만, 일반적으로 수 시간에서 수일로 설정한다. 임대 기간이 끝난 IP 주소는 다시 DHCP 서버로 반납된다. 그래서 DHCP를 통해 IP 주소를 할당받는 것을 "IP 주소를 임대한다"라고 표현하기도 한다.

 

윈도우 운영체제 사용자는 명령 프롬프트(CMD)를 열고 ipconfig /all 을 입력하면 DHCP 서버 주소와 임대 기간을 볼 수 있다. IP 주소를 할당받는 과정에서 클라이언트와 DHCP 서버 간에 주고받는 메시지의 종류는 크게 네 가지가 있다.

  1. DHCP Discover
  2. DHCP Offer
  3. DHCP Request
  4. DHCP Acknowledgment(이하 ACK)

클라이언트는 DHCP 서버와 DHCP Discover, DHCP Offer, DHCP Request, DHCP ACK 순서대로 메시지를 주고받으며 IP 주소를 할당받는다. 참고로 이 메시지들을 주고받는 것은 DHCP 패킷을 주고받는 것과도 같다. 그렇다면 DHCP Discover 메시지부터 알아보자.

img

 

1. DHCP Discover(클라이언트 -> DHCP 서버)

Discover는 "발견하다" 의미이다. 그 이름처럼 클라이언트는 DHCP Discover 메시지를 통해 DHCP 서버를 찾는다. 이는 브로드캐스트로 전송된다. DHCP Discover 메시지를 전송하는 시점에 클라이언트는 아직 IP 주소를 할당받지 못했으므로 IP 주소는 0.0.0.0으로 설정된다.

 

2. DHCP Offer(DHCP 서버 -> 클라이언트)

DHCP 서버는 DHCP Discover 메시지를 받은 뒤 클라이언트에게 DHCP Offer 메시지를 보낸다. Offer는 "제안하다" 의미이다. 즉, 이 메시지는 클라이언트에게 할당해 줄 IP 주소를 제안하는 메시지이다. 제안할 IP 주소뿐만 아니라 서브넷 마스크, 임대 기간 등의 정보도 포함되어 있다.

 

3.DHCP Request(클라이언트 -> DHCP 서버)

DHCP Request는 DHCP Offer 메시지에 대한 응답이다. 이 또한 브로드캐스트로 전송된다. 비유하자면 DHCP Offer 메시지를 잘 받았는데, "이 IP 주소를 써도 되지요?"라고 묻는 것과 같다.

 

4.DHCP ACK(DHCP 서버 -> 클라이언트)

마지막으로 DHCP 서버는 클라이언트에게 DHCP ACK 메시지를 보낸다. 이 메시지는 마치 최종 승인과도 같은 메시지이다. DHCP ACK 메시지까지 받은 클라이언트는 이제 할당받은 IP 주소를 자신의 IP 주소로 설정한 뒤 임대 기간 동안 IP 주소를 사용한다.

 

IP 주소의 사용 기간이 모두 끝나 IP 주소가 DHCP 서버에 반납되면 원칙적으로는 이 과정을 다시 거쳐서 IP 주소를 재할당받아야 한다. 하지만 IP 주소 임대 기간이 끝나기 전에 임대 기간 연장을 할 수도 있다. 이를 임대 갱신(Lease Renewal)이라 한다. 임대 갱신은 IP 주소의 임대 기간이 끝나기 전에 기본적으로 두 차례 자동으로 수행된다. 만일 자동으로 수행되는 임대 갱신 과정이 모두 실패하면 그때 IP 주소는 DHCP 서버로 반납된다.

 

요약하면 IP 주소의 동적 할당은 호스트에 IP 주소를 자동으로 할당하는 방식으로, 일반적으로 DHCP라는 프로토콜을 이용한다.

 

예약주소: 0.0.0.0 vs 127.0.0.1

특수한 목적을 위해 예약된 IP 주소도 있다. 대표적인 예약 주소와 사용 목적은 다음과 같다.

예약주소 IP 필터 사용 목적
0.0.0.0/8 0.0.0.0 ~ 0.255.255.255 이 네트워크의 이 호스트
10.0.0.0/8 10.0.0.0 ~ 10.255.255.255 사설 네트워크
127.0.0.0/8 127.0.0.0 ~ 127.255.255.255 루프백(Lookback) 주소
169.254.0.0/16 169.254.0.0 ~ 169.254.255.255 링크 로컬(Link Local) 주소
(호스트가 연결된 링크로 통신 범위가 제한된 주소)
172.16.0.0/12 172.16.0.0 ~ 172.31.255.255 사설 네트워크
192.0.2.0/24 192.0.2.0 ~ 192.0.2.255 테스트용
192.168.0.0/16 192.168.0.0 ~ 192.168.255.255 사설 네트워크
198.18.0.0/15 198.18.0.0 ~ 198.19.255.255 테스트용
224.0.0.0/4 224.0.0.0 ~ 239.255.255.255 멀티캐스트(D 클래스)
240.0.0.0/4 240.0.0.0 ~ 255.255.255.254 미래 사용 용도로 예약(E 클래스)

 

예약 주소 중에서 회색으로 표기된 부분은 이번 장에서 설명한 사설 네트워크에서 사용되는 IP 주소이다. 이외에도 개발자 입장에서 자주 접하게 될 중요한 예약 IP 주소로, 연한 붉은 색으로 표기한 루프백 주소와 0.0.0.0 주소가 있다.

 

루프백 주소(Loopback Address)는 자기 자신을 가리키는 특별한 주소이다. 가장 일반적으로 사용되는 127.0.0.1이고, 로컬호스트(Localhost)라고도 부른다. 루프백 주소로 전송된 패킷은 자기 자신에게 되돌아오므로 자기 자신을 마치 다른 호스트인 양 간주하여 패킷을 전송할 수 있다. 부메랑 역할을 수행하는 주소라고 볼 수 있다. 루프백 주소는 주로 테스트나 디버깅 용도로 사용된다.

 

0.0.0.0/8은 인터넷 표준 공식 문서(RFC 6890)에 따르면 "이 네트워크의 이 호스트(This host on this network)를 지칭하도록 예약되었다"라고 명시되어 있다. 이번 장에서 DHCP Discover를 설명할 때 "DHCP Discover 메시지를 전송하는 시점에 클라이언트는 아직 IP 주소를 할당받지 못했으므로 송신지 IP 주소는 0.0.0.0으로 설정된다"라고 언급했다. 이처럼 0.0.0.0/8은 호스트가 IP 주소를 할당받기 전에 임시로 사용하는 경우가 많다. 호스트 입장에서 자신을 지칭할 IP 주소가 없기 때문에 "이 네트워크의 이 호스트"로 자신을 지칭하는 것이다.

 

이와 유사하지만 다른 의미를 지닌 0.0.0.0/0도 있다. 이 또한 자주 사용되는 특수한 주소로 "모든 임의의 IP 주소"를 의미한다. 이 주소는 주로 패킷이 이동할 경로를 결정하는 라우팅에서 활용되는데, 디폴트 라우트를 나타내기 위해 사용된다. 디폴트 라우트(Default Route)란 패킷을 어떤 IP 주소로 전달을 결정하기 어려울 경우 기본적으로 패킷을 전달할 경로를 의미한다. 즉, 어디로 패킷을 전달해야 할지 명확하지 않을 경우 이곳으로 패킷을 이동시키라고 표기하는 셈이다. 라우팅과 디폴트 라우트는 다음 장에서 자세히 학습한다.

 

03-3 라우팅

라우팅을 가능하게 정보인 라우팅 테이블을 알아보고, 라우팅 프로토콜에 대해 학습한다. 라우터의 핵심 기능은 패킷이 이동할 최적의 경로를 설정한 뒤 해당 경로로 패킷을 이동시키는 것이다. 이를 라우팅이라 한다.

라우팅은 지금 학습에서 모두 다루기에는 어려운 깊은 주제이다. 그렇기에 이번 학습에서는 다음 그림과 같은 라우팅의 분류에 주안점을 두고 학습한다. 라우팅 테이블이 만들어지는 방법과 프로토콜에 따라 라우팅을 분류하면 다음 그림과 같이 표현할 수 있다.

**라우터**

 

네트워크 계층의 장비로 라우터만 알아도 큰 무리가 없을 정도로, 라우터는 네트워크 계층의 핵심 기능을 담당한다. 사실 L3 스위치(L3 Switch)라고 부르는 장치도 네트워크 계층의 대표 장치이기는 하지만, 오늘날 라우터와 L3 스위치는 기능상 상당 부분 유사하므로 엄밀히 구분하지 않는 경우가 많다. 이 책에서도 네트워크 계층의 장비로 라우터만 살펴본다.

 

 

 

라우터는 앞서 학습한 허브나 스위치보다 높은 계층에 속하는 장치이므로 기능적으로는 사실상 우리가 사용하는 컴퓨터와 매우 유사하다. 일반적으로 가정 환경에서는 공유기가 라우터의 역할을 대신한다. 이런 점에서 공유기를 홈 라우터(Home Router)라고 부르기도 한다. 사실 공유기는 라우터 기능뿐만 아니라 NAT 기능, DHCP 서버 기능, 보안을 위한 방화벽 기능 등 다양한 장치의 기능이 함축된 네트워크 장비라고 볼 수 있다.

 

 

 

멀리 떨어져 있는 호스트 간의 통신 과정에서 패킷은 서로 도달하기까지 여러 라우터를 거쳐서 다양한 경로로 이동할 수 있다. 사용자가 집에서 지구 반대편의 친구에게 이메일을 보낸다고 가정해보자. 그렇다면 그 이메일은 여러 대의 라우터를 거쳐 마침내 그 친구에 도달한다. 사용자의 패킷은 여러 대의 라우터를 깡충깡충 거치듯이 수신지까지 이동하는 셈이다.

 

 

 

이처럼 라우팅 도중 패킷이 호스트와 라우터 간에, 혹은 라우터와 라우터 간에 이동하는 하나의 과정을 홉(Hop)이라고 부른다. 즉, 패킷은 "여러 홉을 거쳐" 라우팅될 수 있는 것이다. 우리가 웹 브라우저에 `www.google.com`을 입력해 구글 웹 페이지를 확인하는 것도 사용자의 웹 브라우저가 구글의 컴퓨터와 패킷을 주고받는 과정이다. 구글의 컴퓨터는 사용자의 LAN이 아닌 멀리 떨어져 있는 곳에 존재한다. 그러므로 사용자의 컴퓨터와 구글의 컴퓨터가 주고받는 패킷은 여러 네트워크 장비를 거치는 수많은 홉과 경로를 통해 이동한다.

 

 

 

이를 직접 확인하기 위해서는 윈도우 운영체제의 경우 명령 프롬프트(CMD)에 `tracert www.google.com`을, 리눅스나 맥OS 운영체제의 경우 터미널에 `traceroute www.goolge.com`이라고 입력하면 다음과 같이 사용자의 컴퓨터로부터 구글의 웹 페이지를 보내주는 호스트에 이르기까지의 경로가 출력된다.

 

라우팅 테이블

 

 

라우팅의 핵심은 라우터가 저장하고 관리하는 라우팅 테이블이다. 라우팅 테이블(Routing Table)은 특정 수신지까지 도달하기 위한 정보를 명시한 일종의 표와 같은 정보이다. 라우터는 라우팅 테이블을 참고하여 수신지까지의 도달 경로를 판단한다.

 

 

라우팅 테이블에 포함된 정보는 라우팅 방식에 따라, 호스트의 환경에 따라 달라질 수 있다. 하지만 공통적인 정보이자 핵심적인 정보로는 수신지 IP 주소와 서브넷 마스크, 다음 홉이 있고, 이외에도 라우팅 테이블에 명시되는 대표적인 정보로 네트워크 인터페이스와 메트릭이 있다.

  • 수신지 IP 주소와 서브넷 마스크: 최종적으로 패킷을 전달할 대상을 의미한다.
  • 다음 홉(Next Hop): 최종 수신지까지 가기 위해 다음으로 거쳐야 할 호스트의 IP 주소나 인터페이스를 의미한다. 게이트웨이라고 명시되기도 한다.
  • 네트워크 인터페이스: 패킷을 보낼 통로이다. 인터페이스(NIC) 이름이 직접적으로 명시되거나 인터페이스에 대응하는 IP 주소가 명시되기도 한다.
  • 메트릭(Metric): 해당 경로로 이동하는 데에 드는 비용을 의미한다. 흔히 매장에서 같은 류의 물건을 살 때면 더 저렴한 물건을 선택하고는 한다. 일상에서 가성비가 좋은 물품이 선호되듯, 라우터가 라우팅 테이블에 있는 경로 중 패킷을 내보낼 경로를 선택할 때에도 메트릭이 낮은 경로를 선호한다.

예를 들어 다음 표와 같은 라우팅 테이블이 있다고 가정해보자. 이는 수신지가 192.168.2.0/24(호스트 IP 주소 범위 192.168.2.1 ~ 192.168.2.254)인 패킷은 eth0(인터페이스)를 통해 192.168.2.1(게이트웨이)로 전송하라는 것을 의미한다.

수신지 IP 주소 서브넷 마스크 게이트웨이 인터페이스 메트릭
192.168.2.0 255.255.255.0 192.168.2.1 eth0 30

 

패킷 내의 수신지 IP 주소가 라우팅 테이블에 있는 수신지 IP 주소, 서브넷 마스크 항목과 완벽하게 합치되는 경우가 있지만, 그렇지 않은 경우도 있다. 다시 말해 라우팅 테이블에 없는 경로로 패킷을 전송해야 할 때가 있다. 이 경우 기본적으로 패킷을 내보낼 경로를 설정하여 해당 경로로 패킷을 내보낼 수 있다. 이 기본 경로를 디폴트 라우트(Default Route)라 한다.

 

 

디폴트 라우트는 모든 IP 주소를 의미하는 0.0.0.0/0로 명시한다. 예를 들어 수신지 IP 주소가 1.2.3.4 패킷의 경우, 다음 라우팅 테잉블에서 다른 어떤 항목과도 합치되지 않으므로 색칠된 디폴트 라우트, eth2를 통해 192.168.0.1로 전송된다.

수신지 IP 주소서브넷 마스크게이트웨이인터페이스메트릭

수신지 IP 주소 서브넷 마스크 게이트웨이 인터페이스 메트릭
192.168.2.16 255.255.255.0 192.168.2.1 eth0 30
192.168.0.0 255.255.0.0 192.168.2.2 eth1 30
0.0.0.0 0.0.0.0 192.168.0.1 eth2 30

 

앞선 절에서 기본 게이트웨이를 학습했다. 기본 게이트웨이는 호스트가 속한 네트워크 외부로 나아가기 위한 첫 번째 경로이고, 일반적으로 라우터 주소를 의미하는 경우가 많다고 했다. 여기서 기본 게이트웨이로 나아가기 위한 경로가 디폴트 라우트인 셈이다.

 

 

 

가령 네트워크 내부 호스트 A가 네트워크 외부 호스트 B에게 패킷을 전달해야 한다고 가정해보자. A의 라우팅 테이블에 B에 이르는 경로가 따로 없을 경우, A는 우선 패킷을 라우터(기본 게이트웨이)에 전달해야 할 것이다. 이를 위해 A는 라우터 주소인 기본 게이트웨이를 디폴트 라우터로 삼는다. 그럼 A는 라우팅 테이블에 따로 수신지 경로가 등록되어 있지 않은 패킷들은 기본적으로 라우터에게 전달한다.

 

 

실제 라우팅 테이블이 어떻게 생겼는지 확인하자. 윈도우 사용자는 명령 프롬프트(CMD)를 열고 route print라고 입력한다. 수신지 IP 주소(네트워크 대상), 서브넷 마스크(네트워크 마스크), 게이트웨이, 인터페이스(에 할당된 IP 주소), 메트릭이 출력되는 것을 볼 수 있다.

route print

 

route print

위의 실행 결과에서 [게이트웨이] 항목에 "연결됨(혹은 on-link)"이라고 표기되는 부분은 직접 연결(Directly Connected)된 경로를 의미한다. 이는 이름 그대로 직접 접속되어 곧장 접근할 수 있는 대상을 의미한다. 라우팅 테이블을 구성하는 정보는 라우팅 방식에 따라, 호스트 상황에 따라 달라질 수 있다고 했다. 맥OS나 리눅스 운영체제 사용자는 터미널을 열고 netstat -rn을 입력한다. 윈도우의 라우팅 테이블과는 조금 다르게 생겼으나 이 또한 수신지 IP 주소와 서브넷 마스크, 게이트웨이, 네트워크 인터페이스(NIC)가 포함되어 있는 것을 볼 수 있다.

 

처음 라우팅 테이블을 학습한다면 모든 항목을 이해할 필요는 없다. 중요한 점은 라우팅을 해 주는 네트워크 장비인 라우터는 라우팅 테이블을 통해 패킷을 수신지까지 전달할 수 있다는 점이고, 라우팅 테이블 안에는 네트워크상의 특정 수신지까지 도달하기 위한 정보들이 담겨 있다는 점이다.

 

정적 라우팅과 동적 라우팅

라우팅 테이블은 어떻게 생성될까? 크게 두 가지 방법이 있다. 하나는 정적 라우팅, 또 하나는 동적 라우팅이다.

 

03-2 IP 주소를 할당하는 바업에 크게 정적 할당과 동적 할당이 있다고 언급했다. 전자는 IP 주소를 수동으로 직접 할당하는 방식이고, 후자는 DHCP를 이용하여 IP 주소가 자동으로 할당되는 방식이라고 했다. 정적 라우팅과 동적 라우팅도 이와 유사하다.

 

 

정적 라우팅

 

정적 라우팅(Static Routing)은 사용자가 수동으로 직접 채워 넣은 라우팅 테이블의 항목을 토대로 라우팅되는 방식이다. 예를 들어 다음과 같이 라우팅 테이블 항목을 다루는 명령어가 있다. 이처럼 수동으로 구성된 라우팅 테이블 항목을 통해 수행되는 라우팅을 정적 라우팅이라 표현한다.

 

 

 

다음 예시는 모두 10.0.0.0/24로 향하는 패킷을 192.168.1.1 게이트웨이로 라우팅하는 명령이다. 암기할 필요는 없다.

 

 

윈도우 운영체제

route add 10.0.0.0 mask 255.255.255.0 192.168.1.1

 

 

맥OS 운영체제

 

sudo route add -net 10.0.0.0/24 192.168.1.1

 

 

리눅스 운영체제

 

sudo route add -net 10.0.0.0 netmask 255.255.255.0 gw 192.168.1.1

 

 

시스코 라우터

 

ip route 10.0.0.0 255.255.255.0 192.168.1.1

정적 라우팅은 수동으로 채워진 라우팅 테이블을 토대로 라우팅되는 방식이다.

 

 

동적 라우팅

 

 

네트워크의 규모가 커지고 관리해야 할 라우터가 늘어나면 정적 라우팅만으로는 관리가 버겁다. 수동으로 라우팅 테이블 항목을 입력해야 하는 정적 라우팅의 특성상 입력 실수가 발생할 수도 있다. 또한 설령 실수 없이 입력했다 할지라도 라우팅되는 경로상에 예상치 못한 문제가 생길 수 있다.

 

 

 

이때 사용할 수 있는 방식이 바로 동적 라우팅(Dynamic Routing)이다. 동적 라우팅은 자동으로 라우팅 테이블 항목을 만들고, 이를 이용하여 라우팅하는 방식을 의미한다. 이러한 이유로 동적 라우팅을 하면 라우팅 테이블 항목이 수시로 변할 수 있다. 라우팅 테이블의 항목을 수동으로 입력할 필요가 없다면 대규모 네트워크를 관리하는 데 있어서 더욱 편리할 것이다. 그뿐만 아니라 네트워크 경로상에 문제가 발생했을 때 이를 우회할 수 있게 경로가 자동으로 갱신되기도 한다.

 

 

 

그렇다면 동적 라우팅은 어떻게 자동으로 라우팅 테이블 항목을 생성하는 것일까? 모든 라우터는 특정 수신지까지 도달하기 위한 최적의 경로를 찾아 라우팅 테이블에 추가하려 노력한다. 이를 위해 라우터끼리 서로 자신의 정보를 교환하게 되는데, 이 과정에서 사용되는 프로토콜이 바로 (동적) 라우팅 프로토콜이다.

 

 

라우터들의 집단 네트워크, AS

본격적으로 라우팅 프로토콜을 학습하기 전에 알아야 할 배경지식이 있다. 바로 동일한 라우팅 정책으로 운용되는 라우터들의 집단 네트워크인 AS(Autonomous System)이다. 한 회사나 단체에서 관리하는 라우터 집단을 AS라고 생각해도 좋다. AS마다 인터넷상에서 고유한 AS 번호(ASN: Autonomous System Number)가 할당된다. AS 번호는 사설 IP 주소처럼 사설 AS 번호도 있지만, 일반적으로 AS 번호를 칭할 때는 고유한 번호를 일컫는 경우가 많다. 한 AS 내에는 다수의 라우터가 있다. 라우터들은 AS 내부에서만 통신할 수도, AS 외부와 통신할 수도 있다. AS 외부와 통신할 경우 AS 경계에서 AS 내외로 통신을 주고받을 수 있는 AS 경계 라우터(ASBR: Autonomous System Boundary Router)라는 특별한 라우터를 이용한다.

 

 

라우팅 프로토콜

 

라우팅 프로토콜(Routing Protocol)은 라우터끼리 자신들의 정보를 교환하며 패킷이 이동할 최적의 경로를 찾기 위한 프로토콜이다. 라우팅 프로토콜은 크게 AS 내부에서 수행되느냐, AS 외부에서 수행되느냐에 따라 종류를 나눌 수 있다. 전자를 IGP: Interior Gateway Protocol, 후자를 EGP: Exterior Gateway Protocol라고 한다. 대표적인 IGP로는 RIP와 OSPF가 있고, 대표적인 EGP로는 BGP가 있다. 라우팅 프로토콜은 범위에 따라 IGP와 EGP로 나뉘는 것이다.

 

 

IGP: RIP와 OSPF

 

대표적인 IGP로는 RIP(Routing Information Protocol)OSPF(Open Shortest Path First)가 있다. 이 프로토콜들은 최적의 경로를 선정하는 과정에서 거리 벡터가 사용되느냐, 링크 상태가 사용되느냐로 구분할 수 있다. RIP는 거리 벡터를, OSPF는 링크 상태를 사용하는 라우팅 프로토콜이다. 거리 벡터와 링크 상태는 영문 그대로 각각 디스턴스 벡터, 링크 스테이트이라고도 부른다.

 

 

 

RIP는 거리 벡터 기반의 라우팅 프로토콜이다. 여기서 거리 벡터(Distance Vector) 라우팅 프로토콜이란 이름 그대로 거리를 기반으로 최적의 경로를 찾는 라우팅 프로토콜을 의미한다. 그리고 거리는 패킷이 경유한 라우터의 수, 즉 홉의 수를 의미한다.

 

 

RIP는 인접한 라우터끼리 경로 정보를 주기적으로 교환하며 라우팅 테이블을 갱신한다. 이를 통해 라우터는 특정 수신지에 도달하기까지의 홉 수를 알 수 있다. 그리고 특정 수신지까지 도달하기 위해 "홉 수가 가장 적은 경로"를 최적의 경로로 판단한다. 그렇기에 홉 수가 적을수록 라우팅 테이블상의 메르틱 값도 작아진다.

 

OSPF는 링크 상태(Link State) 라우팅 프로토콜이다. "네트워크는 그래프의 형태를 띠며, 노드와 간선(링크)으로 이루어져 있다"라고 언급한 적이 있다. OSPF는 이러한 링크 정보를 비롯한 현재 네트워크의 상태를 그래프의 형태로 링크 상태 데이터베이스(LSDB: Link State Database)에 저장한다. 링크 상태 데이터베이스에는 라우터들의 연결 관계, 연결 비용 등 현재 네트워크의 상태를 그래프로 표현하기 위한 데이터가 저장되어 있다. 라우터는 링크 상태 데이터베이스를 기반으로 현재 네트워크 구성을 마치 지도처럼 그린 뒤에 최적의 경로를 선택한다.

 

OSPF에서는 최적의 경로를 결정하기 위해 대역폭을 기반으로 메트릭을 계산한다. 대역폭이 높은 링크일수록 메트릭이 낮은 경로로 인식한다. 또한 라우터 간에 경로 정보를 주기적으로 교환하며 라우팅 테이블을 갱신하는 RIP와 달리, OSPF는 네트워크의 구성이 변경되었을 때 라우팅 테이블이 갱신된다. 그런데 네트워크 구성이 변경될 때마다 라우팅 테이블이 갱신된다면, 네트워크의 규모가 매우 커졌을 때는 링크 상태 데이터베이스에 모든 정보를 저장하기가 어렵다. 최적의 경로를 갱신하는 연산 부담도 커질 수 있다.

 

이에 OSPF에서는 AS를 에어리어(Area)라는 단위로 나누고, 구분된 에어리어 내에서만 링크 상태를 공유한다. 에어리어에는 다음 그림처럼 번호가 부여되어 있으며, 에어리어 경계에 있는 ABR(Area Border Router)이라는 라우터가 에어리어 간의 연결을 담당한다.

 

여담으로, 고급 거리 벡터 프로토콜과 링크 상태 프로토콜의 성격을 모두 띠는 라우팅 프로토콜도 있다. 이러한 라우팅 프로토콜을 고급 거리 벡터 라우팅 프로토콜 혹은 하이브리드 라우팅 프로토콜이라고도 부른다. 대표적으로 EIGRP(Enhanced Interior Gateway Routing Protocol)가 있다. RIP는 대표적인 벡터 라우팅 프로토콜, OSPF는 대표적인 링크 상태 라우팅 프로토콜이다.

 

EGP: BGP

대표적인 EGP로는 BGP(Border Gateway Protocol)가 있다. AS 간의 통신에서 사용되는 대표적인 프로토콜로, 엄밀하게는 AS 간의 통신이 "가능한" 프로토콜이다. 따라서 BGP로 AS 내 라우터 간 통신도 가능하다. AS 간의 통신을 위한 BGP는 eBGP(external BGP), AS 내의 통신을 위한 BGP는 iBGP(interior BGP)라고도 한다.

 

AS 간에 정보를 주고받기 위해서는 AS 내에서 eBGP를 사용하는 라우터(이하 BGP 라우터)가 하나 이상 있어야 하고, 또 다른 AS의 BGP 라우터와 연결되어야 한다. 이 연결은 BGP 라우터 간에 BGP 메시지를 주고받음으로써 이루어지는데, BGP 메시지를 주고받을 수 있도록 연결된 BGP 라우터를 피어(Peer)라고 정의한다. 즉, 다른 AS와의 BGP 연결을 유지하기 위해서는 BGP 라우터끼리 연결되어 피어가 되어야 한다. 이렇게 피어 관계가 되도록 연결되는 과정을 피어링(Peering)이라 한다. 동일한 AS 내의 피어를 내부 피어, 다른 AS 내의 피어를 외부 피어라고 한다.

 

BGP는 RIP와 OSPF에 비해 치적의 경로를 결정하는 과정이 복잡하고, 일정하지 않은 경우가 많다. 경로 결졍 과정에서 수신지 주소와 더불어 다양한 "속성"과 "정책"이 고려되기 때문이다. BGP의 속성(Attribute)이란 경로에 대한 일종의 부가 정보이다. 종류는 다양하지만, 대표적인 속성으로는 AS-PATH NEXT-HOP 그리고 LOCAL-PREF가 있다. 다음 내용은 외우기보다는 가볍게 개념을 훑어본다는 마음으로 학습한다.

  • BGP는 RIP와 OSPF에 비해 최적의 경로를 결정하는 과정이 복잡하고, 일정하지 않은 경우가 많다.
  • 경로 결정 과정에서 수신지 주소와 더불어 다양한 속성정책이 고려되기 때문이다.
  • 대표적인 속성
    1. AS-PATH 속성
      • 메시지가 수신지에 이르는 과정에서 통과하는 AS들의 목록.
      • 메시지가 AS를 거칠 때마다 AS-PATH에는 거쳐 간 AS가 추가.
      • 따라서 BGP는 AS 간 라우팅을 할 때 거치게 될 '라우터'의 수가 아닌 'AS'의 수를 고려.
      • 또한 RIP처럼 단순히 수신지에 이르는 '거리'가 아닌, 메시지가 어디를 거쳐 어디로 이동하는지를 나타내는 '경로'를 고려.
    2. NEXT-HOP 속성
      • 다음 홉, 다음으로 거칠 라우터의 IP 주소를 나타낸다.
    3. LOCAL-PREF 속성
      • 지역 선호도.
      • AS 외부 경로에 있어 AS 내부에서 어떤 경로를 선호할지에 대한 척도를 나타내는 속성.
      • 경로를 선택하는 과정에서 AS-PATH나 NEXT-HOP 속성보다 우선시되며, 값이 클수록 우선 선택.
      • LOCAL-PREF 값은 AS 관리 주체가 설정하는 정책의 영향을 받는다.
  • BGP의 정책은 AS 관리 주체에 따라 각기 다른 상업적, 정치적 목적으로 상이한 정책을 사용할 수 있기에 최적의 경로를 선택하는 기준은 AS마다 다를 수 있다.

BGP의 정책

BGP의 정책(Policy)은 AS 간 라우팅에 있어 경로를 선택하는 중요한 판단 기준 중 하나이다. AS 관리 주체에 따라 각기 다른 상업적, 정치적 목적으로 상이한 정책을 사용할 수 있기에 최적의 경로를 선택하는 기준은 AS마다 다를 수 있다.

 

예를 들어 특정 AS에서 오는 메시지만 처리하도록 특정 AS를 우대하는 정책을 설정하거나 반대로 특정 AS에서 오는 메시지는 차단할 수도 있다. 보안과 안정성을 우선시하는 정책은 속도는 느릴지라도 더 안전하고 안정적인 AS를 경로로 선택하도록 할 수 있고, 성능을 우선시하는 정책은 송수신 지연 시간이 적고 대역폭이 높은 AS를 경로로 선택하도록 할 수 있다. 이처럼 BGP는 다양한 속성과 정책을 기바능로 AS 간의 라우팅을 수행할 수 있다. BGP는 AS 간의 라우팅이 가능한 대표적인 EGP이다.