Tactical Data Link ฉบับ ไม่มีเทคนิคั่ล จริง จริ๊ง...

เมื่อเรือรบเค้าคุยกันด้วย "ภาษาเทพ" แล้วนุดอย่างเราจะฝากข้อความผ่านเทพบ้าง ต้องเข้าใจอะไรซิ?
4 กุมภาพันธ์ 2026เวลาอ่าน 6 นาที#softwareengineer

สวัสดีวัยรุ่นอีกครั้งครับโพ้ม วันนี้ผมจะขอมาบ่นถึงอะไรที่มันค่อนข้าง Abstract บ้าง นั่นก็คือการสื่อสาร (Communications) มันเป็นหัวใจหลักของระบบหลายๆ อย่างในปัจจุบันเลย ถ้าเราเห็นๆ กันอยู่ก็การใช้งานโทรศัพท์มือถือ หรืออินเตอร์เน็ตด้วย มันก็คือการสื่อสารหนึ่งในหลายๆ รูปแบบ แต่ถ้าเป็นสิ่งที่เราเจอกันอยู่ตลอดอยู่แล้ว ก็ไม่ใช้ CodeIndy น่ะสิ เราเลยจะมาพูดถึงการสื่อสารในทะเลกัน ครั้นจะพูดตั้งแต่ประวัติการสื่อสารในทะเลเลยก็ดูจะเป็นมหากาพย์ไป (หรือจะเขียนทีหลังดีน้า..) ก็เลยขยับมาเป็นปัจจุบันเลยละกัน กับเทคโนโลยีที่เป็นหัวใจสำคัญที่ทำให้ภาพสถานการณ์ของเรือ มันขยับได้พร้อมกันทั้ง Fleet สิ่งนั้นก็คือ Tactical Data Link (TDL) ไงพวกแกร

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

ลืม JSON ไปได้เลย... เมื่อทุก Bit มีค่าเท่ากับเลือด

Developer หลายๆ คนก็คงจะรู้ดีอยู่แล้วว่า เวลาเราจะคุยกันระหว่าง Server รูปแบบที่ง่ายที่สุดที่เราจะนึกถึกันก็คือการทำ REST API แล้วก็ใช้ Message Format อย่าง JSON เพื่อส่งข้อมูลระหว่างกัน เป็นอะไรที่ง่ายและสะดวกที่สุดแล้วหละ เช่น

json
{
  "track": "1001467", // หมายเลขเป้า
  "name": "Dummy", // ชื่อของเป้า
  "longitude": 100.682711, // พิกัด Longitude เป็น Degree Decimal
  "latitude": 12.114322, // พิกัด Latitude เป็น Degree Decimal
  "course": 38.289002, // ทิศทางของเป้า
  "speed": 9.236101 // ความเร็วของเป้า
}

ขนาดของข้อมูลชุดนี้แน่นอนว่าอยู่ในรูปแบบ Text-Based ที่แต่ละตัวอักษร (รวม Brackets) โดยที่ Encode แบบ UTF-8 เป็น Default แต่ละตัวก็ขนาดเท่ากับ 1 ถึง 4 Bytes รวมๆ แล้วข้อความชุดนี้ก็ร่วมๆ หลายสิบถึงร้อยไบต์เลยทีเดียว

ทั้งต้นทางและปลายทางก็ใช้รูปแบบข้อมูลนี้แหละ ในการส่งกันไปกันมา อ่านง่าย สบายตา เข้าใจความหมายได้เลย แต่ช้าแต่ พอคุณเข้ามาในโลกของ TDL แล้วนั้น ลืมความฟุ่มเฟือยเหล่านี้ไปได้เลยฮะ เพราะการส่งข้อมูลผ่านคลื่นวิทยุกลางทะเลมันมีข้อจำกัดมหาศาล อย่างคลื่นลม การโคลงของเรือ ระยะทาง การที่ต้องส่งกันแบบ Point-to-Point เท่านั้น เลยต้อง Repeat กันมันส์เลยทีเดียว ลืมความหงุดหงิดเวลาเน็ตหลุดไปได้เลย ข้อมูลทุกอย่างเลยต้องถูกบีบอัดลงเหลือเพียงระดับ Bit เท่านั้น เราไม่ได้ส่งคำว่า Hostile ไปตรงๆ แต่เราส่งเลข 1 ซึ่งถูกตกลงกันไว้แล้วในมาตรฐาน Message Format ถ้าจะให้ยกตัวอย่างที่เป็นมาตรฐานเลยของ NATO เรียก STANAG 5516 หรือของ USA เรียก MIL-STD-6016 การกำหนดมาตรฐานเหล่านี้ก็เพื่อให้ข้อมูลตำแหน่ง พิกัด ความเร็ว ถูกยัดรวมกันในสิ่งที่เรียกว่า Message Format Standard ที่สั้น กระชับ และโหดเหี้ยมที่สุด เพื่อให้มั่นใจว่าต่อให้คลื่นสัญญาณจะแย่แค่ไหนข้อมูลต้องไปถึง ถ้าเราเอา JSON ข้างบนมาเขียนให้ยัดสุดๆ จะได้ประมาณนี้

python
# กำหนด Message Length แต่ละข้อมูล
messageBitLength:tuple = (12, 8, 8, 8, 9, 9)

# Track Number 4732 (ตัวเลข 4 หลัก แต่ละหลัก 0-7, 3 bit)
trackNumber:tuple = (4, 7, 3, 2)

# Grid System Number 6 (Predefined)
grid:int = 6

# X Coordinate 45 (0-255)
xCoords:int = 45

# Y Coordinate 117 (0-255)
yCoords:int = 117

# Course 059 (0-359)
course:int = 59

# Speed 8 Knots (0-400)
speed:int = 8

message = (course << messageBitLength[5]) | speed
message |= yCoords << sum(messageBitLength[4:])
message |= xCoords << sum(messageBitLength[3:])
message |= grid << sum(messageBitLength[2:])
message |= (trackNumber[0] << 9 | trackNumber[1] << 6 | trackNumber[2] << 3 | trackNumber[3]) << sum(messageBitLength[1:])

print(bin(message))
# 0b100111011010000001100010110101110101000111011000001000

จะเห็นว่าเมื่อออกแบบ Message Format ให้บีบอัดข้อมูลตั้งแต่แรกแล้ว จะเหลือขนาดแค่ 54 bit หรือ 6 byte กว่าๆ เท่านั้น แต่ข้อเสียก็คือ ใส่ชื่อไม่ได้, จำนวน Track น้อยลง, แล้วก็ความละเอียดก็น้อยด้วย และเมื่อเราออกแบบข้อมูลแล้ว ต่อไปก็เป็นตาของช่องทางการคุยหละ

มารยาทในวงสนทนากับ TDMA ผู้คุมกฎเหล็กของเวลา

ลองนึกภาพคน 50 คนอยู่ในห้องมืดๆ แล้วทุกคนมีโทรโข่งคนละอัน ถ้าทุกคนตะโกนพร้อมกัน แน่นอนผลก็คือไม่มีใครรู้เรื่องเลยฮะ มันได้ยินก็จริง แต่ความหมายจะตีกันไปหมด มันจึงมีการบริหารจัดการไม่ให้ข้อมูลชนกัน ซึ่งเป็นหลักเบื้องต้นและสำคัญของการสื่อสารอย่าง Collision Avoidance ในโลกของ TDL (โดยเฉพาะ Link 16) เราใช้เทคนิคที่เรียกว่า TDMA (Time Division Multiple Access) มันคือการแบ่งเวลาออกเป็นเสี้ยววินาทีที่เป็นช่องของเวลา (Time Slots) แล้วแจกจ่ายให้แต่ละคนว่า วินาทีที่ 0.001 เป็นคิวของเรือเอ็กซ์นะ พอวินาทีที่ 0.002 เป็นคิวของเครื่องบินวายนะ

Time Division Multiple Access

แต่ความพีคอยู่ตรงนี้ครับ ทุกคนในเครือข่ายต้องมีนาฬิกาที่ตรงกันเป๊ะๆ ระดับไมโครวินาที เราถึงต้องมีสิ่งที่เป็นหัวใจหลักของการทำ TDMA เรียกว่า Time Server หรือ Master Clock ที่คอยคุมจังหวะการเต้นของหัวใจทั้งกองทัพ ถ้าใครนาฬิกาเบี้ยวแม้แต่นิดเดียว คุณจะกลายเป็นคนนอก ที่พูดไปก็ไม่มีใครได้ยิน และฟังใครไม่รู้เรื่องทันที

เสร็จแล้วเราก็เพิ่มความปลอดภัยเข้าไป

ในโลก Internet เรามี SSL/TLS ไว้เข้ารหัสข้อมูลจากต้นทางไปปลายทาง แต่ในสมรภูมิเรามีโจทย์ที่ยากกว่านั้นก็คือการถูก Jamming หรือการส่งสัญญาณรบกวนคลื่นวิทยุที่เราใช้งานกัน ซึ่งเพื่อป้องกันเรื่องนี้ TDL จึงมีท่าไม้ตายที่เรียกว่า Frequency Hopping แทนที่เราจะแช่ความถี่เดียวเพื่อทำ Time Slot ที่ให้ศัตรูดักฟังหรือป่วนได้ ระบบจะทำการกระโดดสลับความถี่ไปมาหลายหมื่นครั้งต่อวินาที เพื่อการป้องกันการ Jamming ในความถี่ที่คงที่ ซึ่งถ้าไม่มี Natural Key สำหรับการทำ Seeding เพื่อเริ่มการ Random ของการ Hop ความถี่แล้ว คุณจะไม่มีวันรู้เลยว่าตอนนี้พวกเราแอบไปคุยกันที่ความถี่ไหน มันเหมือนกับการที่คุณพยายามจะแอบฟังคนคุยกัน แต่พวกเขาวิ่งสลับห้องคุยกันทุกๆ 0.0001 วินาทีตลอดเวลานั่นหละ

จากกระแส Bit สู่ภาพบนหน้าจอ หน้าที่ของมานุด Dev

ทีนี้ก็จะเข้าโหมด #softwareengineer อย่างเราๆ แล้วหละ ซึ่งหน้าที่ของเราคือการทำ Data Link Processing ครับ เราต้องเขียนโปรแกรมเพื่อไปถอดรหัส ไอ้เจ้ากระแส Bit 0101 ที่พุ่งเข้ามาจากวิทยุ เพื่อเอามาประกอบร่างใหม่ตาม Message Format เดิม และทำให้กลายเป็น PPLI (Precise Participant Location and Identification) หรือพิกัดของพวกเดียวกัน และ Tracks หรือพิกัดของศัตรู แสดงบนจอ

งานนี้ไม่มี Library JSON.parse() ให้ใช้ครับ เราต้องแกะ Bit ต่อ Bit ตามคู่มือมาตรฐานที่หนาเป็นปึกๆ ความยากคือเราต้องจัดการกับความขัดแย้งของข้อมูล (Data Conflict) เช่น เรืออีกลำบอกศัตรูอยู่ตรงนี้ แต่อีกลำบอกอยู่อีกที่ เราจะต้องทำการหลอมรวม (Correlation) ข้อมูลเหล่านี้อย่างไรให้ผู้ที่มีหน้าที่ตัดสินใจ มาดูหน้าจอแล้วเห็นภาพที่ถูกต้องที่สุดเพื่อการตัดสินใจ

ความคลาสสิกที่ยังทรงพลัง

Tactical Data Link อาจจะดูเหมือนเทคโนโลยีโบราณที่เน้นความประหยัด Bit แต่มันคือศาสตร์แห่งความเสถียรและความปลอดภัยขั้นสูงสุดที่ Web App ทั่วไปเทียบไม่ติดครับ มันคือการผสมผสานระหว่าง Radio Physics, Cryptography และ Software Engineering เข้าด้วยกันอย่างลงตัว ในบทความต่อๆ ไป จะค่อยๆ ขยายอีกหลายอย่างเลยหละ ไม่ว่าจะเป็นการ Plot หน้าจอตามมาตรฐาน (การแสดงผลเป้าบนหน้าจอก็มีมาตรฐานะเออ) การจัดลำดับ Queue ข้อมูลที่จะส่งตาม Priority การทำ Track Correlation (ซึ่งอันนี้ผมแตก แต่จะพยายาม 555) และอีกหลายอย่างมากมายที่เกี่ยวข้อง รอติดตามกันได้เบย