스위치는 네트워크 중간에서 패킷을 받아 필요한 곳에만 보내주는 네트워크 중재자 역할을 합니다.
스위치는 아무 설정 없이 네트워크에 연결해도 MAC 주소를 기반으로 패킷을 전달하는 기본 동작을 수행할 수 있습니다.
이 기본 동장 이외에도 다음 동작이 가능합니다.
이번 장에서는 패킷 처리를 위한 스위치의 필수 기능에 대해서 다룹니다.
2계층에서는 PDU가 프레임이지만 데이터를 분해해 전달하는 단위 자체를 패킷이라고 통칭하므로 편의상 패킷이라 사용합니다.
스위치가 없던 오래된 이더넷 네트워크에서는 패킷을 전송할 때 서로 경합해 그로 인한 네트워크 성능 저하가 컸습니다.
이런 경쟁을 없애고 패킷을 동시에 여러 장비가 서로 간섭 없이 통신하도록 도와주는 장비가 스위치입니다.
스위치를 이용하면 여러 단말이 한꺼번에 통신할 수 있어 통신하기 위해 기다리거나 충돌 때문에 대기하는 문제가 해결되고 네트워크 전체의 통신 효율성이 향상됩니다.
스위치는 MAC 주소 테이블을 가지고 있습니다.
MAC 주소 테이블은 MAC 주소와 단말이 위치하는 인터페이스 정보를 매핑한 것으로 스위치의 역할을 가능하게 합니다.
스위치는 전송하려는 패킷의 헤더 안에 있는 2계층 목적지 주소를 확인하고 MAC 주소 테이블에서 해당 주소가 어느 포트에 있는지 확인해 해당 패킷을 그 포트로만 전송합니다.
만약 테이블에 없는 도착지 주소를 가진 패킷이 스위치로 들어오면 스위치는 전체 포트로 패킷을 전송합니다.
이런 식으로 테이블 상태에 따라 다르게 동작하는 스위치의 동작을 크게 세 가지로 나누어 볼 수 있습니다.
스위치는 부팅하면 네트워크 관련 정보가 아무 것도 없습니다.
이때 스위치는 네트워크 통신 중재 역할을 하지 못하고 허브처럼 동작하게 됩니다. 즉 허브처럼 패킷이 들어온 포트를 제외하고 모든 포트로 패킷을 전달합니다.
이처럼 스위치가 허브처럼 모든 포트로 패킷을 흘리는 동작 방식을 플러딩이라고 합니다.
패킷이 들어오면 도착지 MAC 주소를 확인하고 MAC 주소 테이블에서 해당 MAC 주소가 있는지 확인합니다.
MAC 주소 테이블에 매칭되는 목적지 MAC 주소 정보가 없으면 플러딩해줍니다. 스위치는 LAN에서 동작하므로 자신이 정보를 갖고 있지 않더라도 어딘가에 장비가 있을 수 있다고 가정하고 이와 같은 작업을 수행합니다.
이런 플러딩 동작은 스위치의 정상적인 동작이지만 이런 동작이 많아지면 스위치가 제 역할을 못하게 됩니다.
스위치는 패킷이 들어오면 패킷 정보의 MAC 주소를 보고 이를 학습해 MAC 주소 테이블을 만든 후 이를 통해 패킷을 전송합니다.
이더넷-TCP/IP 네트워크에서는 ARP 브로드캐스트를 미리 주고받은 후 데이터가 전달되므로 실제로 데이터를 보내고 받을 때는 스위치가 패킷을 플러딩하지 않습니다.
스위치를 사용하면 필요한 곳에만 패킷을 포워딩하므로 주변 통신을 악의적으로 가로채기 힘들어 모든 패킷을 플러딩하는 허브에 비해 보안에 도움이 됩니다.
이런 스위치 기능을 무력화해 주변 통신을 모니터링하는 공격 기법이 사용됩니다.
즉 아무 이유없이 스위치가 패킷을 플러딩한다면 스위치가 정상적으로 동작하지 않거나 주변에서 공격이 수행되는 상황임을 알아야 합니다.
이 외에도 ARP 포이즈닝 기법을 이용해 모니터링해야할 IP의 MAC 주소가 공격자 자신인 것처럼 속여 원하는 통신을 받는 방법을 사용하기도 합니다.
스위치가 패킷의 도착지 MAC 주소를 확인하여 원하는 포트로 포워딩하는 스위치의 동작을 정상적으로 수행하려면 MAC 주소 테이블을 만들고 유지해야 합니다.
이런 MAC 주소 테이블을 만들고 유지하는 과정을 어드레스 러닝이라고 합니다.
패킷이 특정 포트에 들어오면 스위치에는 해당 패킷의 출발지 MAC 주소와 포트 번호를 MAC 주소 테이블에 기록합니다.
1번 포트에서 들어온 패킷의 출발지 MAC 주소가 AA라면, MAC 주소 테이블에 1번 포트에 AA MAC 주소 장비가 연결되어 있다고 기록할 수 있습니다.
어드레스 러닝은 출발지의 MAC 주소를 통해 학습하므로 브로드캐스트나 멀티캐스트 시에 사용되는 목적지 MAC 주소를 학습할 수 없습니다. 이들의 MAC 주소는 목적지 MAC 주소 필드에서만 사용되기 때문입니다.
스위치는 MAC 어드레스 러닝 작업으로 주변 장비의 MAC 주소를 학습하는 것 외에도 사전에 미리 정의된 MAC 주소 정보를 가지고 있습니다.
이런 사전 정의된 주소는 패킷 처리를 위한 주소가 아니라 스위치 간 통신을 위해 사용되는 주소입니다.
스위치에서 자체 처리되는 주소는 특정 포트로 내보내는 것이 아니라 스위치에서 자체 처리하므로 인접 포트 정보가 없거나 CPU 혹은 관리 모듈을 지칭하는 용어로 표기됩니다.
스위치에서 MAC 주소 테이블을 보기 위한 show mac address-table
명령어를 사용합니다.
스위치는 패킷이 들어온 경우 도착지 MAC 주소를 확인하고 자신의 MAC 주소 테이블과 비교해 맞는 정보가 있으면 매치되는 해당 포트로 패킷을 포워딩합니다.
이때 다른 포트로는 해당 패킷을 보내지 않으므로 이 동작을 필터링이라고 합니다.
스위치는 이런 포워딩과 필터링을 통해 목적지로만 패킷이 전달되도록 동작합니다.
스위치에서는 포워딩과 필터링 작업이 여러 포트에서 동시에 수행될 수 있습니다. 통신이 다른 포트에 영향을 미치지 않으므로 다른 포트에서 기존 통신 작업으로부터 독립적으로 동작할 수 있습니다.
BUM 트래픽이라 부르는 브로드캐스트와 언노운 유니캐스트, 멀티캐스트는 조금 다르게 동작합니다.
브로드캐스트와 멀티캐스트 모두 필터링 작업을 하지 않고 모두 플러딩합니다. 또한 언노운 유니캐스트도 MAC 주소 테이블에 없는 주소이므로 브로드캐스트와 동일하게 플러딩 동작합니다.
이전에 얘기했듯, 이더넷-TCP/IP 네트워크에선 스위치가 유니캐스트를 플러딩하는 경우는 거의 없습니다.
패킷을 만들기 전에 통신해야 하는 단말의 MAC 주소를 알아내기 위해 ARP 브로드캐스트가 먼저 수행되어야 하므로 유니캐스트보다 ARP 브로드캐스트가 먼저 네트워크에 전달됩니다.
이 ARP를 이용한 MAC 주소 습득 과정에서 이미 스위치는 통신하는 출발지와 목적지 MAC 주소를 습득할 수 있고 실제 유니캐스트 통신이 시작되면 이미 만들어진 MAC 주소 테이블로 패킷을 포워딩, 필터링 합니다.
ARP와 MAC 테이블은 일정 시간 동안 지워지지 않는데 이 시간을 에이징 타임(Aging Time)이라고 합니다.
일반적으로 MAC 테이블의 에이징 타임이 ARP 에이징 타임보다 길어 이더넷 네트워크를 플러딩 없이 효율적으로 운영할 수 있습니다.
[IT 엔지니어를 위한 네트워크 입문] 도서를 참조해 공부한 내용입니다.
감사합니다.
Photographs by Chaelin, Unsplash.