본 포스팅은 널널한 개발자님의 네트워크 강의를 보고 정리한 내용입니다.

Unicast, Broadcast, Multicast

네트워크에서 정보를 전달하는 방식은 대표적으로 3가지가 있습니다. 바로 Unicast, Broadcast, Multicast입니다. 각각이 어떤식으로 정보를 전달하는지 살펴보겠습니다.

지난번 살펴봤던 내부 네트워크 그림을 보며 각각의 상황을 이해해봅시다.

  • Unicast: 가장 많이 사용되는 방식으로 IP주소를 목적지로 하는 1:1 통신
  • Broadcast: 호스트가 소속된 네트워크 전체에 통신
  • Multicast: 호스트가 소속된 네트워크 안의 특정 그룹에게만 통신

Unicast란 말 그대로 IP주소를 목적지로 하는 1:1 통신을 의미합니다. 내부 망을 기준으로 PC1이 PC3에게 특정 통신을 보낸다면 이를 Unicast라고 부릅니다.

Broadcast는 호스트가 소속된 네트워크 전체에 통신을 보냅니다. 위 예에서 만약 라우터 뒷쪽의 내부 네트워크가 네트워크주소 192.168.0 을 가진다고 가정해보면, 192.168.0.xxx 의 모든 형태의 내부 네트워크 pc에 통신을 보내게 됩니다. 위 예에선 PC1에서 브로드케스팅시 PC2, PC3, PC4, Router 등 네트워크에 있는 모든 PC에 통신을 보내는 것입니다.

Broadcast는 host id를 전부 1로 표현하는 방식으로 나타냅니다. 192.168.0.255로 통신을 보내면 소속 네트워크에 대한 Broadcast가 되는 것이죠. Broadcast는 모든 pc에 대해 통신을 강제하므로 충돌이 일어나는 등 네트워크 효율을 떨어트릴 수 있습니다.

Multicast는 특정 그룹에게 통신을 수행하는 방식입니다. 송신자 입장에선 n개의 네트워크에 1번의 통신을 이용해 정보를 전달하면 좋겠지만, 수신자 입장에선 n개중 1번, 2번만 관심이 있는 경우 나머지 통신은 비효율적인 통신입니다.

IPTV를 생각하면 되는데요. Multicast는 송신자에 특정 그룹을 등록하고 등록된 그룹만 해당 정보를 받아드리며 나머지는 통신을 무시하는 방식으로 진행됩니다. 따라서 Broadcast를 좀 더 효율적으로 사용 가능하죠.

하지만 이런 Multicast역시 L2 level에선 Broadcast에 해당하므로 잘 사용해야 합니다. 어쨋든 통신은 모든 PC에 가지만 무시하느냐 마느냐의 차이이기 때문이죠.

IP주소의 종류

IP주소는 크게 4가지 종류가 존재합니다. Global IP, Private IP, Loopback, BroadCast죠. 이중 Broadcast는 위에서 살펴보았으니 이를 제외한 IP 종류를 확인해보겠습니다.

  • Global IP
    • Internet(public, global)에서 사용되는 IP
    • 기본적으로 Internet의 Router가 routing해주는 ip이다. (사설 ip도 등록은 가능하지만 기본적으로 라우팅 해주진 않는다)
    • Internet 상에서 유니크 하다.
  • Private IP
    • 작은 소규모 인터넷 구축에 사용된다. (소규모 네트워크 예시나 A,B,C 클래스 등을 떠올리면 쉬움)
    • 공유기를 통해 Global IP를 공유한다.
  • Loopback
    • 127.0.0.1을 사용하며 자기 자신을 나타낸다.
    • packet이 생성은 되지만 L3(ip) level에서 더 이상 내려가지 않으며 다시 올라가도록 되어있다.14

DNS

Internet은 Router와 DNS의 집합체에 가깝습니다. DNS란 우리가 쉽게 컴퓨터에 접근할 수 있도록 제공하는 서비스를 의미합니다.

전화번호를 예로 들어봅시다. 우리는 지인들의 전화번호를 통해 지인과 전화를 할 수 있습니다. 하지만 전화번호를 외우고 있는 사람은 이 세상에 많이 없죠.

우리는 전화번호를 이름으로 저장하고 그 이름을 통해 전화번호를 연동해 통화합니다. 인터넷도 마찬가지입니다. 우리가 구글에 접속할 때 구글의 ip를 이용하지 않고 www.google.com이라는 구글의 도메인을 이용해 접속하죠. 이때 google.com이라는 도메인의 실제 ip를 알려주는 녀석이 DNS입니다.

우리가 http 통신을 하게 되면 packet을 생성하게 되고, 이 때 ip주소가 필요합니다. 하지만 우리는 ip주소를 넣지 않죠. 이는 DNS를 통해 가져오게 됩니다.

자세한 내용은 웹 통신의 큰 흐름1의 DNS 부분을 참고해주세요. (해당 글에 틀린 내용이 있습니다. 최 상위 Root DNS가 13개 입니다)

우리가 리퀘스트 메시지를 작성하면 프로토콜 스택의 socket라이브러리 내부의 리졸버를 통해 DNS와 통신하여 ip주소를 가져옵니다. 이 때 순서는 다음과 같습니다.

  1. DNS cache 확인
  2. hosts file 확인
  3. Router ISP내의 cache DNS/등록된 DNS 에 확인

즉, 먼저 캐싱이된 정보나 파일을 찾은 뒤 없는 경우 가까운 DNS에 ip주소 요청을 보내죠.

DNS는 계층적 구조를 갖고 있으며 대략적인 모습은 다음과 같습니다. client는 캐시된 정보가 없는 경우 등록된 DNS에 ip주소를 요청합니다. DNS는 먼저 자신의 테이블에 도메인 ip가 있는지 확인 합니다. 만약 없다면 root DNS(전 세계 13개)에 요청을 보내죠.

DNS 서버는 위와 같이 계층적 구조로 이루어져 있습니다. root DNS는 www.naver.com을 보고 .com에 해당하는 정보를 가진 DNS서버를 알려줍니다. 그럼 다시 .com에게 naver를 요청하게 되고 .naver를 가진 DNS를 알려주죠. 이후 www를 요청하고 여기가 바로 www.naver.com에 해당하는 주소로 해당하는 ip를 반환해줍니다.

이런식으로 전세계 DNS는 계층구조를 이루며 서로 연동하여 도메인명의 ip주소를 알려줍니다. 물론 매번 이럴 수 없기 때문에 각각의 서버들은 응답을 캐싱해놓기도 하고 client에도 따로 DNS캐시가 존재합니다.

MAC주소의 변화

우리가 사용하는 네트워크는 packet이 돌아다니며 packet switching이 일어나는 네트워크죠. 그러나 그 하단의 L2에선 Frame이라는 단위를 사용합니다. packet이 택배 상자라면 Frame은 이를 실어 나르는 트럭이라고 배웠죠.

위와 같은 경우를 살펴봅시다. pc1에서 server로 통신하는 경우 packet에는 source와 dest가 PC#1과 Server로 되어 있습니다. 이 정보는 변하지 않죠.

그리고 이런 packet은 Frame이라는 Ethernet 헤더 정보가 붙은 데이터(트럭)로 각각의 라우터를 지나며 이동합니다.

Frame에도 ip와 마찬가지로 출발점, 도착점이 있지만 이 Ethernet header정보는 L2 level에서 호스트가 바뀔 때 마다(라우터에 도착할 때 마다) 변화하게 됩니다. packet은 그대로 유지되지만 Ethernet header정보가 계속 바뀌는 것이죠.

PC#1 은 R1~R5를 거쳐 Server에 도착하도록 되어 있습니다. 그렇다면 Ethernet header의 source/dest는 라우터를 통과할 때 마다 다음과 같이 변화합니다.

  • Source -> Dest
    • PC#1 -> R1
    • R1 -> R2
    • R2 -> R3
    • R3 -> R4
    • R4 -> R5
    • R5 -> Server

택배 시스템과도 마찬가지로 packet의 도착지가 어디냐에 따라 이동되는 것이 아닌 물리적인 Router끼리의 정보를 보고 Frame레벨로 전달됩니다. 그러면서 출발지와 도착지 정보가 계속해서 변하는 것이죠.

L2 스위치 동작 원리와 ARP


L2스위치를 살펴봅시다. 각 포트마다 컴퓨터가 연결되게 되는데요. 해당 장치는 포트마다 MAC주소를 기억할 수 있도록 설계되어 있습니다. L2구간에선 MAC주소가 가장 중요하죠. L2 스위치는 학습모드를 통해 포트마다 어떤 MAC 주소가 있는지 기억할 수 있습니다.

위와 같은 구조를 생각해봅시다. PC#1에서 PC#2로 리퀘스트를 보내게 되면 학습모드의 L2 스위치는 첫 번째 포트에서 PC#1의 request가 왔으므로 포트에서 맥 주소를 기억(학습)합니다. PC#2에서 리퀘스트가 온다면 이런 경우도 MAC주소가 학습 됩니다.

각 포트마다 다른 L2 스위치가 달려 여러 PC가 연결될 수 있기 때문에 한 포트에 여러 개의 MAC주소를 저장할 수 있으며, 따라서 저장량은 용량으로 표시합니다.

이렇게 MAC주소를 기억하면 다음번에 스위칭을 할 때 MAC주소를 찾을 필요 없이 바로 알맞은 포트번호로 스위칭이 가능하죠. 이것이 L2 스위치가 동작하는 방식과 학습모드입니다.

그럼 ARP란 어떤 것일까요? 만약 처음으로 PC를 동작시키거나, 네트워크에서 PC가 하나 추가된 경우를 생각해봅시다.

위와 같은 네트워크에서 PC3가 새로 연결되었다고 가정해봅시다. PC3에서 외부 통신을 위해선 무조건 L3 Router즉, gateway를 통해 internet 바깥으로 나가야 합니다. 따라서 L3 Router의 MAC주소를 알아야 하죠. 그러나 새로 연결된 PC3는 게이트웨이의 MAC 주소를 알지 못합니다.

이럴때 MAC주소를 알아내기 위해 사용하는 방법이 바로 ARP입니다. PC3는 네트워크 전체에 gateway의 MAC주소를 요청하는 쿼리를 Broadcast합니다. 그럼 PC3를 제외한 모든 내부 PC들에 요청이 가게 되겠죠? 이후 쿼리에 해당하는 gateway에서 Unicast로 MAC주소를 응답해줍니다. 그럼 PC3에선 이러한 MAC주소를 ARP캐싱을 통해 저장해놓고 이제 gateway로 통신을 할 수 있게 되는 것이죠.

이것이 ARP가 동작하는 방식입니다.

  • L2 스위치는 학습모드를 통해 request가 오면 port에 해당 req를 보낸 장치의 MAC 주소를 기억한다.
  • MAC주소를 모르는 경우 request를 보내려면 ARP를 이용해 Broadcast로 쿼리를 날려 목표하는 장치의 MAC주소를 알아낼 수 있다.

<출처>

profile
웹 개발을 공부하고 있는 윤석주입니다.

0개의 댓글