Netflow 정의
데이터가 Src 에서 Dst 까지 이동하는 행위를 flow, 패킷 flow라고 표현함
Flow란 동일한 5튜플(출발 IP, 도착 IP, 출발 포트, 도착 포트, 프로토콜)을 공유하는 패킷의 단방향 스트림
Netflow는 Cisco에서 1990년대 중반에 개발한 프로토콜로 SNMP와 같이 네트워크 장비들에서 발생하는 트래픽을 모니터링하기 위한 프로토콜임
현재는 IETF에서 IPFIX라는 표준을 출시하여 타벤더들에서도 사용하고 있는 프로토콜임
벤더 종속성
시스코 제품이 아니더라도 NFv9 및 IPFIX를 내보낼 수 있습니다. 다시 말해, 다른 회사에서도 NFv9 및 IPFIX 내보내기 기능을 개발했기 때문에 "NFv9" 또는 "IPFIX"라고 해서 반드시 시스코 제품을 의미하는 것은 아닙니다.
Netflow는 Cisco에서 최초 개발했지만 사실표준처럼 확장됨 따라서 Netflow를 사용한다고 하여서 꼭 Cisco 장비는 아님
v10 IPFIX 부터는 IETF 국제 표준으로 표준 프로토콜이며 벤더별로 Netflow와 유사한 프로토콜을 지원하고 있음
| 벤더 | 솔루션명 |
| Juniper | Jflow |
| Huawei | NetStream |
| MikroTik | Traffic Flow |
Netflow와 타 프로토콜과의 차이
기존 SNMP는 네트워크 장비에서 발생한 트래픽의 총량은 확인할 수 있으나 해당 트래픽의 정보(SIP, DIP Protocol 등)은 확인할 수 없음
그러나 Netflow를 통해 어디서 누가 얼마나 트래픽을 발생 시키는지 구분 가능하며 수집한 데이터를 압축하여 원격 서버로 전송이 가능
SNMP(단순 네트워크 관리 프로토콜) : SNMP는 장치 상태 및 연결 상태와 같은 유용한 상태 데이터를 제공하기 때문에 장치 모니터링에 널리 사용됩니다. 그러나 NetFlow와 달리 특정 트래픽 흐름을 분석하거나 사용자 또는 애플리케이션별 대역폭을 분석할 수 있는 세부적인 정보는 제공하지 않습니다. SNMP는 5분마다 장치 메트릭을 제공하는 반면, NetFlow는 실시간으로 흐름 데이터를 제공합니다.
sFlow : sFlow는 NetFlow와 유사하게 실시간 네트워크 모니터링을 제공하지만, 모든 패킷을 추적하는 대신 트래픽을 샘플링합니다. 이는 대용량 데이터가 처리되는 고속 네트워크에 유용합니다.NetFlow의 트래픽 기록은 더 포괄적인 정보를 제공하므로 많은 관리자와 엔지니어가 심층적인 트래픽 분석을 위해 선호합니다. sFlow는 1,000개 패킷 중 1개만 샘플링하는 반면, NetFlow는 전체 트래픽 대화를 분석합니다.
J-Flow(주니퍼): 여러 공급업체가 함께 사용되는 환경에서 사용되는 주니퍼의 NetFlow와 유사한 프로토콜입니다. 대부분의 NetFlow 분석 소프트웨어는 두 프로토콜을 모두 지원하므로 하나의 플랫폼에서 시스코와 주니퍼 제품이 혼합된 네트워크를 모니터링할 수 있습니다.
패킷 스니퍼Wireshark : 와 같은 패킷 스니퍼 는 모든 패킷을 캡처하여 심층적인 패킷 검사 및 문제 해결을 지원합니다. 패킷 스니퍼는 정밀한 패킷 분석에 유용하지만, 리소스 소모가 많고 확장성이 떨어지며 NetFlow처럼 고수준의 요약 정보를 제공하지 않습니다. 따라서 NetFlow는 장기적인 트래픽 모니터링 및 대역폭 모니터링에 더 적합합니다.
Netflow 사용의 장점
1. 보안위협탐지 : SRC와 DST를 식별할 수 있어 인가되지 않은 사용자를 탐지할 수 있음
2. 대역폭 최적화 : 어느 구역, 어느 시점, 어느 애플리케이션에서 트래픽이 많이 발생하고 있는지 특정할 수 있기 때문에 관리자가 이에 대응하기에 최적화돼 있음
Netflow 사용의 단점
1. 데이터 수집 시점의 IP를 기록함 : FW 뒷단에서 수집하게 되면 SRC는 실제 사용자가 아닌 NAT된 IP로 표시될 것임. 실제 문제는 더 뒷단에 있다면 이를 구분할 수 없음
2. 사용자를 식별하지는 못함 : IP를 기준으로 식별하는 거지 특정 사용자가 누구인지는 알 수 없음
3. Flow 내부를 확인할 수 없음 : 밑에서 더 설명할 것이지만 Netflow가 더욱 다양한 정보를 제공할 순 있지만 사용자의 Payload 내부까지 확인할 순 없음
Version 별 차이
현재 가장 최신 버전은 IETF에서 발표한 IPFIX(v10)이고 Flexible Netflow를 말하면 v9, v10을 지칭하는 것임

| 버전 | 설명 |
| v1 | 최초 구현 버전으로 현재는 더 이상 사용되지 않으며 IPv4(IP 마스크 및 AS 번호 없음)로 제한됩니다. |
| v2 | 시스코 내부 버전으로, 공개된 적은 없습니다. |
| v3 | 시스코 내부 버전으로, 공개된 적은 없습니다. |
| v4 | 시스코 내부 버전으로, 공개된 적은 없습니다. |
| v5 | 가장 일반적인 버전으로, (2009년 기준) 여러 브랜드의 다양한 라우터에서 사용할 수 있지만 IPv4 흐름으로 제한됩니다. |
| v6 | 시스코에서 더 이상 지원하지 않습니다. 캡슐화 정보(?). |
| v7 | 소스 라우터 필드가 있는 버전 5와 유사합니다. 시스코 카탈리스트 스위치에서만 사용되는 것 같습니다. |
| v8 | 여러 가지 집계 형식이 있지만, 버전 5 레코드에 이미 있는 정보에만 해당됩니다. |
| v9 | 템플릿 기반이며, (2009년 기준) 일부 최신 라우터에서 사용할 수 있습니다. 주로 IPv6, MPLS 또는 BGP 넥스트홉을 사용하는 일반 IPv4와 같은 흐름을 보고하는 데 사용됩니다. |
| v10 | IPFIX라고도 불리는 이 기술은 IETF에서 표준화한 NetFlow 9으로, 기업에서 정의한 필드 유형 및 가변 길이 필드와 같은 여러 확장 기능을 포함합니다. |
v5

v5에서는 Netflow가 전달할 수 있는 포맷이 Fixed 되어 있기 때문에 사용자의 입맛에 맞게 커스텀하거나 필요한 정보만 보는 행위들이 불가능 했음
v9
v5와는 다르게 수집할 수 있는 데이터를 Flowset이라는 이름으로 탬플릿화하여 데이터 수집의 확장성을 대폭 향상시켰음
기본적으로 L2 - L4 정보를 수집할 수 있고 NBAR을 통합하면 간단한 L7 데이터도 확인하여 애플리케이션 구별도 가능함
UDP Port 2055를 사용함

v10 IPFIX
최신 표준으로 DNS 쿼리 유형, 재전송률, MAC 주소 등의 L2 정보와 같은 고급 메트릭을 전달함
UDP Port 4739를 사용함
Netflow 작동방식

| 용어 | 설명 |
| Flow Exporter | Flow를 수집하는 네트워크 장비 |
| Flow Collector | 네트워크 장비로부터 수집된 Flow들을 전달받는 서버 |
| Flow Analyzer | 서버에 저장된 Flow들을 분석하여 그래프 등으로 표시해주는 소프트웨어 |
| Flow Key | Flow Record에 의해 정의된 수집할 데이터 해당 값과 패킷을 매칭시켜 데이터를 수집함 |
| Flow Record | Exporter에서 생성되는 실제 데이터를 지정한 일련의 값 |
| Template Flowset | Exporter가 Collector에게 어떤 데이터를 전송할 것인지 정의한 값 |
| Data Flowset | Exporter가 Collector에게 실제로 전송하는 데이터 값 |
- Flow Exporter : Flow를 수집하는 네트워크 장비
- Flow Collector : 네트워크 장비로부터 수집된 Flow들을 전달받는 서버
- Flow Analyzer : 서버에 저장된 Flow들을 분석하여 그래프 등으로 표시해주는 소프트웨어
Flow Exporter (Network Device) → Flow Records → Collector Server → NetFlow Analyzer → Dashboards & Reports
Netflow는 3가지 요소로 구분되어 관리자가 선언한 Flow Record의 값(Flow Key)들을 기준으로 데이터가 인입될 시 Cahce에 해당 패킷의 데이터를 저장함
저장된 Flow를 Collector 서버에게 전달하고 Analyzer는 관리자에게 대시보드 형태로 분석정보를 전달함
Netflow Packet 형태


| 필드 정보 | 내용 |
| 버전 | 이 패킷에 포함된 NetFlow 레코드 버전입니다. 버전 9의 경우 이 값은 0x0009입니다. |
| Count | 이 패킷에 포함된 FlowSet 레코드(템플릿 및 데이터 모두 포함) 수 |
| 시스템 가동 시간 | 이 장치가 처음 부팅된 이후 경과된 시간(밀리초) |
| 유닉스 초 | 1970년 협정 세계시(UTC) 00:00 이후 경과된 초 |
| Package Sequence | 이 Export 장치가 전송한 모든 Export 패킷의 누적 시퀀스 카운터입니다. 이 값은 누적되며, 누락된 Export 패킷이 있는지 여부를 확인하는 데 사용할 수 있습니다. 참고: 이는 NetFlow 버전 5 및 버전 8 헤더에서 이 숫자가 "총 흐름 수"를 나타냈던 것과 달라진 점입니다. |
| 소스 ID | 소스 ID 필드는 특정 장치에서 내보내는 모든 플로우의 고유성을 보장하는 데 사용되는 32비트 값입니다. (소스 ID 필드는 NetFlow 버전 5 및 버전 8 헤더의 엔진 유형 및 엔진 ID 필드와 동일합니다.) 이 필드의 형식은 벤더별로 다릅니다. Cisco 구현에서는 처음 두 바이트가 향후 확장을 위해 예약되어 있으며 항상 0입니다. 세 번째 바이트는 내보내는 장치의 라우팅 엔진에 대한 고유성을 제공합니다. 네 번째 바이트는 내보내는 장치의 특정 라인 카드 또는 Versatile Interface Processor에 대한 고유성을 제공합니다. 수집 장치는 소스 IP 주소와 소스 ID 필드의 조합을 사용하여 수신되는 NetFlow 내보내기 패킷을 특정 장치의 고유한 NetFlow 인스턴스와 연결해야 합니다. |
Netflow v9부터는 각 탬플릿을 이용하여 장치별로 관리자가 원하는 데이터만 수집할 수 있도록 했기 때문에 Exporter가 수집하는 Flowrecord에서 수집하는 정보에 대해 Collector에게 명시해주어야 한다. 따라서 Exporter는 주기적으로 Collector 에게 Template Flowset을 전송하여 어떤 필드들이 수집되는지 알린다.
Collector는 전달받은 탬플릿들을 캐시에 저장하고 데이터를 전달 받을 때 마다 캐시를 확인하여 데이터를 분류한다. 이 때, 주기적으로 템플릿을 갱신해주지 않으면 만료되어 정보가 사라질 수 있다.
따라서 아래의 두 가지 방법을 사용하여 이를 갱신해줄 수 있다.
- n번의 packer 전송 시 재전송
- Timer 설정하여 n분마다 갱신을 위해 packet 전송


| Field name | 내용 |
| 플로우셋 ID | FlowSet ID는 템플릿 레코드와 데이터 레코드를 구분하는 데 사용됩니다. 템플릿 레코드는 항상 0~255 범위의 FlowSet ID를 갖습니다. 현재 플로우 필드를 설명하는 템플릿 레코드는 FlowSet ID가 0이고, 옵션 필드(아래 설명 참조)를 설명하는 템플릿 레코드는 FlowSet ID가 1입니다. 데이터 레코드는 항상 0이 아닌 255보다 큰 FlowSet ID를 갖습니다. |
| 길이 | 길이는 이 FlowSet의 전체 길이를 나타냅니다. 개별 템플릿 FlowSet에는 여러 개의 템플릿 ID가 포함될 수 있으므로(위 예시 참조), 길이 값을 사용하여 다음 FlowSet 레코드(템플릿 FlowSet 또는 데이터 FlowSet일 수 있음)의 위치를 확인해야 합니다. 길이는 유형/길이/값(TLV) 형식으로 표현됩니다. 즉, 값에는 FlowSet ID에 사용된 바이트와 길이 바이트 자체, 그리고 이 FlowSet에 포함된 모든 템플릿 레코드의 총 길이가 포함됩니다. |
| 템플릿 ID | 라우터는 내보낼 NetFlow 데이터 유형에 맞춰 다양한 템플릿 FlowSet을 생성하며, 각 템플릿에는 고유 ID가 부여됩니다. 이 고유성은 해당 템플릿 ID를 생성한 라우터 내에서만 유효합니다. 데이터 레코드 형식을 정의하는 템플릿은 0~255가 FlowSet ID에 예약되어 있으므로 256부터 번호가 매겨집니다. |
| 필드 개수 | 이 필드는 이 템플릿 레코드에 있는 필드 수를 나타냅니다. 템플릿 FlowSet에는 여러 개의 템플릿 레코드가 포함될 수 있으므로, 이 필드를 통해 파서는 현재 템플릿 레코드의 끝과 다음 템플릿 레코드의 시작을 확인할 수 있습니다. |
| 필드 유형 | 이 숫자 값은 필드 유형을 나타냅니다. 필드 유형의 가능한 값은 공급업체별로 다릅니다. Cisco에서 제공하는 값은 NetFlow 버전 9를 지원하는 모든 플랫폼에서 일관적입니다. NetFlow 버전 9 코드의 최초 출시 당시(그리고 이후 새로운 필드 유형 정의를 추가할 수 있는 모든 변경 사항 이후에도) Cisco는 알려진 필드 유형과 해당 길이를 정의하는 파일을 제공합니다. |
| 필드 길이 | 이 숫자는 위에서 정의한 필드의 길이를 바이트 단위로 나타냅니다. |
실제로 Exporter가 Collector에게 전달할 Netflow Data가 담겨있는 필드이다.


| FlowSet ID = 템플릿 ID | NetFlow 버전 9 데이터 FlowSet 내의 각 레코드 그룹 앞에는 FlowSet ID가 붙습니다. FlowSet ID는 (이전에 수신한) 템플릿 ID에 매핑됩니다. 수집기 및 표시 애플리케이션은 FlowSet ID를 사용하여 뒤따르는 필드 값에 적절한 유형과 길이를 매핑해야 합니다. |
| 길이 | 이 필드는 데이터 FlowSet의 길이를 나타냅니다. 길이는 TLV 형식으로 표현되며, 이는 해당 값에 FlowSet ID에 사용된 바이트와 길이 바이트 자체, 그리고 포함된 모든 데이터 레코드의 총 길이가 포함된다는 의미입니다. |
| 기록 N - 필드 N | 버전 9 데이터 FlowSet의 나머지 부분은 필드 값들의 모음입니다. 필드의 유형과 길이는 FlowSet ID/템플릿 ID로 참조되는 템플릿 레코드에 미리 정의되어 있습니다. |
| Padding | FlowSet의 끝을 32비트 경계에 맞추기 위해 패딩을 삽입해야 합니다. 길이 필드에는 해당 패딩 비트가 포함된다는 점에 유의하십시오. |
Netflow Analyzer
ntop, scrutinizer, LogicMonitor 등등의 소프트웨어가 있음
Netflow Configuration

위의 설명대로 Exporter에서 4가지의 구성을 해주어야 함
Exporter : Flow들을 어디로 전송할지 정의
Record : 어떠한 데이터를 수집할 것인지, 어떤 데이터로 Flow들을 구분할 것인지 정의
Monitor :
Config Exporter
flow exporter [name]
destination [ip]
#collector IP 지정
transport udp [port num]
#Defualt **2055**
#port 및 프로토콜 설정
export-protocol netflow-v9
#netflow 버전 설정
source [interface NUM]
#(선택 사항) 구성된 대상의 NetFlow 수집기에 접근하는 데 사용할 인터페이스를 지정
template data timeout 60
#서버에 몇초 간격으로 탬플릿을 갱신할 것인지
show run flow exporter [exporter name]
Config Record
Record에는 key fileds와 nonkey fileds로 구성되는데 그룹화에 영향을 주는 MATCH FILEDS를 KEY FILED, 그룹화에 영향을 주지않는 COLLECT 필드를 NONKEY FILEDS라고 함
match datalink : Layer 2 attributes
match flow direction : Fields identifying the direction of flow
match interface : Interface attributes
match ipv4 : IPv4 attributes
match ipv6 : IPv6 attributes
match transport : Transport layer fields
match parameters : flow를 고유하게 식별하는 필드 정의, 해당 필드와 정확히 매칭되는 패킷만 동일 flow로 수집됨
| Command | Purpose |
| match datalink {dot1q | ethertype | mac | vlan } | Specifies a match to datalink or Layer 2 fields. • dot1q: Matches to the dot1q field. • ethertype: Matches to the ethertype of the packet. • mac: Matches to the source or destination MAC fields. • vlan: Matches to the VLAN that the packet is located on (input or output). |
| match flow direction | Specifies a match to the flow identifying fields. |
| match ipv4 {destination | protocol | source | tos | ttl | version} | Specifies a match to the IPv4 fields. • destination: Matches to the IPv4 destination address-based fields. • protocol: Matches to the IPv4 protocols. • source: Matches to the IPv4 source address based fields. • tos: Matches to the IPv4 Type of Service fields. • ttl: Matches to the IPv4 time to live fields. • version: Matches to the IP version from the IPv4 header. |
| match ipv6 {destination | hop-limit | protocol | source | traffic-class | version } | Specifies a match to the IPv6 fields. • destination: Matches to the IPv6 destination address-based fields. • hop-limit: Matches to the IPv6 hop limit fields. • protocol: Matches to the IPv6 payload protocol fields. • source: Matches to the IPv6 source address based fields. • traffic-class: Matches to the IPv6 traffic class. • version: Matches to the IP version from the IPv6 header. |
| match transport {destination-port | igmp | icmp | source-port} | Specifies a match to the Transport Layer fields. • destination-port: Matches to the transport destination port. • icmp: Matches to ICMP fields, including ICMP IPv4 and IPv6 fields. • igmp: Matches to IGMP fields. • source-port: Matches to the transport source port. |
| match routing vrf input | Specifies a match to the VRF routing attributes for incoming packets. |
collect parameters : flow에 대한 추가 정보를 제공하는 선택적 필드로 flow record 정보에는 포함되지만 flow의 그룹화에는 영향 없음
| Command | Purpose |
| collect counter {bytes {layer2 {long} | long} | packets {long} } | Collects the counter fields total bytes and total packets. |
| collect timestamp absolute {first | last} | Collects the fields for the absolute time the first packet was seen or the absolute time the most recent packet was last seen (in milliseconds). |
| collect transport tcp flags | Collects transport TCP flags. • ack: TCP acknowledgement flag • cwr: TCP congestion window reduced flag • ece: TCP ECN echo flag • fin: TCP finish flag • psh: TCP push flag • rst: TCP reset flag • syn: TCP synchronize flag • urg: TCP urgent flag On the device, all TCP flags are collected when you specify to collect transport TCP flags. |
Router# configure terminal
Router(config)# flow record CUSTOM
Router(config-flow-record)# description Custom Flow Record for IPv4 Traffic
Router(config-flow-record)# match ipv4 destination address
#IP 기준으로 수집 시 구성
Router(config-flow-record)# match routing vrf input
#VRF ID 기준으로 데이터 수집 시 구성
Router(config-flow-record)# match datalink ethertype
#L2 기준으로 데이터 수집 시 구성
Router(config-flow-record)# collect counter bytes
Router(config-flow-record)# collect counter packets
Router(config-flow-record)# exit
Router(config)# do show flow record CUSTOM
Now that a custom flow record has been configured, the flow exporter can be created.
Config Monitor
| Setting | Default |
| Flow active timeout | 1800 seconds |
| Flow inactive timeout | 15 seconds |
Router(config)# flow monitor CUSTOM
Router(config-flow-monitor)# description Uses Custom Flow Record CUSTOM for IPv4$
Router(config-flow-monitor)# record [recordname]
#앞에서 생성한 record를 지정
Router(config-flow-monitor)# cache timeout active 60
#몇초마다 collector에게 캐시된 내용을 전송할지
Router(config-flow-monitor)# cache timeout inactive 15
#몇초동안 패킷이 발생하지 않는다면 collector에게 캐시된 내용을 전송
Router(config-flow-monitor)# exporter [exporter name]
#해당 명령어를 통해 Record의 전송을 활성화
Router(config-flow-monitor)# end
Router# show run flow monitor CUSTOM
The next step is to map the flow exporter CUSTOM to the flow monitor CUSTOM.
Config Interface
물리적인 인터페이스 외에도 논리적 인터페이스에 모두 설정 가능
Port-channel interfaces (L2 and/or L3)
Sub-interfaces
Physical sub-interfaces
Port-channel sub-interfaces
SVI (Switch Virtual Interface – interface vlan)
VLAN ID (vlan configuration)
일반적인 인터페이스에 구성
int [interface num]
ip flow monitor [monitor] input
#1 ipv6 flow monitor
#2 datalink flow monitor
# 위 두 명령어로도 선언할 수 있음
show flow interface
#인터페이스에서 설정된 netflow 확인
VLAN에 구성
Device(config)# vlan configuration 30
Device(config-vlan-config)# ip flow monitor MonitorTest input
Debug
show flow record FLOW_RECORD-1
#netflow recod 현재 상태 확인
show flow exporter []
**#NetFlow 플로우 익스포터에 대한 정보를 표시**
show flow monitor [monitor name] cache
#Flexible NetFlow 모니터의 상태 및 통계를 표시
show running-config flow monitor [monitor name]
#모니터의 구성 표시
제한사항
- Flexible NetFlow는 레이어 2 및 레이어 3 포트 채널 인터페이스에서 지원되지만 멤버 포트에서는 지원되지 않습니다.
- 기존 NetFlow 회계 방식은 지원되지 않습니다.
- 동일한 트래픽 유형에 대해 여러 개의 흐름 모니터를 특정 인터페이스 및 방향에 적용할 수 없습니다.
- 이더넷 관리 포트인 GigabitEthernet 0/0에서는 유연한 NetFlow 내보내기가 지원되지 않습니다.
- 소스 그룹 태그(SGT) 및 대상 그룹 태그(DGT) 필드는 지원되지 않습니다.
- NetFlow 레코드는 MPLS(다중 프로토콜 레이블 스위칭) 지원 인터페이스를 지원하지 않습니다.
- 이그레스 SVI 및 서브인터페이스에 연결된 플로우 모니터에서 인터페이스 이름을 일치시키면 SVI 또는 서브인터페이스 이름이 아닌 물리적 인터페이스 이름이 반환됩니다.
- 레이어 3 인터페이스의 유연한 NetFlow는 라우팅된 트래픽만 학습합니다.
- match datalink vlan output
- 명령은 이그레스 Flexible NetFlow의 데이터링크 흐름 모니터에서 지원되지 않습니다.
- Flexible NetFlow는 ARP 및 CDP와 같은 제어 패킷을 학습하지 않습니다.
- 플로우 모니터가 인터페이스에 연결된 경우 활성 시간 초과, 비활성 시간 초과 및 캐시 크기와 같은 플로우 모니터 매개변수를 수정할 수 없습니다.
- 패킷 길이에 대한 4바이트 순환 중복 검사는 바이트 수 계산에 포함되지 않습니다.
- 송신 라우팅 트래픽의 경우, 바이트 수에는 IP 헤더 길이만 포함됩니다. 이더넷 헤더 길이는 제외됩니다.
'네트워크' 카테고리의 다른 글
| VXLAN with EVPN (0) | 2026.03.08 |
|---|---|
| CEF(Cisco Express Forwarding) (0) | 2026.02.28 |
| TLV(Type, Length, Value) (0) | 2026.01.18 |
| LOAD BALANCING(L4 Switch) (0) | 2025.12.29 |
| RMA와 RMA시 주의사항 (0) | 2025.10.29 |