우리가 이전에 배운 물리 계층과 데이터 링크 계층의 주요 적용 범위는 주로 LAN(Local Area Network), 즉 근거리 통신망이었다.
같은 네트워크 내에서 패킷을 주고 받는 데 초점이 맞춰져 있었다.
하지만 현실에서는 다른 네트워크에 있는 호스트와도 통신해야 할 상황이 생긴다. 예를 들어, 부산에 있는 컴퓨터에서 서울에 있는 서버로 데이터를 보내야할 수도 있다. 이처럼 여러 네트워크를 넘어야 하는 통신을 가능하게 해주는 계층이 바로 네트워크 계층이다.
네트워크 계층의 주요 기능
이미지 출처: https://csnote.net/
네트워크 계층에서는 두 가지 핵심 기능을 제공한다.
1.
IP 주소를 통한 송수신지 식별
•
어떤 호스트와 통신할 것인지, 정확히 지정해주는 기능
2.
라우팅(Routing)을 통한 최적 경로 결정
•
목적지까지 데이터를 전달할 가장 효율적인 길을 찾아주는 기능
이 두 가지는 앞으로 학습할 네트워크 계층의 핵심 주제이다.
물리 계층과 데이터 링크 계층의 한계
네트워크 계층의 중요성을 이해하려면, 아래 두 가지 이유로 하위 계층만으로는 한계가 있다는 점을 먼저 짚고 넘어가야 한다.
1. 경로 파악의 어려움
지구 반대편에 있는 친구에게 패킷을 보내려면 여러 네트워크를 거쳐야 한다.
하지만 물리 계층과 데이터 링크 계층만으로는 이 도달 경로(최적 경로)를 판단하기 어렵다.
이 문제를 해결하는 것이 라우팅이며, 라우팅은 네트워크 계층의 역할이다.
라우팅이란?
목적지까지 패킷을 보내기 위한 최적의 경로를 결정하는 과정이다.
이를 수행하는 장비가 라우터(Router)이고, 다양한 라우팅 프로토콜을 통해 경로를 결정한다.
2. MAC 주소의 한계
MAC 주소는 네트워크 카드(NIC)에 부여되는 고유한 물리 주소이다.
하지만 호스트는 언제든지 다른 네트워크로 이동할 수 있다.
이런 상황에서 MAC 주소만으로는 호스트의 현재 위치를 특정하기 어렵다.
이 문제를 해결하기 위해 논리 주소인 IP 주소를 사용하는 것이다.
IP 주소와 MAC 주소의 관계
이해를 돕기 위해 택배에 비유해 보자.
•
IP 주소: 수신지 (어느 지역, 어느 아파트)
•
MAC 주소: 수신인 (몇 동, 그 집에 사는 누구)
택배 기사는 먼저 주소(IP)를 기반으로 해당 지역까지 이동하고,
마지막에 수신인(MAC)을 확인해 택배를 전달한다.
마찬가지로, 라우팅은 IP 주소 기반으로 진행되고, 최종 호스트 식별은 MAC 주소를 사용한다.
IP의 목적과 특징
네트워크 계층에서 가장 핵심적인 프로토콜을 하나만 꼽자면 단연 IP(Internet Protocol)이다.
IP는 두 가지 버전으로 나뉜다.
•
IPv4 (버전 4): 현재 가장 널리 사용되고 있는 버전
•
IPv6 (버전 6): IPv4 주소 고갈 문제를 해결하기 위해 등장
이 글에서는 일반적으로 사용하는 IPv4 기준으로 설명을 진행한다.
IP 프로토콜의 두 가지 핵심 기능
Ip 프로토콜은 RFC 791이라는 인터넷 표준 문서에서 정의되어 있으며, 이 문서에 따르면 IP는 다음의 두 가지 기능을 수행한다.
1. 주소 지정(Addressing)
IP 주소를 통해 송수신 대상 호스트를 지정하는 기능이다.
•
IPv4 주소는 32비트(4바이트)로 구성
•
8비트씩 나눈 4개의 옥텟으로 표현(192.168.0.1 형태)
•
각 옥텟은 0~255 사이 숫자
2. 단편화(Fragmentation)
전송하려는 데이터가 너무 클 경우, 이를 쪼개어 MTU 이하로 전송할 수 있도록 하는 기능이다.
•
MTU(Maximum Transmission Unit): 전송 가능한 최대 크기 (일반적으로 1500바이트)
•
IP 헤더도 MTU 크기 안에 포함됨
•
조각난 패킷은 목적지에서 다시 조립됨
IP 헤더 구조와 핵심 필드
IPv4 패킷은 헤더(Header)와 데이터(Data)로 구성되어 있으며, 헤더 안에는 다양한 필드가 존재한다.
그중 IP의 두 핵심 기능과 관련된 주요 필드를 살펴보면 다음과 같다.
•
식별자 (Identifier)
◦
단편화된 패킷들의 재조합을 위해 패킷에 할당된 번호
•
플래그 (Flags)
◦
총 3비트로 구성된 IP 헤더와 필드
▪
첫 번째 비트는 항상 0으로 예약된 비트로, 사용되지 않음
▪
두 번째 비트는 DF(Don’t Fragment) 비트로
•
1이라면: IP 단편화 수행하지 말라
•
0이라면: IP 단편화 가능하다
▪
세 번째 비트는 MF(More Fragment) 비트
•
1이라면: 쪼개진 패킷이 아직 더 있다
•
0이라면: 이 패킷이 마지막 패킷이다
•
단편화 오프셋 (Fragment Offset)
◦
초기 데이터에서 몇 번째로 떨어진 패킷인지를 나타냄
▪
단편화되어 전송되는 패킷들은 수신지에 순서대로 도착하지 않을 수 있음
▪
수신지가 패킷들을 순서대로 재조합하려면 단편화된 패킷이 초기 데이터에서 몇 번째에 해당하는 패킷인지 알아야 함.
•
TTL (Time To Live)
◦
패킷의 수명을 의미하는 필드
◦
패킷이 한 홉을 거칠 때마다 TTL이 감소하다가 0이 되면 해당 패킷은 폐기된다.
▪
홉: 패킷이 호스트 또는 라우터에 한 번 전달되는 것
•
프로토콜 (Protocol)
◦
상위 계층 프로토콜(TCP, UDP 등)을 명시한다.
•
출발지 IP 주소 / 목적지 IP 주소
◦
송신자와 수신자의 주소를 명확히 지정한다.
IP 단편화 꼭 필요한가?
위에서 IP 패킷은 전송 시 특정한 최대 크기인 MTU를 초과할 수 없다고 했다.
만약 전송하려면 데이터가 MTU보다 크다면, 이를 여러 개의 작은 조각들로 나눠 전송해야 하는데, 이 과정을 단편화(Fragmentation)이라고 부른다.
보통 이 MTU 값은 약 1,500바이트 정도로 설정되어 있다.
단편화는 많이 발생할수록 좋을까?
직관적으로 생각하면, 필요한 만큼 잘게 쪼개서 보내면 되니까 괜찮아 보일 수 있다.
하지만 현실은 그렇지 않다. 단편화는 최소화하는 것이 좋다.
이유는 다음과 같다.
1.
불필요한 트래픽 증가: 각 단편마다 IP 헤더가 추가로 붙으면서 네트워크 대역폭을 더 차지하게 된다.
2.
성능 저하: 수신 측에서 다시 조립해야 하므로 처리 부담이 늘어난다.
3.
손실 위험 증가: 단편 중 하나라도 손실되면 전체 패킷을 재전송해야 하므로, 안정성이 떨어진다.
단편화를 어떻게 피할 수 있을까?
IP 단편화를 피하는 가장 좋은 방법은 바로 경로 MTU(Path MTU, PMTU)를 고려한 전송이다.
경로 MTU란?
송신지와 수신지 사이의 네트워크 경로 상에 있는 모든 장비들이 처리할 수 있는 가장 작은 MTU 값
예를 들어, A와 B 두 호스트가 데이터를 주고받고 있다고 해보자.
A와 B는 큰 데이터를 한 번에 보낼 수 있을지 몰라도, 중간에 위치한 라우터가 작게밖에 처리 못한다면 결국 중간 라우터에서 단편화가 발생한다.
이 문제를 해결하기 위해서는 모든 구간을 고려한 최소 MTU, 즉 경로 MTU만큼만 데이터를 전송해야 한다.
이를 경로 MTU 발견(Path MTU Discovery)라고 한다.
Path MTU Discovery 동작 방식
1.
송신 측은 큰 패킷을 보내되, IP 헤더의 DF(Don’t Fragment) 비트를 설정한다.
2.
중간 장비(라우터 등)에서 패킷이 MTU보다 크면 해당 패킷을 버리고, “이만큼까지만 가능하다”는 ICMP 메시지를 되돌려 보낸다.
3.
송신 측은 이 정보를 바탕으로 더 작은 크기로 전송하여 재전송한다.
4.
이 과정을 반복하여 최적의 경로 MTU 값을 알아낸다.
이렇게 되면 불필요한 단편화 없이, 효율적으로 데이터를 송수신할 수 있다.
오늘날 단편화는 자주 발생할까?
의외로, 오늘날의 네트워크에서는 IP 단편화가 거의 발생하지 않는다.
그 이유는 대부분의 시스템이 기본적으로 DF(Don’t Fragment) 비트를 설정하기 때문이다.
실제로 IP 패킷을 관찰해보면, 거의 모든 패킷에서 이 DF 플래그가 활성화되어 있는 것을 확인할 수 있다.
“어차피 잘 안일어나는데 왜 배워요?” 라는 생각이 들 수 있다.
하지만 단편화는 IP 프로토콜의 핵심 기능 중 하나이며, IP 헤더의 구조를 완벽하게 이해하기 위해서는 반드시 알아야 할 개념이다.
IP 주소의 구조
IP 주소는 크게 두 가지 요소로 구성된다.
•
네트워크 주소 (Network Address)
◦
네트워크를 식별하기 위한 주소
◦
다른 네트워크와 통신할 때, 어떤 네트워크로 보내야 할지를 결정
•
호스트 주소 (Host Address)
◦
해당 네트워크 내에서 특정 장비(호스트)를 구분하기 위한 주소
IP 주소에서 네트워크 주소와 호스트 주소 크기는 각각 어느 정도가 적당할까?
어떤 경우에는 네트워크 주소가 16비트, 호스트 주소가 16비트가 적당할 수도 있고,
또 어떤 경우에는 네트워크 주소가 24비트, 호스트 주소가 8비트가 적당할 수도 있다.
호스트의 주소 공간이 클 경우 많은 장비에 IP를 줄 수 있지만, 미사용 주소가 낭비될 가능성이 크다.
반대로 호스트의 주소 공간이 작을 경우 낭비되는 IP가 적지만, 사용 가능한 호스트 수가 제한된다.
따라서 상황에 맞게 적절한 비율을 선택하는 것이 중요하다.
IP 주소 클래스
위 고민을 해결하기 위해 등장한 것이 바로 클래스(Class) 개념이다.
IP 주소 클래스는 IP 주소를 네트워크 크기에 따라 분류한 체계로, 다음과 같이 다섯 가지로 나뉜다.
•
A 클래스
•
B 클래스
•
C 클래스
•
D 클래스 (멀티캐스트용)
•
E 클래스 (실험용)
주소 지정에 실제로 사용되는 것은 A, B, C 클래스이다.
클래스풀 주소 체계
클래스 | 네트워크 비트 수 | 호스트 비트 수 | 할당 가능한 호스트 수(이론) | 시작 IP 범위 |
A | 8비트 (1옥텟) | 24비트 (3옥텟) | 약 16,777,216개 () | 0.0.0.0 ~ 127.255.255.255 |
B | 16비트 (2옥텟) | 16비트 (2옥텟) | 약 65,536개 () | 128.0.0.0 ~ 191.255.255.255 |
C | 24비트 (3옥텟) | 8비트 (1옥텟) | 약 256개 () | 192.0.0.0 ~ 223.255.255.255 |
이 방식을 클래스풀 주소 체계(Classful Addressing)이라고 부른다.
A 클래스는 주로 기업이나 대형 기관 등에서 사용하고, (ex. 10.0.0.1)
B 클래스는 중간 규모의 조직에서 사용하고, (ex. 172.16.0.1)
C 클래스는 소규모 네트워크나 가정용에서 사용한다. (ex. 192.168.0.1)
주의할 점은 호스트의 주소 공간을 모두 사용할 수 있는 것은 아니다.
호스트 주소가 전부 0인 IP 주소는 해당 네트워크 자체를 의미하는 네트워크 주소로 사용되고,
호스트 주소가 전부 1인 IP 주소는 브로드캐스트 주소로 사용된다.
예를 들어, 172.16.12.45의 네트워크 주소는 172.16.0.0, 브로드캐스트 주소는 172.16.255.255이 된다.
클래스리스 주소 체계
클래스풀 주소 체계는 IP 주소를 A, B, C 클래스 등으로 나누어 고정된 크기로 네트워크를 나누는 방식이었다.
하지만 이 구조에는 치명적인 한계가 존재한다.
각 클래스는 네트워크 크기가 고정되어 있어, 유연하게 구성할 수 없다.
예를 들어, 300명의 호스트가 필요한 경우 C 클래스(254명 수용)는 부족하고 B 클래스(6만 명 수용)는 지나치게 크다.
23비트는 네트워크, 9비트는 호스트로 나누면 좋겠지만 클래스풀 체계에서는 이처럼 정교한 설정이 불가능하다.
이러한 문제를 해결하기 위해 등장한 것이 바로 클래스리스 주소 체계이다.
클래스리스는 클래스 개념 없이 네트워크와 호스트 영역을 자유롭게 설정할 수 있어서 유동적이고 효율적인 주소 할등이 가능하다. 현대 네트워크에서는 거의 대부분 클래스리스 주소 체계를 사용하고 있다.
서브넷 마스크
클래스리스 주소 체계에서는 네트워크와 호스트 구분을 위해 서브넷 마스크라는 도구를 사용한다.
서브넷 마스크란 1과 0으로 이루어진 비트 열을 의미한다. 1은 네트워크 주소를, 0은 호스트 주소를 가리킨다.
예를 들어,
•
A 클래스 기본 마스크 → 255.0.0.0 (8비트 네트워크)
•
B 클래스 → 255.255.0.0 (16비트 네트워크)
•
C 클래스 → 255.255.255.0 (24비트 네트워크)
서브네팅
이러한 서브넷 마스크를 이용해 원하는 크기로 클래스를 더 잘게 쪼개어 사용하는 것을 서브네팅이라고 한다.
서브넷 마스크와 IP 주소 간에 비트 AND 연산을 수행하면 IP 주소 내의 네트워크 주소를 알아낼 수 있다.
예를 들어 192.168.200.102라는 IP 주소와 255.255.255.0이라는 서브넷 마스크를 예로 들어보자.
이 둘에 대한 비트 AND 연산을 수행한 결과인 192.168.200.0가 바로 네트워크 주소인 셈이다.
CIDR 표기법
서브넷 마스크는 CIDR 표기법(Classless Inter-Domain Routing)으로도 자주 사용된다.
•
255.255.255.0
→ 11111111.11111111.11111111.00000000
→ /24
•
255.255.0.0
→ 11111111.11111111.00000000.00000000
→ /16
•
255.255.255.128
→ 11111111.11111111.11111111.10000000
→ /25
즉, 서브넷 마스크에서 1의 개수를 세어 /숫자로 표기하는 방식이다.
이 방식은 더 간단하고 직관적이기 때문에 실무에서도 자주 사용된다.
IP 주소의 분류
IP 주소는 크게 두 가지로 나눌 수 있다.
1.
공인 IP 주소 (Public IP Address)
2.
사설 IP 주소 (Private IP Address)
공인 IP 주소란?
전 세계에서 유일한 IP 주소, 인터넷 통신에 사용되는 주소
공인 IP 주소는 인터넷 상에서 고유하게 할당된 주소이다. 즉, 같은 공인 IP 주소는 전 세계 어디에도 존재하지 않는다. 이 주소를 통해 내 컴퓨터나 서버는 외부와 직접 통신할 수 있게 된다.
•
예시
◦
집에서 인터넷을 사용할 때, 공유기가 ISP(통신사)로부터 하나의 공인 IP를 할당받는다.
◦
회사나 서버 호스팅 환경에서 직접 공인 IP를 받아 서비스를 운영할 수도 있다.
사설 IP 주소란?
내부 네트워크 전용 IP 주소, 외부와는 직접 통신 불가
사설 IP 주소는 내부 네트워크(사설 네트워크)에서만 사용되는 IP이다. 이 주소들은 전 세계 어디서든 중복될 수 있다. 왜냐하면 ‘이건 내부용이니깐 겹쳐도 상관없다’는 약속이 있기 때문이다.
•
예시
◦
192.168.0.2
◦
10.0.0.5
◦
172.16.0.1
위 주소를 본 적이 있다면, 우리의 기기는 현재 공유기 같은 장치로부터 사설 IP를 받은 상태이다.
NAT란?
사설 IP
공인 IP를 변환해주는 기술
사설 IP만으로는 인터넷에 직접 접속할 수 없다.
우리가 인터넷을 이용할 수 있는 이유는 공유기 또는 라우터가 사설 IP를 공인 IP로 변환해주는 역할을 해주기 때문이다. 이걸 NAT라고 부른다.
•
내부에서 외부로 보낼 때: 사설 IP → 공인 IP
•
외부에서 내부로 받을 때: 공인 IP → 사설 IP
덕분에 집 안의 여러 디바이스(노트북, 스마트폰, TV 등)가 모두 같은 공인 IP를 공유하며 인터넷을 사용할 수 있다.
정적 IP와 동적 IP 주소
앞에서 IP 주소의 공인/사설 개념을 알아봤다면, 이제는 IP 주소가 어떻게 할당되느냐에 따라 나뉘는 두 가지 종류도 함께 살펴보자.
정적 IP란?
항상 같은 IP 주소를 사용하는 방식
정적 IP는 말 그대로 고정된 IP 주소이다. 한 번 설정해두면, 그 주소는 변하지 않고 계속 유지된다. 그래서 서버나 CCTV처럼 항상 같은 주소로 접속해야 하는 장비에 자주 사용된다.
정적 IP의 특징
•
사용자가 직접 IP, 게이트웨이, DNS 등을 수동으로 입력
•
변하지 않기 때문에 명확하지만, 수동 설정이기 때문에 사람이 많아지면 오히려 관리가 어려워질 수 있다.
예를 들어, 한 회사에 200명의 직원이 있다면 정적 IP로 하나하나 수동 설정하는 건 비효율적일 것이다.
동적 IP란?
네트워크에 접속할 때마다 IP 주소가 자동으로 할당되는 방식
동적 IP는 네트워크에 접속할 때마다 자동으로 IP를 받아오는 방식이다. 우리가 흔히 집이나 카페에서 와이파이를 사용할 때도 이 방식을 사용한다.
이 자동화를 담당하는 기술이 바로 DHCP(Dynamic Host Configuration Protocol)이다.
DHCP
•
디바이스가 네트워크에 연결되면, DHCP 서버(보통 공유기)가 사용 가능한 IP 중 하나를 자동으로 할당해준다.
•
설정할 필요도 없고, 임대 기간이 지나면 자동으로 갱신되기도 한다.
예를 들어, 우리가 집에서 노트북을 켜면 192.168.0.10라는 IP를 받을 수도 있고, 내일 다시 켜면 192.168.0.15를 받을 수도 있다.
이런 변화가 생기는 건 DHCP가 임대 개념으로 IP를 빌려주기 때문이다.
•
할당받은 IP는 임대 기간 동안만 사용할 수 있다.
•
이 기간이 끝나면 IP를 반납하거나, 연장 요청을 해야 한다.
◦
보통은 임대 만료 전에 DHCP 서버에 자동으로 임대 갱신 요청을 보낸다.
그렇다면 구체적으로 어떻게 자동으로 할당되는지 알아보자.
DHCP는 4단계 통신 과정을 통해 클라이언트에게 IP를 부여한다.
이 과정을 흔히 DORA 과정이라고 부른다.
Discover → Offer → Request → ACK
1. DHCP Discover (클라이언트 → DHCP 서버)
“저기요, DHCP 서버 어디 계세요?”
클라이언트는 네트워크에 처음 연결되었을 때, 자신에게 IP를 줄 DHCP가 어디 있는지 모른다.
그래서 “누구든 DHCP 서버 있으면 대답 좀 해줘요~!”라는 뜻으로 브로드캐스트 방식으로 DHCP Discover 메시지를 전송한다.
이때 IP 주소가 아직 없으니, 송신지 IP는 0.0.0.0, 목적지는 255.255.255.255로 설정된다.
즉 “나는 IP가 없는 존재입니다!”라는 걸 알리는 것이다.
2. DHCP Offer (DHCP 서버 → 클라이언트)
“여기 있어요! 이 IP 써보실래요?”
클라이언트와 브로드캐스트에 응답한 DHCP 서버는 “내가 DHCP 서버야! 이 IP 주소 써볼래?”라며 DHCP Offer 메시지를 보낸다.
이 메시지 안에는 제안된 IP 주소, 서브넷 마스크, 게이트웨이, DNS, 임대 기간 등 IP 사용에 필요한 모든 정보 패키지가 담겨 있다.
3. DHCP Request (클라이언트 → DHCP 서버)
“좋아요! 방금 제안한 IP로 설정하고 싶어요!”
클라이언트는 여러 DHCP Offer 중 하나를 선택해서 DHCP Request 메시지를 보낸다.
이 메시지는 “나는 이 IP를 사용하겠어요”라고 선택을 확정하는 요청이고, 아직까지도 IP가 없으므로 브로드캐스트로 전송된다.
4. DHCP ACK (DHCP 서버 → 클라이언트)
“확정됐어요! 이제 그 IP 쓰세요~”
마지막으로 DHCP 서버는 “좋아요, 방금 요청한 IP 주소는 이제 당신 거예요”라고 최종 승인 메시지인 DHCP ACK를 보내준다.
클라이언트는 이 메시지를 받은 뒤, 자신의 IP 주소를 설정하고 이제부터 인터넷을 자유롭게 사용할 수 있다.
예약 IP 주소
IP 주소 중에는 특정한 목적을 위해 미리 정해진(IP Reserved) 주소들이 있다. 이러한 주소들을 예약 주소라고 부른다.
예를 들어, 앞서 배운 사설 IP 주소도 예약 주소의 일종이다.
- 192.168.0.0/16
- 172.16.0.0/12
- 10.0.0.0/8
Plain Text
복사
이 외에도, 개발자가 자주 마주치는 두 가지 예약 주소가 있다.
바로 0.0.0.0과 127.0.0.1이다.
127.0.0.1 - 루프백 주소 (Loopback Address)
127.0.0.1 은 개발자라면 대부분 한 번쯤은 들어봤을 것이다.
이 주소는 흔히 localhost라고 불리며, 자기 자신을 가리키는 주소이다.
•
특징
◦
자신에게 패킷을 보내는 주소
◦
테스트 및 디버깅에 자주 사용
◦
실제 네트워크를 거치지 않고도 자기 자신과 통신 가능
◦
“부메랑”처럼 패킷이 다시 자신에게 되돌아옴
•
예시
◦
개발 중 서버가 잘 작동하는지 확인하고 싶을 때 다음과 같이 테스트 한다.
curl http://127.0.0.1:8080
Plain Text
복사
0.0.0.0 - 아직 정해지지 않은 주소
0.0.0.0은 좀 더 복잡한 의미를 지닌다.
상황에 따라 다르게 쓰이기 때문이다. 대표적으로 두 가지 경우로 나눠볼 수 있다.
1. 아직 IP 주소가 정해지지 않았을 때
DHCP를 통해 IP를 할당받기 전에, 나 자신을 표현할 주소가 없을 때 임시로 사용하는 주소이다.
예를 들어, DHCP Discover 메시지를 전송할 때
•
출발지 주소: 0.0.0.0/8
•
목적지 주소: 255.255.255.255
이처럼 “나”를 아직 특정할 수 없는 상태에서 0.0.0.0/8을 사용한다.
2. 모든 IP 주소를 가리킬 때 (디폴트 라우트)
라우팅 테이블에서 0.0.0.0/0은 디폴트 라우트(Default Route)를 의미한다.
디폴트 라우트란 목적지를 정확히 알 수 없는 패킷이 있을 때, 기본적으로 전송할 경로를 설정하는 것이다.
예를 들어, 라우터가 목적지를 못 찾을 때 일단 디폴트 라우트로 보내는데 0.0.0.0/0은 “모든 IP 주소”를 포함하는 의미로 사용된다.
라우팅 테이블
라우팅은 우리가 인터넷을 사용할 때, 수많은 네트워크 장비들이 최적의 경로를 결정해주는 중요한 기술이다.
쉽게 말해, 내가 보낸 메시지가 가장 빠르고 효율적인 길로 목적지까지 도달하도록 길 안내 역할을 하는 것이다.
라우팅이란?
패킷이 목적지까지 도달하기 위해 거쳐야 할 최적의 경로를 결정하는 과정
패킷이 네트워크 장비들을 거쳐 이동하는 모습을 깡총깡총 뛰는 것에 비유하기도 한다.
각 네트워크 장비(노드)를 홉(Hop)이라고 부르며, 패킷이 홉을 지날 때마다 TTL(Time To Live)이라는 값이 1씩 줄어들게 된다.
라우팅 경로 확인해보기
라우팅 경로는 명령어를 통해 확인할 수 있다.
•
Windows: tracert [도메인 또는 IP 주소]
•
macOS / Linux: traceroute [도메인 또는 IP 주소]
예를 들어, tracert google.com을 입력하면, 구글까지 가는 경로에 어떤 라우터를 거치는지 알 수 있다.
내 PC에서 google.com까지 10홉을 거쳐 도달할 수 있다.
보안상의 이유로 일부 목적지는 이 명령어가 작동하지 않을 수도 있다고 한다.
라우팅 테이블(Routing Table)이란?
라우터는 모든 패킷을 감으로 보내는 것이 아니다.
라우팅 테이블이라고 불리는 표 형태의 데이터를 참고하여, 패킷을 어느 방향으로 보낼지 결정한다.
라우팅 테이블에는 다음과 같은 정보가 들어있다.
구성 요소 | 설명 |
목적지 IP 주소 / 서브넷 마스크 | 패킷이 향하는 최종 목적지 |
다음 홉(Next Hop) 또는 게이트웨이 | 다음으로 거쳐야 할 라우터 또는 호스트의 IP |
네트워크 인터페이스 | 어떤 포트(인터페이스)를 통해 보낼지 |
메트릭(Metric) | 해당 경로의 비용 (낮을수록 우선 순위 높음) |
예를 들어 192.168.2.0/24 대역으로 가는 패킷은 이더넷 0 포트를 통해 192.168.1.1로 보내라는 식으로 구성된다.
라우팅 테이블 확인하기
라우팅 테이블은 명령어를 통해 확인할 수 있다.
•
Windows: route print
•
macOS / Linux: netstat -rn
•
라우터(CISCO 라우터): show ip route
라우팅의 분류
라우팅 테이블은 두 가지 방식으로 구성될 수 있다.
1. 정적 라우팅 (Static Routing)
•
사용자가 수동으로 경로를 설정
•
설정은 단순하지만, 네트워크 변화에 자동 적응하지 못함
2. 동적 라우팅 (Dynamic Routing)
•
라우팅 프로토콜(OSPF, RIP 등)을 사용하여 경로를 자동 생성
•
네트워크 변화에 따라 실시간 갱신 가능
ARP란? IP 주소로 MAC 주소를 찾는 방법
그렇다면 내가 통신하고 싶은 상대의 IP 주소는 알고 있지만, MAC 주소는 모른다면 어떻게 해야할까?
이럴 때 필요한 것이 바로 ARP(Address Resolution Protocol)이다.
ARP는 IP 주소를 통해 MAC 주소를 알아내는 프로토콜이다.
즉, 같은 네트워크 내에서 특정 IP를 가진 장치의 MAC 주소를 알고 싶을 때 ARP가 이를 해결해준다.
ARP의 동작 방식
ARP는 간단한 세 가지 단계로 동작한다.
1.
ARP 요청
2.
ARP 응답
3.
ARP 테이블 갱신
1. ARP 요청
ARP 요청은 브로드캐스트(Broadcast) 방식으로 전달된다. 이는 네트워크에 연결된 모든 장치에게 메시지를 보내는 방식이다.
쉽게 말하면, 장치 A가 다음과 같이 외치는 것과 같다.
“이 IP 주소를 가진 친구야! 네 MAC 주소 좀 알려줄래?”
이 메시지를 받은 네트워크 내의 모든 장치들은 이를 확인하지만, IP 주소가 일치하지 않으면 무시한다. 해당 IP 주소를 가진 장치만 응답을 하게 된다.
2. ARP 응답
해당 IP를 가진 장치(B)는 장치 A에게 자신의 MAC 주소를 담은 유니캐스트(Unicast) 메시지로 응답을 보낸다.
이 과정에서 A는 드디어 B의 MAC 주소를 알 수 있게 된다.
3. ARP 테이블 갱신
장치 A는 이렇게 알아낸 MAC 주소를 자신의 ARP 테이블에 저장한다. 이 테이블은 “이 IP는 MAC 주소를 가진 장치"라는 정보를 저장하는 캐시 같은 존재이다.
ARP 테이블에 정보가 있으면, 이후에는 ARP 요청 없이 바로 MAC 주소를 사용할 수 있다.
ARP 패킷 구조
이미지 출처: https://mr-zero.tistory.com/23
ARP의 주요 필드는 다음과 같다.
•
오퍼레이션 코드 (Operation Code)
◦
ARP 요청의 경우 1, ARP 응답의 경우 2
•
송수신자의 MAC 주소
•
송수신자의 IP 주소
다른 네트워크에서는 어떻게 동작할까?
ARP는 같은 네트워크(브로드캐스트 도달 가능 범위) 내에서만 동작한다.
만약 내가 통신하려는 대상이 다른 네트워크에 있다면 이 경우에는 라우터의 MAC 주소를 알아내어 우선 라우터에 패킷을 전달하게 된다. 라우터는 다음 네트워크에서 다시 ARP를 수행하여 최종 목적지까지 전달한다.
즉, 네트워크마다 ARP는 따로 수행된다고 보면 된다.
ICMP
앞서 배운 것처럼 IP는 비신뢰성, 비연결성을 가지는 프로토콜이다.
즉, 데이터가 전송되긴 하지만 도착 여부나 중간 상태를 확인하긴 어렵다.
이러한 IP의 특성을 보완하기 위해 등장한 것이 바로 ICMP이다.
ICMP는 IP 패킷 전송 과정에서 발생하는 문제에 대한 피드백 메시지를 전달하는 보조 프로토콜이다.
ICMP는 크게 두 가지 유형의 피드백 메시지를 제공한다.
1.
오류 보고 메시지 (Error Reporting)
→ 전송 중 문제가 발생했을 때 이를 알려준다.
2.
네트워크 진단 메시지 (Network Diagnostics)
→ 네트워크 상태를 확인하고 진단하는 데 사용된다.
ICMP 메시지는 타입(Type)과 코드(Code)로 구성된다.
•
Type: 메시지의 대분류 (예: 수신 불가, 시간 초과 등)
•
Code: 구체적인 세부 내용
이들은 숫자로 표기되며, ICMP 패킷 내에 명시된다.
자주 사용되는 ICMP 메시지 예시는 다음과 같다.
오류 보고 메시지 (Error Reporting)
타입 번호 | 코드 번호 | 설명 |
3 | 0 | 네트워크 도달 불가 |
3 | 1 | 호스트 도달 불가 |
3 | 3 | 포트 도달 불가 |
3 | 4 | 단편화 필요하지만 DF 비트로 인해 불가 |
11 | 0 | TTL 초과로 인한 시간 초과 |
예를 들어, 내 컴퓨터가 어떤 서버에 패킷을 보냈는데 타입 3, 코드 0 패킷을 받았다면, 해당 목적지 네트워크에 도달하지 못했다는 것을 의미한다.
진단 메시지 (Diagnostics)
타입 번호 | 설명 |
8 | 에코 요청 (Echo Request) |
0 | 에코 응답 (Echo Reply) |
9 | 라우터 광고 (Router Advertisement) |
참고로, 핑(ping) 명령어나 traceroute(트레이스 루트) 명령어도 ICMP 메시지를 기반으로 동작한다.
그럼 ICMP가 있으면 IP는 완벽한가?
아니다. ICMP는 언제까지나 보조 수단일 뿐이지 IP의 한계를 완전히 극복하지는 못한다.
RFC 792 공식 문서에서도 이렇게 명시되어 있다.
"ICMP 메시지는 IP의 신뢰성을 보장하기 위한 것이 아니다. ICMP 메시지 자체도 유실될 수 있다."
즉, 어떤 IP 패킷은 여전히 피드백 없이 문제를 겪을 수 있다는 것이다.
정리하자면 다음과 같다.
•
ICMP는 IP 패킷 전송의 문제 상황을 감지하고 보고해준다.
•
신뢰성 보장이나 재전송, 연결 관리 등의 역할은 하지 않는다.
•
IP의 신뢰성을 높이려면 TCP와 같은 전송계층 프로토콜을 사용해야 한다.