Networking Tools — ถามเครือข่ายให้เป็น แล้วค่อยเลือกเครื่องมือ
แล็ปนี้ไม่ได้สอนให้จำคำสั่งเป็นรายการ แต่ฝึกตั้งคำถามทีละชั้น: เครื่องเราได้ค่าอะไร เห็นเพื่อนบ้านไหม มีเส้นทางหรือไม่ ชื่อแปลเป็น IP ได้ไหม port เปิดอยู่หรือเปล่า และ application ตอบอย่างไร
ping เพียงคำสั่งเดียวตัดสินว่า “อินเทอร์เน็ตเสีย”1วิธีคิดก่อนพิมพ์คำสั่ง
| คำถาม | เครื่องมือหลัก | ชั้นที่ช่วยมอง |
|---|---|---|
| เครื่องเรามี IP, mask, gateway, DNS อะไร | ipconfig /all, ip addr | Link/Internet config |
| รู้จัก MAC ของเครื่องในวงเดียวกันไหม | arp -a, ip neigh | Data Link |
| ปลายทางตอบ ICMP หรือไม่ | ping | Internet/ICMP |
| packet น่าจะออกทางใด | route print, ip route | Routing |
| ผ่าน router ใดบ้าง | tracert, traceroute, mtr | Path |
| ชื่อแปลเป็น IP ใด | nslookup, dig | DNS/Application |
| ใครกำลังฟัง port | netstat, ss | Transport/socket |
| HTTP/TLS ตอบอะไร | curl, openssl s_client | Application/security |
| packet จริงหน้าตาอย่างไร | tcpdump, Wireshark | หลายชั้น |
2กติกาและการเตรียมแล็ป
- ใช้เฉพาะเครื่องและเครือข่ายที่ได้รับอนุญาต การ scan port หรือจับ packet ของผู้อื่นอาจขัดนโยบายและกฎหมาย
- เตรียม Windows PowerShell หรือ Linux/macOS terminal ถ้ามี VM/container ให้ใช้เป็นปลายทางทดลองของตนเอง
- สร้างแฟ้มบันทึก มีเวลา คำถาม คำสั่ง ผลที่สำคัญ การตีความ และคำสั่งถัดไป ทุกข้อสรุปต้องชี้กลับไปหาหลักฐาน
- ชื่อ interface และคำสั่งต่างกันตามระบบ ให้ปรับ
eth0,en0,Wi-Fiและ IP ให้ตรงเครื่องจริง
3Lab A — สำรวจเครื่องของเรา
ipconfig /all Get-NetIPConfiguration Get-NetAdapter Get-DnsClientServerAddress
ip addr # macOS: ifconfig ip link ip route cat /etc/resolv.conf
- ระบุ active interface, IPv4/IPv6, prefix/netmask, default gateway และ DNS server
- คำนวณว่า IP ของตนกับ gateway อยู่ subnet เดียวกันหรือไม่ อย่าเพียงคัดลอกค่า
- ปิด Wi-Fi หรือถอดสายชั่วคราวแล้วรันใหม่ สังเกต state และ address ที่หายไป เปิดคืนหลังบันทึก
- ถ้ามี VPN ให้เปรียบเทียบก่อนและหลังเชื่อม ดู interface กับ route ที่เพิ่มขึ้น โดยไม่เผยแพร่ข้อมูลภายใน
127.0.0.1 กับ IP ของ interface ต่างกันอย่างไร? เหตุใด service ที่ bind เฉพาะ loopback จึงเรียกได้จากเครื่องเดียวแต่เพื่อนเรียกไม่ได้? ถ้ามีหลาย default route ระบบเลือกจาก prefix และ metric อย่างไร?4Lab B — Ping: การตอบไม่ได้ไม่ได้แปลว่าปลายทางล่ม
# Windows ping 127.0.0.1 ping <default-gateway> ping -n 10 1.1.1.1 ping -l 1400 -f <authorized-target> # Linux/macOS ping -c 10 1.1.1.1 ping -s 1400 -M do <authorized-target> # ตัวเลือกขึ้นกับ OS
- ping loopback, IP ตัวเอง, gateway, public IP และ hostname ตามลำดับ แต่ละจุดตอบคำถามต่างกัน
- เก็บ min/avg/max และ packet loss ทำซ้ำขณะเครือข่ายว่างกับขณะดาวน์โหลดไฟล์ แล้วอธิบาย jitter
- ping IP สำเร็จแต่ ping ชื่อไม่สำเร็จ ชี้ไปที่ DNS มากกว่า link/routing
- HTTP ใช้ได้แต่ ping ไม่ตอบ อาจเพราะ firewall ปิด ICMP ไม่ใช่หลักฐานว่า host ล่ม
- ทดลองขนาด payload โดยได้รับอนุญาต เพื่อเชื่อมกับ MTU และ fragmentation หยุดถ้าเครือข่ายไม่ใช่ของตนเอง
Ping เปรียบเหมือนถามหน้าบ้านว่า “มีใครอยู่ไหม” บางบ้านตั้งใจไม่ตอบคนแปลกหน้า แต่ร้านด้านในอาจยังเปิดรับลูกค้าทางประตู HTTP ตามปกติ จึงต้องทดสอบบริการที่ผู้ใช้ต้องการจริงด้วย
5Lab C — ARP/Neighbor: จาก IP ไปหา MAC ในวงเดียวกัน
# Windows arp -a Get-NetNeighbor # Linux ip neigh show ip neigh flush <gateway-ip> # ทำเฉพาะเครื่องตนและเมื่อเข้าใจผล
- ดูก่อน ping gateway แล้วดูอีกครั้ง หา entry ที่เพิ่มหรือ state ที่เปลี่ยน
- จับ packet ด้วย filter
arpแล้วระบุว่าใครถาม “Who has …” และใครตอบ MAC ใด - ping public IP แล้วสังเกตว่า ARP table มี MAC ของ public server หรือมีเพียง MAC ของ gateway เพราะ Ethernet frame ส่งถึง next hop ไม่ได้ส่งข้ามอินเทอร์เน็ตโดยตรง
- อธิบาย INCOMPLETE/FAILED/STALE/REACHABLE ตามระบบที่ใช้ และเหตุใด cache จึงต้องหมดอายุ
6Lab D — Route: ป้ายบอกทางก่อน packet ออกจากเครื่อง
# Windows route print Get-NetRoute | Sort-Object DestinationPrefix # Linux/macOS ip route ip route get 8.8.8.8 netstat -rn
- หา connected route, loopback route และ default route
0.0.0.0/0 - เลือกปลายทางสามตัว: subnet เดียวกัน, private subnet อื่น, อินเทอร์เน็ต ระบุ route ที่ชนะด้วย longest-prefix match ก่อนดูคำตอบจากระบบ
- ถ้ามีสอง route prefix เท่ากันจึงพิจารณา metric อย่าสับสนว่าค่า metric ชนะ prefix ที่เฉพาะกว่าเสมอ
- ทดลองดู route ก่อน/หลัง VPN แล้วอธิบาย split tunnel กับ full tunnel จากตารางจริง
7Lab E — Tracert, Traceroute, Pathping และ MTR
# Windows tracert example.com tracert -d example.com pathping example.com # Linux/macOS traceroute example.com traceroute -n example.com mtr -rwzc 50 example.com
Traceroute ส่ง probe ด้วย TTL เพิ่มจาก 1, 2, 3 … เมื่อ TTL หมด router มักส่ง ICMP Time Exceeded กลับมา จึงค่อย ๆ เห็นเส้นทาง เหมือนส่งนักวิ่งพร้อมตั๋วเดินทางได้หนึ่งสถานี แล้วเพิ่มเป็นสองสถานีเพื่อถามว่าเขาหยุดที่ไหน
- เปรียบเทียบแบบ resolve hostname กับ
-d/-nว่า DNS lookup ทำให้การแสดงผลช้าหรือเปลี่ยนอย่างไร - ทำซ้ำสามครั้ง เส้นทางอาจเปลี่ยนจาก load balancing อย่าถือผลครั้งเดียวเป็นแผนที่ถาวร
- เครื่องหมาย
*ที่ hop กลางแต่ปลายทางถึง ไม่ได้แปลว่า router นั้นล่ม อาจไม่ตอบหรือ rate-limit ICMP - ถ้า hop หนึ่งแสดง loss แต่ hop ถัดไปไม่ loss อย่าสรุปว่า hop แรกทำ packet หาย มันอาจลดความสำคัญของการตอบ probe แต่ยัง forward traffic ปกติ
- ใช้ MTR/pathping แยก latency ต่อเนื่องจากตัวอย่างระยะสั้น และเขียนข้อจำกัดของการวัดเส้นทางขาไปซึ่งไม่รับประกันว่าเหมือนขากลับ
8Lab F — DNS ด้วย nslookup, dig และ Resolve-DnsName
# ใช้ได้ทั่วไป nslookup example.com nslookup -type=mx example.com # Linux/macOS dig example.com A dig example.com AAAA dig example.com MX dig example.com NS dig +trace example.com # PowerShell Resolve-DnsName example.com -Type A Resolve-DnsName example.com -Type MX
- ค้น A, AAAA, CNAME, MX, NS และ TXT แล้วเขียนว่าระเบียนแต่ละชนิดตอบคำถามใด
- ถาม resolver ปกติและ resolver อื่นที่ได้รับอนุญาต เปรียบเทียบ answer, TTL และเวลา คำตอบต่างกันอาจเกิดจาก cache, CDN หรือ split DNS
- สังเกต TTL สองครั้งห่างกัน ถ้าตอบจาก cache ค่ามักลดลง TTL เป็นอายุป้ายบอกทาง ไม่ใช่เวลาที่รับประกันว่า record จะหายจากทุกที่พร้อมกัน
- ใช้ชื่อที่ไม่มีจริง แยก NXDOMAIN จาก timeout และ SERVFAIL ทั้งสามอย่างมีการแก้ต่างกัน
- อธิบายว่า DNS สำเร็จแปลเพียงได้ address ยังไม่ได้พิสูจน์ว่า TCP port หรือ application ใช้งานได้
9Lab G — Port และ Socket ด้วย netstat/ss
# Windows netstat -ano Get-NetTCPConnection -State Listen tasklist /fi "PID eq <pid>" # Linux ss -lntup ss -tan state established lsof -iTCP -sTCP:LISTEN
- เปิด Python HTTP server
python -m http.server 8000แล้วหา LISTEN socket กับ PID - เปิด browser/curl แล้วหา ESTABLISHED connection ระบุ local/remote address และ port
- ปิด server สังเกต TIME_WAIT ที่ฝั่งซึ่ง active close และเชื่อมกลับไปยัง TCP lifecycle
- เปรียบเทียบ bind ที่
127.0.0.1กับ0.0.0.0โดยทดสอบจากเครื่องอื่นที่ได้รับอนุญาต
10Lab H — ทดสอบ Port, HTTP และ TLS
# TCP port
Test-NetConnection example.com -Port 443
nc -vz example.com 443
# HTTP
curl -I https://example.com
curl -v https://example.com
curl -sS -o /dev/null -w "code=%{http_code} connect=%{time_connect} tls=%{time_appconnect} total=%{time_total}\n" https://example.com
# TLS certificate/handshake
openssl s_client -connect example.com:443 -servername example.com
- ทดสอบ port ที่เปิดและปิดบนเครื่องทดลอง แยก refused จาก timeout
- ใช้
curl -vระบุ DNS, connect, TLS, request และ response ตามลำดับ แล้วบอกว่าช้าช่วงใดจาก timing - ทดลองเรียก HTTPS ด้วย hostname และ IP ตรง เปรียบเทียบ certificate validation และ SNI ชื่อไม่ได้มีไว้แค่ DNS แต่ยังช่วยเลือก certificate/virtual host
- ดู issuer, subject/SAN และวันหมดอายุของ certificate ห้ามใช้
-kเป็นวิธีแก้ถาวร เพราะเพียงปิดการตรวจตัวตน - ใช้
curl --resolveในระบบทดลองเพื่อบังคับชื่อไป IP โดยยังรักษา Host/SNI เหมาะกับทดสอบ server ใหม่ก่อนแก้ DNS
11Lab I — Packet Capture ด้วย tcpdump และ Wireshark
# เริ่มแคบก่อน ลดข้อมูลส่วนเกิน tcpdump -i any -nn host <lab-ip> tcpdump -i any -nn 'tcp port 8000' tcpdump -i any -nn -w lab.pcap 'host <lab-ip> and (icmp or tcp port 8000)' # ตัวอย่าง Wireshark display filters arp icmp dns tcp.port == 8000 tcp.flags.syn == 1 && tcp.flags.ack == 0 tcp.analysis.retransmission
- จับ ARP → DNS → TCP handshake → HTTP → TCP close ในงานเดียว แล้วเรียงเป็น timeline
- เลือก SYN, SYN-ACK, ACK ระบุ sequence/acknowledgment แบบสัมพัทธ์และเวลาระหว่าง packet
- แยก capture filter ซึ่งกำหนดสิ่งที่จะเก็บตั้งแต่ต้น ออกจาก display filter ซึ่งเลือกแสดงจากข้อมูลที่เก็บแล้ว
- ถ้า HTTPS จะเห็น TLS record และ metadata บางส่วน แต่ไม่เห็น HTTP body ตามปกติ นี่คือหลักฐานว่าการเข้ารหัสปกป้องเนื้อหา ไม่ได้ทำให้ traffic หายจากสาย
- ห้ามจับ traffic เกินขอบเขตแล็ป และลบ/เก็บ pcap ตามนโยบาย เพราะ pcap อาจมีข้อมูลละเอียดกว่าภาพหน้าจอมาก
12Lab J — วัด Throughput ด้วย iperf3
# เครื่องปลายทางที่เราได้รับอนุญาต iperf3 -s # เครื่อง client iperf3 -c <server-ip> iperf3 -c <server-ip> -R iperf3 -c <server-ip> -P 4 iperf3 -c <server-ip> -u -b 10M
- วัด TCP ไปและกลับ เปรียบเทียบเพราะ Wi-Fi, shaping หรือเส้นทางอาจไม่สมมาตร
- เปรียบเทียบ stream เดียวกับหลาย stream อธิบายว่าได้เร็วขึ้นไม่ได้แปลว่า application จริงจะเปิดหลาย connection ได้เสมอ
- ทดลอง UDP ด้วยอัตราที่ควบคุม ดู loss และ jitter ห้ามยิงเกินขนาดเครือข่ายที่ได้รับอนุญาต
- เก็บ CPU, signal strength และตำแหน่งร่วมด้วย Throughput ต่ำไม่ได้ชี้สาเหตุเอง อาจมาจาก radio, congestion, disk หรือข้อจำกัดปลายทาง
13สถานการณ์วินิจฉัยแบบปลายเปิด
สถานการณ์ 1 — “เข้าเว็บไม่ได้ แต่เพื่อนเข้าได้”
- ตรวจ interface/IP/gateway และ scope ว่าปัญหาอยู่เครื่องเดียวหรือทั้งวง
- ping gateway แล้ว public IP ถ้า IP ได้แต่ชื่อไม่ได้ ตรวจ DNS
- ใช้
nslookup/digดูคำตอบ จากนั้นcurl -vแยก connect, TLS และ HTTP - ตรวจ proxy/VPN/hosts file และ route เฉพาะเมื่อหลักฐานพาไป ไม่สุ่มปิดระบบความปลอดภัย
สถานการณ์ 2 — “Service รันแล้ว แต่เครื่องอื่นเรียกไม่ได้”
- ใช้
ss/netstatตรวจว่าฟัง port จริงและ bind ที่ loopback หรือทุก interface - ทดสอบ loopback, IP ตัวเอง และจากเครื่องอื่นตามลำดับ
- ตรวจ route/ARP ระหว่างเครื่อง แล้วจึงตรวจ host firewall และ container port mapping
- จับ packet ที่ server: ไม่เห็น SYN แปลว่าปัญหาก่อนถึงเครื่อง เห็น SYN แต่ไม่มี SYN-ACK ชี้ไปที่ firewall/listener เห็น handshake แล้ว HTTP error ชี้ขึ้น application
สถานการณ์ 3 — “ประชุมออนไลน์กระตุก แต่ speed test ดูเร็ว”
- วัด packet loss, latency และ jitter ต่อเนื่อง ไม่ดู throughput อย่างเดียว
- เปรียบเทียบ Wi-Fi กับสาย และช่วงว่างกับช่วงมี upload เพราะ queue เต็มอาจทำ latency สูง
- ดู route/MTR อย่างระวัง ไม่กล่าวโทษ hop จาก ICMP loss เพียงจุดเดียว
- อธิบายว่า realtime สนใจ packet มาถึงทันเวลามากกว่าความเร็วเฉลี่ย ไฟล์ดาวน์โหลดรอ retransmission ได้ แต่เสียงที่มาช้าไม่ช่วยการสนทนา
สถานการณ์ 4 — “บางครั้งเร็ว บางครั้งช้า”
- เก็บข้อมูลหลายเวลา พร้อม DNS answer, destination IP, connect/TLS/TTFB/total
- แยกว่า CDN ส่งไปคนละ IP, connection reuse, cache, server load หรือ network path เปลี่ยน
- ใช้ correlation ID เชื่อม client timing กับ server log และ trace ถ้ามี
- รายงานเป็น distribution/percentile ไม่สรุปจากค่าเฉลี่ยหรือการทดสอบครั้งเดียว
14แม่แบบรายงานแล็ป
| หัวข้อ | คำถามที่ต้องตอบ |
|---|---|
| อาการและขอบเขต | ใครได้รับผล เริ่มเมื่อใด ทุกครั้งหรือบางครั้ง |
| Baseline | สภาพปกติควรเป็นอย่างไร มีค่าก่อนเกิดปัญหาหรือไม่ |
| สมมติฐาน | คาดว่าปัญหาอยู่ชั้นใด และอะไรจะหักล้างสมมติฐานนี้ |
| คำสั่ง | ใช้เครื่องมือใด เพราะตอบคำถามอะไร |
| หลักฐาน | ผลบรรทัดใด/packet ใดสนับสนุนหรือหักล้าง |
| ข้อสรุป | สาเหตุที่ยืนยันแล้วกับสิ่งที่ยังไม่รู้ แยกจากกัน |
| การแก้และตรวจซ้ำ | เปลี่ยนอะไร ความเสี่ยงคืออะไร และพิสูจน์ว่าดีขึ้นอย่างไร |
15สรุปและขั้นตอนถัดไป
เครื่องมือเครือข่ายแต่ละตัวเหมือนไฟฉายที่ส่องได้บางมุม ipconfig/ip บอกตัวตนของเครื่อง arp บอกเพื่อนบ้าน route บอกทางออก ping ตรวจ ICMP traceroute เผยเส้นทางบางส่วน dig ตรวจสมุดรายชื่อ ss/netstat ดู socket curl คุยกับบริการ และ packet capture ใช้ตรวจเหตุการณ์จริง ขั้นถัดไปคือหยิบสถานการณ์หนึ่งจากระบบที่สร้างในแล็ป 1–4 แล้วใช้เครื่องมือเหล่านี้เขียนเรื่องราวจากอาการไปถึงสาเหตุโดยไม่กระโดดข้ามหลักฐาน