* 이 글에 관련된 모든 내용은 Computer Networking A Top-Down Approach 7th에서 가져온 내용이다. *
IPv4 Addressing
각 인터넷 host들은 universally하게 uinque한 IP 주소를 가지고 있다.
라우터와 Layer1 (피지컬 레이어)사이에 있는 인터페이스를 NIC라고 한다. (Network Interface Card)
IP는 이 인터페이스의 포트에 적용된다.
한 라우터에 여러개의 호스트가 접근해야 하기 때문에 Multi-homed라고 한다. 여러개의 IP가 접근해 오는 포트를 IP로 구분할 수 있다.
IP주소는 계층적 구조를 가진다.
network number + host number (총 32비트)로 이루어져 있는데, 같은 network에 존재하는 호스트들은 모두 같은 network prefix를 가진다.
InterNIC (또는 local authority)는 Net ID(네트워크 넘버)를 각 AS에게 할당 해주는데, 이때 AS는 InterNIC의 하위에 있는 또다른 그룹이다. e.g.) 한동대학교
AS(한동대학교)는 NetID를 할당받은 후 자신에게 존재하는 호스트들에게 다시 host ID를 나누어 주어 IP주소를 할당해준다.
IP주소의 notation에는 여러 방법이 있다.
IPv4에서는 Dotted decimal을, IPv6에서는 헥사데시멀 방법을 사용한다.
Classful
IP Addressing에는 Classful한 방식과 Classless한 방식으로 나뉜다.
예전에는 대부분 Classful한 방식을 사용했지만 요즘은 거의 대부분 Classless를 사용한다고 한다.
그래도 예전에 많이 사용했던 방식이라 실질적인 사용은 안되지만 개념은 유지되고 있어 배우면 좋다고 한다.
(하긴 뭐 배워서 안좋은게 어디있을까)
Class는 기본적으로 IP의 앞 bit들을 특정해 어디에 쓰일지 구분하는 목적을 가진다.
A클래스
A클래스는 IP주소의 첫 비트가 0으로 시작한다.
즉 네트워크 ID는 1.0.0.0 ~ 126.0.0.0 총 126개가 부여된다.
(일반적으로 네트워크 자체를 나타내기 위해선 host부분에 0을 채운다.)
네트워크 번호가 7bit여서 128개를 나타낼 수 있는데 왜 0과 127은 뺄까?
일반적으로 모든 부분을 1로채운 IP와 0으로 채운 IP는 특정 상황일 때 쓰기 때문이다.
때문에 사용할 수 있는 네트워크 ID, host ID는 위와 같다.
이때 Usable networks를 보면 0.0.0.0과 128.0.0.0을 빼고도 하나가 더 줄은것을 볼 수 있다.
이는 private IP address부분을 빼준 것이다.
이때, private IP는 한 네트워크 안에서 임의로 할당하여 마음대로 쓸 수 있는 IP주소이다.
때문에 globally하게 본다면 이와 같은 주소를 가진 여러 host가 있을 수 있다. 따라서 public IP로는 사용할 수 없고 자신의 네트워크 안에서만 사용할 수 있는 IP이다.
B클래스
B클래스는 IP주소의 앞 두비트가 10으로 시작한다.
즉, 128~191까지의 네트워크 ID를 가질 수 있다.
A클래스와 같은 이유로 사용가능한 네트워크나 호스트의 IP개수는 다음과 같다. private IP address가 많아진 것을 볼 수 있다.
C클래스
C클래스는 IP주소의 앞 세비트가 110으로 시작한다.
192~223까지의 네트워크 ID범위를 가진다.
Subnetting
네트워크 IP를 할당받은 AS가 자신의 구역 내에서 다시 물리적인 네트워크 환경을 나누기 위해 필요한 작업이 바로 subnetting이다.
AS는 자신의 subnet들에게 고유한 subnet ID를 할당해준다.
또한 이 subent ID는 network ID부분이 아닌 Host ID의 부분을 사용한다.
즉 서브넷 ID를 할당받으면 Host ID는 Subnet ID와 Host ID를 포함하게 되는 것이다.
위 예제는 B클래스의 어떤 주소가 1111이라는 4bit의 서브넷 ID를 할당받은 모습이다.
이때 subnet mask를 255.255.240.0으로 표현하기도 하고 1111(2) = 20 이므로 IP주소 뒤에 /20을 붙여 표현하기도 한다.
원래 16bit를 사용할 수 있는 B클래스의 호스트 부분은 4bit의 서브넷 ID가 할당된 후에는 12bit만을 사용할 수 있다.
전통적인 방법에서 서브넷 ID가 모두 0또는 1로 채워진 상황은 금지되어 있었는데, IP주소가 부족해진 요즘 사용할 수 있도록 표준이 바뀌었다고 한다.
각 클래스에 대해 기본 서브넷 마스크는 다음과 같다.
정확한 이해를 위해 예제를 생각해보자.
Q1. B클래스 네트워크에서 서브넷 마스크가 255.255.240.0일때 사용할 수 있는 서브넷의 개수와 각 서브넷에서 할당할 수 있는 호스트의 개수를 구하여라.
서브넷 마스크가 255.255.240.0이므로 1111 1111 1111 1111 1111 0000 0000 0000 으로 표현할 수 있다.
즉, 1111의 서브넷 ID를 할당받은 모습이다. 총 4bit를 가지고 서브넷을 만들어야 하므로 2^4이다.
또한 서브넷이 모두 0과 1로 채워진 상황은 일반적으로 지양하기 때문에 2^4-2라고 할 수 있지만 위에서 말했듯이 요즘은 쓴다고 한다. (2^4)
최대 호스트 개수는 서브넷을 할당하고 남은 bit수가 12기 때문에 2^12-2라고 할 수 있다.
Q2. C클래스 네트워크에서 서브넷 마스크가 255.255.255.192일때 사용할 수 있는 서브넷의 개수와 각 서브넷에서 할당할 수 있는 호스트의 개수를 구하여라.
서브넷 마스크가 255.255.255.192이므로 1111 1111 1111 1111 1111 1111 1100 0000 으로 표현할 수 있다.
즉, 11의 서브넷 ID를 가지므로 일반적으로 최대 2^2-2개의 서브넷을 사용할 수 있고 남은 bit수가 6이므로 2^6-2만큼의 호스트를 할당할 수 있다.
보통 서브넷의 개수는 각 서브넷 + 각 라우터들 간의 링크 수 이다.
예를들어 위와같은 네트워크를 구성하고 싶다면 총 6개의 서브넷이 필요한 것이다.
서브넷이 6개가 필요하므로 서브넷에 필요한 bit수는 3bit이다. (2^3-2 = 6)
즉 다음과 같이 서브넷ID를 할당할 수 있다.
CIDR (Classless Inter-Domain Routing)
위에서까지는 Classful한 상황에서의 방식이었다.
그러나 위에서 언급했듯이 요즘은 Classless한 방식을 사용한다.
이럴 때는 어떻게 해야할까?
일단 왜 CIDR방식이 요구되었는가를 이해해야 한다.
기존 Classful한 방식에서는 클래스별로 IP를 나누고 그에 따라 적용할 수 있는 네트워크 수, 호스트의 수가 달라지기 때문에 가장 적절한 클래스로 수요가 몰릴 수 밖에 없다.
A클래스는 감당할 호스트의 수가 너무 크기 때문에 잘 사용하지 않았고, C는 너무 작았다.
때문에 가장 적절한 크기의 B클래스를 많은 기관/단체에서 요구했는데 사용할 수 있는 IP는 제한되어 있으므로 점점 동이나기 시작했다. 해결책으로 작은 사이즈의 C클래스를 여러개 합쳐서 사용하기도 했는데 이는 비효율적이다.
때문에 Classless한 방식의 CIDR가 고안되었다.
Class를 없애면 가장 큰 문제는 뭘까?
기존 Classfull한 방식에서는 IP주소만 알아도 해당 IP가 어디 클래스인지를 알 수 있었다. 무슨 클래스인지를 안다는 것은 정말 중요한데, 어디까지가 Network ID이고 어디부터가 Host ID인지를 구분할 수 있기 때문이다.
그러나 CIDR방식에서는 class를 구분하지 않기때문에 어디까지가 network ID인지 알려주는 정보가 따로 필요했다.
때문에 IP주소를 pair로 나타낸다. (IP주소, count) 여기서 count는 network ID의 bit수이다.
예를 들어 위와같은 pair가 있다면 이는 24bit까지가 network ID라는 것이다.
CIDR방식을 사용하기 위해서는 라우터가 기존 IP주소만을 가지고 처리하던 방식을 pair를 받아 처리하는 방식으로 바꿔야 한다.
How to?
예를 들어 한동대학교가 다음과 같은 범위의 network ID를 할당받았다고 하자.
기존 classful한 방식에서는 96~127 총 32개의 subnet을 위해 32개의 라우팅 테이블이 존재했어야 한다.
CIDR방식에서는 이 라우팅 테이블의 개수를 한개로 줄여준다.
96 = 0110 0000
127 = 0111 1111
일때 bit mask는 둘의 최장 공통부분 bit를 사용한다. 위의 예제에서는 011까지가 가장 길면서 같은 부분이다. 이는 203.252. 0110 0000 부터는 모두 한동대의 IP주소임을 뜻한다.
때문에 bitmask는 총 3bit가 bit mask이므로 1111 1111 1111 1111 1110 0000 0000 0000 = 255.255.224.0이다.
또는 19자리까지가 network ID를 뜻하기 때문에 203.252.96.0/19 로 표현할 수 있다.
Q. 203.252.96.0 ~ 103.252.111.255에서는 어떨까?
96 = 0110 0000
111 = 0110 1111
가장 긴 공통이 0110이기 때문에 4bit가 bit mask에 사용된다.
즉, bit mask는 1111 1111 1111 1111 1111 0000 0000 0000 = 255.255.240.0이 bit mask이고
또는 20자리 까지가 network ID를 뜻하기 때문에 203.252.96.0/20 으로 표현이 가능하다.
그렇다면 CIDR의 문제점은 없을까?
있다.
다음 예시를 보자.
Organzation 0 : 200.23. 0001 0000 0000 0000
Organzation 1 : 200.23. 0001 0010 0000 0000
Organzation 2 : 200.23. 0001 0100 0000 0000
...
Organzation 7 : 200.23. 0001 1110 0000 0000
1번부터 7번까지의 호스트를 보면 최장 공통 비트가 0001 총 4bit 이기 때문에 이들을 한번에 묶어 Fly-By-Night-ISP라는 라우터에게 200.23.16.0/20 이라는 공통 IP를 줄 수 있다.
(여러 IP를 묶어 하나의 라우팅 테이블을 유지하는 것이 장점이기 때문에)
그리고 같은 방법으로도 ISPs-R-Us라는 라우터에서도 199.31.0.0/16이라는 공통 IP를 주고 있다.
만약 위와같은 상황에서 1번 호스트가 ISPs-R-Us 라우터로 이동했다고 하자.
그러면 다음과 같을 것이다.
1번 라우터의 입장에서는 호스트 하나가 빠져도 총 범위는 같기 때문에 그대로 유지하고 있지만
2번 라우터의 입장에서는 새로운 범위의 호스트가 추가되었기 때문에 기존 공통 IP에 200.23.18.0/23을 추가한 모습이다.
즉 정리하자면 다음과 같다.
(인터페이스1 에서 199.31.0.0/16은 쓰지 않았다)
인터페이스 0에서는 11001000 00010111 00010000 00000000를
인터페이스 1에서는 11001000 00010111 00010010 00000000를 가지고 있다. (파란색이 network ID)
이때
11001000 00010111 00010110 10100001이라는 IP가 접속한다면 어디 인터페이스로 줘야할까?
파란색 부분이 가장 길게 맞는 Int0으로 줘야한다.
11001000 00010111 00010010 10110101이라는 IP가 접속한다면 파란색 부분이 가장길게 맞는 Int1로 줘야한다.
즉, IP를 끝까지 읽어 가장 길게 맞는 인터페이스로 전달해야 하는 것이다.
'컴퓨터 네트워크 > Computer Networking 정리' 카테고리의 다른 글
CH4 : Network Layer (4) (0) | 2021.11.14 |
---|---|
CH4 : Network Layer (3) (0) | 2021.11.11 |
CH4 : Network Layer (1) (0) | 2021.11.04 |
CH3 : Transport Layer (5) (0) | 2021.10.18 |
CH3 : Transport Layer (4) (0) | 2021.10.18 |