ข้ามไปยังเนื้อหา
Tayakorn

คู่มือ Mesh Networking — สื่อสารในที่ที่ไม่มีเสาสัญญาณ

LEVEL 2 · ระดับกลาง

ความจุที่หายไปกับตัวเอง

บทสั้น แต่เป็นบทที่จะทำให้คุณหงุดหงิดที่สุดในเล่ม เพราะมันบอกว่าทุกอย่างที่ทำมาเก้าบทยังแก้ปัญหาใหญ่ที่สุดไม่ได้

10.1 ตัวเลขที่ทำใจยาก

ในบทที่ 2 เราเห็นแล้วว่าอากาศเป็นของใช้ร่วม โหนดที่อยู่ในระยะได้ยินกันส่งพร้อมกันไม่ได้ ทีนี้ลองดูว่ามันแปลเป็นอะไรเมื่อข้อมูลต้องวิ่งผ่านโซ่หลาย hop

สิ่งที่หลายคนเดา (และเดาผิด) คือ "n hop ก็ได้หนึ่งในสาม n" ความจริงดีกว่านั้น เพราะโหนดที่อยู่ห่างกันพอส่งพร้อมกันได้โดยไม่กวนกัน แม้ใช้คลื่นเดียวกัน — เรียกว่า spatial reuse

RADIO_MBPS = 20.0
REUSE_GAP = 3     # hop ที่ห่างกันตั้งแต่ 3 ช่วงขึ้นไป ส่งพร้อมกันได้แม้ใช้คลื่นเดียวกัน

def chain(hops):
    contending = min(hops, REUSE_GAP)      # เกินสามช่วงแล้วไม่เพิ่มการแย่งอีก
    return RADIO_MBPS / contending

for h in (1, 2, 3, 4, 6, 10, 20):
    print(f"{h:>2} hop -> {chain(h):>5.2f} Mbps  ({chain(h)/RADIO_MBPS*100:>3.0f}% ของความเร็ววิทยุ)")

ผลรันจริง

 1 hop -> 20.00 Mbps  (100% ของความเร็ววิทยุ)
 2 hop -> 10.00 Mbps  ( 50% ของความเร็ววิทยุ)
 3 hop ->  6.67 Mbps  ( 33% ของความเร็ววิทยุ)
 4 hop ->  6.67 Mbps  ( 33% ของความเร็ววิทยุ)
 6 hop ->  6.67 Mbps  ( 33% ของความเร็ววิทยุ)
10 hop ->  6.67 Mbps  ( 33% ของความเร็ววิทยุ)
20 hop ->  6.67 Mbps  ( 33% ของความเร็ววิทยุ)

อ่านตารางนี้ให้ครบสองด้าน ข่าวดี: ความเร็วไม่ได้ลดลงเรื่อย ๆ ตามความยาว — โซ่ 20 hop ได้เท่ากับโซ่ 3 hop ⇒ เครือข่ายเมชขยายพื้นที่ออกไปได้โดยไม่ทรุดลงไม่รู้จบ · ข่าวร้าย: มันติดเพดานที่ หนึ่งในสาม ตั้งแต่ hop ที่สาม และไม่มีทางกลับขึ้นไปได้อีกเลย

10.2 ทำไมถึงเป็นแบบนั้น

เพราะเมื่อโหนด B รับข้อมูลจาก A แล้วจะส่งต่อให้ C มันต้องออกอากาศในย่านเดียวกับที่ A กำลังใช้อยู่ ถ้า A ยังส่งชิ้นถัดไปอยู่ ทั้งคู่จะชนกัน — และ C เองก็ส่งต่อให้ D ไม่ได้ในจังหวะเดียวกันด้วย

แต่พอไกลออกไปกว่านั้น การรบกวนจะจางจนไม่สำคัญ ⇒ hop ที่ 1 กับ hop ที่ 4 ส่งพร้อมกันได้จริง นั่นคือที่มาของเลข สาม ในโค้ด: ทุกช่วงสาม hop มีหนึ่งช่วงที่ได้ออกอากาศ

💡 อุปมา — เหมือนส่งของต่อ ๆ กันในทางเดินแคบ คนที่ยืนติดกันขยับพร้อมกันไม่ได้ แต่คนที่อยู่ห่างกันสามช่วงตัวขยับพร้อมกันได้สบาย ⇒ ไม่ว่าแถวจะยาวแค่ไหน อัตราการส่งของก็คงที่ · จุดที่อุปมาใช้ไม่ได้: ในทางเดินจริง ระยะที่ปลอดภัยคือระยะที่มองเห็น แต่ในอากาศ ระยะที่รบกวนกันไกลกว่าระยะที่คุยกันรู้เรื่อง ซึ่งเป็นเหตุผลว่าทำไมของจริงถึงแย่กว่าโมเดลนี้

10.3 ของจริงแย่กว่าโมเดลนี้อีก

ตัวเลข "หนึ่งในสาม" คือเพดานในอุดมคติ ถ้ามีใครสักคนจัดตารางการส่งได้อย่างสมบูรณ์แบบ

งานวัดจริงที่เป็นงานอ้างอิงของสายนี้ — Li, Blake, De Couto, Lee, Morris, Capacity of Ad Hoc Wireless Networks (MobiCom 2001) — สรุปไว้สองบรรทัดที่ควรจำ

  • โซ่ในอุดมคติทำได้ 1/3 ของความเร็ว single-hop ตรงกับโมเดลข้างบน
  • แต่ 802.11 จริงทำได้แค่ 1/7 เพราะระยะรบกวน (ราว 550 เมตรในการทดลองนั้น) ไกลกว่าระยะสื่อสาร (250 เมตร) เกือบเท่าตัว และกลไก backoff ของ 802.11 เองก็จัดคิวได้ไม่ดีในโครงแบบโซ่
  • ที่สำคัญกว่าตัวเลข: กราฟของเขาแบน — โซ่ 20 และ 50 โหนดได้เท่ากับโซ่ 10 โหนด ⇒ ยืนยันว่าเพดานมีจริง ไม่ใช่ความชันที่ลงไปเรื่อย ๆ

⚠️ ดังนั้นเวลาออกแบบจริง อย่าใช้ 1/3 เป็นตัวเลขวางแผน ให้เผื่อไว้ที่ 1/7 ของความเร็วบนกล่อง แล้วค่อยดีใจถ้าได้มากกว่านั้น

10.4 สิ่งที่บทนี้ทิ้งไว้

ทุกอย่างในเก้าบทที่ผ่านมา — ETX, Dijkstra, hysteresis — ช่วยให้คุณเลือกเส้นทางที่ดีที่สุดจากที่มี แต่ไม่มีอันไหนดันเพดานหนึ่งในสามนั้นขึ้นได้เลยแม้แต่บิตเดียว

เพดานนี้ไม่ได้มาจากอัลกอริทึมที่ยังไม่ฉลาดพอ มันมาจากการที่ทุก hop ในโซ่ใช้อากาศก้อนเดียวกัน และดูเหมือนเป็นกฎธรรมชาติที่ไม่มีทางเลี่ยง

บทหน้าจะบอกว่ามันเลี่ยงได้ ด้วยการเปลี่ยนสิ่งที่คำว่า "ก้อนเดียวกัน" หมายถึง

อ่านแบบเต็มเล่ม