Wireshark สำหรับ VoIP Troubleshooting สอนวิเคราะห์ SIP และ RTP สำหรับ IT 2026

VoIP Fundamentals — พื้นฐานที่ต้องรู้

VoIP (Voice over Internet Protocol) คือเทคโนโลยีการส่งเสียงผ่านเครือข่าย IP แทนที่จะใช้สายโทรศัพท์แบบเดิม (PSTN) ระบบ VoIP ประกอบด้วย Protocol หลัก 2 ตัว:

SIP (Session Initiation Protocol): ทำหน้าที่ “ควบคุมการโทร” — เริ่มการโทร รับสาย วางสาย เหมือน “พนักงานต่อสาย” ที่จัดการว่าใครจะคุยกับใคร SIP ใช้ Port 5060 (UDP/TCP) หรือ 5061 (TLS) SIP ไม่ได้ส่งเสียงเอง แค่ตั้ง Session ขึ้นมา

RTP (Real-time Transport Protocol): ทำหน้าที่ “ส่งเสียงจริง” — เมื่อ SIP ตั้ง Session แล้ว เสียงจะถูกส่งผ่าน RTP ใช้ Port range 10000-20000 (UDP) แต่ละฝั่งจะส่ง RTP stream กัน

Codecs: Codec คือตัวแปลงเสียงเป็น Digital data ที่ส่งผ่าน Network ได้:

Codec Bitrate คุณภาพ Bandwidth ที่ใช้ เหมาะกับ
G.711 (PCMU/PCMA) 64 kbps สูง (Toll quality) ~87 kbps (+ header) LAN, bandwidth เหลือเยอะ
G.729 8 kbps ปานกลาง ~31 kbps WAN, bandwidth จำกัด
G.722 (HD Voice) 64 kbps สูงมาก (Wideband) ~87 kbps HD call, Conference
Opus 6-510 kbps สูงมาก (Adaptive) แล้วแต่ Setting WebRTC, Modern systems

Capturing VoIP Traffic — เก็บ Packet VoIP

การ Setup Capture

VoIP traffic ส่งผ่าน Network ปกติ ดังนั้นต้อง “เห็น” Traffic ก่อนจึงจะ Capture ได้:

วิธีที่ 1: SPAN/Mirror Port — ตั้งค่า Switch ให้ Copy traffic จาก Port ที่ VoIP phone/server เชื่อมต่ออยู่ ไปยัง Port ที่ Wireshark เชื่อมต่อ:

# Cisco Switch — SPAN configuration
Switch(config)# monitor session 1 source interface Gi0/1
Switch(config)# monitor session 1 destination interface Gi0/24

# Gi0/1 = Port ที่ IP Phone / PBX เชื่อมต่อ
# Gi0/24 = Port ที่ PC ที่รัน Wireshark เชื่อมต่อ

# HP/Aruba Switch
Switch(config)# mirror-port 24
Switch(config)# interface 1 monitor

วิธีที่ 2: Capture บน PBX Server — ถ้า PBX เป็น Software-based (Asterisk, FreePBX, 3CX) สามารถ Capture บน Server นั้นได้โดยตรง:

# Capture บน Asterisk server
tcpdump -i eth0 -w voip_capture.pcap port 5060 or portrange 10000-20000

# หรือเฉพาะ SIP
tcpdump -i eth0 -w sip_only.pcap port 5060

# Capture เฉพาะ IP ที่สนใจ
tcpdump -i eth0 -w specific.pcap host 192.168.1.100 and \(port 5060 or portrange 10000-20000\)

วิธีที่ 3: Capture Filter ใน Wireshark — ตั้ง Capture filter ก่อนเริ่ม Capture เพื่อลดขนาดไฟล์:

# Wireshark Capture Filters
# จับเฉพาะ SIP traffic
port 5060

# จับ SIP + RTP
port 5060 or portrange 10000-20000

# จับ VoIP จาก/ไป IP ที่กำหนด
host 192.168.1.100 and (port 5060 or portrange 10000-20000)

# จับ SIP over TLS
port 5061

SIP Message Analysis — วิเคราะห์ SIP Messages

SIP Call Flow — การโทรปกติ

การโทร SIP ปกติจะมี Message flow ดังนี้:

  Caller (A)          PBX/Proxy          Callee (B)
     |                   |                   |
     |--- INVITE ------->|                   |
     |<-- 100 Trying ----|                   |
     |                   |--- INVITE ------->|
     |                   |<-- 100 Trying ----|
     |                   |<-- 180 Ringing ---|
     |<-- 180 Ringing ---|                   |
     |                   |<-- 200 OK --------|
     |<-- 200 OK --------|                   |
     |--- ACK ---------->|--- ACK ---------->|
     |                   |                   |
     |<=============== RTP (Voice) ==========>|
     |                   |                   |
     |--- BYE ---------->|--- BYE ---------->|
     |<-- 200 OK --------|<-- 200 OK --------|

SIP Messages สำคัญ:

Message Type ความหมาย
INVITE Request เริ่มการโทร ระบุ Codec, IP, Port ที่ต้องการ
100 Trying Response PBX รับ Request แล้ว กำลังประมวลผล
180 Ringing Response เครื่องปลายทางกำลังดังกริ่ง
200 OK Response รับสายแล้ว (หรือ Request สำเร็จ)
ACK Request ยืนยันการรับ 200 OK → เริ่ม Media stream
BYE Request วางสาย / จบการโทร
CANCEL Request ยกเลิกการโทรก่อนรับสาย
REGISTER Request IP Phone ลงทะเบียนกับ PBX
OPTIONS Request เช็คว่า Server ยังทำงานอยู่ (Keep-alive)

SIP Error Codes — รหัสข้อผิดพลาด

Code ความหมาย สาเหตุที่เป็นไปได้
400 Bad Request SIP message ไม่ถูก Format Misconfigured phone, Incompatible SIP version
401 Unauthorized ต้อง Authenticate ก่อน ปกติ IP Phone จะส่ง Credentials ใหม่อัตโนมัติ
403 Forbidden ไม่มีสิทธิ์โทร Dial plan restrictions, ACL block
404 Not Found เบอร์ไม่มีอยู่ Extension ไม่มี, Wrong dial plan
408 Request Timeout ไม่ได้รับ Response ในเวลาที่กำหนด Network issue, Endpoint offline
480 Temporarily Unavailable ปลายทางไม่ว่าง/ไม่ได้ลงทะเบียน Phone offline, DND enabled
486 Busy Here สายไม่ว่าง กำลังคุยโทรศัพท์อยู่
488 Not Acceptable Here Codec ไม่ Match Codec mismatch ระหว่างสองฝั่ง
500 Server Internal Error PBX เกิดข้อผิดพลาดภายใน PBX crash, Configuration error
503 Service Unavailable PBX ไม่สามารถให้บริการได้ PBX overloaded, Maintenance

วิเคราะห์ SIP ใน Wireshark

# Wireshark Display Filters สำหรับ SIP
# แสดงเฉพาะ SIP traffic
sip

# แสดงเฉพาะ INVITE (เริ่มการโทร)
sip.Method == "INVITE"

# แสดงเฉพาะ Error responses (4xx, 5xx)
sip.Status-Code >= 400

# แสดงเฉพาะ Registration
sip.Method == "REGISTER"

# แสดงเฉพาะ Registration failures
sip.Method == "REGISTER" && sip.Status-Code >= 400

# แสดงเฉพาะ SIP จาก/ไป Extension ที่ต้องการ
sip.from.user == "1001" || sip.to.user == "1001"

# แสดงเฉพาะ Call-ID ที่สนใจ
sip.Call-ID == "[email protected]"

RTP Stream Analysis — วิเคราะห์ RTP

RTP คุณภาพเสียง Metrics

Wireshark สามารถวิเคราะห์คุณภาพเสียง VoIP ได้จาก RTP stream:

Metric ค่าที่ดี ค่าที่ยอมรับได้ ค่าที่ไม่ดี ผลกระทบ
Jitter < 20 ms 20-50 ms > 50 ms เสียงกระตุก ขาดหาย
Packet Loss < 1% 1-3% > 3% เสียงขาดหาย คุณภาพลด
Latency (one-way) < 150 ms 150-300 ms > 300 ms Delay ในการสนทนา
MOS Score 4.0-4.5 3.5-4.0 < 3.5 คุณภาพเสียงโดยรวม

MOS Score (Mean Opinion Score): คะแนนคุณภาพเสียง 1-5 โดย 5 = เสียงสมบูรณ์แบบ, 4 = ดี (เทียบเท่าโทรศัพท์ปกติ), 3 = พอใช้ (เริ่มมี Artifacts), 2 = ไม่ดี (เข้าใจลำบาก), 1 = ใช้ไม่ได้

วิเคราะห์ RTP ใน Wireshark

# Wireshark Display Filters สำหรับ RTP
# แสดงเฉพาะ RTP traffic
rtp

# แสดง RTP จาก IP ที่กำหนด
rtp && ip.src == 192.168.1.100

# แสดง RTCP (control protocol สำหรับ RTP stats)
rtcp

# วิเคราะห์ RTP Stream:
# Wireshark → Telephony → RTP → RTP Streams
# จะเห็น: SSRC, Codec, Packets, Lost, Max Jitter, Mean Jitter

# ฟังเสียงจาก RTP Stream:
# Wireshark → Telephony → RTP → RTP Streams → เลือก Stream → Play Streams

# ดู Flow Sequence:
# Wireshark → Telephony → VoIP Calls → เลือก Call → Flow Sequence
# จะเห็น SIP message flow แบบ Diagram

Wireshark VoIP Menu — เครื่องมือสำหรับ VoIP โดยเฉพาะ

Wireshark มีเมนู Telephony ที่ออกแบบมาสำหรับ VoIP โดยเฉพาะ:

Telephony → VoIP Calls: แสดงรายการการโทรทั้งหมดในไฟล์ Capture: Start time, From, To, Protocol, Duration, State (Completed, In call, Rejected, Cancelled) สามารถเลือก Call แล้วดู Flow Sequence หรือ Play Audio ได้

Telephony → RTP → RTP Streams: แสดง RTP stream ทั้งหมด: Source/Destination IP:Port, SSRC, Codec, Packet count, Lost packets, Max/Mean jitter ถ้า Packet loss สูงหรือ Jitter สูง → ปัญหาเรื่อง Network

Telephony → RTP → RTP Player: เล่น Audio จาก RTP stream ได้เลยใน Wireshark ช่วยยืนยันว่าคุณภาพเสียงเป็นอย่างไร ได้ยินเสียง Choppy จริงหรือไม่

Telephony → SIP Flows: แสดง SIP message flow แบบ Diagram (Ladder diagram) เห็น Request/Response ระหว่าง Endpoints ชัดเจน ช่วย Debug ปัญหาเช่น Call setup ล้มเหลวเพราะ Missing 200 OK

Troubleshooting: One-Way Audio

One-Way Audio คือปัญหาที่ฝั่งหนึ่งได้ยินเสียง แต่อีกฝั่งไม่ได้ยิน เป็นปัญหาที่พบบ่อยที่สุดใน VoIP:

สาเหตุ #1: NAT Traversal issue

เมื่อ IP Phone อยู่หลัง NAT (Router/Firewall) SIP INVITE จะระบุ Private IP (เช่น 192.168.1.100) ใน SDP body แต่ปลายทางอยู่บน Public network → ส่ง RTP กลับไปที่ Private IP ไม่ได้ → ฝั่งที่อยู่หลัง NAT ไม่ได้ยินเสียง

# ดู SDP ใน INVITE message (Wireshark)
# c=IN IP4 192.168.1.100   ← Private IP!
# m=audio 10000 RTP/AVP 0  ← RTP port

# แก้ไข:
# 1. เปิด SIP ALG บน Firewall/Router (บางครั้งต้อง "ปิด" แทน เพราะ ALG ทำงานผิด)
# 2. ใช้ STUN/TURN server
# 3. ตั้ง External IP ใน PBX configuration
# Asterisk: externip=203.xxx.xxx.xxx ใน sip.conf หรือ pjsip.conf
# FreePBX: Settings → Asterisk SIP Settings → External Address

สาเหตุ #2: Firewall blocking RTP

Firewall อาจเปิด Port 5060 (SIP) แต่ไม่ได้เปิด RTP port range (10000-20000) ทำให้ SIP call setup สำเร็จ แต่ Audio ไม่ผ่าน

# ตรวจสอบใน Wireshark:
# ถ้าเห็น SIP INVITE → 200 OK → ACK สำเร็จ
# แต่ RTP packets ไป Direction เดียว → Firewall block

# แก้ไข: เปิด UDP port range สำหรับ RTP
# iptables
iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT
# Cisco ASA
access-list VOIP_IN extended permit udp any host PBX_IP range 10000 20000

สาเหตุ #3: Codec mismatch

ถ้าสองฝั่งไม่ Support Codec เดียวกัน อาจเจรจา Codec สำเร็จแต่ Audio decode ไม่ได้ ดู SDP ใน 200 OK ว่า Codec ที่ตกลงกันคืออะไร

Troubleshooting: No Audio (ไม่ได้ยินเสียงทั้งสองฝั่ง)

ขั้นตอนวิเคราะห์:

  1. ดู SIP flow — Call setup สำเร็จไหม? มี 200 OK + ACK ไหม?
  2. ดู RTP streams — มี RTP stream ไหม? ถ้าไม่มีเลย = Media path ถูก Block ทั้งหมด
  3. ดู SDP — IP address และ Port ใน SDP ถูกต้องไหม? มี Private IP ไหม?
  4. ดู Firewall logs — มี Dropped packets บน RTP port range ไหม?
# Wireshark Analysis Steps:
# 1. Filter: sip
# 2. ดู INVITE → 200 OK → ACK sequence
# 3. Click ที่ INVITE → expand "Session Description Protocol"
# 4. ดู c= (Connection) address → ถูกต้องไหม?
# 5. ดู m= (Media) → port ถูกต้องไหม?
# 6. Filter: rtp → มี packets ไหม?
# 7. Telephony → RTP Streams → ดู packet count ทั้งสองฝั่ง

Troubleshooting: Choppy Audio (เสียงกระตุก ขาดหาย)

เสียงกระตุกมักเกิดจาก Network quality:

Jitter สูง: ใน Wireshark → Telephony → RTP Streams → ดู Max Jitter ถ้า > 50 ms เสียงจะกระตุก แก้โดยตั้ง QoS (Quality of Service) บน Network equipment:

# QoS Configuration — Prioritize VoIP traffic
# Cisco Switch
Switch(config)# mls qos
Switch(config)# interface range Gi0/1-24
Switch(config-if-range)# mls qos trust dscp

# Mark VoIP packets with EF (Expedited Forwarding) DSCP value
# SIP: DSCP 26 (AF31) or 24 (CS3)
# RTP: DSCP 46 (EF)

# Cisco Router — Policy-map
Router(config)# class-map match-any VOIP
Router(config-cmap)# match dscp ef
Router(config-cmap)# match dscp af31
Router(config)# policy-map QOS_POLICY
Router(config-pmap)# class VOIP
Router(config-pmap-c)# priority percent 30

Packet Loss สูง: ดู RTP Streams ถ้า Lost > 3% → ตรวจสอบ: Interface errors (CRC, Runts) บน Switch, Network congestion (Bandwidth เต็ม), Duplex mismatch (Half vs Full duplex), Faulty cable/port

Network Congestion: VoIP ไม่ทน Congestion เหมือน Data traffic เพราะ Real-time ถ้า Network มี Congestion, Data download จะช้าลงแต่ยังใช้ได้ แต่ VoIP จะเสียงกระตุกหรือขาดหายเพราะ Delay/Loss ที่เกิดขึ้น

Troubleshooting: Registration Failures

เมื่อ IP Phone ลงทะเบียนกับ PBX ไม่สำเร็จ:

# Filter: sip.Method == "REGISTER"
# ดู Response:

# 401 Unauthorized (ปกติ ครั้งแรก)
# REGISTER → 401 (Challenge) → REGISTER (with auth) → 200 OK
# ถ้าวนลูป 401 ไม่หยุด = Username/Password ผิด

# 403 Forbidden
# = Account ถูก Lock, IP ถูก Block, ACL ไม่อนุญาต

# 408 Request Timeout
# = PBX ไม่ได้รับ REGISTER (Network issue, Firewall block port 5060)

# ตรวจสอบใน Wireshark:
# 1. ดู From: header → username ถูกไหม?
# 2. ดู To: header → SIP domain ถูกไหม?
# 3. ดู Contact: header → IP address ของ Phone ถูกไหม?
# 4. ดู Authorization: header → Credentials ถูก hash ส่งมาไหม?

Troubleshooting: Call Setup Failures

เมื่อโทรออกแต่ไม่สำเร็จ (ไม่ดัง ไม่ได้ยิน Ringback tone):

# Filter: sip.Method == "INVITE"
# ดู Response ที่ได้กลับมา:

# ไม่ได้ Response เลย (INVITE → timeout)
# = Network issue, Destination unreachable, Firewall block

# 404 Not Found
# = Extension ไม่มี → ตรวจ Dial plan

# 480 Temporarily Unavailable
# = Extension ไม่ได้ Register → ตรวจ Phone status

# 486 Busy Here
# = สายไม่ว่าง → ปกติ

# 488 Not Acceptable Here
# = Codec mismatch → ตรวจ Codec settings ทั้งสองฝั่ง
# ดู SDP ใน INVITE: a=rtpmap:0 PCMU/8000
# ดู SDP ใน 488: อาจไม่มี Codec ที่ Match

# 503 Service Unavailable
# = PBX overloaded หรือ Trunk เต็ม

QoS Verification — ตรวจสอบ QoS

ใช้ Wireshark ตรวจว่า VoIP packets ได้รับ QoS marking ที่ถูกต้อง:

# Wireshark Display Filter: ตรวจ DSCP marking
# ดู VoIP packets ที่ควรได้ EF (DSCP 46)
ip.dsfield.dscp == 46

# ดู SIP packets ที่ควรได้ AF31 (DSCP 26)
ip.dsfield.dscp == 26

# ดูว่ามี Packet ที่ไม่ได้รับ QoS marking ไหม
# (RTP packets ที่ DSCP = 0 แสดงว่า QoS ไม่ทำงาน)
rtp && ip.dsfield.dscp == 0

# ถ้า DSCP = 0 ตลอด:
# 1. IP Phone ไม่ได้ Mark DSCP → ตั้งค่าใน Phone settings
# 2. Switch strip DSCP → ตั้ง "mls qos trust dscp"
# 3. Router re-mark → ตรวจ Policy-map

NAT Traversal Issues — ปัญหา NAT

NAT เป็นศัตรูหมายเลข 1 ของ VoIP เพราะ SIP ฝัง IP address ไว้ใน Message body (SDP) ไม่ใช่แค่ IP header:

ปัญหา: IP Phone อยู่หลัง NAT (192.168.1.100) ส่ง INVITE ไปหา PBX ที่ Public IP SIP message บอกว่า "ส่ง RTP มาที่ 192.168.1.100:10000" แต่ PBX อยู่ภายนอก NAT → ส่ง RTP ไปที่ 192.168.1.100 ไม่ได้

Solutions:

  • STUN (Session Traversal Utilities for NAT): IP Phone ถาม STUN server ว่า Public IP คืออะไร แล้วใส่ Public IP ใน SDP แก้ปัญหา NAT แบบง่าย
  • TURN (Traversal Using Relays around NAT): ถ้า STUN ไม่ได้ (Symmetric NAT) ใช้ TURN server เป็น Relay ส่ง Media ผ่าน TURN server แทน มีค่า Latency เพิ่ม
  • SIP ALG (Application Layer Gateway): Router/Firewall แก้ IP address ใน SIP message ให้อัตโนมัติ แต่บ่อยครั้ง SIP ALG ทำงานผิด → แนะนำ "ปิด" SIP ALG บน Consumer router
  • Session Border Controller (SBC): อุปกรณ์เฉพาะทางสำหรับ NAT traversal + Security สำหรับ Enterprise VoIP

SIP TLS / SRTP — VoIP Security

VoIP traffic ที่ไม่ Encrypt สามารถถูก Capture และฟังได้ (Eavesdropping):

SIP TLS: Encrypt SIP signaling (Port 5061 แทน 5060) ป้องกันไม่ให้เห็น Call details (ใครโทรหาใคร เมื่อไหร่) ใน Wireshark จะเห็น TLS handshake แต่ไม่เห็น SIP message content

SRTP (Secure RTP): Encrypt voice stream ป้องกันไม่ให้ฟังเสียงสนทนา ใน Wireshark จะเห็น SRTP packets แต่ Play audio ไม่ได้ (Encrypted)

# Wireshark: ถ้ามี Key สามารถ Decrypt ได้
# Edit → Preferences → Protocols → SIP (for TLS)
# Edit → Preferences → Protocols → SRTP (for Secure RTP)

# วิเคราะห์ TLS handshake:
# Filter: tls && tcp.port == 5061
# ดู: TLS version, Cipher suite, Certificate

# ถ้าเจอปัญหา TLS:
# - Certificate expired → ตรวจ Not After date
# - Cipher mismatch → ดู Client Hello vs Server Hello
# - Self-signed cert rejected → ต้อง Import cert ที่ Phone

Wireshark VoIP Troubleshooting Checklist

ปัญหา สิ่งที่ต้องดูใน Wireshark Filter
โทรไม่ติด SIP INVITE response code sip.Method == "INVITE"
ลงทะเบียนไม่ได้ SIP REGISTER response sip.Method == "REGISTER"
เสียงฝั่งเดียว RTP stream direction, SDP IP rtp, ดู Telephony → RTP Streams
ไม่มีเสียงเลย RTP packets existence, SDP rtp, sip → ดู SDP body
เสียงกระตุก Jitter, Packet loss ใน RTP Telephony → RTP Streams
เสียง Delay Latency ระหว่าง Endpoints Statistics → IO Graph
Codec mismatch SDP codec list ใน INVITE/200 sip → ดู SDP a=rtpmap
QoS ไม่ทำงาน DSCP value ใน IP header ip.dsfield.dscp == 46

สรุป

Wireshark เป็นเครื่องมือที่ทรงพลังมากสำหรับ VoIP troubleshooting เพราะให้เห็น "ทุกอย่าง" ที่เกิดขึ้นบน Network ตั้งแต่ SIP signaling (ใครโทรหาใคร ผลลัพธ์เป็นอย่างไร) ไปจนถึง RTP media (คุณภาพเสียงเป็นอย่างไร Jitter/Loss เท่าไหร่)

เริ่มต้น VoIP troubleshooting ด้วย Wireshark ให้ทำตามขั้นตอน: 1) Capture traffic ที่ถูกจุด (SPAN port หรือบน PBX), 2) ใช้ Telephony → VoIP Calls ดูภาพรวม, 3) ดู SIP flow sequence เข้าใจ Call setup, 4) ดู RTP streams เข้าใจ Media quality, 5) ตรวจ SDP, NAT, QoS ตาม Checklist การฝึกวิเคราะห์ Capture file บ่อยๆ จะทำให้คุณ Troubleshoot VoIP ได้รวดเร็วขึ้นอย่างมากเมื่อเกิดปัญหาจริง

.

.
.
.

จัดส่งรวดเร็วส่งด่วนทั่วประเทศ
รับประกันสินค้าเคลมง่าย มีใบรับประกัน
ผ่อนชำระได้บัตรเครดิต 0% สูงสุด 10 เดือน
สะสมแต้ม รับส่วนลดส่วนลดและคะแนนสะสม

© 2026 SiamLancard — จำหน่ายการ์ดแลน อุปกรณ์ Server และเครื่องพิมพ์ใบเสร็จ

SiamLancard
#ffffff
Free Forex EA — XM Signal · SiamCafe Blog · SiamLancard · Siam2R · iCafeFX
Partner Sites: iCafe Forex | SiamCafe | SiamLancard | Siam2R | XM Signal | iCafe Cloud
iCafeForex.com - สอนเทรด Forex | SiamCafe.net
Shopping cart
Partner Sites: iCafeForex | SiamCafe | Siam2R | XMSignal