1. Layer 3의 역할
OSI Layer 3는 노드 간 경로를 찾아주는 역할을 하며, 최종 목적지 구분을 위한 IP 주소 지정, 최종 목적지로 데이터가 전달되는 경로 설정(Routing)이 주요 개념으로 작용한다. 이외 3계층 프로토콜로는 ICMP, ARP 등이 있으며, 장비로는 라우터, L3 스위치가 있다.
이번 포스트에서는 3계층의 핵심 프로토콜 IP에 대해 정리해보겠다.
2. 3계층의 주소체계, IP(Internet Protocol)
IP란 전체 네트워크에서 장치들이 서로를 인식하고 통신을 하기 위해 사용하는 특수한 번호 체계로, (공인)IP주소는 고유한 값으로 사용된다.
우리가 사용하는 IP는 IP v4, IP v6가 있는데 일반적으로 사용하는 IP 체계는 IP v4로, IP v6의 경우 IP v4의 부족을 보완하기 위해 만들어진 체계이다(추후에 다시 공부할 예정이다..). 이번 포스트에서 언급할 IP는 IP v4라고 이해하면 되겠다.
IP v4 표현
- 총 4byte(32bit)의 크기를 가짐 - bit 당 2가지를 표현 가능하며, 32bit = 2^32 = 4,294,967,296 => 약 43억 개의 IP 존재
- 4개의 옥텟(octet)으로 구분하여 사용
- 1byte(8bit)를 1옥텟이라 부름
- 옥텟 사이를 온점(.)으로 구분
- 일반적으로 10진수로 표현
IP의 구성 방식
IP 주소는 Network ID와 Host ID로 구분되어있다. 여기서 말하는 네트워크란 하나의 Broadcast 영역이라고 이해하면 된다. 즉, 라우터를 거치지 않고 수송신이 가능한 영역이라는 것이다(라우터는 Broadcast를 걸러내는 기능이 있기 때문에, 라우터는 Broadcast영역을 구분하는 나누는 역할을 한다). 호스트는 그냥 각각의 PC 또는 장비를 의미한다고 보면 된다. 핵심은 하나의 네트워크 내에서는 네트워크 ID는 모두 같아야하고, Host ID는 모두 달라야 정상적인 통신이 된다는 것이다.
3. 부족한 IP를 효율적으로 활용하자! Classful Network
그렇다면, IP의 32bit 중 어떤 것을 기준으로 Network ID와 Host ID를 나누는 것일까? 임의일까?
아니다, Network와 Host ID를 나누는 방법은 서로 간의 약속이며, 그 약속은 Class다.
Classful Network란, 전체 IP를 지정된 크기대로 class란 그룹으로 분리하여 네트워크에서 필요한 IP 개수대로 class에 지정된 동일한 양만큼 IP를 할당하는 방식이다. 개수가 제한되어 있는 IP를 효율적으로 할당하고 관리하기 위해 도입된 IP 관리 체계라고 볼 수 있다 .
Class 상세 설명
Class A
1번 bit: 0
네트워크 ID: 앞의 8bit(1개의 옥텟)
호스트 ID: 뒤의 24bit(3개의 옥텟)
가장 작은 수: 00000000.00000000.00000000.00000000 => 0.0.0.0(10진수 변환)
가장 큰 수: 01111111.11111111.11111111.11111111 => 127.255.255.255
Class A는 총 126개의 네트워크 갯수를 가지고 있고, 네트워크 당 ip의 개수는 2^24 = 16,777,216
Class A: 1.0.0.0 ~ 126.255.255.255
(네트워크 개수가 128이 아닌 이유는 0.~, 127.~은 약속이기 때문에 제외한다)
Class B
1~2번 bit: 10
네트워크 ID: 앞의 16bit(2개의 옥텟)
호스트 ID: 뒤의 16bit(2개의 옥텟)
가장 작은 수: 10000000.00000000.00000000.00000000 => 128.0.0.0
가장 큰 수: 10111111.11111111.11111111.11111111 => 191.255.255.255
Class B는 총 2^14 = 16,384개의 네트워크를 가지고, 네트워크 당 IP의 개수는 2^16 = 65536
Class B: 128.0.0.0 ~ 191.255.255.255
Class C
1~3번 bit: 110
네트워크 ID: 앞의 24bit(3개의 옥텟)
호스트 ID: 뒤의 8개 bit(1개의 옥텟)
가장 작은 수: 11000000.00000000.00000000.00000000 => 192.0.0.0
가장 큰 수: 11011111.11111111.11111111.11111111 => 223.255.255.255
Class C는 총 2^21 = 2,097,152개의 네트워크를 가지고, 네트워크 당 IP의 개수는 2^8 = 256
class C: 192.0.0.0 ~ 223.255.255.255
Class D, E는 각각 멀티캐스트용과 연구용으로 별로 쓰이지 않는다
4. 그래도 비효율적이야? 서브넷 마스크(Subnet Mask)와 CIDR
Classful Network를 사용하여 IP를 할당한다고 가정해보자, 부서1에서 255개의 IP가 필요하다고 요구해온다면 어떤 클래스의 IP대역을 부여해줘야할까? Class C일까? 맞다고 답했다면, IP대역 내에서 네트워크 주소, 브로드캐스트 주소의 존재에 대해 다시 한번 생각해 봐야할 것이다. Classful Network를 사용했다면 어쩔 수 없이 Class B 크기의 대역을 부여해야 하는데, 그렇다면 엄청난 IP의 낭비가 일어난다는 문제가 있다.
이러한 문제를 해결하기 위해 나온 것이 Classless Network의 서브넷 마스크와 CIDR이다. Classless Network는 Class를 이용하지 않기 때문에 서브넷 마스크를 통해서 Network ID와 Host ID를 구분한다.
서브넷 마스크는 IP 주소와 같은 형식을 가지며, Network ID인 부분은 1, Host ID인 부분은 0을 연속적으로 배치하여 표현한다. 주어진 IP주소와 서브넷 마스크를 AND연산하면 Network ID를 도출할 수 있고, 남은 부분이 바로 Host ID이다.
추가로 서브네팅(Subnetting)에 대해서도 알아보자. 서브네팅이란 주어진 IP대역을 정해진 갯수의 서브넷으로 나누는 것을 의미한다. 실습을 통해 서브네팅의 개념을 연습해보자.
주어진 IP대역: 72.223.86.0
서브넷 마스크: 255.255.255.0
필요한 서브넷의 수: 8개 = 2^3
1) 먼저 주어진 대역의 네트워크 주소를 구한다(|는 네트워크와 호스트 주소를 구분하는 것이다)
0100 1000.1101 1111.0101 0110|0000 0000
1111 1111.1111 1111.1111 1111|0000 0000
---------------------------------------AND
0100 1000.1101 1111.0101 0110|0000 0000
=> 72.223.86.0 네트워크 주소(네트워크/호스트)
2) 필요한 서브넷의 개수만큼 호스트 ID 부분을 가져온다
=> 기존 네트워크 ID + 호스트에서 가져온 부분 = 새로운 네트워크 iD
1번째 서브넷
0100 1000.1101 1111.0101 0110|000|00000 -> network add
= 72.223.86.0
0100 1000.1101 1111.0101 0110|000|11111 -> broadcast add
= 72.223.86.31
1111 1111. 1111 1111. 1111 1111. 1110 0000 = 255.255.255.224
=> 서브넷의 서브넷 마스크
남는 호스트 ID: 5bit => 2^5 = 한 서브넷 당 32개의 IP가 존재
(network ID, broadcast ID를 빼면 실제로 부여 가능한 IP = 30개)
남은 서브넷의 네트워크 주소를 구해본다면..
2번째
0100 1000. 1101 1111. 0101 0110 |001|00000
3번째
0100 1000. 1101 1111. 0101 0110 |010|00000
4번쨰
0100 1000. 1101 1111. 0101 0110 |011|00000
5번째
0100 1000. 1101 1111. 0101 0110 |100|00000
6번째
0100 1000. 1101 1111. 0101 0110 |101|00000
7번쨰
0100 1000. 1101 1111. 0101 0110 |110|00000
8번째
0100 1000. 1101 1111. 0101 0110 |111|00000
=> 몇 bit가 있어야 8개의 서브넷을 구할 수 있는가? 2의 3승(3bit)
서브넷 마스크를 표기하는 방법에는 2가지가 존재한다.
- 255.255.255.0 과 같이 10진수로 표현하는 방법
- IP 주소/ 서브넷 마스크 상 1의 개수 형식으로 표기하는 방법 ex) 1.1.1.1/24
여기서 두번째 방식을 CIDR(Classless InterDomain Routing) 표기법이라고 한다.
IP 주소: 192.168.10.0
서브넷 마스크: 255.255.255.0
서브넷 마스크를 2진수로 표기하면
11111111.11111111.11111111.00000000 => 1이 24자리이다
CIDR 표기법으로 적으면
=> 192.168.10.0/24
5. 서브넷은 항상 같은 크기로 나눠야 할까? FLSM, VLSM
지금까지 우리가 배운 서브네팅 기법은 FLSM(Fixed Length Subnet Mask)라고 한다. 이름 그대로 하나의 IP대역을 서로 같은 크기로 서브네팅하는 것을 의미한다. 그렇다면 VLSM은 무엇일까?
VLSM의 필요성을 인식하기 위해 해당 실습을 풀어보자.
문제 시나리오
부여받은 IP대역: 200.200.200.0/24
부서 별 필요 IP: A팀 → 50대, B팀 → 100대, C팀 → 10대
총 할당 받을 수 있는 IP의 개수를 파악하기 위해서는 위해서 배운 서브넷 마스크와 CIDR prefix를 이용해야한다
11111111.11111111.11111111.00000000
=> 255.255.255.0 (서브넷 마스크)
호스트 iD의 비트 수가 8자리기 때문에 2^8 = 256(네트워크와 브로드캐스트 주소를 제외하면, 254개)
이전에 배운 서브네팅 방법을 사용해서 서브네팅을 해보면,
최소 3개 이상의 서브넷을 구성하면서,
한 서브넷 당 최소 100개의 호스트 IP를 부여할 수 있어야 한다.
기존 FLSM 방식으로 해당 조건을 모두 충족하기 위해서는 추가적인 IP 대역을 부여받는 방법 밖에 없다.
=> 더 효율적으로 서브네팅할 수 있는 방법은 없을까?
FLSM
해당 ip대역을 4개의 서브넷으로 나눈 경우
A팀: 50개 - 64개
B팀: 100개 - 64개(IP 부족 문제)
C팀: 10개 - 64개
해결책: 더 큰 ip 대역을 받아와야함(/23)
시나리오 같이 주어진 대역 내에서 IP를 더욱 효율적으로 사용하기 위해 고안된 방법이 VLSM(Variable Length Subnet Mask)이다. VLSM은 하나의 네트워크 대역을 서로 다른 크기로 서브네팅 하는 방법이다.
다음 예시는 VLSM 방식을 사용하여 위의 시나리오를 해결한 예시이다.
VLSM 방식을 이용한 서브넷 설계 방법
부여받은 IP대역: 200.200.200.0/24
부서 별 필요 IP: A팀 → 50대, B팀 → 100대, C팀 → 10대
11001000.11001000.11001000.00000000(IP bit 주소)
11111111.11111111.11111111.00000000(prefix)
-------------------------------------------
11001000.11001000.11001000.00000000(network id)
VLSM 계산법: 큰 덩어리부터 부여한다
11001000.11001000.11001000.0|0000000
11001000.11001000.11001000.0|1111111 => 0~127(가용 126개) => B팀에 부여
첫 번째 서브넷: 200.200.200.0/25
-------------------------------------
11001000.11001000.11001000.10|000000
11001000.11001000.11001000.10|111111 => 128~191(가용 62개) => A팀에 부여
두 번째 서브넷: 200.200.200.128/26
------------------------------------
(C팀의 경우 16개 크기의 서브넷만 있어도 가능)
11001000.11001000.11001000.1100|0000
11001000.11001000.11001000.1100|1111 => 192~207(가용 14개) => C팀에 부여
세 번째 서브넷: 200.200.200.191/28
'Network' 카테고리의 다른 글
[Network] OSI Layer 3(Network) - ARP, ICMP (0) | 2024.08.20 |
---|---|
[Network] OSI Layer 3(Network) - IP Fragmentation (0) | 2024.08.19 |
[Network] TP 케이블 제작 및 스위치 연결 실습 (0) | 2024.08.18 |
[Network] Hub와 Collision Domain (0) | 2024.08.18 |
[Network] OSI Layer 2(Data Link) (0) | 2024.08.17 |