지난 시간에는 라우터의 IP 라우팅 과정에 대해서 알아보았는데요.
위 그림의 L3 스위치 구조를 보시면 지난 시간의 Router 구조와 달리 Control Module과 Line Card에 VLAN Table 및 MAC Table이 존재하며, 이는 동일 VLAN에 속한 포트간에 Ethernet Switching을 하기 위해 필요한 테이블입니다.
1.1 서버 SVR1에서 SVR3으로 패킷 전달 - Unknown MAC (Flooding)
① SVR1에서 목적지 1.1.1.30으로 패킷을 보내려 합니다. (Ping이라 가정하겠습니다.)
② SVR1의 Routing Table lookup 결과, 목적지 주소 1.1.1.30은 SVR1(1.1.1.10)과 동일 네트워크에 위치한 주소입니다.
③ SVR1의 ARP Table lookup 결과, 목적지 주소 1.1.1.30의 MAC 주소는 m3입니다. (설명을 간략하게 하려고 - 그래도 매우 복잡하긴 합니다만 - SVR1의 ARP Table에 해당 엔트리가 이미 있다고 가정함)
④ SVR1은 목적지 주소 1.1.1.30으로 패킷을 송신합니다. 패킷 구성은 다음과 같습니다.
[Ethernet Header] Destination MAC 주소 = m3(SVR3의 MAC 주소), Source MAC 주소 = m1(SVR1의 MAC 주소)
[IP Header] Destination IP 주소 = 1.1.1.30(SVR3의 IP 주소), Source IP 주소 = 1.1.1.10(SVR1의 IP 주소)
⑤ ge1/1 포트로 패킷을 수신한 R1의 Line Card #1은 이 패킷을 잠시 Ingress Packet Buffer에 저장합니다.
Source MAC Learning
⑥ 이제 수신 패킷의 Source MAC 주소를 learning할 차례입니다. 그래서 Line Card #1의 Packet Processor는 수신된 패킷의 Source MAC 주소인 m1이 자신의 MAC Table에 등록되어 있는지 확인합니다. 이 경우 등록되어 있지 않습니다.
⑦ 따라서 Packet Processor는 Source MAC Learning Event(VLAN=10, Source MAC=m1, Port=ge1/1)를 Control Module로 보냅니다.
⑧ 본 Event를 수신한 Control Module은 자신의 MAC Table에 그 값(VLAN 10에 속한 ge1/1 포트에 Source MAC 주소 m1이 존재함)을 기록합니다(Source MAC learning을 합니다).
⑨ 이제 Control Module은 learning한 MAC 정보를 Line Card에 전달해야 하는데, 이 때 모든 Line Card가 해당 MAC 정보를 필요로 하지는 않습니다. 동일 VLAN을 소유한 Line Card들만 그 정보를 공유하면 됩니다. 따라서 Control Module은 VLAN Table을 참조하여 VLAN 10에 속한 포트가 ge1/1, ge1/2, ge2/1이므로 VLAN 10을 소유한 Line Card가 #1과 #2임을 알게 됩니다. VLAN Table은 CLI를 통해 각 Port에 VLAN 값을 할당할 때 그 엔트리가 생성됩니다.
⑩ Control Module은 MAC 정보(VLAN=10, Source MAC=m1, Port=ge1/1)를 Line Card #1, #2로 전달하여 MAC Table에 그 값을 저장하게 합니다(Source MAC learning을 하도록 합니다).
IP Routing or Ethernet Switching
⑪ 그런 후 이 패킷을 IP routing 시킬 것인가(FIB lookup을 통해 패킷 전달), Ethernet switching 시킬 것인가(MAC Table lookup을 통해 패킷 전달)를 결정하기 위해 수신된 패킷의 Destination MAC 주소를 참조합니다.
수신된 패킷의 Destination MAC 주소가
Ethernet Switching based on Destination MAC
⑫ 이제 Ethernet Switching(패킷 전달)을 할 차례입니다. 따라서 Line Card #1의 Packet Processor는 수신된 패킷의 Destination MAC 주소 m3가 자신의 MAC Table에 있는지 검사합니다. 이 경우 없습니다.
⑬ Ethernet의 경우 MAC Table에 해당 엔트리(Destination MAC 정보)가 없으면 동일 VLAN에 속한 포트 중에 수신된 포트를 제외한 나머지 모든 포트로 패킷을 Flooding 합니다. 따라서 Packet Processor는 VLAN Table을 참조하여 수신 포트를 제외한 ge1/2와 ge2/1로 패킷을 Flooding 해야 함을 알게 됩니다.
⑭ Line Card #1의 Packet Processor는 동일 Line Card내의 포트인 ge1/2로 패킷을 전달하기 위해 Ingress Packet Buffer에 있는 패킷을 Egress Packet Buffer로 옮기고, 다른 Line Card의 포트인 ge2/1로 패킷을 전달하기 위해 Switching Fabric을 거쳐 Line Card #2의 Egress Packet Buffer로 패킷을 전달합니다.
⑮ 이제 QoS 정책에 따라 그 패킷은 지금 즉시 혹은 조금 늦게 ge1/2와 ge2/1로 Flooding 되어 SVR2와 SVR3가 그 패킷을 수신하게 됩니다.
① SVR2와 SVR3가 패킷을 수신하며, Destination MAC 주소가 m3이므로 SVR2는 이 패킷을 버립니다(자신의 MAC 주소가 아니므로). 그리고 SVR3는 그 응답(Ping에 대한 응답)으로 목적지 주소 1.1.1.10으로 패킷을 전달합니다(이 경우도 역시 SVR3가 SVR1의 MAC 주소 m1을 알고 있다고 가정하겠습니다). 패킷의 구성은 다음과 같습니다.
[Ethernet Header] Destination MAC 주소 = m1(SVR1의 MAC 주소), Source MAC 주소 = m3(SVR3의 MAC 주소)
[IP Header] Destination IP 주소 = 1.1.1.10(SVR1의 IP 주소), Source IP 주소 = 1.1.1.30(SVR3의 IP 주소)
다시 한번 개념 정리를 하는데 많은 도움이 되었습니다.
설명 정말 잘 보았습니다.
질문이 있는데요.
질문1.
R1에 연결된 SVR들이 모두 VLAN10이나 어느 VLAN에 속하지 않는다해도
같은 네트워크에 속할 수 있나요?
그래야만 Ehternet Swithching이 가능할 것이라 생각하는데..
VLAN으로만 같은 네트워크 임을 알 수 있나요??
잘 배우고 갑니다.
한가지 궁금한 것이 있어 문의 드립니다.
router에 특정 대역은 어느 port로 연동된다고 설정을 해놓을 수 있는 것 같은데요. (VLAN table 처럼)
만약 지정되지 않은 쪽에서 MAC learning이 일어나는 경우는 어떻게 될까요?
예를 들면, ge1이 1.1.x.x 대역에 대한 연동 port로 설정되어 있는데, 1.1.1.3이란 IP packet이 뜬금없이 ge2로부터 들어오게 되면 MAC learning에 의해서 이후 목적지 1.1.1.3 주소에 대한 packet 전달 시 ge2가 연동 port로 설정되나요?
아니면 이런 경우는 network의 꼬임으로 인해서 오류 처리가 되는 것인가요?
아니면 우선순위(이런 의미가 맞는지 모르겠지만)에 따라 설정된 ge1 port로 목적지 1.1.1.3 주소의 packet이 전달되게 되나요?
제가 직접 라우터를 다루지는 않지만, 라우터는 L3 계층인 IP 계위 이상에서 패킷을 송수신하는 장비이기 때문에
L2 스위치처럼 MAC Learing에 따라 패킷 전달 방향이 오락가락 하지는 않습니다.
실제로 라우터에 "발신 IP 제한"을 걸어 놓으면 수신 패킷의 발신지 IP가 사전 등록한 IP가 아닌 한 라우터는
모두 패킷을 버립니다.
L2 스위치의 경우에는 MAC 필터링이라는 기능이 "발신 IP 제한" 대신에 있고, 이 경우에는 IP는 보지 않고
포트에 사전 등록하지 않은 MAC 을 발신 MAC으로 달고 오는 패킷은 모두 버립니다.
답변 감사합니다~
위에 말씀하신대로면 라우터는 Vlan Table은 따로 없는건가용?
글 올리신지 꽤 되셨지만 늦게나마 이 글을 보고 질문이 생겼습니다~~
1.1.1.30 server3로 패킷을 전송하려고 할 때 svr3의 mac 주소가 m3이라는걸 svr1이 기존에 알고 있었다 라고 가정하셨다고 했는데
그렇다면 m3인걸 몰랐다면 어떤 과정이 추가되는지 궁금합니다.
그걸 알아내기 위해 ARP request를 브로드캐스팅 하나요? 브로드캐스팅을 하면 svr3가 그에 대한 응답을 했을거고 그러면 사이에
위치한 l3 스위치는 벌써 source learning을 하면서 mac table을 추가했겠네요?
좋은글 감사합니다.