DatagramTunneler

โปรแกรมไคลเอนต์/เซิร์ฟเวอร์ข้ามแพลตฟอร์มอย่างง่ายที่ส่งต่อดาตาแกรม UDP ผ่านการเชื่อมต่อ TCP (หรือที่เรียกว่าทันเนล) ไคลเอนต์เข้าร่วมกลุ่มมัลติคาสต์และส่งต่อดาตาแกรมที่ได้รับไปยังเซิร์ฟเวอร์ ซึ่งจะมัลติคาสต์บนเครือข่ายย่อยของตัวเอง
- ออกแบบโดยคำนึงถึงความเรียบง่าย
- ทดสอบบน OSX 10.13.3 , Ubuntu 16.04 และ Centos 7.4
- ไม่ รองรับ Windows
เนื้อหา
ความต้องการ
การติดตั้ง
เรื่องย่อ
ตัวอย่าง
มันทำงานอย่างไร?
พิธีสาร DTEP
การออกใบอนุญาต
ความต้องการ
- คอมพิวเตอร์ที่ใช้ระบบปฏิบัติการ Linux หรือ Mac OS
- คอมไพเลอร์ c++
ติดตั้งภายใน 10 วินาที
- ดาวน์โหลดหรือโคลนพื้นที่เก็บข้อมูล
- เข้าไปในพื้นที่เก็บข้อมูล:
cd <path_to_the_repo>/DatagramTunneler
- สร้าง DatagramTunneler เพียงเรียกใช้ make:
- คุณพร้อมที่จะรันไบนารี DatagramTunneler แล้ว:
./bin/DatagramTunneler -h
หากต้องการข้อมูลเพิ่มเติมเกี่ยวกับวิธีการเรียกใช้ โปรดดู เรื่องย่อด้านล่าง
เรื่องย่อ
ในการใช้ DatagramTunneler คุณต้องเริ่มฝั่งเซิร์ฟเวอร์ก่อน จากนั้นจึงฝั่งไคลเอ็นต์ ถ้าคุณไม่ทำ ไคลเอนต์ก็จะล้มเหลวในการเชื่อมต่อกับเซิร์ฟเวอร์และออกจากระบบทันที
เซิร์ฟเวอร์
dgramtunneler --server -i <udp_iface_ip> -t <tcp_listen_port> [-u <udp_dst_ip>:<port>]
- <udp_iface_ip> : อินเทอร์เฟซที่ใช้ในการเผยแพร่ดาตาแกรมที่ส่งต่อ
- <tcp_listen_port> : พอร์ต tcp ที่ใช้ในการฟังการเชื่อมต่อไคลเอนต์
- <udp_dst_ip>:<port> : (เป็นทางเลือก) IP ปลายทาง udp และพอร์ตที่เซิร์ฟเวอร์เผยแพร่ดาตาแกรมที่ส่งต่อ หากไม่ได้ระบุไว้ ดาตาแกรมจะถูกเผยแพร่ในช่องทางเดียวกันกับที่ลูกค้าเข้าร่วม
ลูกค้า
dgramtunneler --client -i <udp_iface_ip> -t <tcp_srv_ip>:<tcp_srv_port> -u <udp_dst_ip>:<port>
- <udp_iface_ip> : อินเทอร์เฟซที่ใช้ในการเข้าร่วม multicast channel ที่จัดทำโดย -u
- <tcp_srv_ip>:<port> : IP และพอร์ตของเซิร์ฟเวอร์ที่จะส่งต่อดาตาแกรม
- <udp_dst_ip> : <port> : udp IP ปลายทางและพอร์ตของช่องที่เราต้องการเข้าร่วม
ตัวอย่าง
(อย่าลืมให้ดาวเล็กๆ น้อยๆ หากเครื่องมือนี้มีประโยชน์สำหรับคุณ :]) ฝั่งเซิร์ฟเวอร์:
./bin/datagramtunneler --server -i 192.168.0.104 -u 228.14.28.52:1234 -t 28052
ฝั่งไคลเอ็นต์:
./bin/datagramtunneler --client -i 192.168.0.105 -u 228.1.2.3:7437 -t 192.168.0.104:28052
มันทำงานอย่างไร?
วัตถุประสงค์ของ DatagramTunneler คือการถ่ายโอนข้อมูลมัลติคาสต์จากซับเน็ต A หนึ่งไปยังซับเน็ต B อื่น โดยที่ช่องมัลติคาสต์นั้นไม่พร้อมใช้งาน เพื่อให้บรรลุเป้าหมายนี้ DatagramTunneler จึงถูกแบ่งออกเป็น 2 ด้าน: ฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์ ดังที่แสดงในแผนภาพด้านล่าง: 
ฝั่งไคลเอ็นต์
ฝั่งไคลเอ็นต์ควรทำงานในซับเน็ตที่สามารถเข้าร่วมช่องสัญญาณมัลติคาสต์ได้ เมื่อเริ่มต้นแล้วจะดำเนินการดังต่อไปนี้:
- เชื่อมต่อกับเซิร์ฟเวอร์ DatagramListener (TCP)
- เข้าร่วมช่องมัลติคาสต์ (UDP)
- ส่งต่อดาตาแกรมที่ได้รับทั้งหมดไปยังเซิร์ฟเวอร์โดยใช้การเชื่อมต่อ TCP ที่สร้างขึ้น ดาตาแกรมจะถูกส่งผ่าน TCP โดยใช้ Datagram Tunneler Encapsulation Protocol (หรือ DTEP)
ฝั่งเซิร์ฟเวอร์
ฝั่งเซิร์ฟเวอร์ควรทำงานในซับเน็ตที่ไม่มีมัลติคาสต์ เมื่อเริ่มต้นแล้วจะดำเนินการดังต่อไปนี้:
- ฟังการเชื่อมต่อไคลเอ็นต์ (โปรดทราบว่ายอมรับการเชื่อมต่อเดียวเท่านั้นตลอดอายุการใช้งานของอินสแตนซ์เซิร์ฟเวอร์/ไคลเอ็นต์ เมื่ออุโมงค์ถูกตัดการเชื่อมต่อ ปลายทั้งสองจะออก
- เมื่อสร้างการเชื่อมต่อกับไคลเอนต์แล้ว มันจะเผยแพร่ดาตาแกรมทั้งหมดที่ไคลเอนต์ส่งไปยังช่องทางมัลติคาสต์ ช่องนั้นสามารถระบุอะไรก็ได้เมื่อเปิดเซิร์ฟเวอร์ หรือหากไม่ได้ระบุ ช่องนั้นจะใช้ช่องสัญญาณมัลติคาสต์เดียวกันกับที่เข้ารหัสด้วยดาตาแกรมที่ได้รับ (cf DTEP)
โปรโตคอลการห่อหุ้ม Datagram Tunneler (DTEP)
Datagram Tunneler Protocol หรือ DTEP เป็นโปรโตคอลไบนารี่อย่างง่าย ซึ่งอธิบายไว้ในแผนภาพต่อไปนี้: 
แพ็กเก็ต DTEP มีส่วนหัวขนาด 1 ไบต์ซึ่งระบุประเภทของเพย์โหลดที่มีอยู่
ประเภทแพ็คเก็ต 0x00 = HEARTBEAT
แพ็กเก็ตประเภทนี้ไม่มีเพย์โหลด ไคลเอ็นต์จะส่งไปยังเซิร์ฟเวอร์และช่วยให้แน่ใจว่าปลายทั้งสองด้านของการเชื่อมต่อทราบว่าปลายอีกด้านยังมีชีวิตอยู่หรือไม่
ประเภทแพ็คเก็ต 0x01 = ดาต้าแกรม
แพ็กเก็ตนี้ห่อหุ้มดาตาแกรมที่ไคลเอนต์สังเกต นี่คือคำอธิบายที่สมบูรณ์: 
แม้ว่าแผนภาพนี้ควรจะอธิบายได้ในตัว แต่นี่คือรายละเอียดย่อยของฟิลด์ทั้งหมด:
- ความยาวดาตาแกรม : จำนวนไบต์ของดาตาแกรมที่ห่อหุ้ม (ไม่รวมความยาวส่วนหัว DTEP)
- ที่อยู่ช่อง UDP : ที่อยู่ปลายทางของกลุ่มมัลติคาสต์ที่ไคลเอนต์เข้าร่วมเพื่อรับดาตาแกรมนั้น
- UDP Channel Port : พอร์ตปลายทางของกลุ่มมัลติคาสต์ที่ไคลเอนต์เข้าร่วมเพื่อรับดาตาแกรมนั้น
- Encapsulated UDP Datagram : ดาตาแกรมจริงที่ไคลเอนต์ได้รับจากช่องสัญญาณมัลติคาสต์
การออกใบอนุญาต
ใบอนุญาต CF