Skip to content
Tayakorn

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

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

เมื่อโหนดขยับ — ทำให้เส้นทางนิ่ง

ทุกอย่างที่ผ่านมาสมมติว่าค่าที่วัดได้นิ่งพอจะตัดสินใจ บทนี้รื้อสมมติฐานนั้นทิ้ง

9.1 ปัญหาที่เกิดจากการทำงานถูกต้องเกินไป

สมมติมีสองเส้นทางที่ดีพอ ๆ กัน — ETX 1.30 กับ 1.35 ค่าที่วัดได้แกว่งขึ้นลงตามธรรมชาติของคลื่นอยู่แล้ว บางรอบ 1.28 บางรอบ 1.42

ถ้าโหนดทำตามกฎ "เลือกเส้นที่ ETX ต่ำสุด" อย่างซื่อสัตย์ มันจะสลับเส้นทางไปมาทุกครั้งที่ค่าแกว่งข้ามกัน ปรากฏการณ์นี้เรียกว่า route flapping และมันแพงกว่าที่คิด เพราะทุกครั้งที่เส้นทางเปลี่ยน แพ็กเก็ตที่กำลังเดินทางอยู่จะมาถึงไม่เรียงลำดับ ต้องประกาศเส้นทางใหม่ให้เพื่อนบ้านรู้ และการประกาศนั้นก็กินอากาศอีก

ระบบไม่ได้พัง — มันทำตามที่สั่งเป๊ะ ๆ นั่นแหละคือปัญหา

9.2 พิสูจน์ด้วยตาเอง

ทางแก้ชื่อ hysteresis: อย่าเพิ่งย้ายเพราะอีกเส้นดีกว่านิดเดียว ให้ย้ายก็ต่อเมื่อมันดีกว่าเกินเกณฑ์ที่ตั้งไว้

import random

rnd = random.Random(7)
def sample(base):                      # ETX ที่วัดได้ในรอบนั้น แกว่ง ±0.15
    return round(base + rnd.uniform(-0.15, 0.15), 3)

def run(hysteresis):
    """hysteresis = ต้องดีกว่าของเดิมกี่เปอร์เซ็นต์ถึงจะยอมย้าย"""
    current, switches = "B", 0
    for _ in range(40):
        etx = {"B": sample(1.30), "C": sample(1.35)}
        other = "C" if current == "B" else "B"
        if etx[other] < etx[current] * (1 - hysteresis):
            current = other; switches += 1
    return switches

for h in (0.00, 0.05, 0.10, 0.20):
    print(f"เกณฑ์ต้องดีกว่า {h*100:>4.0f}%  ->  ย้ายเส้นทาง {run(h):>2} ครั้งใน 40 รอบ")

ผลรันจริง

เกณฑ์ต้องดีกว่า    0%  ->  ย้ายเส้นทาง 14 ครั้งใน 40 รอบ
เกณฑ์ต้องดีกว่า    5%  ->  ย้ายเส้นทาง 10 ครั้งใน 40 รอบ
เกณฑ์ต้องดีกว่า   10%  ->  ย้ายเส้นทาง  0 ครั้งใน 40 รอบ
เกณฑ์ต้องดีกว่า   20%  ->  ย้ายเส้นทาง  0 ครั้งใน 40 รอบ

ไม่มีเกณฑ์เลย = ย้าย 14 ครั้งใน 40 รอบ ทั้งที่ไม่มีอะไรในโลกจริงเปลี่ยนสักอย่าง · ตั้งเกณฑ์ที่ 10% = นิ่งสนิท

9.3 ราคาของความนิ่ง

hysteresis ไม่ได้ฟรี ถ้าเส้นทางปัจจุบันแย่ลงจริง ๆ แต่ยังไม่แย่พอจะข้ามเกณฑ์ โหนดจะยังส่งผ่านเส้นทางที่แย่กว่าต่อไป — คุณจ่ายด้วยคุณภาพเพื่อซื้อความนิ่ง เกณฑ์ 20% ทำให้นิ่งกว่า 10% ก็จริง แต่ก็แปลว่ายอมทนเส้นทางที่แย่กว่าของที่ดีที่สุดอยู่ถึงหนึ่งในห้า

และนี่ยังไม่ใช่ราคาเดียว การกรองค่าให้เรียบ (เช่นเฉลี่ยย้อนหลังหลายรอบ) ทำให้ค่านิ่งขึ้นแต่ตอบสนองช้าลง — โหนดที่หายไปจริงจะถูกตัดออกช้ากว่าเดิม

⚠️ สังเกตว่าเราวนกลับมาที่ trade-off เดิมของบทที่ 4 อีกครั้ง: ความสด แลกกับ ความนิ่ง ทั้งเล่มนี้คือการหาจุดยืนบนเส้นนั้นซ้ำแล้วซ้ำอีกในบริบทต่างกัน

Read the full book