네트워크 관련 공부를 하면서, 물리적인 장치의 주소는 MAC주소로,
논리적인 주소는 IP로 담는다는 것을 알게 되었다.
그렇다면, 이 MAC 주소와 IP 주소는 어떻게 생겼을까? 그리고 무슨 규칙성을 가지게 될까?
이 부분에 대해서 정리해야겠다는 생각이 들었다.
MAC
MAC 주소가 만들어지는 원리는 생각보다 단순하다.
주소는 물리적 장치의 주소이며, 이는 Network Interface Card(NIC)라는 하드웨어 장치가 6바이트 주소를 가지고 있게 한다.
이 주소를 통해 물리적 장치의 고유 식별번호가 생기는 것이다.
맥 주소는 하드웨어를 생산할 때 해당 제조사에서 직접 부여하는 방식으로 진행된다(마치 태어나서 주민등록번호를 받고 평생 같이사는 우리같다)
맥 주소는 총 6바이트로 이루어져 있으며, 일반적으로는 1바이트씩 나누어 표기한다.
그렇게 이런 주소로 태어난 장치가 있다고 생각해보자.
이렇게 붙은 순간, hop by hop으로 통신이 오갈때 내 장치의 주소는 평생 이렇게 되는 것이다.(NIC를 바꾸면 바꿀 수 있을지도?)
이제 이 주소를 반으로 쪼개보자.
이렇게 앞 뒤로 3바이트씩 쪼갰을 때, 이 둘은 서로 다른 의미를 가지고 있다.
07:01:02는 제조사 식별 번호로, 네트워크 카드(NIC)를 만든 회사의 고유 식별번호이다. OUI라고 부르기도 한다.
뒤의 01:2C:4B는 제조사 내에서 이 장치에 부여한 고유 식별 번호를 말한다.
우리가 노트북을 사거나 할 때, 안의 태그에도 붙어있다
(예전에 내 맥을 수리맡길 때, 이걸 찍어서 보내달라고 한 적이 있었다. 이제야 이유를 알겠...)
MAC 주소는 거미줄처럼 얽히고 섥혀있는 구조이다.
여기에서 통신을 할 때에는 정확한 단일 개체를 향한 송신, 정확한 다중 개체를 향한 송신, 그냥 뿌리기가 존재한다.
이걸 우리는 유니캐스트, 멀티캐스트, 브로드캐스트라고 한다.
브로드캐스트의 경우에는, FF:FF:FF:FF:FF:FF로 보내는 방식이다. (즉, 만들 수 있는 최댓값으로 쏘게 된다)
멀티캐스트는 정보통신기술용어해설에 따르면 아래와 같은 주소일 때 가능하다고 나온다.
48 비트 MAC 주소에서 최상위 Octet에서 최하위 비트가 1인 경우를 멀티캐스트 주소로 정함
무슨 말인지 쉽게 봤을 때, 우리가 나눈 6자리에서 첫 째 자리를 보자.
여기에서 1의 자리가 홀수면 된다.(이게 다다.)
그 외에도 특정 용도로 정해진 멀티캐스트용 주소가 있다고 한다.
이 외의 모든 주소는 유니캐스트에 사용된다고 한다.
IP
우리가 흔히 아는 IP는 127.0.0.1처럼 4개의 최대 세자리 숫자구조이다.
실제 IP는 32비트로 이루어져 있고, 8비트씩 4개묶음으로 나누어 센다.
8비트(0~255)의 값을 가지므로, 0.0.0.0~255.255.255.255까지의 경우의 수가 나오게 된다.
위의 MAC가 3바이트씩 나누면 OUI와 기계 식별번호로 분류되는 구조를 가진 것 처럼,
IP도 주소값을 두 개로 나누어 정리할 수 있다.
String NetworkID;
String HostID;
String IP = NetworkID + HostID;
이런 구조로 분류할 수 있게 되는데,
그렇다면 NetworkID와 HostID가 무엇일까?
- 네트워크 ID
- 모든 호스트 개개인을 모두 식별해 인터넷상에서 우리가 부르고, 관리하기가 너무 힘들다.
- 그래서 어느정도 범위를 두고, 해당 범위를 식별해서 대분류를 해두는 것이다.
- 이걸 NetworkID라고 한다.
- 호스트 ID
- 네트워크 내에서 호스트를 직접 식별하기 위해 사용한다.
MAC주소에서는 6바이트일 때, 정확하 3바이트씩 나누어 제조사 식별번호와 제조사 내 식별번호가 있다.
하지만 IP는 MAC처럼 딱 반으로 나누어 네트워크/호스트를 사용하게 하지 않는다.
한번 더 깊게 가봐야겠다.
IP - Class(객체 Class 아닙니다~)
IP는 A~E클래스가 존재한다.
각 클래스마다 고정되는 비트값이 존재하며, 사용할 수 있는 HostID의 범위가 다르다.
- A클래스
- 비트가 0으로 시작해야 한다.
- 처음 8비트가 NetworkID, 나머지 24비트가 HostID로 할당된다.
- NetworkID로는 총 128곳에서만 가능하며, Host는 최대 16,777,214개가 가능하다.
- 결국 가능한 값의 범위는 0.0.0.0 ~ 127.255.255.255까지이다.
- B클래스
- 비트가 10으로 시작해야 한다.
- 처음 16비트가 NetworkID, 나머지 16비트가 HostID로 할당된다.
- NetworkID로는 총 16,384곳에서 가능하며, Host는 최대 65,534개가 가능하다.
- 가능한 IP값의 범위는 128.0.0.0~ 191.255.255.255이다.
- 네트워크ID가 생각보다 적고, IP범위가 255까지가 아닌 191까지인 이유는 C클래스가 110으로 시작하기 때문이다.
- C클래스
- 비트가 110으로 시작해야한다.
- 처음 24비트가 NetworkID, 나머지 8비트가 HostID로 할당된다.
- NetworkID로는 총 2,097,152곳이 가능하며, Host는 최대 254대밖에 못쓴다.
- 가능한 IP 범위는 192.0.0.0 ~ 223.255.255.255
- D클래스
- 특수 케이스에 한해 멀티캐스트용으로 사용되는 IP 범위이다.
- 비트가 1110으로 시작해야한다.
- 처음 4비트가 NetworkID로 고정되며, 나머지는 모두 HostID로 할당된다.
- 가능한 IP 범위는 224.0.0.0 ~ 239.255.255.255
- E클래스
- 테스트용 대역폭이며 실제로는 사용하지 않는다.
- 240.0.0.0~ 255.255.255.255까지이다.
이렇게 하면 어느정도 분류는 되어있다는 생각이 들 수 있다.
여기에서 문제가 무엇일까?
꼭 A, B, C, D클래스로 분리해야할까?
그렇게 했을 때, 우리가 설정할 수 있는 네트워크 ID 범위는 한정되게 된다.
한정성을 넘어서, 유동적으로 네트워크 ID를 사용할 수 없을까?
이를 위해 우리는 서브넷 마스크라는 것을 사용한다.
서브넷 마스크는 무엇일까?
단어를 나눠서 생각해보자.
- 서브넷
- 서브넷팅이 무엇인지 이해하는 것이 필요하다.
- 서브넷팅이라는 것은 IP 주소공간을 클래스 기반의 NetworkID, HostID로 나누는 것이 아닌, 더 세밀하게 나누는 방식이다.
- 마스크
- 마스킹 테이프를 생각하면 편하다.
- 마스크라는 것은 일종의 표시막이다.
그렇다면, 이 말들을 합치면 어떻게 될까?
서브넷 마스크란, IP공간을 어떻게 더 세밀화되게 나누었는지 마스킹을 해두는 방식이다.
어떻게 마스킹이 되는지, 위의 클래스를 가지고 예시를 들어보자.
192.168.1.1이라는 IP가 있다. 이 때 이 IP의 서브넷 마스크가 255.255.255.0이라고 한다.
이 때 우리는 기존 IP와 서브넷 마스크를 AND 연산을 해준다.
(즉 2진수로 바꾸었을 때, 둘 다 1이어야 1이되는 연산이라는 뜻!)
그때 우리가 가지는 값은 192.168.1.0이 된다.
여기에서 0이 되지 않는 부분들, 즉 192.168.1이라는 주소가 네트워크 ID이며, 0이 호스트 ID인 것이다.
이걸 표현할 때, 서브넷 마스크는 어떻게 작성할까?
192.168.1.1/24라고 한다.
총 32비트 중 앞의 24비트가 네트워크 주소인 것이다(이게 255.255.255.0이라는 뜻!)
클래스를 넘어서 계산하면 더 효율적인 네트워크/호스트 ID 분할을 할 수 있다.
위의 주소가 192.168.1.1/20이라고 하면 어떨까? (단순한 예시일 뿐이다)
모두 비트로 바꾸면, 11000000.10101000.00000001.00000001이 된다.
이걸 서브넷 마스크 11111111.11111111.11110000.00000000와 AND 연산을 해준다.
그랬을 때 나오는 값이 네트워크 ID가 되는 것이다 (11000000.10101000.0000)
나머지 0001.00000001가 호스트 주소가 되는 방식이다.
후우 길기도 하다.
포트에 관해서는 후에 TCP/UDP를 공부할 때 정리하도록 해야겠다.
그럼...twenty thousand...🔥
'CS > 네트워크' 카테고리의 다른 글
[Network] TCP/IP를 제대로 풀어봐요 1. TCP/IP를 쓰는 이유 & 네트워크 인터페이스 계층의 프로토콜들 (0) | 2024.01.17 |
---|---|
[Network] OSI 7계층 1차 찍먹하기(부제 : 홍대에서 술먹고온 이장희) (1) | 2024.01.16 |