혼자 공부하는 네트워크책을 읽으면서 배운 점을 정리합니다. 물리 계층과 데이터 링크 계층은 LAN 내부 통신을 담당하지만, 서로 다른 네트워크 간의 통신을 위해서는 네트워크 계층이 필요하다. 이 글에서는 네트워크 계층의 핵심 프로토콜인 IP의 목적과 특징, IP 주소 체계, 그리고 관련 프로토콜들을 다룬다.
1️⃣ IP의 목적과 특징
IP(Internet Protocol)는 네트워크 계층의 가장 핵심적인 프로토콜로, 네트워크 간 통신을 가능하게 한다.
IP의 두 가지 주요 목적
1-1 주소 지정(Addressing)
주소 지정은 네트워크 간 통신 과정에서 호스트를 특정하는 것을 의미한다. IP 패킷 헤더에는 송신지 IP 주소와 수신지 IP 주소 필드가 있어 패킷의 출발지와 목적지를 명시한다.
하나의 IP 주소는 총 4바이트(32비트) 로 구성되며, 점(.)으로 구분된 0~255 범위의 10진수 4개로 표기된다. 각각의 10진수를 옥텟(Octet)이라고 한다.
예시: 192.168.0.1
- 192, 168, 0, 1 각각이 하나의 옥텟
- 각 옥텟은 8비트로 표현 가능💡 IPv4 vs IPv6
현재 사용되는 IP는 IPv4와 IPv6 두 가지 버전이 있다.
- IPv4: 32비트, 약 43억 개의 주소 할당 가능 (2³² 개)
- IPv6: 128비트, 사실상 무한에 가까운 주소 할당 가능 (2¹²⁸ 개)
IPv4 주소 고갈 문제를 해결하기 위해 IPv6가 등장했으며, IPv6는 콜론(:)으로 구분된 8개 그룹의 16진수로 표기된다. (예:
2001:0230:abcd:ffff:0000:0000:ffff:1111)
1-2 단편화(Fragmentation)
단편화는 데이터를 여러 IP 패킷으로 쪼개어 보내는 것을 의미한다. 이는 MTU(Maximum Transmission Unit)와 관련이 있다.
MTU는 최대 전송 단위로, 전송하고자 하는 IP 패킷의 크기가 MTU보다 클 경우 패킷을 MTU 이하의 여러 패킷으로 쪼개서 전송한다. 일반적인 MTU 크기는 1500바이트이다.
IP 패킷 헤더에서 단편화와 관련된 필드는 다음과 같다:
| 필드 | 설명 |
|---|---|
| 식별자(Identifier) | 특정 패킷이 어떤 데이터에서 쪼개진 패킷인지 식별 |
| 플래그(Flag) | DF(Don't Fragment), MF(More Fragment) 비트 포함 |
| 단편화 오프셋(Fragment Offset) | 패킷이 초기 데이터에서 얼마나 떨어져 있는지 명시 |
💡 경로 MTU 발견(Path MTU Discovery)
오늘날 네트워크 환경에서는 IP 단편화가 잘 발생하지 않는다. 단편화는 다음과 같은 문제를 야기하기 때문이다:
- 불필요한 트래픽 증가와 대역폭 낭비
- 재조립 과정에서 발생하는 성능 저하
경로 MTU 발견은 송수신 경로에서 처리 가능한 최대 MTU 크기를 구하여 단편화 없이 통신하는 기술이다. 현대 네트워크는 대부분 이를 지원한다.
IP의 통신 특징
1-3 신뢰할 수 없는 통신(Unreliable Communication)
IP는 신뢰할 수 없는 프로토콜이다. 이는 패킷이 수신지까지 제대로 전송되었다고 보장하지 않는다는 의미다. 패킷이 유실되거나 순서대로 전송되지 않더라도 이에 대한 조치를 취하지 않는다.
이러한 전송 방식을 최선형 전달(Best-effort Delivery)이라고도 부른다.
1-4 비연결형 통신(Connectionless Communication)
IP는 비연결형 프로토콜이다. 패킷을 주고받기 전에 사전 연결 과정을 거치지 않으며, 상대 호스트의 수신 가능 여부를 고려하지 않고 수신지를 향해 패킷을 전송한다.
💡 왜 신뢰할 수 없고 비연결형일까?
IP가 신뢰성과 연결을 보장하지 않는 이유는 성능 때문이다. 신뢰성 높은 송수신을 위해서는 오류 제어와 연결 관리가 필요하며, 이는 더 많은 시간과 대역폭, 부하를 요구한다. IP는 빠른 전송을 우선시하며, 필요한 경우 상위 계층의 프로토콜(예: TCP)에서 신뢰성을 보장한다.
2️⃣ IP 주소의 구조
IP 주소의 구성 요소
하나의 IP 주소는 네트워크 주소와 호스트 주소로 이루어져 있다.
- 네트워크 주소(Network ID): 호스트가 속한 네트워크를 특정
- 호스트 주소(Host ID): 네트워크에 속한 호스트를 특정
예시: 172.16.12.45
[네트워크 주소].[호스트 주소]
172.16 . 12.45중요한 점은 네트워크 주소와 호스트 주소의 크기가 유동적일 수 있다는 것이다.
클래스풀 주소 체계(Classful Addressing)
클래스풀 주소 체계는 네트워크 크기에 따라 IP 주소를 A, B, C, D, E 클래스로 분류하는 방식이다. 실질적으로 사용되는 클래스는 A, B, C이다.
2-1 A, B, C 클래스
| 클래스 | 네트워크 주소 | 호스트 주소 | IP 주소 범위 | 시작 비트 |
|---|---|---|---|---|
| A 클래스 | 1옥텟 (8비트) | 3옥텟 (24비트) | 0.0.0.0 ~ 127.255.255.255 | 0 |
| B 클래스 | 2옥텟 (16비트) | 2옥텟 (16비트) | 128.0.0.0 ~ 191.255.255.255 | 10 |
| C 클래스 | 3옥텟 (24비트) | 1옥텟 (8비트) | 192.0.0.0 ~ 223.255.255.255 | 110 |
첫 옥텟의 주소만 보고도 어떤 클래스에 속하는지 알 수 있다.
💡 네트워크 주소와 브로드캐스트 주소
호스트 주소를 모두 사용할 수 있는 것은 아니다:
- 호스트 주소가 모두 0: 네트워크 자체를 지칭 (예:
172.16.0.0)- 호스트 주소가 모두 1: 브로드캐스트 주소 (예:
172.16.255.255)또한 특수 목적으로 예약된 IP 주소도 있다:
0.0.0.0 ~ 0.255.255.255: 'This host on this network' 지칭127.0.0.0 ~ 127.255.255.255: 루프백 주소 (자기 자신,localhost)10.0.0.0/8,172.16.0.0/12,192.168.0.0/16: 사설 네트워크 주소
클래스리스 주소 체계와 서브넷 마스크
클래스풀 주소 체계는 클래스별 네트워크 크기가 고정되어 있어 IP 주소 낭비가 발생할 수 있다. 예를 들어 300명의 직원에게 IP 주소를 할당하려면 C 클래스(254개)로는 부족하고 B 클래스(6만 개 이상)를 사용해야 하는데, 이는 상당한 낭비다.
2-2 서브넷 마스크(Subnet Mask)
클래스리스 주소 체계에서는 서브넷 마스크를 이용해 네트워크와 호스트를 구분한다.
서브넷 마스크는 IP 주소에서 네트워크 주소를 1로, 호스트 주소를 0으로 표기한 비트열이다.
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)
2-3 네트워크 주소 계산
서브넷 마스크와 IP 주소 간 비트 AND 연산을 수행하면 네트워크 주소를 알 수 있다.
예시: 192.168.200.102 / 255.255.255.0
IP 주소: 11000000.10101000.11001000.01100110
서브넷 마스크: 11111111.11111111.11111111.00000000
-------------------------------------------
비트 AND: 11000000.10101000.11001000.00000000
= 192.168.200.0 (네트워크 주소)💡 CIDR 표기법
서브넷 마스크는
IP 주소/서브넷 마스크상의 1의 개수형식으로 표기할 수 있다.예시:
192.168.20.3/30
/30은 서브넷 마스크에 1이 30개 있다는 의미11111111.11111111.11111111.11111100- =
255.255.255.252
3️⃣ 공인 IP 주소와 사설 IP 주소
두 가지 종류의 IP 주소
호스트의 IP 주소를 확인하는 방법은 두 가지가 있다:
- 시스템 명령어 (
ipconfig,ifconfig) - 온라인 검색 (구글, 네이버 등)
이 두 방식으로 확인한 IP 주소가 다를 수 있는데, 이는 공인 IP 주소와 사설 IP 주소가 함께 사용되기 때문이다.
3-1 공인 IP 주소(Public IP Address)
공인 IP 주소는 전 세계에서 고유한 IP 주소다. 인터넷을 비롯한 네트워크 간 통신에서 사용되며, ISP나 공인 IP 주소 할당 기관을 통해 할당받는다.
온라인 검색으로 확인한 IP 주소가 바로 공인 IP 주소다.
3-2 사설 IP 주소(Private IP Address)
사설 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 주소와 중복될 수 있다.
4️⃣ IP 주소의 할당
정적 할당(Static Assignment)
정적 할당은 수작업으로 IP 주소를 부여하는 방식이다. 운영체제의 네트워크 설정에서 직접 IP 주소를 입력한다.
4-1 정적 할당 시 필요한 정보
- IP 주소: 호스트에 할당할 IP 주소
- 서브넷 마스크: 네트워크 주소와 호스트 주소 구분
- 게이트웨이(Gateway): 네트워크 외부로 나가기 위한 첫 경로 (일반적으로 라우터 주소)
- DNS 주소: 도메인 네임을 IP 주소로 변환하기 위해 질의하는 서버 주소
💡 기본 게이트웨이(Default Gateway)
기본 게이트웨이는 호스트가 속한 네트워크 외부로 나가기 위한 첫 기본 경로를 의미한다. 일반적으로 네트워크 외부와 연결된 라우터(공유기)의 주소를 가리킨다.
💡 DNS 주소
모든 호스트의 IP 주소를 기억하기 어렵기 때문에
도메인 네임(Domain Name)을 사용한다. DNS 주소는 도메인 네임을 IP 주소로 변환해주는 네임 서버의 주소다.공개된 DNS 서버:
8.8.8.8(Google),1.1.1.1(Cloudflare)
동적 할당: DHCP
동적 할당은 프로토콜을 통해 자동으로 IP 주소를 부여하는 방식이다.
4-2 DHCP(Dynamic Host Configuration Protocol)
DHCP는 호스트에 IP 주소를 자동으로 할당하는 프로토콜이다. 일반적으로 라우터(공유기)가 DHCP 서버 역할을 수행한다.
DHCP 동적 할당의 특징:
- 동적 IP 주소에는 사용 가능한 기간(임대 기간) 이 정해져 있다
- 할당받을 때마다 다른 주소를 받을 수 있다
- 사용되지 않는 IP 주소는 회수되어 재사용된다
- 임대 기간이 끝나기 전에
임대 갱신(Lease Renewal)을 통해 연장 가능
4-3 DHCP 동작 과정
- DHCP Discover: 클라이언트가 DHCP 서버를 찾기 위해 브로드캐스트
- DHCP Offer: DHCP 서버가 사용 가능한 IP 주소 제안
- DHCP Request: 클라이언트가 제안받은 IP 주소 사용 요청
- DHCP Ack: DHCP 서버가 IP 주소 할당 확인
5️⃣ IP 전송 특징의 보완: ICMP
IP는 신뢰할 수 없는 비연결형 프로토콜이라는 특징을 보완하는 방법은 두 가지다:
- 상위 계층의 신뢰성 있는 프로토콜 사용 (예: TCP)
- 네트워크 계층의 ICMP 프로토콜 사용
ICMP(Internet Control Message Protocol)
ICMP는 IP 패킷 전송 과정에 대한 피드백 메시지를 제공하는 프로토콜이다. ICMP 메시지를 통해 패킷이 어떻게 전송되었는지 확인할 수 있다.
5-1 ICMP 메시지 유형
오류 보고 메시지:
Destination network unreachable: 네트워크 도달 불가Destination host unreachable: 호스트 도달 불가Destination port unreachable: 포트 도달 불가Fragmentation required, and DF flag set: 단편화 필요하지만 DF 플래그로 불가TTL expired in transit: TTL 만료
네트워크 정보 제공 메시지:
Echo request: 에코 요청Echo reply: 에코 응답
5-2 TTL(Time To Live)
IP 헤더의 TTL 필드는 패킷의 수명을 의미한다. 패킷이 라우터를 거칠 때마다 TTL이 1씩 감소하며, TTL이 0이 되면 패킷은 폐기되고 Time Exceeded ICMP 메시지가 전송된다.
패킷이 호스트 또는 라우터에 한 번 전달되는 것을 홉(Hop)이라고 하며, TTL은 홉마다 1씩 감소한다.
💡 TTL의 존재 이유
TTL은 무의미한 패킷이 네트워크상에 지속적으로 남아있는 것을 방지하기 위해 존재한다.
5-3 ICMP 기반 명령어
ping: 네트워크 상태를 점검하기 위해 패킷을 송신하는 명령어
$ ping -c 5 www.google.com
PING www.google.com (142.250.206.196) 56(84) bytes of data.
64 bytes from 142.250.206.196: icmp_seq=1 ttl=103 time=34.0 ms
64 bytes from 142.250.206.196: icmp_seq=2 ttl=103 time=34.1 ms
...traceroute (Windows: tracert): 네트워크상의 경로를 확인하는 명령어
$ traceroute google.com
traceroute to google.com (142.250.66.110), 64 hops max
1 192.168.219.1 (192.168.219.1) 7.140 ms
2 14.5.161.1 (14.5.161.1) 5.781 ms
...6️⃣ IP 주소와 MAC 주소의 대응: ARP
ARP가 필요한 이유
통신 과정에서 IP 주소와 MAC 주소를 함께 사용하지만, 상대 호스트의 IP 주소는 알고 MAC 주소는 모르는 상황이 발생할 수 있다.
ARP(Address Resolution Protocol)는 동일 네트워크 내에서 IP 주소를 통해 MAC 주소를 알아내는 프로토콜이다.
ARP 동작 과정
6-1 ARP 요청(ARP Request)
호스트 A가 호스트 B의 MAC 주소를 알고 싶을 때, 브로드캐스트 메시지로 ARP 요청을 보낸다.
"IP 주소 192.168.0.10을 가진 호스트의 MAC 주소가 무엇인가요?"
→ 네트워크 내 모든 호스트에게 전송6-2 ARP 응답(ARP Reply)
네트워크 내 모든 호스트가 ARP 요청을 수신하지만, 해당 IP 주소를 가진 호스트만 유니캐스트 메시지로 ARP 응답을 보낸다.
"제 MAC 주소는 AA:BB:CC:DD:EE:FF입니다."
→ ARP 요청을 보낸 호스트에게만 전송6-3 ARP 테이블(ARP Table)
ARP 테이블은 <IP 주소, MAC 주소> 쌍을 저장하는 캐시다. 매번 ARP 요청을 보내지 않도록 학습한 주소 정보를 저장한다.
ARP 테이블은 명령어로 확인할 수 있다:
# Windows, macOS, Linux
$ arp -a
# 출력 예시
Internet Address Physical Address Type
192.168.0.1 aa-bb-cc-dd-ee-ff dynamic
192.168.0.10 11-22-33-44-55-66 dynamicARP 테이블 항목은 일정 시간이 지나면 자동으로 삭제되며, 임의로 삭제할 수도 있다.
7️⃣ 라우팅의 이해
라우터와 라우팅
라우터(Router)는 서로 다른 네트워크에 속한 호스트 간 통신을 위해 IP 패킷을 전달하는 네트워크 장비다. 라우터는 IP 주소를 기반으로 패킷의 최적 경로를 결정한다.
라우팅(Routing)은 라우터가 IP 패킷을 전달할 최적의 경로를 결정하고 해당 경로로 패킷을 내보내는 과정이다.
일반적으로 사용하는 공유기도 라우팅을 수행하므로 라우터의 일종이다.
라우팅 동작 원리
- 라우터가 IP 패킷을 수신한다
- 패킷의 수신지 IP 주소를 확인한다
- 라우팅 테이블을 참조하여 최적 경로를 결정한다
- 해당 경로로 패킷을 전달한다
이러한 과정을 거쳐 패킷은 여러 라우터를 거쳐 최종 목적지에 도달한다.