Cheat sheet · เปิดคาไว้ตอนสอบแลป

คำสั่งทั้งหมดในหน้าเดียว

ทุกคำสั่งจาก setup, Lab 1–5 รวมไว้ที่นี่ แทนค่า x = 3, y = 128 ให้เรียบร้อยแล้ว — คัดลอกไปวางได้ทันที ไม่ต้องคิดเลข พิมพ์ในช่องค้นหาแล้วมันจะกรองให้เหลือเฉพาะที่ตรง

หน้าอ้างอิง · ไม่ต้องอ่านรวด พกเข้าห้องสอบ x = 3 · y = 128
ใช้หน้านี้ยังไง

กติกาห้องสอบ: เอา notebook / iPad เข้าได้ ต่อเน็ตได้ แต่ห้ามเปิด AI — หน้านี้เป็นหน้าเว็บธรรมดา เปิดคาไว้ได้ · พิมพ์ในช่องค้นหาข้างล่าง เช่น clock rate, vlan, netem, screen แล้วหน้าจะเหลือเฉพาะบรรทัดที่ตรง

กดปุ่ม "คัดลอก" มุมขวาบนของทุกบล็อก — ปุ่มจะตัด prompt (Router(config)#) และคอมเมนต์ออกให้อัตโนมัติ เหลือแต่คำสั่งล้วน ๆ วางลง console ได้เลย · เซฟหน้านี้เก็บไว้ในเครื่องก่อนวันสอบ (⌘+S) เผื่อเน็ตห้องสอบมีปัญหา

C.1ลำดับที่ควรทำในห้องสอบ

  1. ก่อนแตะเครื่อง — วาด topology + ตาราง IP ลงกระดาษ ให้ครบว่าอินเทอร์เฟซไหนได้ IP อะไร วงไหนเป็น LAN วงไหนเป็น Serial (ค่าอยู่ที่ C.2)
  2. เปิดของทั้งหมดค้างไว้ก่อน — ต่อ VPN KKU (ถ้าใช้ server คณะ) → เปิด GNS3 → เปิด Wireshark หนึ่งครั้งเช็กว่าเห็น interface → เปิด VM Ubuntu ให้บูตค้างไว้ (ข้อ Mininet)
  3. สร้าง topology → กด Start ทุกตัว → รอไฟเขียวและรอจนขึ้น Router> (c7200 บูตราวครึ่งนาที)
  4. Config ตามลำดับนี้เสมอ — Ethernet ก่อน → Serial (clock rate ฝั่ง DCE) → ยืนยัน up / up → RIP → ตั้ง IP+gateway ให้ PC
  5. ping ไล่ทีละ hop — gateway ตัวเอง → ขาไกลของ router → PC ปลายทาง แล้วแคปหน้าจอเก็บทันทีที่ผ่าน
  6. Start Capture ที่สาย → ping ใหม่ → ใส่ filter 3 อัน ip.src == 192.3.128.2 · icmp · arp แคปทั้งสาม
  7. เก็บผลส่ง — show running-config ทุกตัว · show mac-address-table ที่ switch · show arp ที่ router · show vlan ทุก switch (ดู C.16)
  8. copy run start ก่อนลุกจากเครื่อง ไม่งั้น config หายถ้าอุปกรณ์ถูก reload
ข้อสอบสั่งให้ทำอะไรต้องส่งอะไร
ข้อ 1 15router ≥ 2 ตัวเชื่อมกันผ่าน Serial · ทุก router มี switch · ทุก switch มี PC ≥ 1 ตัว · ping กันได้หมด · IP ใช้เลขจากรหัสนักศึกษาshow running-config · show mac-address-table · show arp
ข้อ 2 10Wireshark ดักจับ packet ระหว่าง PC ตอน pingfilter จาก source address ของการ ping + filter icmp + filter arp (แคปหน้าจอ 3 รูป)
ข้อ 3 10ตั้ง VLAN ตามรูปให้ ping กันได้show vlan ของทุก switch
ข้อ 4 15Mininet สร้าง topology ตามรูป → ping ได้ทุกโหนด → (ก) delay 100 ms + jitter 10 ms บน h1-eth0 เทียบก่อน/หลัง (ข) loss 20% แล้ว pingผล ping ก่อน/หลัง ทั้งสองกรณี

C.2ค่าประจำตัว — แทนค่าไว้หมดแล้ว

ในใบแลปเขียนว่าของคุณคือใช้ตรงไหน
x = เลขหลังขีดของรหัส3รหัส 673040128-3
y = สามตัวก่อนขีด mod 254128128 mod 254 = 128
192.x.y.0/24192.3.128.0/24LAN ฝั่งซ้าย (PC1, PC2)
193.x.y.0/24193.3.128.0/24ลิงก์ Serial ระหว่าง router
194.x.y.0/24194.3.128.0/24LAN ฝั่งขวา (PC3, PC4)
Subnet mask ทุกวง255.255.255.0เท่ากับ /24 ทุกวง (คลาส C)
หมายเลข VLAN (Lab 4)10 · 20 · 30 · 40ใบแลปให้ใช้เลข 2 หลักก่อนขีด = 28 ของ Pisit แล้วเขียนต่อว่า "ใช้เลขอะไรก็ได้ที่มีมากกว่า 2 วง VLAN" — หน้านี้กับ Lab 4 จึงใช้ 10/20/30/40 · ถ้า TA บังคับตามรหัส เปลี่ยน 10 → 28
หมายเลข VLAN (Lab 5)9ใบแลป STP กำหนดให้ทุกสวิตช์อยู่บน VLAN 9
อุปกรณ์LAN (E0)SerialGatewayรหัสผ่าน
LAB-A192.3.128.1193.3.128.1—enable class · secret datacom · console Lab · vty Lab
LAB-B194.3.128.1193.3.128.2 DCE—
PC1192.3.128.2—192.3.128.1—
PC2192.3.128.3—192.3.128.1—
PC3194.3.128.2—194.3.128.1—
PC4194.3.128.3—194.3.128.1—
อุปกรณ์ / ที่มาชื่ออินเทอร์เฟซที่ต้องพิมพ์
c7200 ใน GNS3
slot1 = PA-4E · slot2 = PA-4T+
Ethernet1/0 – Ethernet1/3 · Serial2/0 – Serial2/3
Cisco 1841 (LAB-A ของจริง)FastEthernet0/0, FastEthernet0/1 · Serial0/1/0 (เลข 2 ท่อนสำหรับ Ethernet)
Cisco 4321 (LAB-B ของจริง)GigabitEthernet0/0/0, GigabitEthernet0/0/1 · Serial0/1/1 (เลข 3 ท่อน)
Switch 3650GigabitEthernet1/0/1 … 1/0/24 + Vlan1
Switch 2950FastEthernet0/1 … 0/24 + Vlan1
IOU L2 ใน GNS3Ethernet0/0 … Ethernet3/3
ห้ามเดาชื่ออินเทอร์เฟซ

ใบแลปเขียนเตือนไว้เองว่า "พยายามดูชื่อและหมายเลข Port เองด้วยเพื่อป้องกันความผิดพลาดจากรายงานนี้" — เสียบสายเข้าช่องไหน ต้อง config ช่องนั้น · ดูชื่อจริงก่อนเสมอด้วย show ip interface brief

C.3macOS · Terminal

[macOS Terminal] — เช็กสภาพเครื่องก่อนเข้าห้องสอบ
$ ls -l /dev/bpf0
# ต้องขึ้นกลุ่ม access_bpf  เช่น  crw-rw----  1 root  access_bpf
$ id -Gn | tr ' ' '\n' | grep access_bpf
# ต้องพิมพ์คำว่า access_bpf ออกมา — ถ้าไม่ออก แปลว่ายังไม่ได้ลง ChmodBPF.pkg
$ ls /dev/tty.*
# เสียบสาย console แล้วต้องเห็น /dev/tty.usbmodemXXXX
$ ssh ubuntu 'sudo mn --test pingall'
# Mininet ต้องได้ *** Results: 0% dropped
[macOS Terminal] — ใช้ระหว่างทำแลปเครื่องจริง
$ ping -c 3 192.3.128.1       # ping แค่ 3 ครั้งแล้วหยุดเอง
$ arp -a                     # ดูตาราง ARP ของเครื่องเรา (ใบแลป Lab 2 ข้อ 14 สั่งใช้)
# ? (192.3.128.1) at 0:aa:11:11:0:1 on en5 ifscope [ethernet]
$ ifconfig en5              # ดู IP/MAC ของการ์ด USB-C Ethernet
$ netstat -rn | head       # ดูตาราง routing ของ Mac (เช็กว่า default ออกทางไหน)
$ ssh ubuntu                 # เข้า Ubuntu VM ที่รัน Mininet
งานทำที่ไหนบน macOS
ตั้ง IP แบบ manualSystem Settings → Network → คลิกการ์ด → Details… → TCP/IP → Configure IPv4 = Manually → กรอก IP / Subnet Mask / Router
ปิด Firewall (ต้องปิดก่อนทำแลปจริง)System Settings → Network → Firewall → ปิดสวิตช์
ปิด Wi-Fi (ต้องปิดก่อนทำแลปจริง)คลิกไอคอน Wi-Fi บนแถบเมนู → สลับปิด
ทำเสร็จแล้วเปิด Wi-Fi + Firewall คืน แล้วเปลี่ยน IPv4 กลับเป็น Using DHCP
ส่วนขยาย — สร้างไฟล์ทดสอบ 30 MB สำหรับ FTP (Lab 5)

ใบแลป 5 สั่งให้โอนไฟล์ อย่างน้อย 30 Mbytes แต่ไม่ได้บอกว่าจะเอาไฟล์มาจากไหน — สร้างเองได้ในบรรทัดเดียว

[macOS Terminal] — ส่วนขยาย
$ mkfile 30m ~/test30.bin           # วิธีของ macOS
$ dd if=/dev/zero of=~/test30.bin bs=1m count=30   # วิธีที่ใช้ได้ทั้ง Mac และ Linux

C.4GNS3 — เมนูที่ต้องกด

อยากทำอะไรกดตรงไหน (macOS)
เปิด PreferencesGNS3 (มุมซ้ายบน) → Preferences · ปุ่มลัด ⌘+, (ใบแลปเขียน Edit → Preferences ซึ่งเป็นของ Windows)
เพิ่ม IOS imagePreferences → IOS routers → New → เลือก c7200-adventerprisek9-mz.152-4.M5.image
ตั้ง RAM ของ routerหน้าเดียวกัน → Default RAM = 512 MiB
ใส่ การ์ดพอร์ตหน้า adapter → slot 1 = PA-4E (Ethernet 4 พอร์ต) · slot 2 = PA-4T+ (Serial 4 พอร์ต) ไม่ใส่ = ไม่มีพอร์ต Serial ให้ลากสาย
ไม่ให้ CPU 100%หน้า Idle-PC → กด Idle-PC finder แล้วรอจนเสร็จ อย่ากดข้าม
ต่อ Remote server ของ KKUต่อ VPN KKU ก่อนเปิด GNS3 → Preferences → Server → แท็บ Remote servers → Add → กรอก Name / Protocol (HTTP) / Host / Port / Username / Password
ลากอุปกรณ์ + ต่อสายแถบซ้าย Node Type → ลาก VPCS / Router / Switch ลงมา → กด Add a link → คลิกอุปกรณ์ → เลือกพอร์ต → ลากไปอีกตัว
เปิด / ปิดอุปกรณ์แถบ Shortcut Icon Bar — ▶ Start ทั้งหมด · ⏸ Suspend · ⏹ Stop (จุดหน้าชื่อ: แดง = หยุด · เขียว = ทำงาน)
เข้า consoleคลิกขวาที่อุปกรณ์ → Console (บน Mac จะเปิด Terminal.app ให้ — ไม่ต้องใช้ screen)
เปิด Wiresharkคลิกขวาที่เส้นสาย (ไม่ใช่ที่อุปกรณ์) → Start Capture แล้ว ping ใหม่
ใครเป็น DCEใน GNS3 ฝั่งที่คลิกเป็นตัวแรกตอนลากสาย Serial จะเป็น DCE · ยืนยันด้วย show controllers

C.5ต่อ console ด้วย screen (แทน PuTTY)

[macOS Terminal] — ครบทุกคำสั่งของ screen
$ ls /dev/tty.*
# /dev/tty.Bluetooth-Incoming-Port   /dev/tty.usbmodem1301  ← อันนี้คืออุปกรณ์ที่เพิ่งเสียบ

$ screen /dev/tty.usbmodem1301 9600
# แล้วกด Enter อีก 1–2 ครั้ง จะเห็น prompt  Router>  หรือ  Switch>
# console ของ Cisco ใช้ 9600 8N1 — ถ้าไม่ใส่ 9600 อาจได้ตัวอักษรขยะ

$ screen -ls                    # ดูรายการ session ที่ค้างอยู่
$ screen -r <screen_number>      # กลับเข้า session เดิม
$ screen -X -S <screen_number> quit   # ปิด session ที่ค้าง (แก้ Resource busy)
อยากทำอะไรกดอะไร
ถอยออกโดยไม่ตัดการเชื่อมต่อCtrl+A แล้วตามด้วย Ctrl+\ (แล้วตอบ y)
จอดำ ไม่มี promptกด Enter 2–3 ครั้ง · ถ้ายังดำ → screen -ls แล้ว screen -X -S <id> quit ทุกอัน แล้วเปิดใหม่
เจอตัวอักษรขยะออกแล้วเปิดใหม่โดยใส่ 9600 ต่อท้าย
ต่อสาย console รุ่นเก่าสาย RJ-45 + ตัวแปลงเป็น USB · รุ่นใหม่เป็น Mini USB ตรง ๆ · MacBook Air M2 มีแต่ USB-C → ต้องพกตัวแปลง USB-A → USB-C ไปด้วย

C.6VPCS (PC จำลองใน GNS3)

[VPCS] — รูปแบบ
VPCS[1]> ip <ip_address> <subnet_mask> <gateway>
# gateway = interface ของ router ที่ PC ตัวนั้นต่ออยู่ — ใส่เมื่อต้องคุยข้าม subnet
[VPCS] — ของจริงทั้ง 4 เครื่อง · คัดลอกวางได้ทันที
VPCS[1]> ip 192.3.128.2 255.255.255.0 192.3.128.1
VPCS[2]> ip 192.3.128.3 255.255.255.0 192.3.128.1
VPCS[3]> ip 194.3.128.2 255.255.255.0 194.3.128.1
VPCS[4]> ip 194.3.128.3 255.255.255.0 194.3.128.1
[VPCS] — ไม่มี gateway (topology ที่ 1 · อยู่วงเดียวกันหมด)
VPCS[1]> ip 192.3.128.2 255.255.255.0
VPCS[2]> ip 192.3.128.3 255.255.255.0
VPCS[3]> ip 194.3.128.2 255.255.255.0
[VPCS] — ทดสอบ · ไล่ ping ทีละ hop เวลาหาจุดพัง
VPCS[1]> ping 192.3.128.1   # ① ถึง gateway ตัวเองไหม (ไม่ผ่าน = สายหลุด / ลืม no shutdown)
VPCS[1]> ping 194.3.128.1   # ② ถึงขาไกลของ router ไหม (ไม่ผ่าน = ขานั้นยังไม่ได้ตั้ง IP)
VPCS[1]> ping 194.3.128.2   # ③ ถึง PC ปลายทางไหม (ไม่ผ่าน = PC ปลายทางลืมตั้ง gateway)
# 84 bytes from 194.3.128.2 icmp_seq=1 ttl=62 time=31.204 ms
#                                       └── ttl 63 = ผ่าน 1 router · 62 = ผ่าน 2 router

VPCS[1]> show ip            # ส่วนขยาย: ยืนยันว่า IP/mask/gateway เข้าจริง
จุดที่คนพลาดบ่อย — ลืม gateway

ใบแลปย้ำตัวหนาว่า "อย่าลืมใส่ gateway ให้ PC โดย gateway คือ Interface ของสิ่งที่เราต้องการส่งไปหา" — ถ้าลืม อาการคือ ping ข้าม subnet ขึ้น host not reachable ทันที โดยไม่มีแพ็กเก็ตออกจากเครื่องเลย เปิด Wireshark ก็เงียบสนิท

C.7Router พื้นฐาน — โหมด · ชื่อ · รหัสผ่าน · บันทึก

[Router Console] — เข้า-ออกโหมด
Router>enable              # user mode → privileged mode
Router#disable             # ถอยกลับลงมา
Router#configure terminal  # → global config mode
Router(config)#exit        # ถอยขึ้นหนึ่งชั้น
Router(config-if)#end      # กลับไป privileged mode ทันที (หรือกด Ctrl+Z)
prompt ที่เห็นแปลว่าอยู่โหมดไหน
Router>user mode — ดูได้อย่างเดียว
Router#privileged mode — ใช้ show ได้ทุกอย่าง และเข้า config ได้
Router(config)#global config — ตั้งค่าทั้งเครื่อง
Router(config-if)#interface config — ตั้งค่าอินเทอร์เฟซใบที่เลือกไว้
Router(config-router)#routing config — อยู่ในบล็อก router rip
Router(config-subif)#subinterface — Router-on-a-Stick
Router(config-line)#line config — line console 0 / line vty 0 4
Router(config-vlan)#vlan config — อยู่ในบล็อก vlan 10
[LAB-A Console] — hostname + รหัสผ่านครบ 4 ช่องตามตารางใบแลป
Router>enable
Router#configure terminal
Router(config)#hostname LAB-A
LAB-A(config)#enable password class
LAB-A(config)#enable secret datacom
LAB-A(config)#line console 0
LAB-A(config-line)#password Lab
LAB-A(config-line)#login
LAB-A(config-line)#exit
LAB-A(config)#line vty 0 4
LAB-A(config-line)#password Lab
LAB-A(config-line)#login
LAB-A(config-line)#end
ตั้ง password แล้วต้องมี login เสมอ

password แค่เก็บค่า ส่วน login คือคำสั่งที่สั่งให้ถาม — ถ้ามีแต่ password เข้ามาทาง console จะไม่ถูกถามเลย · ตรงข้าม ถ้าใส่ login บน vty โดยยังไม่ตั้ง password จะ telnet เข้าไม่ได้เลย (password required, but none set)

[Router#] — บันทึก config (ไม่มีปุ่ม Save ใน IOS)
Router#show running-config   # ค่าที่ใช้อยู่ตอนนี้ (RAM) — หายเมื่อปิดเครื่อง
Router#show startup-config   # ค่าที่จะโหลดตอนบูต (NVRAM) — ไม่หาย
Router#copy running-config startup-config
# Destination filename [startup-config]?   ← กด Enter ผ่านไป
Router#copy run start        # แบบย่อ ทำงานเหมือนกัน
Router#write memory          # คำสั่งเก่า ทำงานเหมือนกัน
ส่วนขยาย — 3 บรรทัดที่ทำให้ชีวิตในห้องสอบง่ายขึ้นมาก

ไม่ได้อยู่ในใบแลป แต่พิมพ์ครั้งเดียวตอนเริ่มแล้วประหยัดเวลาไปทั้งชั่วโมง

[Router Console] — ส่วนขยาย
Router(config)#no ip domain-lookup
# พิมพ์คำสั่งผิด IOS จะไม่ค้างรอ DNS 30 วินาที
Router(config)#line console 0
Router(config-line)#logging synchronous
# ข้อความ log จะไม่แทรกกลางบรรทัดที่กำลังพิมพ์อยู่
Router(config-line)#exec-timeout 0 0
# ไม่ให้ console เตะออกเองตอนคิดนาน

Router#terminal length 0
# ให้ show running-config พิมพ์รวดเดียวจบ ไม่มี --More-- ให้กด space (แคปหน้าจอง่ายขึ้น)

C.8ตั้ง IP ให้ Interface + Serial

[Router Console] — รูปแบบ Ethernet
Router(config)#interface <interface type slot/port>
Router(config-if)#ip address <ip_address> <subnet_mask>
Router(config-if)#no shutdown
[LAB-A Console] — c7200 ใน GNS3 · Ethernet + Serial (ฝั่งนี้สมมติเป็น DCE)
Router#configure terminal
Router(config)#interface Ethernet1/0
Router(config-if)#ip address 192.3.128.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface Serial2/0
Router(config-if)#ip address 193.3.128.1 255.255.255.0
Router(config-if)#bandwidth 56
Router(config-if)#clock rate 56000
Router(config-if)#no shutdown
Router(config-if)#end
[LAB-B Console] — c7200 ใน GNS3 · อีกฝั่งของสาย Serial
Router#configure terminal
Router(config)#interface Ethernet1/0
Router(config-if)#ip address 194.3.128.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface Serial2/1
Router(config-if)#ip address 193.3.128.2 255.255.255.0
Router(config-if)#bandwidth 56
Router(config-if)#clock rate 56000
Router(config-if)#no shutdown
Router(config-if)#end
[LAB-A Console] — อุปกรณ์จริง Cisco 1841 · FastEthernet + Serial (ฝั่ง DTE)
Router#configure terminal
Router(config)#interface FastEthernet 0/1
Router(config-if)#ip address 192.3.128.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface Serial0/1/0
Router(config-if)#ip address 193.3.128.1 255.255.255.0
Router(config-if)#bandwidth 56
Router(config-if)#no shutdown
[LAB-B Console] — อุปกรณ์จริง Cisco 4321 · GigabitEthernet + Serial (ฝั่ง DCE มี clock rate)
Router#configure terminal
Router(config)#interface GigabitEthernet 0/0/1
Router(config-if)#ip address 194.3.128.1 255.255.255.0
Router(config-if)#no shutdown
Router(config-if)#exit
Router(config)#interface Serial0/1/1
Router(config-if)#ip address 193.3.128.2 255.255.255.0
Router(config-if)#bandwidth 56
Router(config-if)#clock rate 56000
Router(config-if)#no shutdown
[Router#] — เช็กว่าใครเป็น DCE (คำสั่งเดียวที่ตอบได้)
LAB-B#show controllers Serial0/1/1
# V.35 DCE cable, clock rate 56000   ← มีคำว่า DCE = ฝั่งนี้ต้องตั้ง clock rate
LAB-A#show controllers Serial0/1/0
# V.35 DTE cable                     ← มีคำว่า DTE = ฝั่งนี้ไม่ต้องตั้ง
คำสั่งทำอะไร · ตั้งที่ฝั่งไหน
bandwidth 56บอก IOS ว่าลิงก์นี้ "ถือว่า" มี 56 kbps — เป็นแค่ตัวเลขให้ routing protocol คำนวณ metric และให้ show interfaces รายงาน BW 56 Kbit/sec · ไม่ได้ทำให้สายเร็วหรือช้าลงจริง · ตั้งได้ทั้งสองฝั่ง
clock rate 56000จ่ายสัญญาณนาฬิกา 56000 bps ให้อีกฝั่ง = ความเร็วจริงของลิงก์ · ตั้งเฉพาะฝั่ง DCE · ลืม = ลิงก์ไม่ขึ้น (up / down)
no shutdownเปิดใช้งานอินเทอร์เฟซ · ทุกใบปิดอยู่โดยค่าเริ่มต้น ลืม = administratively down
สถานะที่เห็นจาก show ip interface briefแปลว่าอะไร · แก้ยังไง
up / upเรียบร้อย ใช้งานได้ ไปต่อได้เลย
up / downสายเสียบอยู่ แต่ไม่มีสัญญาณนาฬิกา → show controllers หาฝั่ง DCE แล้วใส่ clock rate 56000
down / downชั้นกายภาพไม่ขึ้นเลย — สายหลุด / สายเสีย / อีกฝั่ง shutdown อยู่
administratively down / downลืม no shutdown ที่ฝั่งตัวเอง

C.9RIP และ static route

[Router Console] — รูปแบบ RIP ตามใบแลป
Router#configure terminal
Router(config)#router rip
Router(config-router)#network <network_address>
Router(config-router)#network <network_address>
Router(config-router)#end
# ยกเลิก: พิมพ์ no นำหน้า เช่น  no router rip  หรือ  no network 193.3.128.0
[LAB-A Console]
Router(config)#router rip
Router(config-router)#network 192.3.128.0
Router(config-router)#network 193.3.128.0
Router(config-router)#end
[LAB-B Console]
Router(config)#router rip
Router(config-router)#network 194.3.128.0
Router(config-router)#network 193.3.128.0
Router(config-router)#end
จุดที่คนพลาดบ่อยที่สุดของทั้งแลป — ลืมประกาศวงของ Serial

network 193.3.128.0 คือวงของสาย Serial ถ้าไม่ประกาศ RIP จะไม่ทำงานบนอินเทอร์เฟซ Serial เลย → ไม่มี update วิ่งข้ามสาย → router สองตัวไม่รู้จักกัน → ping ไม่ผ่านทั้งที่คำสั่งดูเหมือนถูกหมด · ประกาศทุกวงที่ต่ออยู่กับ router ตัวนั้น รวมวงของ Serial เสมอ

[Router#] — ยืนยันว่า RIP ทำงานแล้ว
LAB-A#show ip route
# Codes: C - connected, S - static, R - RIP, ...
C    192.3.128.0/24 is directly connected, Ethernet1/0
C    193.3.128.0/24 is directly connected, Serial2/0
R    194.3.128.0/24 [120/1] via 193.3.128.2, 00:00:12, Serial2/0
# ต้องเห็นแถวขึ้นต้นด้วย R — ถ้ามีแต่ C แปลว่า RIP ยังไม่ได้แลกเปลี่ยนกัน

LAB-A#show ip protocols   # ส่วนขยาย: ดูว่าประกาศ network ครบไหม และ update ทุกกี่วินาที
ส่วนขยาย — static route (ใบแลปไม่ได้ใช้ แต่ช่วยชีวิตตอน RIP ไม่ยอมขึ้น)

ถ้าเหลือเวลาน้อยและ RIP ยังไม่ยอมทำงาน ใส่ static route แทนได้ ผลลัพธ์ที่อาจารย์เห็นคือ ping ผ่านเหมือนกัน (แต่ show ip route จะขึ้น S แทน R)

[Router Console] — ส่วนขยาย
LAB-A(config)#ip route 194.3.128.0 255.255.255.0 193.3.128.2
#              └ วงปลายทาง        └ mask         └ IP ของ router ตัวถัดไป
LAB-B(config)#ip route 192.3.128.0 255.255.255.0 193.3.128.1
# ต้องใส่ทั้งสองฝั่ง ไม่งั้นขาไปถึงแต่ขากลับไม่ถึง

LAB-A(config)#ip route 0.0.0.0 0.0.0.0 193.3.128.2
# default route: อะไรที่ไม่รู้จัก ส่งไปทางนี้หมด

C.10Switch พื้นฐาน + Port Mirroring

[Switch Console] — คำสั่งที่ใช้บ่อยที่สุด
Switch>enable
Switch#configure terminal
Switch(config)#hostname SW1
SW1(config)#end
SW1#show mac-address-table   # ข้อสอบข้อ 1 สั่งส่งอันนี้
SW1#show vlan
SW1#show running-config
SW1#copy run start
[Switch#] show mac-address-table — หน้าตาที่ควรเห็น
          Mac Address Table
-------------------------------------------
Vlan    Mac Address       Type       Ports
----    -----------       --------   -----
   1    00aa.0000.0001   DYNAMIC    Gi1/0/1
   1    00bb.0000.0002   DYNAMIC    Gi1/0/2
#       └── switch เรียนเองจาก source MAC ของเฟรมที่วิ่งเข้ามา (DYNAMIC)
[Switch 3650 Console] — Port Mirroring ให้ Wireshark เห็นทราฟฟิกของคนอื่น
Switch#configure terminal
Switch(config)#monitor session 1 source Interface GigabitEthernet1/0/1 , GigabitEthernet1/0/3 both
Switch(config)#monitor session 1 destination interface GigabitEthernet1/0/13
Switch(config)#end
Switch#show monitor session 1
# source = พอร์ตที่จะถูกก๊อป (พอร์ตของ PC1/PC2) · both = ก๊อปทั้งขาเข้าและขาออก
# destination = พอร์ตที่เสียบเครื่องที่รัน Wireshark ไว้
ทำไมต้องมิเรอร์

Switch ส่งเฟรมเฉพาะไปยังพอร์ตปลายทาง (ต่างจาก hub ที่กระจายทุกพอร์ต) — เสียบ MacBook เข้าไปเฉย ๆ จะไม่เห็นทราฟฟิกระหว่าง PC1 กับ PC2 เลย · monitor session คือคำสั่งที่สั่งให้ switch ทำสำเนามาให้ · ใน Lab 5 ให้เอา Wireshark ไป monitor ที่ Root Bridge

ส่วนขยาย — ให้ switch มี IP ไว้ telnet/จัดการ
[Switch Console] — ส่วนขยาย
SW1(config)#interface Vlan1
SW1(config-if)#ip address 192.3.128.10 255.255.255.0
SW1(config-if)#no shutdown
SW1(config-if)#exit
SW1(config)#ip default-gateway 192.3.128.1
# Vlan1 เป็นอินเทอร์เฟซเสมือน ไม่ใช่พอร์ตจริง — มีไว้ใส่ IP สำหรับจัดการตัวสวิตช์เอง

SW1#show interfaces status          # พอร์ตไหนมีสายเสียบ ความเร็วเท่าไร อยู่ VLAN อะไร
SW1#clear mac address-table dynamic # ล้างตาราง MAC เพื่อดูมันเรียนใหม่

C.11VLAN + Trunk (Lab 4)

ใช้เลข VLAN อะไร

ใบแลปให้ใช้ เลข 2 หลักก่อนขีดของรหัส → ของ Pisit คือ 28 แล้วเขียนต่อว่า "จากนั้นจึงใช้เลขอะไรก็ได้ที่มีมากกว่า 2 วง VLAN" · หน้านี้กับ Lab 4 จึงใช้ VLAN 10 / 20 / 30 / 40 ให้อ่านง่ายและตรงกับรูปในใบแลป — ถ้า TA บังคับให้ใช้เลขตามรหัส ให้เปลี่ยน 10 → 28 และ 20 → เลข 2 หลักของเพื่อนคู่แลป คำสั่งอื่นเหมือนเดิมทุกบรรทัด

[Switch Console] — ① สร้าง VLAN และตั้งชื่อ
Switch>enable
Switch#configure terminal
Switch(config)#hostname SW1
SW1(config)#vlan 10
SW1(config-vlan)#name VLAN10
SW1(config-vlan)#exit
SW1(config)#vlan 20
SW1(config-vlan)#name VLAN20
SW1(config-vlan)#exit
[Switch Console] — ② จับพอร์ตเข้า VLAN (Access Port)
SW1(config)#interface fa1/1
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 10
SW1(config-if)#exit
SW1(config)#interface fa1/2
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 20
SW1(config-if)#end
[Switch Console] — ทำทีเดียวหลายพอร์ตด้วย interface range
SW1(config)#interface range fa1/1 - 2
SW1(config-if-range)#switchport mode access
SW1(config-if-range)#switchport access vlan 10
SW1(config-if-range)#end
# ต้องเว้นวรรครอบขีด:  fa1/1 - 2   ไม่ใช่  fa1/1-2
# สวิตช์จริง 2950 ใช้ FastEthernet0/1 - 2 · 3650 ใช้ GigabitEthernet1/0/1 - 2
[Switch#] — ③ ตรวจสอบ VLAN (ข้อสอบข้อ 3 สั่งส่งอันนี้ ของทุก switch)
SW1#show vlan
SW1#show vlan brief
# VLAN Name          Status    Ports
#   1  default       active    Fa1/3, Fa1/4, ...
#  10  VLAN10        active    Fa1/1
#  20  VLAN20        active    Fa1/2
[Switch Console] — ④ ทำ Trunk (ใช้สายเส้นเดียวส่งได้หลาย VLAN) พร้อม allowed vlan
SW1#configure terminal
SW1(config)#interface fa1/10
SW1(config-if)#switchport trunk encapsulation dot1q
# บางรุ่นต้องสั่งบรรทัดนี้ก่อน · รุ่นที่รองรับ dot1Q อย่างเดียว (2950/3650) จะไม่มีคำสั่งนี้ ข้ามไปได้
SW1(config-if)#switchport mode trunk
SW1(config-if)#switchport trunk native vlan 10
SW1(config-if)#switchport trunk allowed vlan 10,20
SW1(config-if)#no shutdown
SW1(config-if)#end
SW1#copy run start
# ต้องทำที่ switch ทั้งสองฝั่งของสาย trunk เสมอ และ native vlan ต้องตรงกัน
[Switch#] — ⑤ ตรวจสอบ trunk
SW1#show interface fa1/10 switchport
# Administrative Mode: trunk
# Operational Mode: trunk
# Trunking Native Mode VLAN: 10
# Trunking VLANs Enabled: 10,20
SW1#show interfaces trunk   # ส่วนขยาย: สรุปทุกพอร์ต trunk ในหน้าจอเดียว
[Switch Console] — ⑥ ล้าง VLAN ทิ้งเพื่อเริ่มใหม่ (ใบแลปข้อ 3 สั่ง)
SW1(config)#no vlan 10
SW1(config)#no vlan 20
SW1(config)#interface range fa1/1 - 2
SW1(config-if-range)#no switchport access vlan
SW1(config-if-range)#end
# พอร์ตจะกลับไปอยู่ VLAN 1 ตามค่าเริ่มต้น
[Switch Console] — ⑦ VTP (แจก VLAN ให้สวิตช์ตัวอื่นอัตโนมัติ)
Switch#vlan database
Switch(vlan)#vtp domain KKULAB
Switch(vlan)#vtp server
Switch(vlan)#exit
# ตัวลูกใช้  vtp client  แทน  vtp server

Switch#show vtp status
Switch#show vtp stat
ประเภทพอร์ตทำอะไรได้
Access Portสื่อสารได้ เพียง 1 VLAN และรับส่งเฉพาะเฟรมที่ไม่มี tag — เฟรมที่มี 802.1Q tag เข้ามาจะถูกทิ้ง (drop) · ใช้ต่อกับ PC
Trunk Portพอร์ตที่ใช้สื่อสารระหว่างสวิตช์ เฟรมที่ส่งต้องได้รับการ tag ก่อน (มาตรฐาน IEEE 802.1Q เติม tag เข้าไปในเฮดเดอร์ของเฟรม Ethernet) · ทำให้ไม่ต้องเดินสายหนึ่งเส้นต่อหนึ่ง VLAN
native vlanVLAN ที่วิ่งบน trunk แบบไม่ติด tag · ต้องตั้งให้ตรงกันทั้งสองฝั่ง
จุดที่คนพลาดบ่อย

① ทำ trunk ฝั่งเดียว — อีกฝั่งยังเป็น access อยู่ ⇒ VLAN ข้ามสวิตช์ไม่ได้ · ② ลืม switchport trunk allowed vlan ⇒ VLAN ที่เพิ่งสร้างวิ่งข้ามไม่ได้ · ③ native vlan สองฝั่งไม่ตรงกัน ⇒ ขึ้น log %CDP-4-NATIVE_VLAN_MISMATCH · ④ PC คนละ VLAN ping กันไม่ได้เป็นเรื่องปกติ ต้องมี router (C.12) ถึงจะข้ามได้

C.12Router-on-a-Stick — ให้ VLAN คุยข้ามกันได้

[Router Console] — รูปแบบตามใบแลป Listing 10
Router(config)#interface <interface type slot/port>.<vlan_id>
Router(config-subif)#encapsulation dot1Q <vlan_id>
Router(config-subif)#ip address <ip_address> <subnet_mask>
พอมี router มาคั่น แต่ละ VLAN ต้องเป็นคนละ subnet

ใบแลปข้อ 7 เขียนว่า "ให้มองว่าเป็นคนละเครือข่าย" — ข้อ 1–6 PC ทุกเครื่องอยู่วง 192.3.128.0/24 เหมือนกัน แต่ข้อ 7 ต้องแยกวง ไม่งั้น PC จะไม่ยอมส่งแพ็กเก็ตไปที่ gateway เลย · แผนนี้ตรงกับ Lab 4 §4.10 ทุกบรรทัด

VLANเครื่องIP ของ PCGatewaySubinterface
10PC1 (SW1)192.3.128.11192.3.128.1fa0/0.10
20PC2 (SW1)193.3.128.12193.3.128.1fa0/0.20
30PC3 (SW2)194.3.128.13194.3.128.1fa0/1.30
40PC4 (SW2)195.3.128.14195.3.128.1fa0/1.40

Subnet mask ทุกวง = 255.255.255.0 · 4 VLAN แบบนี้ตอบคำถามท้ายการทดลองข้อ 2 ไปในตัว (ที่ถามว่า "หากมีมากกว่า 3 VLAN")

[Router Console] — สคริปต์เต็ม 4 subinterface · คัดลอกวางได้ทั้งก้อน
Router>enable
Router#configure terminal
Router(config)#hostname R1
# ① เปิดขาจริงก่อน — ตัวมันเองไม่ต้องมี IP แต่ต้อง no shutdown ไม่งั้น subinterface ไม่ขึ้นสักอัน
R1(config)#interface fa0/0
R1(config-if)#no ip address
R1(config-if)#no shutdown
R1(config-if)#exit
# ② หนึ่ง subinterface ต่อหนึ่ง VLAN — เลขหลังจุดตั้งให้ตรงกับ VLAN ID จะจำง่ายที่สุด
R1(config)#interface fa0/0.10
R1(config-subif)#encapsulation dot1Q 10
R1(config-subif)#ip address 192.3.128.1 255.255.255.0
R1(config-subif)#exit
R1(config)#interface fa0/0.20
R1(config-subif)#encapsulation dot1Q 20
R1(config-subif)#ip address 193.3.128.1 255.255.255.0
R1(config-subif)#exit
# ③ ขาที่สองไป Switch2 — ทำแบบเดียวกันเป๊ะ
R1(config)#interface fa0/1
R1(config-if)#no ip address
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface fa0/1.30
R1(config-subif)#encapsulation dot1Q 30
R1(config-subif)#ip address 194.3.128.1 255.255.255.0
R1(config-subif)#exit
R1(config)#interface fa0/1.40
R1(config-subif)#encapsulation dot1Q 40
R1(config-subif)#ip address 195.3.128.1 255.255.255.0
R1(config-subif)#end
R1#copy run start
[Switch Console] — พอร์ตที่ต่อไปหา router ต้องเป็น trunk
SW1(config)#interface fa1/10
SW1(config-if)#switchport trunk encapsulation dot1q
SW1(config-if)#switchport mode trunk
SW1(config-if)#switchport trunk allowed vlan 10,20
SW1(config-if)#no shutdown
SW1(config-if)#end
# ที่ SW2 เปลี่ยนเป็น  switchport trunk allowed vlan 30,40
[VPCS] — ตั้ง IP + gateway ให้ PC ทั้งสี่แล้ว ping ข้าม VLAN
PC1> ip 192.3.128.11 255.255.255.0 192.3.128.1
PC2> ip 193.3.128.12 255.255.255.0 193.3.128.1
PC3> ip 194.3.128.13 255.255.255.0 194.3.128.1
PC4> ip 195.3.128.14 255.255.255.0 195.3.128.1

PC1> ping 193.3.128.12   # ข้าม VLAN 10 → 20  ต้องผ่าน (ttl ลด 1)
PC1> ping 195.3.128.14   # ข้าม VLAN 10 → 40  ต้องผ่าน
จุดที่คนพลาดบ่อย

① ลืม no shutdown ที่อินเทอร์เฟซแม่ (fa0/0) — subinterface ทุกอันจะ down ตาม · ② เลขหลังจุดกับเลขใน encapsulation dot1Q ควรตรงกัน (ไม่บังคับ แต่ตั้งต่างกันแล้วจะงงตัวเองแน่นอน) · ③ พอร์ตของสวิตช์ที่ต่อไป router ต้องเป็น trunk ไม่ใช่ access · ④ PC ต้องตั้ง gateway เป็น IP ของ subinterface ของ VLAN ตัวเอง · ⑤ แต่ละ VLAN ต้องคนละ subnet ถ้าใช้วงเดียวกันหมด PC จะไม่ส่งไปที่ gateway เลย

C.13Spanning Tree Protocol (Lab 5)

[Switch Console] — เปิด / ปิด / ตั้ง priority · VLAN 9 ตามที่ใบแลปกำหนด
Switch#configure terminal
Switch(config)#spanning-tree vlan 9
# เปิด / ยืนยันว่ามี STP บน VLAN 9

Switch(config)#spanning-tree vlan 9 priority 4096
# ปรับ priority ของสวิตช์ที่ยังไม่ได้เป็น root ให้ต่ำลง เพื่อแย่งเป็น root bridge
# ค่าต้องเป็นพหุคูณของ 4096 เท่านั้น: 0, 4096, 8192, ... (ค่าเริ่มต้น = 32768)

Switch(config)#no spanning-tree vlan 9
# ยกเลิก STP (ใบแลปข้อ 4.5 — ระวังลูป/เครื่องค้าง ให้ดึงสายออกก่อน)
Switch(config)#end
[Switch#] — ตรวจสอบ STP (ทำทุกครั้งหลัง config ตามที่ใบแลปสั่ง)
Switch#show spanning-tree
Switch#show spanning-tree vlan 9
# VLAN0009
#   Root ID    Priority 4096   Address aaaa.bbbb.cccc   This bridge is the root
#   Interface   Role Sts Cost   Prio.Nbr Type
#   Fa0/1       Desg FWD 19     128.1    P2p     ← Designated / Forwarding
#   Fa0/2       Root FWD 19     128.2    P2p     ← Root Port
#   Fa0/3       Altn BLK 19     128.3    P2p     ← พอร์ตที่ถูกบล็อก
ขั้นตอนการเลือกของ STPตัดสินจากอะไร
1. Root Bridgeทั้งเน็ตเวิร์กมี สวิตช์เดียว ที่เป็น root — เลือกตัวที่ Bridge ID น้อยที่สุด (Bridge ID = Priority + MAC Address) · ขาของ Root Bridge เป็น Designated Port ทั้งหมด
2. Root Portสวิตช์แต่ละตัวมีได้ 1 พอร์ตเท่านั้น — เลือกพอร์ตที่มี Path Cost ไปหา Root Bridge ต่ำสุด · เท่ากันให้ดู Bridge ID
3. Designated Portทุก segment (ลิงก์ระหว่างสวิตช์) ต้องมี 1 Designated Port — เลือกจาก Path Cost ต่ำสุด → Bridge ID ต่ำสุด → Port ID ต่ำสุด
4. Block Portพอร์ตที่เหลือจาก Root Port และ Designated Port คือ พอร์ตที่ถูกบล็อก
BPDUเฟรมที่สวิตช์แลกกันเพื่อบอก Bridge ID, ต้นทุน, Port ID — ใช้เลือก root และคำนวณบทบาทพอร์ต · ดักดูใน Wireshark ด้วย filter stp
ส่วนขยาย (จาก บทที่ 15) — ทำไมพอร์ตต้องรอ 30–50 วินาที

Blocking (max age 20 วิ) → Listening (forward delay 15 วิ) → Learning (forward delay 15 วิ) → Forwarding · เสียบสายใหม่ไฟจะเป็นสีส้มระหว่าง Listening + Learning ราว 30 วินาที ก่อนเป็นสีเขียว · ส่วนกรณี root ล่ม จะเงียบเต็ม 50 วินาที (20 + 15 + 15) · อย่าเพิ่งคิดว่าพัง — รอให้ครบก่อน

[macOS Terminal / FTP Client] — โอนไฟล์ 30 MB เพื่อดู I/O Graph (ใบแลป 5 ข้อ 4.3)
FTPClient#ftp <ip address server>
ftp> ls
ftp> get <filename.filetype>
# ไฟล์ที่ get มาจะไปอยู่ที่โฟลเดอร์ที่เปิด terminal อยู่ตอนนั้น
macOS ไม่มีคำสั่ง ftp แล้ว

macOS ตั้งแต่ Big Sur ถอดไคลเอนต์ ftp ออกจากระบบ — พิมพ์แล้วจะได้ command not found · ใช้ curl ที่มีอยู่แล้วแทน หรือลง inetutils ผ่าน Homebrew

[macOS Terminal] — ส่วนขยาย
$ curl -u <user>:<password> -O "ftp://<ip server>/test30.bin"
$ brew install inetutils   # ถ้าอยากได้คำสั่ง ftp แบบในใบแลปจริง ๆ

C.14Wireshark — filter ที่ต้องจำ

[Wireshark] — สามบรรทัดที่ข้อสอบข้อ 2 สั่ง (10 คะแนน)
ip.src == 192.3.128.2      # เฉพาะแพ็กเก็ตที่ออกจาก PC1 (source address ของการ ping)
icmp                       # เฉพาะ ping — Echo (ping) request / Echo (ping) reply
arp                        # เฉพาะ ARP — Who has 192.3.128.1? Tell 192.3.128.2
Display filterเห็นอะไร
icmpเฉพาะ ping ข้อสอบข้อ 2
arpเฉพาะ ARP request / reply ข้อสอบข้อ 2
ip.src == 192.3.128.2เฉพาะแพ็กเก็ตที่ออกจาก PC1 ข้อสอบข้อ 2
ip.dst == 194.3.128.2เฉพาะแพ็กเก็ตที่วิ่งไปหา PC3
ip.addr == 192.3.128.2ทั้งขาเข้าและขาออกของ PC1 (สะดวกกว่าเวลาต้องการเห็นทั้งคู่)
udp.port == 520เฉพาะ update ของ RIP — พิสูจน์ว่า RIP ทำงานจริงและส่งออกทางสาย Serial
vlanเฉพาะเฟรมที่มี 802.1Q tag — ใช้ตอบ Lab 4 ที่สั่งให้ดักจับ VLAN tag
vlan.id == 10เฉพาะเฟรมของ VLAN ที่ระบุ (เปลี่ยนเลขตาม VLAN ที่ตั้งไว้)
stpเฉพาะ BPDU ของ Spanning Tree — ใช้ตอบคำถามท้ายการทดลอง Lab 5
ftp || ftp-dataคำสั่ง FTP และตัวข้อมูลที่โอน (Lab 5 ข้อ 4.3)
eth.addr == 00:aa:00:00:00:01กรองด้วย MAC address แทน IP
tcp.analysis.retransmission ส่วนขยายเฉพาะแพ็กเก็ตที่ถูกส่งซ้ำ — ใช้ดูผลของ packet loss
จะดักที่ไหนต้องทำอะไรก่อน
ใน GNS3คลิกขวาที่เส้นสาย → Start Capture · GNS3 จะบันทึกไฟล์แล้วเปิด Wireshark ให้เอง แล้วค่อยกลับไป ping ใหม่
บนสวิตช์จริงตั้ง monitor session ที่สวิตช์ก่อน (C.10) แล้วเสียบ MacBook ที่พอร์ต destination — ไม่งั้นไม่เห็นทราฟฟิกของเครื่องอื่นเลย
บน Mac ต้องมีWireshark รุ่น Arm + ติดตั้ง ChmodBPF.pkg ไม่งั้นเปิดมาไม่เห็น interface สักอัน
ดูกราฟปริมาณทราฟฟิกเมนู Statistics → I/O Graph (Lab 5 ให้บันทึกกราฟตอนโอนไฟล์ FTP)

C.15Mininet + tc/netem + iperf3 (Lab 3)

[macOS Terminal] — เข้าไปสั่งงานใน Ubuntu ARM บน Parallels
$ ssh ubuntu
[Ubuntu VM] — เปิด Mininet
$ sudo mn --test pingall
# ทดสอบว่า Mininet ใช้ได้ ต้องได้ *** Results: 0% dropped

$ sudo mn -c
# ล้างของค้างจากรอบก่อน — พิมพ์ทุกครั้งที่ขึ้น Error creating interface pair

$ cd ~/mininet
$ sudo examples/miniedit.py
# เปิด GUI ลากสร้าง topology (Host / Switch / Link / Run / Stop)
# ตั้ง IP อัตโนมัติ: Edit → Preferences → IP Base = 192.3.128.0/24
# ตั้ง IP เอง:      คลิกขวาที่โหนด → Properties
[mininet>] — คำสั่งในหน้า CLI ของ Mininet
mininet> nodes                     # มีโหนดอะไรบ้าง
mininet> net                       # สายเชื่อมกันยังไง
mininet> dump                      # IP ของทุกโหนด
mininet> pingall                   # ping ทุกคู่ (ข้อสอบข้อ 4 สั่ง "ping ได้ทุกโหนด")
mininet> h1 ifconfig               # ดูอินเทอร์เฟซของ h1 (จะเห็นชื่อ h1-eth0)
mininet> h1 ping -c 5 192.3.128.3  # ping จาก h1 ไป h3
mininet> xterm h1 h3               # เปิดหน้าต่าง terminal แยกของ h1 และ h3
mininet> exit
[Ubuntu VM] — tc/netem: รูปแบบ
$ sudo tc qdisc [add|del|replace|change|show] dev <dev_id> root netem <opts>
[h1 terminal] — ของจริงทั้งชุด บน h1-eth0 ตามใบแลป
$ sudo tc qdisc add dev h1-eth0 root netem delay 100ms
# เพิ่ม delay 100 ms
$ sudo tc qdisc change dev h1-eth0 root netem delay 50ms
# แก้ค่าเดิม (ใช้ change ไม่ใช่ add ซ้ำ)
$ sudo tc qdisc add dev h1-eth0 root netem delay 100ms 10ms
# delay 100 ms + jitter ±10 ms  ← ข้อสอบข้อ 4(ก) สั่งอันนี้
$ sudo tc qdisc add dev h1-eth0 root netem loss 20%
# packet loss 20%  ← ข้อสอบข้อ 4(ข) สั่งอันนี้ (ใบแลปฝึกที่ 5% / 10% / 15%)
$ sudo tc qdisc del dev h1-eth0 root netem
# ลบค่าที่ตั้งไว้ทั้งหมด — ทำก่อนวัดรอบใหม่ทุกครั้ง
$ tc qdisc show dev h1-eth0
# ดูว่าตอนนี้มีกฎอะไรค้างอยู่บ้าง
[mininet>] — สั่ง tc จากหน้า CLI ได้เลย ไม่ต้องเปิด xterm
mininet> h1 tc qdisc add dev h1-eth0 root netem delay 100ms 10ms
mininet> h1 tc qdisc change dev h1-eth0 root netem loss 20%
mininet> h1 tc qdisc del dev h1-eth0 root netem
# mn รันด้วย sudo อยู่แล้ว ในหน้า mininet> จึงไม่ต้องพิมพ์ sudo ซ้ำ
ต้องปิด offload ก่อนวัดค่า ไม่งั้นตัวเลขเพี้ยน

การ์ดจะรวมแพ็กเก็ตหลายตัวเป็นก้อนเดียวก่อนส่งขึ้นเคอร์เนล ทำให้ delay/loss ที่วัดได้ไม่ตรงกับที่ตั้งไว้

[Ubuntu VM] / [mininet>]
$ sudo ethtool -K h1-eth0 tso off gso off gro off
mininet> h1 ethtool -K h1-eth0 tso off gso off gro off
[h1 / h3 terminal] — วัดผลด้วย ping
$ ping 192.3.128.3 -c 150
# ใบแลปให้ ping 150 ครั้งตอนวัด packet loss จะได้เปอร์เซ็นต์ที่น่าเชื่อถือ
# --- 192.3.128.3 ping statistics ---
# 150 packets transmitted, 120 received, 20% packet loss, time 149s
# rtt min/avg/max/mdev = 100.1/100.9/112.3/2.1 ms
#                                          └── mdev คือค่าที่ใช้ตอบเรื่อง jitter
[h1 / h2 terminal] — วัด throughput ด้วย iperf3
# เครื่องที่เป็น server:
$ iperf3 -s
# เครื่องที่เป็น client (server อยู่ที่ 192.3.128.2):
$ iperf3 -c 192.3.128.2
$ iperf3 -c 192.3.128.2 -t 5     # ทดสอบ 5 วินาที
$ iperf3 -c 192.3.128.2 -u        # ทดสอบแบบ UDP แทน TCP
# ผลลัพธ์ที่ต้องจดลงตาราง: Interval · Transfer · Bitrate · Retr · Cwnd
[mininet>] — iperf3 จากหน้า CLI (สะดวกกว่าเปิด xterm สองบาน)
mininet> h2 iperf3 -s &
mininet> h1 iperf3 -c 192.3.128.2 -t 5
mininet> h2 kill %iperf3
การตั้งค่าคำสั่งที่ต้องบันทึก
baseline (ไม่ตั้งอะไร)tc qdisc del dev h1-eth0 root netemRTT (ms) · Throughput (Mbps) · Retr · Loss จริง (%)
Delay 100 ms… netem delay 100ms
Delay 100 ms + Jitter 10 ms… netem delay 100ms 10ms
Loss 1% / 5%… netem loss 1% · … netem loss 5%
Loss 20% ข้อสอบ… netem loss 20%
ส่วนขยาย — สร้าง topology ของข้อสอบด้วยไฟล์เดียว (เร็วกว่าลากใน MiniEdit)

โทโพโลยีของใบแลป: h1, h2 → s1 — s2 ← h3, h4 · เซฟไฟล์นี้ไว้ในเครื่องล่วงหน้าแล้วรันบรรทัดเดียวจบ

[Ubuntu VM] — ไฟล์ ~/mytopo.py
from mininet.topo import Topo

class MyTopo(Topo):
    def build(self):
        h1 = self.addHost('h1', ip='192.3.128.1/24')
        h2 = self.addHost('h2', ip='192.3.128.2/24')
        h3 = self.addHost('h3', ip='192.3.128.3/24')
        h4 = self.addHost('h4', ip='192.3.128.4/24')
        s1 = self.addSwitch('s1')
        s2 = self.addSwitch('s2')
        self.addLink(h1, s1)
        self.addLink(h2, s1)
        self.addLink(h3, s2)
        self.addLink(h4, s2)
        self.addLink(s1, s2)

topos = { 'mytopo': (lambda: MyTopo()) }
[Ubuntu VM] — รัน
$ sudo mn --custom ~/mytopo.py --topo mytopo
$ sudo mn --custom ~/mytopo.py --topo mytopo --ipbase=192.3.128.0/24

C.16คำสั่ง show ที่ต้องส่งอาจารย์

[Router#] — ชุดเก็บผลส่ง ข้อสอบข้อ 1 · รันที่ router ทุกตัว
Router#terminal length 0       # ส่วนขยาย: ไม่ให้มี --More-- ขั้นกลาง แคปง่ายขึ้น
Router#show running-config
Router#show arp
Router#show ip interface brief
Router#show ip route
[Switch#] — ชุดเก็บผลส่ง · รันที่ switch ทุกตัว
Switch#terminal length 0
Switch#show running-config
Switch#show mac-address-table
Switch#show vlan
Switch#show spanning-tree
คำสั่งรันที่ส่งเพื่อข้อไหน · ต้องเห็นอะไร
show running-configRouter + Switchข้อ 1 ต้องเห็น hostname, ip address ทุกใบ, บล็อก router rip พร้อม network ครบทุกวง · ห้ามพิมพ์ show running-configuration ตามใบแลป จะได้ % Invalid input
show mac-address-tableSwitchข้อ 1 ต้องเห็น MAC ของทุก PC ที่เคยส่งทราฟฟิก พร้อมพอร์ตที่เสียบอยู่ · Ethernet switch ที่ติดมากับ GNS3 ไม่มีคำสั่งนี้ ต้องใช้ image IOU หรือสวิตช์จริง
show arpRouterข้อ 1 คู่ IP ↔ MAC ของเครื่องในวงเดียวกัน · บน PC/Mac ใช้ arp -a
show vlan / show vlan briefSwitchข้อ 3 ต้องเห็นว่าแต่ละพอร์ตอยู่ VLAN ไหน — ส่งของทุก switch
show spanning-treeSwitchLab 5 — ใครเป็น root, พอร์ตไหน Root / Designated / Blocked
show ip interface briefRouterยืนยัน up / up ทุกใบก่อนไปต่อ (คำสั่งนี้ไม่ได้อยู่ในใบแลป แต่เร็วที่สุด)
show interfacesRouter + Switchใบแลป Lab 1 ข้อ 21 และคำถามท้ายการทดลอง Lab 2 สั่งใช้ — Serial ต้องขึ้น BW 56 Kbit/sec
show ip routeRouterต้องมีแถวขึ้นต้นด้วย R = RIP ทำงานแล้ว (ถ้ามีแต่ C คือยังไม่ได้แลกเปลี่ยนกัน)
show controllers Serial0/1/1Routerบอกว่าฝั่งนี้เป็น DCE หรือ DTE
show interface fa1/10 switchportSwitchยืนยันว่าพอร์ตเป็น trunk จริง และ native vlan / allowed vlan ถูกต้อง
show monitor session 1Switchยืนยันว่า port mirroring ทำงาน ก่อนไปนั่งงงว่าทำไม Wireshark ไม่เห็นอะไร
show vtp statusSwitchโดเมนและโหมด server/client ของ VTP
ก่อนกดส่ง เช็ก 6 ข้อนี้

① IP ทุกตัวใช้ 3 กับ 128 ของตัวเอง ไม่ใช่ตัวอย่างในใบแลป ② ทุกอินเทอร์เฟซที่ใช้เป็น up / up ③ show ip route มีแถว R ④ ping ผ่านครบทุกคู่และแคปหน้าจอไว้แล้ว ⑤ Wireshark แคปครบ 3 filter ⑥ copy run start ทุกตัว