2000년대 초반에 L3 스위치(Ethernet 스위치 + IP 라우터) 개발 회사에서 IBM NP4GS3C라는 Network Processor(그 당시 칩 하나에 $500이면 상당히 비싼 칩이죠)를 이용하여 패킷 포워딩 기능을 구현(assembler 기반의 microcode)한 적이 있습니다.
그 때의 경험과 추억을 되살려 L3 스위치의 패킷 전달 로직에 대해 설명을 드려 볼까 합니다.
아래와 같은 순으로 연재를 하겠습니다.
1편: 라우터 구조 소개 (오늘 글)
2편: IP 라우터의 패킷 포워딩 과정
3편: L3 스위치의 L2(Ethernet) 스위칭 과정
4편: L3 스위치의 IP 포워딩 과정
라우터 구조
좌측 그림은 Cisco 7600 라우터 형상입니다. 그 역할에 따라 3가지 모듈로 나눌 수 있습니다.
■ Supervisor Engine
- 라우터 시스템 전체를 제어/관리하는 두뇌에 해당하며, 이 모듈에 각종 프로토콜(OSPF, BGP, SNMP, Telnet 등등)이 올라가고, 관리자는 이 모듈에 접속하여 CLI를 통해 장비 전체를 관리할 수 있습니다.
- 보통 Processing power가 우수한 General CPU(인텔 CPU 같은)가 본 모듈에 탑재되고 그 위에 프로토콜들이 포함된 OS (IOS/JUNOS)가 올라갑니다.
- Juniper 라우터의 경우 이 모듈을 Routing Engine이라 부릅니다.
■ Line Card
- 패킷 수신, Table(FIB/ARP) Lookup, QoS 적용(QoS marking, Policing, Queueing), 출력 포트로 패킷 전달을 담당하고(이 모든 과정을 Wire-speed로 처리), 물리적 포트 타입(1GE, 10GE, SONET 등) 및 포트 개수에 따라 다양한 모델명의 Line Card가 존재합니다.
- 이와 같이 Wire-speed로 패킷을 처리하기 위해 Cisco/Juniper의 경우 자체 제작한 ASIC/NP을 사용하고, 국내의 경우 기술력 부족으로 보통 상용 ASIC(예. Broadcom, Marvell 등)을 사용합니다.
- Juniper Router의 경우 이 모듈을 PFE(Packet Forwarding Engine)라 부릅니다.
■ Switch Fabric Module
- Line Card 간에 패킷을 전달하기 위한 가교 역할을 합니다. 예를 들어, 1번 Line Card로 수신된 패킷이 2번 Line Card를 통해 나가야 하는 경우 중간에 이 Switch Fabric Module을 통해 패킷이 전달 됩니다.
- Juniper의 경우 이 모듈을 Switch Fabric이라 부릅니다.
우측 그림은 이번 연재에서 사용하게 될 일반적인 라우터 내부 구조입니다.
■ Control Module (Control Plane)
- Cisco Supervisor Engine/Juniper Routing Engine에 해당하며 Control Plane이라고도 부릅니다.
- 원래는 수많은 프로토콜과 테이블들이 존재하지만 여기서는 이번 연재를 통해 설명 드릴 부분만 그려 보았습니다. Control Module에 올라가는 프로토콜들을 자세히 보고 싶으시면 여기를 클릭하세요.
- OSPF Process가 동작하고, OSPF 프로토콜을 통해 OSPF Neighbor(OSPF Router)로 부터 배운 라우팅 정보 중에 Shortest Path에 해당하는 라우팅 엔트리만 RIB(Routing Information Base)에 인스톨됩니다. (OSPF를 통한 라우팅 정보 배우기는 여기, 여기를 클릭)
- 또한 Line Card의 포트 타입이 Ethernet이라는 가정하에(요즘 대부분 Ethernet이죠), ARP Table이 존재합니다. ARP Table에는 라우터와 바로 연결된 노드(서버, 라우터)의 "IP 주소에 대한 MAC 주소"가 저장됩니다. (Windows PC에 있는 ARP Table(arp -a로 확인)과 동일한 용도입니다.)
■ Line Card (Data Plane)
- Data Plane이라고도 부르며,
- 패킷을 처리하는 가장 핵심적인 부분인 Packet Processor(IBM NP, Broadcom, Marvell 칩이 여기에 해당)를 중심으로
- 수신 패킷을 아주 잠시 저장하는 Ingress Packet Buffer와
- 출력 포트로 패킷을 전달하기 전에 대기하는 장소인 Egress Packet Buffer가 있습니다. Congestion 발생시(예. 1GE 포트로 1Gbps 이상의 패킷들이 나가려고 할 때) Scheduling Algorithm(예. SPQ, WFQ/DWRR)에 따라 우선 순위가 높은 패킷은 빨리 나갈 것이고 그렇지 않은 패킷은 이곳에서 대기하면서 그 순서를 기다리게 됩니다.
- 그리고 수신 패킷을 어느 포트로 보낼 지 결정하기 위해 참조하는 FIB(Forwarding Information Base), 그리고 ARP Table이 존재합니다.
- Packet Processor의 기능에 대해서 자세히 알고 싶으시면 여기를 클릭하세요.
■ Switch Module
- Line Card 간에 패킷을 전달하기 위한 가교 역할을 합니다. 이번 주제가 Switching Fabric 기술이 아니므로 이 정도로...
Control Module(Control Plane)의 RIB/ARP Table과 Line Card(Data Plane)의 FIB/ARP Table
Control Module의 RIB와 Line Card의 FIB에 저장되는 라우팅 엔트리는 벤더 구현에 따라 약간의 차이가 있는 것으로 알고 있습니다. 여기서는 Cisco 기준으로 설명을 드리면,
- OSPF LSDB에는 모든 라우팅 경로가 저장되며, (정확히는 OSPF Neighbor로 부터 받은 모든 LSA 정보를 저장)
- RIB에는 각 목적지로 가기 위한 최단 경로(Shortest Path)에 해당하는 라우팅 엔트리만 인스톨됩니다.
- 그리고 이 RIB에 있는 엔트리들이 각 Line Card의 FIB로 복사가 됩니다.
- 즉, {Control Module의 RIB} = {Line Card #1의 FIB} = {Line Card #2의 FIB} = {Line Card #3의 FIB} = ...
이에 반해 ARP Table은 조금 다릅니다.
각 Line Card에 있는 ARP Table에는 해당 Line Card가 배운 ARP 엔트리(IP & MAC)만 저장이 되고 이 ARP 정보를 다른 Line Card와 공유하지 않습니다 (Line Card #1에서 배운 ARP 엔트리는 다른 Line Card들에서 사용될 필요가 없으므로). 그리고 Control Module의 ARP Table에는 모든 Line Card의 ARP 엔트리 정보가 모두 다 들어 있습니다. ARP 엔트리를 배우는 과정은 다음 시간에 설명 드리겠습니다.
따라서 Cisco Router에서 show ip route나 show ip arp 명령으로 확인되는 정보는 바로 Control Module의 RIB와 ARP Table입니다.
Ingress, Egress란?
Ingress는 Incoming, Egress는 Outgoing의 의미를 가집니다.
예를 들어 "1번 Line Card의 ge1/4 포트로 수신된 패킷이 2번 Line Card의 ge2/3 포트로 출력된다고 하면" 다음과 같이 부르게 됩니다.
- 패킷이 수신된 ge1/4를 Ingress Port
- 패킷이 수신된 Line Card #1을 Ingress Line Card
- 패킷이 송신된 ge2/3을 Egress Port
- 패킷이 송신된 Line Card #2를 Egress Line Card
즉, Router의 Line Card와 Port는 패킷의 흐름에 따라 Ingress가 될 수도 있고 Egress가 될 수도 있습니다.
수고하셨습니다.
제가 알기로는 RIB(routing information base)에는 라우터가 학습한 모든 경로가 저장되고 최적의 경로만
라우팅 테이블로 올리고, 라우팅 테이블에 있는 경로가 다운 되었을 때 그 다음 순위의 경로가 라우팅 테이블에
올라 온다고 배운것 같은데..위의 설명은 제가 알고 있는 것이랑은 다르네요..제가 잘못 알고 있었던게 맞죠?
또, RIB와 라우팅 테이블과의 차이는 뭔지 알 수 있을가요?
아래 링크에 그림/설명과 같이,
http://blog.ioshints.info/2010/09/ribs-and-fibs.html
각 Routing Process(such as OSPF, BGP, etc)는 자신이 학습한 모든 경로를 가지고 있고, 그 중에 최적의 경로만 RIB(Routing Table)에 저장되는 것으로 알고 있습니다.
머리속에서 잘 정리가 안되는데..
제 생각을 말씀 드리면 RIB(routing information base)에는 ospf,rip,bgp 등등.. 네이버를 통해 학습한 모든 경로의 정보가 저장되고, 여기서 spf알고리즘 계산을 통해 가장 빠른 경로만 routing table에 올라 온다고 알고 있는데..
님 말씀 대로라면 rib=routing table 이 되는데..그럼 라우터가 라우팅 프로토콜을 통해 학습한 모든 경로가 저장되는 곳은 어딘지 알 수 있을가요? 예를 들면 sh ip route ospf database, sh ip route rip database 이러한 command로 확인 되는 정보가 저장되 있는 곳
질문에 대해서 아는만큼 답변 드리겠습니다.
간단하게는 모두 메모리(DRAM) 에 있습니다.
DRAM내에서 각 Routing Protocol별 Database가 따로 존재하고 있는것이죠.
일반적인 Cisco Module 형 장비인 Catalyst 6500/7600 기준으로, Control Board인 Supervisor라는 모듈은 MSFC 와 PFC로 나뉘어져 있으며,
MSFC는 Control Plane을 주관하며, PFC는 Data Plane을 주관합니다.
그런 이유로, Routing Table(RIB) 은 MSFC의 메모리(정확하게는 RP DRAM)에 있으며, Forwarding Table(FIB)는 PFC의 메모리(FIB TCAM)에 있습니다.
MSFC는 RP(Route Processor)와 SP(Swtich Processor)가 나뉘어져 있어,
RP DRAM 에 있는 각 Routing Protocol별 Database들은 RP(Route Processor)를 통해서 RIB가 생성됩니다.
그 후 SP(Switch Process)를 통해 RIB로부터 FIB를 생성하여 PFC및 각 Linecard에 있는 DFC 카드에있는 메모리에 넣어줍니다.
혹시 향후에 Cisco장비에 접속할 기회가 있으시다면, 'show process memory' 명령어로 Routing Protocol별 메모리 사용량을 알 수 있을것입니다.
왜냐면 ARP Table이란게 Next Hop에 대한 MAC 주소를 가지고 있는 테이블인데, 예를 들어 라우터의 Interface가 Ethernet이 아닌 SONET인 경우 MAC 주소가 필요치 않아 ARP Table이 필요 없습니다.
따라서 FIB와 ARP는 분리되어 있을 것으로 생각이 됩니다.
각 Line Card에 있는 ARP Table에는 해당 Line Card가 배운 ARP 엔트리(IP & MAC)만 저장이 되고..
이 부분에서 배운 이라는 단어 선택이 좀 애매모호 한것 같습니다.
Line Card ARP Cache table에 존재하지 않은 엔트리를 Control Module의 ARP module에게 요청한 후 정보을 복제하여 보관하고 있는 것이 사실이라면, "배운"이라는 단어는 Line Card 스스로 학습한 것으로 오해석 되는 경향이 있는것 같습니다.
감사합니당ㅇㅇ