<IT엔지니어를 위한 네트워크 입문> 책을 함께 읽는 스터디를 진행하며 올리는 포스팅입니다.
스터디 repository
OSI 7계층을 공부하며 2계층에서는 MAC 주소를, 3계층에서는 IP 주소를 이해해 통신한다는 사실을 공부했습니다.
그렇다면 MAC 주소와 IP주소는 무엇일까요?
이번 포스팅에서 자세히 알아보겠습니다.
네트워크는 목적지 주소를 기준으로 통신 방식을 다음의 4가지로 구분합니다.
출발지와 목적지가 명확히 하나로 정해져 있는 1:1 통신방식
입니다.
실제로 대부분의 통신은 유니캐스트 방식을 사용합니다.
동일 네트워크에 존재하는 모든 호스트
가 목적지인 통신 방식입니다.
주로 유니캐스트로 통신하기 전, 상대방의 정확한 위치를 알기 위해 사용합니다.
멀티캐스트 그룹 주소를 이용해 해당 그룹에 속한 다수의 호스트
로 패킷을 전송하기 위한 통신방식입니다.
사내방송 등 단방향으로 다수에게 동시에 같은 내용을 전달해야 할 때 사용합니다.
애니캐스트 주소가 같은 호스트들 중에서 가장 가깝거나 가장 효율적으로 서비스할 수 있는 호스트와 통신하는 방식입니다.
가장 가까운 DNS 서버
를 찾을 때 사용하거나, 가장 가까운 게이트웨이를 찾는 애니캐스트 게이트웨이
기능에 사용하기도 합니다.
BUM 트래픽
- B(Broadcast), U(Unknown Unicast), M(Multicast)
- 언노운 유니캐스트
- 목적지 주소는 명확히 명시 + 네트워크에서의 동작은 브로드캐스트
- 스위치가 목적지에 대한 주소를 학습하지 못한 상황이기 때문에(Unknown) 패킷을 모든 포트로 플러딩
- 네트워크 자원을 쓸데없이 많이 사용하게 된다
- 불필요한 BUM 트래픽이 많아지면 네트워크 성능이 저하될 수 있다
- 이더넷 환경에서는 ARP 브로드캐스트 후 통신을 시작하므로 BUM이 많이 발생하지 않는다.
MAC(Media Access Control) 주소는 2계층인 데이터 링크 계층에서 통신을 위해 NIC에 할당된 고유 식별자입니다.
네트워크에 접속하는 모든 장비는 MAC 주소라는 물리적인 주소가 있어야 합니다.
제조업체는 하나 이상의 주소 풀을 받고, 그 풀 안에서 자체적으로 MAC 주소를 할당하는데, 이를 제조사 코드(vendor code)라 부릅니다.
MAC주소는 48비트의 16진수 12자리로 표현됩니다.
앞의 24비트는 제조사 코드인 OUI(Organizational Unique Identifier)값이고, 뒤의 24비트는 각 제조사에서 자체적으로 할당해 네트워크에서 각 장비를 구분할 수 있게 해주는 UAA(Universally Administered Address) 값입니다.
MAC 주소는 ROM 형태로 고정되어 출하되기 때문에 BIA(Burned-In Address)라고도 부릅니다. 이 때 MAC 주소도 결국 메모리에 적재되어 구동되기 때문에 변경이 가능합니다.
또한 MAC 주소는 유일하지 않은 값일 수 있는데, 동일 네트워크 안에서만 중복되지 않으면 문제가 없습니다. 네트워크가 다르다면 라우터의 도움을 받는 과정에서 출발지와 도착지의 MAC 주소가 변경되기 때문입니다.
NIC는 전기 신호를 데이터(패킷)로 변환하여 내용을 구분한 후 도착지 MAC 주소를 확인하고, 도착지 주소가 일치하지 않는다면 해당 패킷을 폐기합니다.
이 때 패킷의 목적지 주소가 본인의 주소이거나 브로드캐스트 주소일 경우는 자체적으로 패킷을 처리하지 않고 OS나 애플리케이션에서 처리해야 하므로 패킷정보를 상위 계층으로 넘겨줍니다.
다른 목적지를 가진 패킷을 분석하거 수집해야할 경우, NIC를 무차별 모드(Promiscuous Mode)로 구성합니다. 이를 통해 자신의 MAC 주소와 상관없는 패킷이 들어와도 이를 분석할 수 있도록 메모리에 올려 처리합니다.
IP주소란 3계층에서 사용하는 논리 주소입니다.
IP 주소는 어떻게 할당될까요? IP 주소는 최상위기구인 IANA가 대륙별로 IP 주소를 할당하고, 이를 다시 국가별로 할당한 뒤, 국가에서 ISP(KT, LG, SK)에 할당합니다. 그리고 마지막으로 ISP들이 할당 받은 IP 주소 블록을 자사 고객들에게 할당하게 됩니다.
IP 주소는 레벨이 있어, 네트워크 주소와 호스트 주소로 나뉩니다.
우리가 흔히 사용하는 IP 주소는 32비트인 IPv4 주소는 4개의 옥텟(8비트 단위)으로 나뉘며, 10진수로 표기하므로 각 옥텟은 0 ~ 255의 값을 쓸 수 있습니다.
이 때 네트워크 주소와 호스트 주소는 경계점이 고정되어 있지 않고 클래스 개념을 사용합니다. 클래스 기반의 IP 주소 체계를 클래스풀(classful)이라 부릅니다.
IP 주소 체계는 필요한 호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당하는 클래스 개념을 사용해 IP 낭비를 줄이고 주소를 절약했습니다.
A 클래스
B 클래스
C 클래스
클래스를 사용해도 낭비되는 IP가 너무 많아지는 문제가 있어 이를 해결하기 위한 3가지 보존, 전환전략이 등장했습니다.
클래스리스 네트워크에서는 별도로 네트워크와 호스트 주소를 나누는 구분자가 필요해졌는데, 이 구분자를 서브넷 마스크(Subnet Mask)라 부릅니다.
서브넷 마스크는 네트워크 주소와 호스트 주소를 구분하기 위해 사용하는데, 2진수 숫자 1은 네트워크 주소, 0은 호스트 주소로 표시합니다.
기존의 클래스 개념을 무시하고 새로운 네트워크-호스트 구분 기준을 사용자가 정해, 원래의 클래스풀 단위의 네트워크보다 더 쪼개 사용하는 것을 서브네팅(subnetting)이라 합니다.
서브네팅에 대해 아래의 두 가지 입장에서 생각해볼 수 있습니다.
이미 설계되어 있는 네트워크에서 사용할 수 있는 IP 주소 범위를 파악해야 합니다.
아래와 같은 서브네팅 방법을 이용해 네트워크 크기를 파악하고, 자신이 속한 IP 범위를 찾아냅니다.
- 내 IP를 이진수로 변환한다.(내 IP : 103.9.32.146)
- 01100111 00001001 00100000 10010010
- 서브넷 마스크를 이진수로 변환한다.(서브넷 마스크 : 255.255.255.192)
- 11111111 11111111 11111111 11000000
- 2진수 AND 연산으로 서브네팅된 네트워크 주소를 알아낸다.
- 01100110 00001001 00100000 10000000
- 10진수 변환 : 103.9.32.128
- 호스트 주소 부분을 모두 1로 변환한 후 브로드캐스트 주소를 알아낸다.
- 01100110 00001001 00100000 10111111
- 10진수 변환 : 103.9.32.191
- 유효 IP 범위를 알아낸다.
- 가장 작은 유효 IP 범위 = 네트워크 주소 + 1
- 가장 큰 유효 IP 범위 = 브로드캐스트 주소 - 1
- 따라서 103.9.32.129 ~ 103.9.32.190
좀 더 간단히 구하는 방법
- 서브넷 마스크를 2진수로 변환한다.(서브넷 마스크 : 255.255.255.192)
- 11111111 11111111 11111111 11000000
- 현재의 서브넷이 가질 수 있는 최대 IP개수 크기를 파악한다.
- 2^6 = 64
- 64의 배수로 나열하여 기준이 되는 네트워크 주소를 파악한다
- 0~63 / 64~127 / 128~191 / 192~255
- 현재 IP주소인 103.9.32.126에서 호스트 주소 146이 속한 네트워크를 선택한다
- 128~191
- 필요한 주소를 정리한다
- 네트워크 주소 : 103.9.32.128(첫 번째 숫자)
- 브로드캐스트 주소 : 103.9.32.191(마지막 숫자)
- 유효 IP 범위 : 103.9.32.129 ~ 103.9.32.190
네트워크를 새로 구축하는 경우, 네트워크의 크기를 고민해 서브넷 마스크를 결정해야 합니다.
이 때 고민해야 할 포인트는 다음의 2가지 입니다.
아래와 같은 과정을 통해 결정할 수 있습니다.
(조건 : 회사에 12곳의 지사가 있고, 지사들에는 최대 12대의 기기가 있다)
- 서브넷된 하나의 네트워크에 12개 IP를 할당해야 한다
- 네트워크는 2진수의 배수로 커짐 -> 12개의 IP를 수용할 수 있는 가장 작은 네트워크는 16개 -> 16개짜리 네트워크를 할당한다.
- 이 때, 16개 중 네트워크 주소와 브로드캐스트 주소로 사용한 2개 IP를 제외해야 하므로 실제로 사용할 수 있는 IP는 14개이다.
- 12 < 14 이므로 사용 가능!
- 따라서 총 16개의 네트워크 중 12개의 네트워를 할당한다.
이 때, 가능하면 사설 IP 대역을 사용해 충분한 IP 대역을 사용하는 것이 좋습니다.
인터넷에 접속하기 위해 필요한, 전 세계에서 유일해야 하는 식별자를 공인 IP라 합니다. 이와 반대로 개인적으로 네트워크를 구성할 때 사용하는 IP를 사설 IP라 합니다.
사설 IP를 사용하면 인터넷에 직접 접속하지 못하지만, IP를 변환해주는 NAT 장비에서 공인 IP로 변경한 후에는 인터넷 접속이 가능합니다. 가정에서 사용하는 공유기가 이에 해당합니다.
이 때, 다른 사용자에게 할당된 IP를 사설 네트워크 주소로 사용해선 안됩니다.
사설 IP는 A 클래스 1개, B 클래스 16개, C 클래스 256개를 사용할 수 있습니다.