iBetter Books
수정

허브에서 스위치로

초기 이더넷 네트워크에서 여러 컴퓨터를 연결할 때는 허브라는 장치를 썼습니다. 허브는 단순합니다. 어느 포트에서 신호가 들어오면 다른 모든 포트로 그대로 내보냅니다. 한 컴퓨터가 보낸 프레임이 같은 허브에 연결된 모든 컴퓨터에 도착합니다. 받고 싶지 않은 컴퓨터도 프레임을 받아 목적지 MAC 주소를 확인하고, 자기 것이 아니면 버립니다. 이 구조에서는 충돌이 발생하고 CSMA/CD가 필요했습니다.

스위치가 다른 이유

스위치는 MAC 주소를 이해합니다. 각 포트에 어떤 MAC 주소를 가진 장치가 연결되어 있는지 스스로 학습하고, 그것을 MAC 주소 테이블에 기록합니다. 프레임이 들어오면 목적지 MAC 주소를 테이블에서 찾아, 그 주소가 연결된 포트로만 내보냅니다. 나머지 포트의 장치들은 그 프레임을 보지도 못합니다.

이 차이가 얼마나 큰지 생각해 보십시오. 허브에서는 A가 B에게 보내는 프레임을 C, D, E가 모두 받았습니다. 스위치에서는 B에게만 갑니다. 네트워크가 조용해지고, 충돌이 사라집니다.

MAC 주소 테이블은 어떻게 채워지나

스위치는 학습합니다. 어떤 포트에서 프레임이 들어오면, 그 프레임의 출발지 MAC 주소와 포트를 테이블에 기록합니다. "2번 포트에서 AA:BB:CC:DD:EE:FF 주소의 장치가 말을 걸어왔다"는 식입니다. 이 방식으로 통신이 오가면서 점차 테이블이 채워집니다.

아직 테이블에 없는 목적지 MAC 주소가 들어오면, 스위치는 잠시 허브처럼 동작합니다. 모든 포트로 내보냅니다. 이것을 플러딩이라고 부릅니다. 응답이 오면 그때 테이블에 기록합니다. 브로드캐스트 주소(FF:FF:FF:FF:FF:FF)가 목적지인 프레임도 항상 플러딩합니다.

실습 — arp -a로 이웃 확인하기

ARP는 Address Resolution Protocol로, IP 주소를 MAC 주소로 변환합니다. 내 컴퓨터는 통신한 적 있는 이웃들의 IP-MAC 매핑을 ARP 캐시에 저장해 둡니다. 이것을 직접 확인해 봅시다.

# 파일: 터미널
arp -a

macOS, Linux, Windows 모두 같은 명령입니다. 출력 예시는 다음과 같습니다.

192.168.0.1 (192.168.0.1) at a8:6b:7c:12:34:56 [ether] on en0
192.168.0.10 (192.168.0.10) at 2c:f0:5d:4a:11:b3 [ether] on en0
192.168.0.15 (192.168.0.15) at <incomplete> on en0

각 줄이 의미하는 것을 하나씩 읽어 봅시다. 첫 번째 줄은 192.168.0.1이라는 IP 주소를 가진 장치의 MAC 주소가 a8:6b:7c:12:34:56이라는 뜻입니다. 보통 이 IP는 공유기입니다. [ether]는 이더넷 방식으로 연결되어 있다는 표시이고, en0은 내 컴퓨터의 네트워크 인터페이스 이름입니다.

두 번째 줄은 같은 네트워크 안의 다른 장치입니다. 세 번째 줄의 <incomplete>는 ARP 요청은 보냈는데 아직 응답이 없어서 MAC 주소를 모르는 상태입니다. 전원이 꺼진 장치이거나 연결이 끊긴 경우입니다.

한 가지 구분해 둘 것이 있습니다. 이 ARP 캐시는 내 컴퓨터가 보관하는 IP-MAC 매핑으로, 스위치가 따로 학습하는 MAC 주소 테이블(MAC-포트 매핑)과는 다른 테이블입니다. 내 컴퓨터가 공유기에게 패킷을 보낼 때, 이 ARP 캐시에서 공유기의 MAC 주소를 꺼내 이더넷 프레임의 목적지 MAC 주소 필드에 넣습니다. 데이터링크계층의 동작이 실제로 내 터미널에서 확인되는 순간입니다.

PART 03에서 배운 데이터링크계층, 프레임, 오류 검출, 흐름 제어, MAC 주소, 스위치는 이웃과의 단 한 구간을 책임집니다. 다음 PART에서는 이 구간들을 엮어 전 세계로 데이터를 보내는 네트워크계층, 곧 IP 라우팅의 세계를 살펴봅니다.