본문으로 바로가기

2계층에서 물리적 주소인 MAC주소, 3계층에서 논리적 주소인 IP주소, 4계층에서 목적지 IP를 수정하여 부하를 분산할 수 있는 로드밸런서가 존재함을 살펴보았습니다. 그리고 이를 위한 장치로 2계층의 NIC, 3계층의 라우터, 4계층의 로드밸런서가 있다는 것도 살펴보았습니다.

 

여기서는 이러한 주소와 주소 체계를 이루는 서브넷과 각종 네트워크 용어를 정리해보겠습니다.

 

유니캐스트, 멀티캐스트, 브로드캐스트, 애니캐스트

 

네트워크에서 출발지와 목적지로 전송하는데 이 통신 방식은 유니캐스트, 멀티캐스트, 브로드캐스트, 애니캐스트이 존재합니다.

 

Unicast : 1:1 통신. 대부분의 통신은 유니캐스트다. HTTP가 유니캐스트다. 

 

Broadcast : ‘방송’이다. 1:모두의 통신. 주로 유니캐스트로 통신하기 전 상대방의 정확한 위치를 알기 위해 사용됨. 

 

Multicast : 1:다의 통신. 다수의 특정 목적지가 존재함. 특정 그룹과 통신하는 것이고, 실시간 방송의 경우에 사용됨. 단방향으로 다수에게 내용을 전달하는데 용이함.

 

Anycast : 1:1이되, 목적지 그룹 중 가장 가까운 호스트와의 통신. IPv4에서는 일부 구현, v6에서는 모두 구현 가능. 가장 가까운 DNS 서버를 찾을 때 사용하거나 가장 가까운 게이트웨이를 찾는 애니캐스트 게이트웨이 기능에 사용함.

 

 

MAC 주소

MAC은 Media Access Control의 줄임말입니다. 통신을 위해 네트워크 인터페이스에 할당된 고유 식별자입니다.

MAC 주소는 변경할 수 없도록 하드웨어에 고정됩니다. ‘물리적 주소’라고 부르는 것은 이 때문입니다.

 

MAC의 주소 체계를 먼저 살펴보겠습니다.

48비트의 16진수 12자리로 표현됩니다.

 

00 00 00 | 00 00 00

앞의 24비트는 OUI, 국제 기구에서 받은 제조사 코드

뒤의 24비트는 UAA, 각 제조사에서 자체적으로 할당하는 부분

 

  • MAC 주소는 유일하지 않을 수 있습니다. 이 경우에는 동일 네트워크 내에서 중복되지만 않는다면 문제를 일으키지 않습니다.
  • 앞의 24비트를 통해서 장비를 만든 제조사를 조회할 수 있다. IEEE 홈페이지 가면 가능함 https://regauth.standards.ieee.org/standards-ra-web/pub/view.html#registries
  • MAC 주소는 그렇다면 변경할 수 없는가? 아니다. OS에 따라 다르지만, 주소 변경이 가능하다.

 

그래서 MAC 주소는 어떻게 동작하는가?

 

NIC는 MAC 주소를 가지고 있고, 목적지 MAC 주소가 다른 패킷은 그냥 버린다고 했습니다.

조금 더 정확하게 과정을 살펴보면 다음과 같은 과정을 거칩니다.

 

NIC는 받은 전기 신호를 데이터(패킷)으로 변환한 후 MAC주소를 확인합니다. 

MAC 주소가 자신의 주소와 같거나, 브로드캐스트, 멀티캐스트와 같은 그룹 주소이면 패킷을 상위 계층으로 올립니다.

아니라면 패킷을 버려야 하는데 이 작업은 NIC가 아는게 아니라 운영체제나 어플리케이션 단에서 처리해야 하는 작업입니다.

따라서, 자신이 타겟이 아닌 데이터가 많이 오게 되면 CPU에 부하가 오게 됩니다. 

만약 패킷을 버리기 전에, 자신이 목적지가 아니더라도 어쨌든간 온 요청을 모두 확인해보고 싶다면 ‘무차별 모드(Promiscuous Mode)’로 NIC를 구성하면 됩니다. 이 무차별 모드를 사용하는 대표적인 앱으로와이어샤크 있다. 이제 이해가 되네!

 

 

IP 주소

 

클래스 기반 IP 주소 체계 => outdated

 

IP 주소의 클래스를 구별하고 네트워크 주소와 호스트를 분리하는 것은 이미 다룬 바가 있습니다.

darrengwon.tistory.com/1278?category=907881

 

네트워크 주소 : 호스트를 모은 네트워크를 지칭하는 주소. 네트워크 주소가 동일한 네트워크를 로컬 네트워크라고 합니다.

호스트 주소 : 네트워크 내부에 존재하는 하나의 호스트를 나타내는 주소

 

[A] : 0xxx xxxxxxxx xxxx. xxxx xxxx. xxxx xxxx : 0.0.0.0 ~ 127.255.255.255
 * A 클래스에서의 네트워크 주소는 1.0.0.0 ~ 126.0.0.0 까지로 규정되어 있다. 
 * 참고로 127.0.0.1 은 로컬호스트다.
 * xxxx xxxx. xxxx xxxx. xxxx xxxx이 호스트 주소에 해당한다.
 * 125.35.2.3 를 예시로 들면 네트워크 ID는 125, 호스트 주소는 35.2.3이 된다.
 * 따라서, 사용 가능한 호스트 주소는 (뒤에 세 바이트 부분이므로 2^8^3 = 2^24) 개를 가질 수 있게 된다. 더 정확히는 브로드캐스트로 사용하는 모든 호스트 주소가 1인 부분과 네트워크 주소로 사용하는 모두 0인 부분을 제거해야 해서 2^24 - 2개가 된다. 

[B] : 10xx xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx : 128.0.0.0 ~ 191.255.255.255
 * xxxx xxxx. xxxx xxxx이 호스트 주소에 해당한다.
 * 178.35.26.8이라면, 네트워크 ID는 178.35, 호스트 주소는 26.8이 된다.
 * 사용 가능한 호스트 주소는 뒤에 두 바이트 부분이므로 2^8^2 = 2^16개에 네트워크, 브로드캐스트를 2개를 제외한 2^16 - 2개가 된다.

[C] : 110x xxxx. xxxx xxxx. xxxx xxxx. xxxx xxxx : 192.0.0.0 ~ 223.255.255.255
  * xxxx xxxx이 호스트 주소에 해당한다.
  * 사용 가능한 호스트 주소는 2^8 - 2개가 된다.

 

 

IPv4의 해결책

 

위와 같은 IP 주소 체계를 Classful한 체계라고 부릅니다.

그런데 아시다시피 이러한 체계 내에 IP는 금방 고갈이 되었고, 이를 해결하기 위해서

단기적으론 클래스리스 기반 주소 체계인 CIDR(classless inter-domain routing)

중기적으론 NAT과 사설 IP

장기적으론 IPv6이 등장했습니다.

 

현재 우리는 클래스리스 기반 주소 체계를 사용하고 있습니다.

클래스 기반 IP였을 때는 아이피 주소를 보고 네트워크 주소가 무엇인지, 호스트 주소가 무엇인지 쉽게 알 수 있었습니다.

클래스리스 기반 주소 체계에서는 네트워크와 호스트 주소를 나누는 기준을 '서브넷 마스크'라고 부릅니다.

서브넷 마스크도 결론적으론, 기존 클래스 기반 주소 체계를 좀 더 잘게 쪼개자는 거니까요. 클래스 기반 주소 체계에 대한 이해가 선결되어야 합니다.

 

 

 

CIDR 기반 주소 체계 => 서브넷 마스크와 CIDR

=> 부여된 클래스를 무시하고, 더 잘게 네트워크 주소와 호스트 주소를 구분할 수 있음

 

이 개념 역시 다룬 바가 있으니 간단한 예시만 확인하고 넘어갑시다.

이 부분을 AWS의 VPC 개념과 연결지어 이해하고 싶다면 아래 포스트를 확인합시다.

dev.classmethod.jp/articles/vpc-3/

 

* 넷마스크랑 서브넷마스크는 본래 다른 것이지만 요새는 CIDR 블럭 개념 이후부터 서브넷 마스크만 사용하고 있기 때문에 두 용어를 혼용해서 사용 중이라고 한다.

 

CIDR 블록 => 클래스리스 기반 주소 체계의 네트워크/호스트 주소 구분 가능

 

192.168.0.0/16이라고 한다면 앞 16비트가 고정이다.

그렇다면 앞의 16비트가 네트워크 주소이고, 뒤의 부분이 호스트 주소로 구분할 수 있다.

11000000.10101000.00000000.00000000

 

 

서브넷마스크로 네트워크 주소 계산하기

 

네트워크 주소는 IP주소와 서브넷마스크의 AND 연산으로 알 수 있다.

 

실제 CIDR 기반 주소 체계에서는 다음과 같이 이해하면 편하다.

 

103.9.32.146 ip를 사용 중인데(A 클래스이지만, 이제 중요치 않다), 서브넷 마스크가 255. 255. 255. 192 이라고 해보자.

자신의 ip와 서브넷 마스크의 AND 연산을 통해 네트워크 주소를 알아낼 수 있습니다.

 

ip : 0110 0111 0000 1001 0010 0000 1001 0010

NetMask : 1111 1111 1111 1111 1111 1111 1100 0000

AND연산 결과 네트워크 주소 : 0110 0111 0000 1001 0010 0000 1000 0000

 

즉, 네트워크 주소는 103.9.32.128임을 알 수 있고,

103.9.32.146/26 으로 표현할 수 있으며

넷마스크에 의해 고정되지 않은, /26 CIDR 블록 외의 범위는 호스트가 할당될 수 있는 범위인 것도 알 수 있습니다.

 

 

서브네팅 하는 방법

 

우선 왜 서브네팅을 해야 하는지에 대해서.

 

네크워크를 이용하는 입장에선

네크워크 내에서 사용할 수 있는 범위를 파악하기 위해서

기본 게이트웨이와 서브넷 마스크 설정이 제대로 되어 있는지 확인하기 위해서

 

네트워크를 설계하는 입장에선

네트워크 내에 필요한 단말을 수용할 수 있는 적절한 크기의 네트워크를 설계하기 위해서

 

 

이미 설계된 네트워크 이용자의 입장에서 유효한 IP 범위 파악하기

 

유효 IP 범위 = 네트워크 주소 + 1 ~ 브로드캐스트  - 1

 

우선 주어진 네트워크 설계자가 던져준 IP와 서브넷 마스크를 고려하여 유효 IP 범위내의 호스트가 되어야 합니다.

대체적으로 다음 과정을 거쳐 네트워크의 유효 범위를 파악합니다.

1. 내 IP와 서브넷 마스크를 파악한다. 

2. 둘이 AND 연산하여 네트워크/호스트 주소를 알아낸다.

3. 호스트 주소 부분은 전부 1로 변경해 브로드캐스트 주소를 알아낸다.

4. 유효 IP 범위를 파악한다. 서브네팅된 네트워크 주소 + 1은 유효 IP 중 가장 작은 IP이다.

5. 브로드캐스트 주소 - 1 은 유효 IP 중 가장 큰 IP이다.

6. 이 둘 사이가 유효 IP 범위이다.

 

직접 해볼까요? 주어진 IP는 103.9.32.146, 서브넷 마스크는 255.255.255.192라고 해봅시다.

 

IP = 0110 0111 0000 1001 0010 0000 1001 0010

SubnetMask = 11111 11111 11111 1111 11111 1111 1100 0000

 

AND 연산 결과 0110 0111 0000 1001 0010 0000 1000 0000. 

서브넷 마스트의 비트수(CIDR)가 26이므로 뒤 6자리만 호스트주소임.

즉, 네트워크 주소는 103.9.32.128

 

여기서 호스트 부분을 전부 1로 바꿔보면

브로드캐스트 주소 : 103.9.32.191 

 

네트워크 주소 + 1은 103.9.32.129

브로드캐스트 주소 -1은 103.9.32.190

 

따라서 유효 IP 범위는 103.9.32.129 ~ 103.9.32.190이다.

 

조금 더 빠른 방법도 있습니다.

1. 서브넷 마스크를 2진법으로 변환하여 해당 서브넷이 가질 수 있는 IP 갯수를 파악한다.

2. 해당 갯수의 배수를 나열해본다

3. 주어진 IP가 속한 부분을 짚어냅니다.

4. 범위 산정을 완료합니다.

1. 

주어진 IP는 103.9.32.146, 서브넷 마스크는 255.255.255.192인 예시를 그대로 채용합니다.

SubnetMask = 11111 11111 11111 1111 11111 1111 1100 0000 

이니까 호스트 할당할 수 있는 크기가 2^6 = 64개네요?

 

2.

0~63/64~127/128~191/192~255 로 64씩 나눠볼 수 있습닏.ㅏ

 

3. 

주어진 IP는 103.9.32.146 네요? 위에서 나열한 덩일 중 128~191에 해당합닏.ㅏ

 

4. 그렇다면

네트워크 주소는 103.9.32.128

브로드캐스트 주소는 103.9.32.191

유효 IP 범위는 103.9.32.129 ~ 103.9.32.190 가 됩니다.

 

 

 

 

 

public IP vs private IP

public Network vs private Network

 

네트워크의 통신 용도에 따라 public Network와 private Network로 구분지을 수 있습니다. public Network는 실제 인터넷과 통신하는 공공 네트워크이며 private Network는 인터넷 구간이 아닌 내부적으로 통신하는 사설 네트워크입니다.

 

 

공인 IP와 사설 IP

 

(public ip) 공인 IP : 인터넷 구간의 통신 대상을 식별하기 위해 ISP에서 제공하는 IP 주소입니다. 당연히 전 세계 인터넷 구간에서 유일한 주소여야 합니다.

 

(private ip) 사설 IP : 회사, 집 등 독립된 네트워크에서만 사용하는 내부 IP 주소입니다. 회사 방화벽이나 공유기를 사용하여 홈 네트워크 내에서 사용하는 경우가 사설 네트워크가 생기는 부분이겠죠. 그리고 각 사설 IP들은 어차피 프라이빗 네트워크 내에서만 노는 거니까 공인 IP랑은 겹쳐도 상관 없겠고, 해당 네트워크 내부에서만 유일하기만 하면 됩니다.

 

사설 IP를 사용하면 직접 인터넷 연결은 못하겠지만, NAT 장비를 통해 공인 IP로 변경해서 인터넷 접속이 가능해집니다.

 

출처 : http://sindhusps.blogspot.com/2018/03/private-vs-public-ip.html 

 

 

사설 IP 주소는 아래와 같이 3가지 대역으로 고정되어 있습니다. 

 

Class A : 10.0.0.0 ~ 10.255.255.255 => 1개만 사용 가능

Class B  : 172.16.0.0 ~ 172.31.255.255 => 16개 사용 가능

Class C : 192.168.0.0 ~ 192.168.255.255 => 256개 사용 가능

 


darren, dev blog
블로그 이미지 DarrenKwonDev 님의 블로그
VISITOR 오늘 / 전체