856. OpenFlow Flow Table (플로우 테이블) - 매치 필드, 액션, 통계 수집기 엔트리 파싱 테이블 구조 규정
핵심 인사이트: 855번에서 중앙 컨트롤러(뇌)가 깡통 스위치에게 "어떻게 해라"라는 규칙을 내려보낸다고 했다. 그렇다면 깡통 스위치의 머릿속에는 이 수천 줄의 규칙이 도대체 어떤 '엑셀 표' 모양으로 적혀 있을까? 패킷이 들어왔을 때 1번 구멍으로 던질지, 찢어버릴지, IP를 바꿔치기할지를 판단하는 완벽하고 아름다운 3칸짜리 엑셀 장부, 그것이 바로 플로우 테이블(Flow Table)이다. 스위치는 평생 이 장부만 보고 무식하게 일한다.
Ⅰ. 플로우 테이블(Flow Table)의 개념
- 개념: OpenFlow 스위치의 핵심 데이터 구조로, 컨트롤러로부터 하달받은 패킷 처리 규칙(Rule)들을 저장해 두는 **'라우팅 및 스위칭 전용 규칙 장부(데이터베이스)'**입니다.
- 스위치로 패킷이 들어오면, 이 테이블의 첫 번째 줄(Entry)부터 순서대로 내려가며 조건이 맞는지 1초 만에 스캔(Parsing)합니다.
Ⅱ. 플로우 엔트리(Flow Entry)의 3대 핵심 구조 🌟
장부의 가로 한 줄(Entry)은 완벽하게 [ 1. 찾기(Match) ➜ 2. 조치(Action) ➜ 3. 기록(Stats) ] 세 가지 칸으로 구성됩니다.
1. 매치 필드 (Match Fields) - "이런 조건의 놈이 오면"
- 들어온 패킷의 껍데기를 엑스레이로 뜯어보고 조건을 걸러내는 검색 칸입니다.
- L2(MAC 주소, VLAN ID), L3(출발지/목적지 IP 주소), L4(TCP/UDP 포트 번호) 등 패킷의 머리부터 발끝까지 약 40개의 필드를 보고 조건을 잡을 수 있습니다.
- 예시 조건:
[Match: 목적지 IP가 192.168.1.100 이고, TCP 포트가 80(웹)인 패킷이 들어오면...]
2. 액션 (Actions) - "이렇게 때려버려라!" 🌟
- 매치 필드 조건에 딱 걸린 패킷에게 무자비하게 가할 조치 명령입니다.
- 핵심 액션 3가지:
- Forward (전달): "스위치의 3번 물리 포트(구멍)로 광속으로 던져라!" (기본 라우팅)
- Drop (폐기): "해커 패킷이다! 바닥에 던져서 찢어버려라!" (방화벽 역할)
- Modify / NAT (변조): "패킷 목적지 IP를 10.0.0.5로 바꿔치기(NAT)해서 던져라!" 또는 "VLAN 꼬리표를 뜯어내라!" (로드밸런서/L2 조작 역할)
3. 통계 카운터 (Counters / Stats) - "기록 장부"
- 조건에 맞아서 액션을 때릴 때마다, 그 패킷들의 흔적을 몰래 엑셀에 '+1'씩 기록해 둡니다.
- "지금까지 이 규칙에 걸린 패킷 개수: 15,302개, 용량: 2.3GB"
- 이 통계 기록은 위층에 있는 컨트롤러가 쏙 빼가서(Polling), 트래픽 모니터링 그래프를 그리거나 요금을 청구(과금)할 때 요긴하게 써먹습니다.
Ⅲ. Table Miss (장부에 답이 없을 때의 행동) 🌟
패킷이 들어와서 장부를 1번 줄부터 100번 줄까지 쫙 다 뒤졌는데, 조건(Match)에 맞는 놈이 하나도 없으면 스위치는 멘붕에 빠집니다(Table Miss). 이때 어떻게 할까요?
- 보통 장부의 맨 밑바닥 마지막 줄에 꼼수로 **'Table-Miss Entry(기본 조치 규칙)'**을 딱 하나 박아둡니다.
- 행동 1 (Packet-In 보고): "모르는 놈이네! 위에 있는 뇌(컨트롤러)한테 무전 쳐서 '형님 이거 어떡할까요?' 하고 물어봐라(Packet-In, 855번 참조)."
- 행동 2 (가차 없는 Drop): 뇌를 귀찮게 하기 싫으면 아예 "모르는 놈은 다 해커다! 무조건 찢어버려(Drop)!"라고 세팅할 수도 있습니다.
Ⅳ. 다중 테이블 파이프라인 (Multi-Table Pipeline)
- OpenFlow 버전 1.1부터는 엑셀 장부를 1개만 두지 않고 수십 개를 이어서(Pipeline) 씁니다.
- 0번 테이블에서는 MAC 주소만 훅 검사하고 통과시키고, 1번 테이블에서는 IP 주소를 빡세게 검사하고, 2번에서는 액션을 때리는 식으로 책임을 쪼갭니다. 메모리 절약과 처리 속도가 수십 배 올라가는 현대 오픈플로우의 필수 기능입니다.
📢 섹션 요약 비유: 플로우 테이블은 스위치라는 깡통 경비원이 가슴에 품고 있는 '출입 통제 행동 수칙 장부'입니다. 이 장부는 아주 무식하고 직관적입니다. 택배기사(패킷)가 문 앞에 오면, 경비원은 첫째로 **'매치 필드(조건)'**를 봅니다. "모자 썼고(TCP 80), 가슴에 192번(IP) 적혀있네?" 조건에 맞으면 두 번째로 옆 칸에 적힌 **'액션(행동)'**을 수행합니다. "오른쪽 3번 방으로 발로 차 넣어라!(Forward)" 행동이 끝나면 세 번째로 뒷장 **'카운터(통계)'**에 "오늘 3번 방으로 넣은 택배 1건 추가"라고 바를 정(正)자를 긋습니다. 만약 수칙 장부를 끝까지 뒤졌는데도 조건에 맞는 놈이 없다면(Table-Miss), 경비원은 무전기를 들어 관리실(컨트롤러)에 "대장님! 처음 보는 택배인데 어떡합니까?"라고 묻고 지시를 기다리는 완벽하고 단순한 순서도(알고리즘) 시스템입니다.