- Authors
- Name
- 개요
- 1. 핵심 네트워크 성능 지표
- 2. 네트워크 진단 도구
- 3. 대역폭 테스트와 병목 식별
- 4. 네트워크 인터페이스 통계와 에러 카운터
- 5. TCP 윈도우 분석과 혼잡 제어
- 6. MTU와 단편화 문제
- 7. Prometheus/Grafana로 네트워크 모니터링
- 8. 실무 성능 진단 시나리오
- 정리
개요
네트워크 성능 문제는 애플리케이션 응답 속도 저하, 파일 전송 실패, 스트리밍 품질 하락 등 다양한 형태로 나타납니다. 문제를 효과적으로 해결하려면 핵심 성능 지표를 이해하고 적절한 도구를 사용하여 체계적으로 진단해야 합니다.
이 글에서는 네트워크 성능을 측정하고 분석하는 데 필요한 모든 내용을 다룹니다. 기본 지표의 이해부터 실무에서 자주 발생하는 문제 시나리오의 해결까지 폭넓게 살펴보겠습니다.
1. 핵심 네트워크 성능 지표
1.1 지연 시간 (Latency)
지연 시간은 패킷이 출발지에서 목적지까지 도달하는 데 걸리는 시간입니다. RTT(Round Trip Time)로 측정하는 것이 일반적입니다.
# 기본 ping 테스트
ping -c 20 target-server.example.com
# 타임스탬프 포함 ping
ping -c 100 -D target-server.example.com
# 결과 예시
# PING target-server.example.com (10.0.1.50): 56 data bytes
# 64 bytes from 10.0.1.50: icmp_seq=0 ttl=64 time=0.523 ms
# 64 bytes from 10.0.1.50: icmp_seq=1 ttl=64 time=0.481 ms
# ...
# round-trip min/avg/max/stddev = 0.481/0.512/0.623/0.042 ms
지연 시간의 구성 요소는 다음과 같습니다.
- 전파 지연 (Propagation Delay): 물리적 거리에 비례하는 빛의 속도 제한
- 전송 지연 (Transmission Delay): 데이터를 링크에 올리는 시간 (패킷 크기 / 대역폭)
- 처리 지연 (Processing Delay): 라우터에서 패킷 헤더를 처리하는 시간
- 큐잉 지연 (Queuing Delay): 라우터 버퍼에서 대기하는 시간
# 지연 시간 분포를 상세히 분석하는 스크립트
#!/bin/bash
TARGET="target-server.example.com"
COUNT=1000
echo "=== Latency Distribution Analysis ==="
ping -c $COUNT $TARGET | tail -1
# hping3를 사용한 TCP 기반 지연 측정 (ICMP 차단 시 유용)
sudo hping3 -S -p 443 -c 20 $TARGET
1.2 처리량 (Throughput)
처리량은 단위 시간당 실제로 전송되는 데이터 양입니다. 대역폭(bandwidth)과 혼동하기 쉽지만, 대역폭은 이론적 최대 용량이고 처리량은 실제 달성 가능한 전송률입니다.
# iperf3로 TCP 처리량 측정
# 서버 측
iperf3 -s -p 5201
# 클라이언트 측 - 기본 테스트
iperf3 -c server-ip -p 5201 -t 30
# 양방향 동시 테스트
iperf3 -c server-ip -p 5201 -t 30 --bidir
# 결과 예시
# [ ID] Interval Transfer Bitrate Retr
# [ 5] 0.00-30.00 sec 3.28 GBytes 939 Mbits/sec 12 sender
# [ 5] 0.00-30.00 sec 3.27 GBytes 937 Mbits/sec receiver
1.3 패킷 손실 (Packet Loss)
패킷 손실은 전송된 패킷 중 목적지에 도달하지 못한 비율입니다. 1% 이상의 손실은 눈에 띄는 성능 저하를 유발합니다.
# 패킷 손실 측정
ping -c 1000 -i 0.01 target-server.example.com
# mtr로 경로별 패킷 손실 확인
mtr -r -c 100 target-server.example.com
# 결과 예시
# HOST: myhost Loss% Snt Last Avg Best Wrst StDev
# 1.|-- gateway 0.0% 100 0.5 0.6 0.3 1.2 0.2
# 2.|-- isp-router 0.0% 100 3.2 3.5 2.8 5.1 0.5
# 3.|-- core-router 2.0% 100 8.1 12.3 7.5 45.2 8.1
# 4.|-- target-server 2.0% 100 10.2 14.1 9.8 48.3 9.2
1.4 지터 (Jitter)
지터는 패킷 도착 시간의 변동 폭입니다. VoIP, 영상 통화 등 실시간 통신에서 특히 중요합니다.
# iperf3 UDP 모드로 지터 측정
# 서버
iperf3 -s
# 클라이언트 - UDP 모드, 100Mbps 타겟
iperf3 -c server-ip -u -b 100M -t 30
# 결과 예시
# [ ID] Interval Transfer Bitrate Jitter Lost/Total
# [ 5] 0.00-30.00 sec 358 MBytes 100 Mbits/sec 0.042 ms 12/45892 (0.026%)
2. 네트워크 진단 도구
2.1 iperf3 - 대역폭 테스트
iperf3는 네트워크 대역폭을 측정하는 데 가장 널리 사용되는 도구입니다.
# 다중 스트림 테스트 (병렬 연결로 전체 대역폭 활용)
iperf3 -c server-ip -P 4 -t 30
# 특정 대역폭으로 제한하여 테스트
iperf3 -c server-ip -b 500M -t 30
# TCP 윈도우 크기 지정
iperf3 -c server-ip -w 256K -t 30
# JSON 형식 출력 (자동화에 유용)
iperf3 -c server-ip -t 30 -J > iperf3_result.json
# 역방향 테스트 (서버에서 클라이언트 방향)
iperf3 -c server-ip -R -t 30
# MSS 설정
iperf3 -c server-ip -M 1400 -t 30
# 구간별 리포트 간격 설정
iperf3 -c server-ip -t 60 -i 5
2.2 mtr - 경로 분석
mtr은 traceroute와 ping을 결합한 도구로, 네트워크 경로의 각 홉에서의 성능을 지속적으로 모니터링합니다.
# 기본 리포트 모드
mtr -r -c 200 target-server.example.com
# TCP 모드 (ICMP 차단 환경)
mtr -r -c 100 -T -P 443 target-server.example.com
# UDP 모드
mtr -r -c 100 -u target-server.example.com
# 광범위 리포트 (AS 번호 포함)
mtr -r -c 200 -w -z target-server.example.com
# CSV 출력
mtr -r -c 100 --csv target-server.example.com > mtr_report.csv
mtr 결과를 해석할 때 주의할 점은 다음과 같습니다.
- 중간 홉에서만 손실이 보이고 최종 목적지에서 손실이 없다면 ICMP rate limiting일 가능성이 높습니다
- 특정 홉부터 지연이 급증한다면 해당 구간이 병목입니다
- 마지막 몇 개 홉에서 손실이 증가한다면 실제 문제가 있는 것입니다
2.3 traceroute
# ICMP traceroute
traceroute target-server.example.com
# TCP traceroute (방화벽 우회에 유용)
sudo traceroute -T -p 443 target-server.example.com
# UDP traceroute (특정 포트)
traceroute -U -p 33434 target-server.example.com
# 최대 홉 수 지정
traceroute -m 30 target-server.example.com
# Paris-traceroute (로드밸런서 환경에서 정확한 경로 추적)
paris-traceroute target-server.example.com
2.4 netperf - 고급 성능 테스트
# netperf 서버 실행
netserver -p 12865
# TCP 스트림 테스트
netperf -H server-ip -p 12865 -t TCP_STREAM -l 30
# TCP RR (Request/Response) 테스트 - 트랜잭션 성능 측정
netperf -H server-ip -p 12865 -t TCP_RR -l 30
# TCP CRR (Connect/Request/Response) - 연결 수립 포함
netperf -H server-ip -p 12865 -t TCP_CRR -l 30
# 메시지 크기 지정
netperf -H server-ip -t TCP_STREAM -l 30 -- -m 65536
# UDP 스트림 테스트
netperf -H server-ip -t UDP_STREAM -l 30
3. 대역폭 테스트와 병목 식별
3.1 체계적인 대역폭 테스트
#!/bin/bash
# bandwidth_test.sh - 체계적인 대역폭 테스트 스크립트
SERVER="10.0.1.50"
PORT=5201
DURATION=30
LOGDIR="/var/log/bandwidth_tests"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
mkdir -p $LOGDIR
echo "=== Bandwidth Test Suite - $TIMESTAMP ==="
# 1. 단일 스트림 TCP
echo "[1/5] Single Stream TCP Test"
iperf3 -c $SERVER -p $PORT -t $DURATION -J > "$LOGDIR/tcp_single_${TIMESTAMP}.json"
# 2. 다중 스트림 TCP
echo "[2/5] Multi Stream TCP Test (4 streams)"
iperf3 -c $SERVER -p $PORT -t $DURATION -P 4 -J > "$LOGDIR/tcp_multi_${TIMESTAMP}.json"
# 3. 역방향 TCP
echo "[3/5] Reverse TCP Test"
iperf3 -c $SERVER -p $PORT -t $DURATION -R -J > "$LOGDIR/tcp_reverse_${TIMESTAMP}.json"
# 4. UDP 대역폭
echo "[4/5] UDP Bandwidth Test"
iperf3 -c $SERVER -p $PORT -t $DURATION -u -b 1G -J > "$LOGDIR/udp_${TIMESTAMP}.json"
# 5. 양방향 동시
echo "[5/5] Bidirectional Test"
iperf3 -c $SERVER -p $PORT -t $DURATION --bidir -J > "$LOGDIR/bidir_${TIMESTAMP}.json"
echo "=== Tests Complete. Results in $LOGDIR ==="
3.2 병목 지점 식별
# 1단계: 로컬 인터페이스 속도 확인
ethtool eth0 | grep -i speed
# Speed: 10000Mb/s
# 2단계: 로컬 루프백 성능 확인 (NIC/CPU 한계 파악)
iperf3 -c 127.0.0.1 -t 10
# 3단계: 동일 스위치 내 서버 간 테스트
iperf3 -c same-switch-server -t 30
# 4단계: 다른 서브넷 서버 테스트 (라우팅 영향)
iperf3 -c different-subnet-server -t 30
# 5단계: WAN 구간 테스트
iperf3 -c remote-server -t 30
# 각 단계에서 처리량이 크게 감소하는 구간이 병목 지점
4. 네트워크 인터페이스 통계와 에러 카운터
4.1 ethtool 통계
# 인터페이스 기본 정보
ethtool eth0
# 상세 통계
ethtool -S eth0
# 주요 확인 항목
ethtool -S eth0 | grep -E "(rx_errors|tx_errors|rx_dropped|tx_dropped|rx_crc|collisions)"
# 드라이버 정보
ethtool -i eth0
# 링 버퍼 크기 확인
ethtool -g eth0
# 링 버퍼 크기 조정 (드롭 감소를 위해)
sudo ethtool -G eth0 rx 4096 tx 4096
# 오프로드 설정 확인
ethtool -k eth0
# TSO/GSO/GRO 설정
sudo ethtool -K eth0 tso on gso on gro on
4.2 ip 명령어로 인터페이스 통계 확인
# 인터페이스 통계 요약
ip -s link show eth0
# 출력 예시
# 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 ...
# RX: bytes packets errors dropped overrun mcast
# 948271623 1523847 0 0 0 12847
# TX: bytes packets errors dropped carrier collsns
# 523841267 892341 0 0 0 0
# 상세 통계
ip -s -s link show eth0
# 모든 인터페이스 통계
ip -s link show
# 통계 변화량 추적 스크립트
#!/bin/bash
IFACE="eth0"
while true; do
echo "=== $(date) ==="
ip -s link show $IFACE | grep -A 2 "RX\|TX"
sleep 5
done
4.3 에러 카운터 모니터링
# /proc/net/dev에서 실시간 통계 확인
cat /proc/net/dev
# netstat -i로 인터페이스 통계
netstat -i
# 에러 카운터 지속 모니터링 스크립트
#!/bin/bash
IFACE="eth0"
INTERVAL=10
echo "Monitoring $IFACE errors every ${INTERVAL}s..."
echo "Time | RX_errors | TX_errors | RX_dropped | TX_dropped"
while true; do
STATS=$(ip -s link show $IFACE)
RX_ERR=$(echo "$STATS" | awk '/RX:/{getline; print $3}')
TX_ERR=$(echo "$STATS" | awk '/TX:/{getline; print $3}')
RX_DROP=$(echo "$STATS" | awk '/RX:/{getline; print $4}')
TX_DROP=$(echo "$STATS" | awk '/TX:/{getline; print $4}')
echo "$(date +%H:%M:%S) | $RX_ERR | $TX_ERR | $RX_DROP | $TX_DROP"
sleep $INTERVAL
done
5. TCP 윈도우 분석과 혼잡 제어
5.1 TCP 윈도우 크기 분석
# 현재 TCP 연결의 윈도우 크기 확인
ss -ti dst target-server.example.com
# 출력 예시
# State Recv-Q Send-Q Local Address:Port Peer Address:Port
# ESTAB 0 0 10.0.1.10:42856 10.0.1.50:443
# cubic wscale:7,7 rto:204 rtt:1.523/0.742 ato:40 mss:1448
# pmtu:1500 rcvmss:1448 advmss:1448 cwnd:10 ssthresh:7
# bytes_sent:15234 bytes_acked:15235 bytes_received:45678
# send 76.1Mbps pacing_rate 152.1Mbps delivery_rate 45.2Mbps
# 주요 필드 설명
# cwnd: 혼잡 윈도우 크기 (세그먼트 수)
# ssthresh: slow start threshold
# rtt: 왕복 시간 / 표준편차
# mss: 최대 세그먼트 크기
5.2 TCP 혼잡 제어 알고리즘
# 현재 사용 중인 혼잡 제어 알고리즘 확인
sysctl net.ipv4.tcp_congestion_control
# net.ipv4.tcp_congestion_control = cubic
# 사용 가능한 알고리즘 목록
sysctl net.ipv4.tcp_available_congestion_control
# net.ipv4.tcp_available_congestion_control = reno cubic bbr
# BBR로 변경
sudo sysctl -w net.ipv4.tcp_congestion_control=bbr
# BBR 사용을 위한 fq 스케줄러 설정
sudo tc qdisc replace dev eth0 root fq
# TCP 버퍼 크기 튜닝
# 최소/기본/최대 (바이트)
sudo sysctl -w net.ipv4.tcp_rmem="4096 131072 16777216"
sudo sysctl -w net.ipv4.tcp_wmem="4096 65536 16777216"
# TCP 윈도우 스케일링 활성화
sudo sysctl -w net.ipv4.tcp_window_scaling=1
5.3 tcpdump를 이용한 TCP 분석
# TCP 핸드셰이크 캡처
sudo tcpdump -i eth0 -c 50 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0' -nn
# 특정 호스트와의 TCP 통신 캡처
sudo tcpdump -i eth0 host target-server.example.com -w capture.pcap
# 재전송 패킷 확인
sudo tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0' -nn
# TCP 윈도우 크기가 0인 패킷 (Zero Window)
sudo tcpdump -i eth0 'tcp[14:2] = 0' -nn
# 캡처 파일을 tshark로 분석
tshark -r capture.pcap -q -z io,stat,1
tshark -r capture.pcap -q -z conv,tcp
6. MTU와 단편화 문제
6.1 MTU 확인 및 경로 MTU 탐색
# 인터페이스 MTU 확인
ip link show eth0 | grep mtu
# 경로 MTU 탐색 (Path MTU Discovery)
# DF 비트를 설정하여 단편화 없이 전송 시도
ping -c 5 -M do -s 1472 target-server.example.com
# PING target-server.example.com: 1472 data bytes
# 1480 bytes from 10.0.1.50: icmp_seq=1 ttl=64 time=0.523 ms
# 패킷 크기를 줄여가며 최대 MTU 탐색
ping -c 3 -M do -s 1473 target-server.example.com
# ping: local error: message too long, mtu=1500
# 자동 MTU 탐색 스크립트
#!/bin/bash
TARGET=$1
SIZE=1500
while [ $SIZE -gt 0 ]; do
ping -c 1 -M do -s $SIZE $TARGET > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "Path MTU: $((SIZE + 28)) bytes (payload: $SIZE + 20 IP + 8 ICMP)"
break
fi
SIZE=$((SIZE - 1))
done
6.2 단편화 문제 진단
# 단편화 통계 확인
cat /proc/net/snmp | grep -i frag
# Ip: ... FragCreates FragOKs FragFails
# netstat으로 단편화 확인
netstat -s | grep -i frag
# 단편화 발생 여부 실시간 모니터링
watch -n 1 'cat /proc/net/snmp | grep Ip: | head -2'
# MTU 변경
sudo ip link set dev eth0 mtu 9000 # Jumbo Frame
# PMTUD 상태 확인
sysctl net.ipv4.ip_no_pmtu_disc
# 0 = PMTUD 활성화 (권장)
6.3 Jumbo Frame 설정 및 검증
# Jumbo Frame 지원 확인
ethtool -i eth0
# Jumbo Frame 활성화
sudo ip link set dev eth0 mtu 9000
# Jumbo Frame 경로 검증
ping -c 5 -M do -s 8972 target-server.example.com
# Jumbo Frame 성능 비교
echo "=== MTU 1500 ==="
iperf3 -c server-ip -t 10 -M 1460
echo "=== MTU 9000 ==="
iperf3 -c server-ip -t 10 -M 8960
7. Prometheus/Grafana로 네트워크 모니터링
7.1 node_exporter 설정
# /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'node'
static_configs:
- targets:
- 'server1:9100'
- 'server2:9100'
- 'server3:9100'
scrape_interval: 5s
node_exporter가 수집하는 주요 네트워크 메트릭은 다음과 같습니다.
node_network_receive_bytes_total: 수신 바이트 총계node_network_transmit_bytes_total: 송신 바이트 총계node_network_receive_errs_total: 수신 에러 총계node_network_transmit_errs_total: 송신 에러 총계node_network_receive_drop_total: 수신 드롭 총계node_network_transmit_drop_total: 송신 드롭 총계
7.2 PromQL 쿼리 예시
# 인터페이스별 초당 수신 트래픽 (bps)
rate(node_network_receive_bytes_total{device!="lo"}[5m]) * 8
# 인터페이스별 초당 송신 트래픽 (bps)
rate(node_network_transmit_bytes_total{device!="lo"}[5m]) * 8
# 패킷 에러율 (%)
rate(node_network_receive_errs_total{device="eth0"}[5m])
/ rate(node_network_receive_packets_total{device="eth0"}[5m]) * 100
# 패킷 드롭율
rate(node_network_receive_drop_total{device="eth0"}[5m])
# 대역폭 사용률 (%)
rate(node_network_receive_bytes_total{device="eth0"}[5m]) * 8
/ node_network_speed_bytes{device="eth0"} / 8 * 100
# TCP 재전송률
rate(node_netstat_Tcp_RetransSegs[5m])
/ rate(node_netstat_Tcp_OutSegs[5m]) * 100
# TCP 연결 상태별 개수
node_netstat_Tcp_CurrEstab
7.3 Grafana 알림 규칙
# Grafana Alert Rules
groups:
- name: network_alerts
rules:
- alert: HighPacketLoss
expr: |
rate(node_network_receive_errs_total{device="eth0"}[5m])
/ rate(node_network_receive_packets_total{device="eth0"}[5m]) > 0.01
for: 5m
labels:
severity: warning
annotations:
summary: 'High packet loss on {{ $labels.instance }}'
description: 'Packet loss rate is {{ $value | humanize }}%'
- alert: HighBandwidthUsage
expr: |
rate(node_network_receive_bytes_total{device="eth0"}[5m]) * 8
/ 10000000000 > 0.85
for: 10m
labels:
severity: warning
annotations:
summary: 'High bandwidth usage on {{ $labels.instance }}'
- alert: NetworkInterfaceDown
expr: node_network_up{device="eth0"} == 0
for: 1m
labels:
severity: critical
annotations:
summary: 'Network interface down on {{ $labels.instance }}'
- alert: HighTcpRetransmission
expr: |
rate(node_netstat_Tcp_RetransSegs[5m])
/ rate(node_netstat_Tcp_OutSegs[5m]) > 0.05
for: 5m
labels:
severity: warning
annotations:
summary: 'High TCP retransmission rate on {{ $labels.instance }}'
7.4 SNMP Exporter 활용
# snmp_exporter 설정 (네트워크 장비 모니터링)
# /etc/prometheus/snmp.yml (generator로 생성)
# prometheus.yml에 SNMP 타겟 추가
scrape_configs:
- job_name: 'snmp'
static_configs:
- targets:
- 'switch01.example.com'
- 'router01.example.com'
metrics_path: /snmp
params:
module: [if_mib]
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: snmp-exporter:9116
8. 실무 성능 진단 시나리오
8.1 시나리오: 애플리케이션 응답 지연
# 1단계: DNS 확인 지연 체크
dig target-server.example.com | grep "Query time"
# Query time: 245 msec <-- DNS가 느림
# 해결: 로컬 DNS 캐시 또는 더 빠른 DNS 서버 사용
# /etc/resolv.conf에서 nameserver 변경
# 2단계: TCP 연결 수립 시간 확인
curl -o /dev/null -s -w "\
DNS: %{time_namelookup}s\n\
Connect: %{time_connect}s\n\
TLS: %{time_appconnect}s\n\
TTFB: %{time_starttransfer}s\n\
Total: %{time_total}s\n" \
https://target-server.example.com
# 3단계: 경로 상의 문제 확인
mtr -r -c 50 target-server.example.com
8.2 시나리오: 파일 전송 속도 저하
# 1단계: 로컬 인터페이스 상태 확인
ethtool eth0 | grep -E "(Speed|Duplex|Link)"
# Speed: 1000Mb/s
# Duplex: Full
# Link detected: yes
# Auto-negotiation 실패로 100Mbps에 고정된 경우
sudo ethtool -s eth0 speed 1000 duplex full autoneg on
# 2단계: 에러 카운터 확인
ethtool -S eth0 | grep -E "(error|drop|crc|collision)"
# 3단계: TCP 튜닝 상태 확인
sysctl net.ipv4.tcp_rmem
sysctl net.ipv4.tcp_wmem
sysctl net.core.rmem_max
sysctl net.core.wmem_max
# 4단계: 대역폭 측정
iperf3 -c remote-server -t 30 -P 4
8.3 시나리오: 간헐적 연결 끊김
# 1단계: 장기 ping으로 패턴 파악
ping -c 3600 -i 1 target-server.example.com | while read line; do
echo "$(date '+%Y-%m-%d %H:%M:%S') $line"
done | tee ping_log.txt
# 2단계: 인터페이스 flapping 확인
dmesg | grep -i "link\|eth0\|carrier"
journalctl -u NetworkManager --since "1 hour ago" | grep -i "disconnect\|connect"
# 3단계: ARP 테이블 이상 확인
ip neigh show | grep -i "FAILED\|STALE"
# 4단계: 스위치 포트 통계 확인 (SNMP 또는 관리 인터페이스)
snmpwalk -v2c -c public switch01 IF-MIB::ifOperStatus
snmpwalk -v2c -c public switch01 IF-MIB::ifInErrors
8.4 시나리오: VoIP 품질 문제
# 1단계: 지터 및 패킷 손실 측정
iperf3 -c voip-server -u -b 100K -t 60 -l 160
# VoIP는 보통 64-160바이트의 작은 패킷을 사용
# 2단계: QoS 설정 확인
tc qdisc show dev eth0
tc class show dev eth0
tc filter show dev eth0
# 3단계: QoS 정책 적용 (VoIP 우선순위 부여)
sudo tc qdisc add dev eth0 root handle 1: htb default 30
sudo tc class add dev eth0 parent 1: classid 1:1 htb rate 1000mbit
sudo tc class add dev eth0 parent 1:1 classid 1:10 htb rate 100mbit ceil 200mbit prio 1
sudo tc class add dev eth0 parent 1:1 classid 1:30 htb rate 900mbit ceil 1000mbit prio 3
# VoIP 트래픽을 높은 우선순위 클래스로 분류
sudo tc filter add dev eth0 parent 1: protocol ip prio 1 \
u32 match ip dport 5060 0xffff flowid 1:10
정리
네트워크 성능 분석은 다음 순서로 체계적으로 접근하는 것이 중요합니다.
- 지표 수집: 지연 시간, 처리량, 패킷 손실, 지터를 측정합니다
- 구간 분석: mtr, traceroute로 문제 구간을 식별합니다
- 인터페이스 점검: ethtool, ip 명령어로 물리적 문제를 확인합니다
- 프로토콜 분석: TCP 윈도우, 혼잡 제어 상태를 점검합니다
- MTU 확인: 경로 MTU와 단편화 문제를 검증합니다
- 지속 모니터링: Prometheus/Grafana로 추세를 관찰합니다
각 단계에서 올바른 도구를 선택하고 결과를 정확히 해석하는 능력이 핵심입니다. 단일 도구에 의존하지 말고 여러 도구의 결과를 교차 검증하여 문제의 근본 원인을 정확히 파악하시기 바랍니다.