บทความ Ethernet อธิบายว่าอุปกรณ์บนสายเส้นเดียวกัน ตรวจจับได้ว่ามีการชนกัน แล้วหยุดส่งทันที กลไกนั้นชื่อ CSMA/CD โดยตัว CD คือ Collision Detection
Wi-Fi ทำแบบนั้นไม่ได้ ไม่ใช่เพราะออกแบบไม่ดี แต่เพราะ ฟิสิกส์ไม่อนุญาต
และเมื่อตรวจจับการชนไม่ได้ ทุกอย่างที่เหลือก็เปลี่ยนตาม — ต้องหลีกเลี่ยง แทนที่จะตรวจจับ ต้องตอบรับทุกเฟรม ต้องแบ่งเวลาออกอากาศกัน และสุดท้าย ความเร็วของคุณขึ้นอยู่กับคนอื่นที่คุณไม่เห็นและควบคุมไม่ได้
บทความนี้วัดจากเครื่องที่ใช้เขียนทั้งหมด และผลที่ได้อาจทำให้มองตัวเลขบนกล่อง เราเตอร์เปลี่ยนไป
ถ้ายังไม่เคยดู เริ่มตรงนี้
macOS มีเครื่องมือดูสถานะวิทยุอยู่ในตัว ไม่ต้องติดตั้งอะไร
$ system_profiler SPAirPortDataType
ส่วนที่สำคัญคือบล็อกที่บอกสถานะลิงก์ปัจจุบัน ของเครื่องที่ใช้เขียนบทความนี้ ได้แบบนี้
PHY Mode: 802.11ac
Channel: 157 (5GHz, 80MHz)
Signal / Noise: -68 dBm / -96 dBm
Transmit Rate: 390
MCS Index: 4
ห้าบรรทัดนี้บอกเกือบทุกอย่างที่ต้องรู้ และบทความนี้จะอธิบายทีละบรรทัด
ข้อเท็จจริงข้อเดียวที่เปลี่ยนทุกอย่าง
การ์ด Wi-Fi หนึ่งใบมีวิทยุที่ใช้เสาอากาศร่วมกันทั้งส่งและรับ ลองดูตัวเลข
transmit power +20 dBm กำลังที่ส่งออกไป
receive sensitivity -90 dBm สัญญาณที่อ่อนที่สุดที่ยังอ่านออก
difference 110 dB = แสนล้านเท่า
เสียงที่ตัวเองส่งออกไปดังกว่าสัญญาณที่ต้องการฟังราวหนึ่งแสนล้านเท่า การ จะฟังคนอื่นขณะที่ตัวเองกำลังพูดจึงเป็นไปไม่ได้ในทางกายภาพ ไม่ใช่เรื่องของ ชิปที่ดีพอหรือไม่พอ
อีเทอร์เน็ตไม่มีปัญหานี้เพราะสายทองแดงคู่หนึ่งใช้ส่ง อีกคู่ใช้รับ แยกกัน คนละเส้น
หลีกเลี่ยง แทนที่จะตรวจจับ
เมื่อตรวจจับไม่ได้ ทางเลือกที่เหลือคือพยายามอย่าให้ชนตั้งแต่แรก กลไกนั้นชื่อ CSMA/CA โดย CA คือ Collision Avoidance
ขั้นตอนต่างกันตรงนี้
CSMA/CD ฟังก่อน ถ้าว่างก็ส่ง ระหว่างส่งยังฟังอยู่
ชนเมื่อไหร่รู้ทันที หยุดทันที ส่งใหม่
CSMA/CA ฟังก่อน ถ้าว่างต้องรออีกช่วงหนึ่ง แล้วรอเวลาสุ่มอีก
ส่งแล้วรอการตอบรับ ไม่ได้รับก็ถือว่าหาย ส่งใหม่
ความต่างที่แพงที่สุดอยู่บรรทัดสุดท้าย — เมื่อตรวจการชนไม่ได้ วิธีเดียวที่จะรู้ ว่าเฟรมถึงหรือไม่คือ ให้ปลายทางตอบรับทุกเฟรม
ทุกเฟรมต้องมีการตอบรับ
อีเทอร์เน็ตส่งเฟรมออกไปแล้วจบ ไม่มีการตอบรับที่ชั้นนั้น ส่วน Wi-Fi ต้องมี เฟรมตอบรับกลับมาทุกครั้ง
นั่นแปลว่าการส่งข้อมูลหนึ่งเฟรมกินเวลาออกอากาศสองรอบเสมอ บวกกับช่วงรอ ระหว่างกลาง ซึ่งเป็นเหตุผลหลักที่ ตัวเลขบนกล่องกับความเร็วที่ได้จริง ห่างกันมาก ไม่ใช่เพราะผู้ผลิตโกหก แต่เพราะตัวเลขนั้นเป็นอัตราการส่งบิต บนอากาศ ไม่ใช่ปริมาณข้อมูลที่ผ่านไปได้จริง
ปัญหาที่สายไม่มี — โหนดที่มองไม่เห็นกัน
บนสายทองแดง ทุกคนบนสายเดียวกันได้ยินกันหมด บนวิทยุไม่ใช่
เครื่อง A กับ C อยู่คนละฝั่งของจุดกระจายสัญญาณ ทั้งคู่ได้ยินจุดกระจายชัดเจน แต่ ไม่ได้ยินกันเอง ทั้งคู่จึงฟังแล้วพบว่าอากาศว่าง แล้วส่งพร้อมกัน สัญญาณไปชนกันที่จุดกระจาย ซึ่งเป็นที่เดียวที่การชนเกิดขึ้นจริง
การ "ฟังก่อนส่ง" จึงไม่รับประกันอะไรเลยเมื่ออยู่บนวิทยุ เพราะสิ่งที่คุณได้ยิน ไม่ใช่สิ่งที่ปลายทางได้ยิน
13 ช่อง แต่ใช้ได้จริง 3
การ์ดในเครื่องนี้รายงานว่ารองรับช่องสัญญาณจำนวนนี้
2.4 GHz 13 ช่อง
5 GHz 25 ช่อง
6 GHz 24 ช่อง
ตัวเลข 13 ในย่าน 2.4 GHz หลอกลวงที่สุด เพราะช่องเหล่านั้นวางห่างกันแค่ 5 MHz ในขณะที่สัญญาณหนึ่งช่องกว้าง 22 MHz
คำนวณจากความถี่กลางของแต่ละช่อง
channel 1 2412 MHz ใช้จริง 2401 - 2423
channel 6 2437 MHz ใช้จริง 2426 - 2448
channel 11 2462 MHz ใช้จริง 2451 - 2473
ต้องห่างกันอย่างน้อย 22 MHz จึงจะไม่เหลื่อม ซึ่งเท่ากับห่างกัน 5 ช่อง
ch 1 - ch 6 apart 25 MHz overlap 0 MHz
ch 1 - ch 5 apart 20 MHz overlap 2 MHz
ch 1 - ch 2 apart 5 MHz overlap 17 MHz
จาก 13 ช่อง เลือกให้ไม่เหลื่อมกันเลยได้แค่ 3 ชุดคือ 1, 6 และ 11 การตั้งเพื่อนบ้านไว้ที่ช่อง 3 กับช่อง 8 ไม่ได้ทำให้ห่างกัน มันทำให้ทุกคน กวนกันหมด
และเมื่อตั้งความกว้างเป็น 40 MHz ในย่านนี้ ช่องเดียวกินเกือบครึ่งย่าน เหลือที่ให้คนอื่นแทบไม่มี
ความเร็วไม่ใช่ตัวเลขเดียว
นี่คือส่วนที่ผมคิดว่าน่าสนใจที่สุด ผมวางเครื่องไว้เฉย ๆ ไม่ขยับ ไม่ใช้งาน เครือข่าย แล้วอ่านค่าทุกสิบวินาที เป็นเวลาสองนาที
time signal noise SNR MCS rate
22:51:16 -68 -95 27 4 390
22:51:26 -68 -96 28 4 390
22:51:37 -68 -95 27 4 390
22:51:49 -68 -96 28 4 195
22:52:00 -69 -95 26 4 390
22:52:11 -68 -96 28 4 390
22:52:21 -68 -96 28 4 390
22:52:32 -68 -96 28 3 260
22:52:43 -68 -96 28 5 390
22:52:54 -69 -96 27 6 390
22:53:04 -69 -96 27 4 390
22:53:15 -68 -96 28 4 390
สัญญาณขยับแค่ 1 dBm และนอยส์ขยับแค่ 1 dBm ค่า SNR อยู่ระหว่าง 26 ถึง 28 ตลอด แต่อัตราส่งลงไปที่ 195 และ 260 และดัชนี MCS ขยับระหว่าง 3 ถึง 6
ก่อนหน้านั้นผมยังเคยอ่านได้ค่า 57 Mbps อีกครั้งหนึ่งด้วย รวมแล้วช่วงที่เห็น คือ 57 ถึง 390 หรือ เกือบเจ็ดเท่า บนลิงก์ที่ไม่มีอะไรเปลี่ยนเลย
สาเหตุคือสิ่งที่วัดจากเครื่องตัวเองไม่ได้ — คนอื่นในย่านความถี่เดียวกัน เตาไมโครเวฟ อุปกรณ์บลูทูธ และจุดกระจายสัญญาณของเพื่อนบ้าน วิทยุปรับอัตรา ลงเมื่อส่งไม่สำเร็จ ไม่ใช่เมื่อสัญญาณอ่อน
SNR คืออะไร และทำไมถึงสำคัญกว่าขีดสัญญาณ
ค่า Signal / Noise: -68 dBm / -96 dBm บอกสองอย่าง
-68 dBm ความแรงของสัญญาณที่ต้องการ
-96 dBm ความแรงของเสียงรบกวนพื้นหลัง
28 dB ผลต่าง เรียกว่า SNR
28 dB แปลว่าสัญญาณแรงกว่าเสียงรบกวน 631 เท่า และนั่นคือตัวเลขที่กำหนดว่า วิทยุจะกล้าใช้วิธีเข้ารหัสที่ซับซ้อนแค่ไหน ซึ่งก็คือค่า MCS
ขีดสัญญาณสี่ขีดบนหน้าจอบอกแค่ตัวแรก ไม่ได้บอกตัวที่สอง ห้องที่มีสัญญาณ แรงแต่มีคนใช้เยอะจะมีเสียงรบกวนสูง SNR ต่ำ และช้ากว่าห้องที่สัญญาณอ่อนกว่า แต่เงียบ
เวลาออกอากาศคือทรัพยากรจริง
ทุกคนในเซลล์เดียวกันแบ่งกันใช้ของอย่างเดียว ไม่ใช่แบนด์วิดท์ แต่คือ เวลา ใครกำลังส่ง คนอื่นต้องเงียบ
และนี่คือจุดที่ทำให้เครื่องช้าเครื่องเดียวเป็นปัญหาของทุกคน
rate เวลาส่งข้อมูล 1500 ไบต์
390 Mbps 30.8 us
195 Mbps 61.5 us
65 Mbps 184.6 us
6 Mbps 2000.0 us
เครื่องที่อยู่ไกลและได้อัตรา 6 Mbps ใช้เวลาออกอากาศ มากกว่าเครื่องที่ได้ 390 Mbps ถึง 65 เท่า สำหรับข้อมูลปริมาณเท่ากัน
เครื่องช้าเครื่องเดียวทำให้ทุกคนช้า
สมมติมีสองเครื่องส่งสลับกันเฟรมต่อเฟรม
fast client 390 Mbps airtime 1.5%
slow client 6 Mbps airtime 98.5%
ผลรวมของทั้งเซลล์คือ 11.8 Mbps ทั้งที่ถ้ามีแต่เครื่องเร็วอย่างเดียวจะได้ 390 Mbps
เครื่องช้าเครื่องเดียวลากทั้งเซลล์ลงมาเหลือหนึ่งในสามสิบสาม และไม่มีอะไร ที่เครื่องเร็วทำได้เลย เพราะปัญหาไม่ได้อยู่ที่มัน
นี่คือคำอธิบายของอาการที่เจอบ่อยที่สุดในออฟฟิศ — เน็ตช้าทั้งชั้น แล้วพบว่า มีเครื่องเก่าเครื่องเดียวเกาะอยู่มุมไกลสุด
เมื่อมันโกหก
"ขีดสัญญาณเต็ม แปลว่าเร็ว" ขีดบอกความแรงของสัญญาณอย่างเดียว ไม่บอกเสียง รบกวน ไม่บอกว่ามีคนใช้อยู่กี่คน และไม่บอกว่าเวลาออกอากาศเหลือเท่าไหร่
"เราเตอร์เขียนว่า 1200 Mbps" ตัวเลขนั้นคืออัตราบิตบนอากาศ รวมทุกย่าน รวมทุกสายอากาศ ในสภาพที่ดีที่สุดที่เป็นไปได้ ไม่ใช่ปริมาณข้อมูลที่เครื่อง หนึ่งเครื่องจะได้ และไม่ใช่ผลรวมที่ทุกเครื่องแบ่งกัน
"ย้ายไปช่องที่ไม่มีใครใช้" ในย่าน 2.4 GHz มีให้เลือกจริงแค่สามช่อง การย้ายไปช่อง 4 ไม่ได้หนีใคร มันแค่ไปกวนทั้งช่อง 1 และช่อง 6 พร้อมกัน
"เพิ่มความกว้างช่องแล้วเร็วขึ้น" เร็วขึ้นเมื่อไม่มีใครอยู่ใกล้ แต่ช่อง ที่กว้างขึ้นก็ชนกับคนอื่นได้มากขึ้น ในที่ที่แออัด ช่องแคบมักได้ผลดีกว่า
"เปลี่ยนเราเตอร์ใหม่แล้วจะหาย" ถ้าต้นเหตุคือเครื่องเก่าเครื่องหนึ่งที่ เกาะอยู่ไกล ๆ เราเตอร์ใหม่ไม่ได้แก้อะไร เพราะเวลาออกอากาศยังถูกกินเท่าเดิม
"Wi-Fi กับอีเทอร์เน็ตเหมือนกัน แค่ไม่มีสาย" ต่างกันที่รากฐาน อีเทอร์เน็ต เป็นสองทางพร้อมกันบนสื่อที่ไม่แบ่งใคร Wi-Fi เป็นทางเดียวสลับกันบนสื่อที่ แบ่งกับทุกคนที่อยู่ในระยะ รวมถึงคนที่ไม่ได้อยู่ในเครือข่ายของคุณ
ตัวอย่างจริงจากงานจริง
กรณีที่ 1 — เน็ตช้าทั้งชั้น แต่ทดสอบทีละเครื่องแล้วปกติ
สถานการณ์ ผู้ใช้บ่นว่าช้าตอนบ่าย ตอนเช้าปกติ ทดสอบความเร็วทีละเครื่อง ได้ค่าดี
อ่านอย่างไร การทดสอบทีละเครื่องวัดตอนที่คนอื่นเงียบ ซึ่งไม่ใช่สภาพจริง สิ่งที่ต้องดูคือเวลาออกอากาศ ไม่ใช่ความเร็วของเครื่องใดเครื่องหนึ่ง ให้หาว่ามีเครื่องไหนเกาะอยู่ด้วยอัตราต่ำมาก ตามตัวเลขข้างบน เครื่องเดียวที่ ได้ 6 Mbps กินเวลาออกอากาศ 98.5%
สิ่งที่ยังไม่ได้พิสูจน์ เห็นว่าอาการเข้ากับรูปแบบนี้ ยังไม่ได้ตัดเรื่อง อื่นออก เช่นวงจรขาออกเต็ม หรือ DNS ช้าตามที่บทความ DNS อธิบาย ต้องวัดแยกกัน
กรณีที่ 2 — วัดว่าลิงก์ของตัวเองนิ่งแค่ไหน
สถานการณ์ อยากรู้ว่าที่ว่าช้าเป็นเพราะสัญญาณหรือเพราะคนอื่น
คำสั่ง อ่านซ้ำ ๆ แล้วดูว่าอะไรขยับ
$ for i in $(seq 1 12); do
system_profiler SPAirPortDataType \
| grep -E 'Signal|Transmit Rate|MCS'
sleep 10
done
อ่านอย่างไร ถ้าสัญญาณกับนอยส์นิ่งแต่อัตราแกว่ง แปลว่าปัญหาอยู่ที่การ แย่งอากาศ ไม่ใช่ที่ระยะทาง การย้ายเครื่องเข้าใกล้จะไม่ช่วย ต้องไปแก้ที่ ความแออัดของช่องสัญญาณแทน ถ้าสัญญาณอ่อนลงตามระยะและอัตราลดตาม นั่นคือปัญหา ระยะทางจริง ๆ
สิ่งที่ยังไม่ได้พิสูจน์ ค่าที่เครื่องรายงานเป็นค่าที่ไดรเวอร์เลือกจะบอก ซึ่งอาจเป็นค่าเฉลี่ยหรือค่าล่าสุดก็ได้ และวัดได้เฉพาะฝั่งเรา ไม่เห็นว่าฝั่ง จุดกระจายสัญญาณเห็นอะไร
กรณีที่ 3 — เลือกช่องในตึกที่มีคนเยอะ
สถานการณ์ ต้องตั้งค่าจุดกระจายสัญญาณหลายตัวในพื้นที่เดียวกัน
อ่านอย่างไร ในย่าน 2.4 GHz วางได้แค่สามชุดคือ 1, 6, 11 แล้ววนซ้ำโดยให้ ตัวที่ใช้ช่องเดียวกันอยู่ห่างกันที่สุด ส่วนย่าน 5 GHz มีช่องให้เลือกมากกว่า ตามที่การ์ดรายงานไว้ข้างบนคือ 25 ช่อง จึงควรผลักอุปกรณ์ที่รองรับไปย่านนั้น ให้มากที่สุด
สิ่งที่ยังไม่ได้พิสูจน์ จำนวนช่องที่ใช้ได้จริงขึ้นกับกฎหมายของแต่ละ ประเทศ เครื่องนี้รายงาน Country Code เป็น TH และตัวเลข 13 ช่องในย่าน 2.4 GHz ก็มาจากค่านั้น ในบางประเทศจะได้ 11 ช่อง ซึ่งเปลี่ยนการวางแผน
เมื่อ Wi-Fi ไม่ใช่คำตอบ
ถ้างานคือย้ายข้อมูลก้อนใหญ่ให้เสถียร หรือเป็นงานที่ทนความหน่วงแกว่งไม่ได้ สายยังชนะเสมอ เพราะสายไม่ต้องแบ่งเวลากับใคร ไม่ต้องรอการตอบรับทุกเฟรม และ ไม่มีเพื่อนบ้านมากวน
Wi-Fi แลกความเสถียรกับความสะดวก ซึ่งคุ้มมากในกรณีส่วนใหญ่ แต่ควรรู้ว่ากำลัง แลกอะไรอยู่
อ้างอิง
วัดจากเครื่องที่ใช้เขียน
system_profiler SPAirPortDataType— ค่าทุกตัวในบทความนี้มาจากคำสั่งนี้ บนเครื่องเดียว ที่ไม่ขยับตำแหน่งตลอดการวัดman wdutil— เครื่องมือวินิจฉัยไร้สายอีกตัวที่ macOS มีมาให้
คำนวณเอง
- ตารางความถี่และการเหลื่อมของช่องในย่าน 2.4 GHz คำนวณจากสูตรความถี่กลาง 2407 + 5n MHz และความกว้างสัญญาณ 22 MHz
- ตารางเวลาออกอากาศคำนวณจากขนาดเฟรม 1500 ไบต์หารด้วยอัตราบิต
หมายเหตุเรื่องมาตรฐาน
- มาตรฐาน IEEE 802.11 ตัวเต็มต้องซื้ออ่าน ต่างจาก RFC และต่างจาก ITU-T X.200 ที่ใช้อ้าง ในบทความเรื่องชั้น บทความนี้จึงอ้างจากการวัดและการคำนวณเป็นหลัก ส่วนคณะทำงานที่ดูแลมาตรฐานอยู่ที่ IEEE 802.11