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

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

LEVEL 0 · ปูพื้นจากศูนย์

แพ็กเก็ตเดินทางยังไง

ก่อนจะให้โหนดหาเส้นทางเองได้ ต้องรู้ก่อนว่า "เส้นทาง" ในเครือข่ายหน้าตาเป็นยังไง บทนี้ปูพื้นเน็ตเวิร์กเท่าที่จำเป็น ถ้าคุณเคยเขียนโค้ดที่เรียก API ข้ามเครื่องมาแล้ว ก็ยังควรอ่าน เพราะสิ่งที่จะเน้นคือมุมที่นักพัฒนาส่วนใหญ่ไม่เคยต้องมอง

3.1 ข้อมูลถูกหั่นเป็นซอง

ข้อมูลไม่ได้ไหลเป็นสายน้ำ แต่ถูกหั่นเป็นชิ้นเล็ก ๆ เรียกว่า แพ็กเก็ต (packet) แต่ละชิ้นมีสองส่วน: หัวซอง (header) ที่เขียนว่ามาจากไหนจะไปไหน และ เนื้อใน (payload) ที่เป็นข้อมูลจริง

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

3.2 router ไม่รู้เส้นทางทั้งเส้น

นี่คือจุดที่คนส่วนใหญ่เข้าใจผิด และเป็นแบบจำลองที่ต้องรื้อทิ้ง

ความเข้าใจผิดที่พบบ่อยคือ router รู้ว่าแพ็กเก็ตต้องเดินทางผ่านเครื่องไหนบ้างจนถึงปลายทาง ความจริงคือ router รู้แค่ก้าวถัดไปก้าวเดียว ตารางในหัวมันหน้าตาประมาณนี้

ปลายทาง          ส่งต่อให้ใคร
10.0.0.0/24       ส่งออกทางพอร์ต 1 (ต่อตรง)
192.168.5.0/24    ส่งให้ 10.0.0.9
ที่เหลือทั้งหมด    ส่งให้ 10.0.0.1

ไม่มีบรรทัดไหนบอกว่า "เส้นทางไป 192.168.5.0 คือผ่าน A แล้ว B แล้ว C" มันบอกแค่ว่า โยนให้ 10.0.0.9 แล้วเชื่อว่าหมอนั่นรู้ทางต่อ

💡 อุปมาที่ใช้ได้จริง — เหมือนถามทางกลางเมืองแล้วได้คำตอบว่า "เลี้ยวซ้ายตรงไฟแดงหน้า แล้วไปถามใหม่" ทุกแยกให้คำตอบทีละแยก ไม่มีใครวาดแผนที่ทั้งเส้นให้ · จุดที่อุปมานี้ใช้ไม่ได้: คนบอกทางไม่เคยเปลี่ยนคำตอบทุกสิบวินาที แต่ในเมชมันเปลี่ยน และนั่นคือทั้งเล่มนี้

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

3.3 hop, TTL และการวนไม่รู้จบ

ถ้าทุกคนรู้แค่ก้าวเดียว จะมั่นใจได้ยังไงว่าแพ็กเก็ตไม่วนอยู่ในวง A ส่งให้ B, B ส่งกลับให้ A ตลอดกาล

คำตอบง่ายกว่าที่คิด: ทุกแพ็กเก็ตพกตัวนับชื่อ TTL (time to live) ติดตัว ทุกครั้งที่ผ่านโหนดหนึ่งตัว ค่านี้ลดลงหนึ่ง พอถึงศูนย์ก็ถูกทิ้ง — เป็นการยอมรับตั้งแต่ต้นว่า เครือข่ายจะเข้าใจผิดเรื่องเส้นทางเป็นครั้งคราว และต้องมีตาข่ายรองรับ ไม่ใช่พยายามทำให้ไม่เคยผิดเลย

แนวคิด "ยอมให้ผิดแล้วมีตัวหยุด" นี้จะกลับมาอีกหลายรอบในเล่ม

3.4 ทำไมตารางถึงต้องมีคนเติม

ตารางเส้นทางไม่ได้เกิดเอง ในเครือข่ายบริษัท คนไอทีพิมพ์เข้าไปเอง หรือ router คุยกันด้วยโปรโตคอลที่ออกแบบมาสำหรับโลกที่สายไม่ขยับ

ในเมชไม่มีทั้งสองอย่าง ไม่มีคนไอทีเดินตามทีมกู้ภัยเข้าไปในหุบเขาเพื่อพิมพ์ตาราง และเส้นทางเปลี่ยนเร็วกว่าที่โปรโตคอลของโลกมีสายจะตามทัน

คำถามที่เหลือของเล่มนี้จึงมีข้อเดียว: ตารางนั้นถูกเติมด้วยอะไร และเติมด้วยข้อมูลที่สดแค่ไหน บทหน้าจะตอบครึ่งแรก และมันคือบทที่สำคัญที่สุดในเล่ม

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