- 2계층(데이터 링크 계층) : 물리 주소(MAC 주소) 사용
- 3계층(네트워크 계층) : 논리 주소(IP 주소) 사용
1. MAC 주소 (물리 주소)
OSI 7계층에 대해 다룰 때, 2계층(데이터 링크 계층)에서 사용하는 것이 MAC 주소라고 배웠었다.
- MAC : Media Access Control
- 장비(네트워크 인터페이스)에 할당된 고유 식별자 → 고유하지 않을 경우 충돌하기 때문에 IEEE에서 관리 중
- 2계층에서 통신(데이터를 주고 받을 때)에 사용한다.
- 물리적인 연결 상에서만 유효, 다른 네트워크로 데이터 전송시에는 논리주소(IP) 사용
- 48비트 16진수 12자리
- OUI : IEEE가 제조사에 할당하는 부분
- IEEE : MAC 주소의 제조사 코드를 할당하고 관리하는 기구
- 장비 제조사에서 장비가 출하될 때 MAC주소가 할당되는데, IEEE에서 제조사에 하나 이상의 주소 풀을 주고(제조사 코드) 그 안에서 제조사 자체적으로 MAC 주소를 할당함
- UAA : 제조사에서 할당하는 부분
👉🏻 MAC 주소 확인하기: win+R → cmd ↲ → ipconfig /all
↲
동작
- NIC은 자신의 MAC 주소를 가지고 있다.
- 2계층에 1계층으로부터 전기 신호가 들어오면(송신) 패킷으로 변환해 그 패킷의 도착지 MAC 주소를 파악한다. (2계층 동작 방식 알아보기)
- 도착지가 자신이어야 하므로 → 도착지 MAC 주소가 자신의 MAC 주소와 다르면 패킷 폐기
- 일치하거나 그룹 주소(브로드캐스트, 멀티캐스트)라면 올바르다고 인식 → 상위 계층으로 던짐
2. IP 주소 (논리 주소)
이번에는 3계층에서 사용하는 IP 주소(논리 주소)에 대해 알아보자.
IP 주소를 포함한 다른 프로토콜 스택의 3계층 주소는 다음과 같은 특징이 있다.
- 사용자가 변경 가능한 논리 주소
- 주소에 레벨이 있다. 네트워크 주소(그룹)와 호스트 주소로 나뉜다.
2-1. IP 주소 체계
IP 주소는 32비트 IPv4와 128비트 IPv6로 나뉘며, 우리가 흔히 사용하는 것은 IPv4이다.
- 10진수 12자리
- 네 부분으로 나뉘며, 각 부분은 0~255까지 3자리 수로 표기 - 옥텟(Octet), 8비트 단위
- 각 옥텟은 '.'으로 구분
- 8비트 단위를 10진수로 표현하므로 0~255
네트워크 주소와 호스트 주소
IP 주소는 네트워크 주소와 호스트 주소 두 부분으로 나뉜다.
- 네트워크 주소
- 호스트들을 모은 네트워크를 지칭하는 주소
- 해당 주소가 동일한 네트워크를 로컬 네트워크라 한다.
- 호스트 주소
- 하나의 네트워크 내의 존재하는 호스트를 구분하기 위한 주소
- 네트워크 주소와 호스트 주소를 구분하는 경계점이 고정되어 있지 않다.
클래스(Class) 개념
- 필요한 호스트 IP 개수에 따라 네트워크의 크기를 다르게 할당할 수 있는 것.
- 옥텟을 구분자로 사용 👉🏻 서브넷 마스크 (즉 클래스를 구분하는 옥텟을 서브넷 마스크라고 함)
- 구분자가 이동할 수 있어 네트워크의 크기가 달라질 수 있다.
- 다른 고정된 네트워크 주소 체계에 비해 주소를 절약할 수 있다는 장점
분류 | 설명 | 범위 |
A 클래스 | 1~128 범위의 IP 주소 127로 시작되는 건 자신을 의미하는 것으로 예약 → 로컬 호스트 두 번째, 세 번째, 네 번째 옥텟 : A클래스가 자유롭게 사용자에게 부여 |
0.0.0.0 ~ 127.255.255.255 |
B 클래스 | 128~191 범위 두 번째 옥텟은 B 클래스가 접속할 수 있는 네트워크 지시 |
128.0.0.0 ~ 191.255.255.255 |
C 클래스 | 최하위 클래스, 192~223 범위 두 번째, 세 번째 옥텟 : C 클래스가 접속할 수 있는 네트워크 지시 |
192.0.0.0 ~ 223.255.255.255 |
D 클래스 | 멀티캐스트 용도로 예약 | 224.0.0.0 ~ 239.255.255.255 |
E 클래스 | 연구를 위해 예약 (사용 X) | 240.0.0.0 ~ 255.255.255.255 |
- 그러나 현재는 이런 클래스 기반을 잘 사용하지 않음
- 더 세밀하게 분할 및 할당하기 위해 네트워크 크기에 맞춰 1비트 단위로 상세히 분할하는 방법 사용
2-2. 클래스풀과 클래스리스
클래스풀
이러한 클래스 기반의 IP주소 체계를 클래스풀(Classful)이라 하는데, 초기에는 확장성과 효울성을 모두 잡는 좋은 방법이었다.
그러나 인터넷이 상용화되면서, 인터넷에 연결되는 호스트 숫자가 폭발적으로 증가함에 따라 IP주소가 부족해지기 시작했다. 그래서 이런 문제를 해결하기 위해 3가지 보존, 전환 전략을 만들었는데 이는
- 단기 대책 : 클래스리스, CIDR(Classless Inter-Domain Routing)기반의 주소체계
- 중기 대책 : NAT와 사설 IP주소
- 장기 대책 : IPv6
로 나뉜다.
클래스리스 네트워크
사실 굳이 따지면 주소 갯수 자체가 부족한 것은 아니다.
클래스를 나누고 할당하는 과정에서, 많은 조직이 여유를 위해 쓸 수 있는 게 많은 상위 클래스(A Class)를 할당받고 그 중 일부만 사용했다.
그럼 나머지는 다른 조직이나 기관에서 사용할 수가 없기 때문에 사용하지도 않고, 사용할 수도 없이 낭비된 IP가 많아진 것
이러한 문제를 해결하기 위해 클래스라는 개념을 버리게 되었고, 이를 클래스리스라 부른다. 이것이 현재 우리가 사용하는 주소 체계.
👉🏻 한마디로, 클래스로 미리 나눠버려서 부여하고 못 쓰게 낭비하는 대신, 필요한 만큼 그때그때 자유롭게 잘라 써 효율적으로 쓰겠단 소리다.
서브넷 마스크
클래스리스 네트워크에서 네트워크와 호스트 주소를 나누는 구분자를 서브넷 마스크(Subnet Mask)라 부른다.
이러한 서브넷 마스크는 IP주소와 네트워크 주소를 구분할 때 사용하며 다음과 같이 표시한다.
- 2진수 숫자 1: 네트워크 주소
- 2진수 숫자 0: 호스트 주소,
2진수 11111111 → 10진수로 255,
2진수 00000000 → 10진수로 0이므로
서브넷 마스크는 255.0.0.0
, 255.255.0.0
, 255.255.255.0
와 같이 표현되는데(아까 위에서 말한 IP 주소 표현 방법 참고)
- 만약 서브넷 마스크가 255.255.0.0 이다! 라고 하면
- 아 첫번째 255.255가 네트워크 주소고,
- 뒤에 0.0이 호스트 주소구나 생각하면 된다.
예시를 들어보자.
만약 IP 주소가 103.9.32.146
이고, 얘가 255.255.255.0
서브넷 마스크를 사용한다고 하면
서브넷 마스크와 곱연산을 통해 네트워크 주소와 호스트 주소를 알아낼 수 있다.
👇🏻 자세한 설명 👇🏻
10진수로 표현된 주소를 2진수로 바꿔서 각각 옥텟마다 곱연산(비트 AND 연산)을 하는 거다.
근데 &연산은 모두 0인 2진수랑 하면 무조건 0이 나온다.
비트 연산자 - &(곱연산) : 대응 되는 비트가 모두 1이면 1을 반환한다.
0 & 1 = 0
0 & 0 = 0
1 & 1 = 1
그러니까 서브넷마스크 255.255.255.0 는 2진수로 표현하면
11111111 . 11111111 . 11111111 . 00000000 이고
여기서 0으로 표현된 호스트 주소 자리 : 네번째 자리 이므로
IP 주소(103.9.32.146)랑 서브넷마스크랑 곱연산 하면 IP 주소에서 이 네 번째 자리가 그냥 0이 되어버리는 거다.
그러면 103.9.32.146 👉🏻 103.9.32.0 이 될 거니까 이게 네트워크 주소
그리고 0.0.0.146이 호스트 주소
- 클래스리스 기반 IP 주소에서는 서브넷 마스크가 필수
2-3. 서브네팅(Subneting)
원래 부여된 클래스의 기준을 무시하고 새로운 네트워크-호스트 구분 기준을 사용자가 정해 원래 클래스풀 단위의 네트워크보다 더 쪼개 사용하는 것을 말한다.
이처럼 부여된 주소를 다시 잘라사용하는 것을 서브네팅이라 하며 현대 클래스리스 네트워크의 가장 큰 특징이기도 하다.
위에서 설명하던 것 처럼 옥텟 단위로 구분하는 건 이해가 쉽지만, 이런 서브네팅은 2진수의 1비트 단위로 잘라서(옥텟 단위보다 더 작게) 어렵다.
👉🏻 위처럼 서브넷 마스크의 옥텟이 무조건 0 아니면 255가 되는 게 아니라는 것.
1과 0으로 구분한다고 했으니, 만약 한 옥텟 안에서 11000000 처럼 나눠버리면 10진수로 192가 된다.
👉🏻 서브네팅에 대해 고민해야 하는 경우
- 디자인 단계에서 네트워크 설계자가 어떻게 효율적으로 분할할 것인지 계획하는 경우
- 이미 분할된 네트워크에서 사용자가 자신의 네트워크와 원격지 네트워크를 구분해야 하는 경우
즉, 네트워크 사용자 혹은 설계자 입장에 따라 고려할 요소와 범위가 달라진다.
- 네트워크 사용자 입장
- 네트워크에서 사용할 수 있는 IP범위 파악
- 기본 게이트웨이와 서브넷 마스크 설정이 제대로 되있는지 확인
- 네트워크 설계자 입장
- 네트워크 설계 시 네트워크 내에 필요한 단말을 고려한 네트워크 범위 설계
- 사용자와 반대로 서브넷 마스크가 지정되어 주어지는 것이 아닌 네트워크의 크기를 고민해 서브넷 마스크를 결정하고 설계에 반영해야 한다.
- 설계자가 IP설계시 고려해야 할 부분
→ 서브넷된 하나의 네트워크에 IP를 몇 개나 할당해야 하는가?(or PC는 몇 대나 있는가)
→ 서브넷된 네트워크가 몇 개나 필요한가?
2-4. 공인 IP와 사설 IP
인터넷에 접속하려면 고유한 식별자인 IP 주소가 필요하며, 전 세계에서 유일한 공인 IP를 사용한다. 그러나 개인적인 네트워크를 구축할 때는 공인 IP 주소를 할당받지 않고도 사설 IP 주소를 사용할 수 있다.
공인 IP 주소는 인터넷 서비스 제공자나 IP 할당기관으로부터 할당받아야 하는 번거로운 절차가 있다. 그러나 인터넷에 직접 연결하지 않거나 NAT(Network Address Translation, 네트워크 주소 변환) 기술을 사용하는 경우에는 사설 IP 주소를 사용할 수 있다. 이 주소들은 RFC(인터넷 표준 문서)에 명시되어 있다.
가정에서 흔히 사용되는 공유기는 NAT 장비로, 내부에서 사용하는 사설 IP 주소를 외부에서 사용 가능한 공인 IP로 변환해주는 역할을 한다. 이를 통해 인터넷에 접속이 가능한 것.
참고 : Bogon IP
👉🏻 IP주소 할당 최상위 기구(IANA)가 여러 목적으로 예약해서 공인 IP로 할당하지 않는 주소
- 0.0.0.0/8: "This" 네트워크
- 127.0.0.0/8: 루프백(Loopback)주소
- 127.0.53.53 : 네임 콜리전 발생
- 169.254.0.0/16: 링크 로컬(Link Local)
- 172.16.0.0/12: 사설 네트워크
- 192.0.0.0/24: IETF 프로토콜 할당
- 192.0.2.0/24: 테스트용
- 10.0.0.0/8: 사설 네트워크
- 198.51.100.0/24: 테스트용
- 203.0.113.0/24: 테스트용
- 224.0.0.0/4: 멀티캐스트용
- 240.0.0.0/4:예약
- 255.255.255.255/32: 브로드캐스트
- 192.168.0.0/16: 사설 네트워크
- 100.64.0.0/10: 캐리어 그레이드 NAT(통신사업자에게 사설 IP주소를 할당하기위해 사용)
- 198.18.0.0/15: 네트워크 인터커넥트 디바이스 벤치마크 테스팅
참고
⌜IT 엔지니어를 위한 네트워크 입문⌟ 길벗, 2023
[3장] 네트워크 통신하기 | 3.2 MAC 주소, 3.3 IP 주소 (p.76~98)
* 책을 참고해 필요한 내용을 정리한 것이므로, 책의 내용과 다를 수 있습니다.
GitHub 댓글