ยูโฟลว์
UFlow เป็นไลบรารี Rust และโปรโตคอลเครือข่าย UDP สำหรับการถ่ายโอนข้อมูลอินเทอร์เน็ตแบบเรียลไทม์ โดยเน้นที่ความเรียบง่ายและความทนทาน แม้ว่าจะได้รับการออกแบบตั้งแต่เริ่มต้น แต่อินเทอร์เฟซและฟังก์ชันการทำงานของ UFlow ก็ได้รับแรงบันดาลใจจากไลบรารี ENet ที่มีชื่อเสียง
คุณสมบัติ
- การถ่ายโอนข้อมูลแบบแพ็คเก็ตระหว่างสองโฮสต์
- การกระจายตัวของแพ็กเก็ตอัตโนมัติและการประกอบใหม่ตามอินเทอร์เน็ต MTU (1500 ไบต์)
- การจับมือการเชื่อมต่อ 3 ทางเพื่อการจัดการการเชื่อมต่อที่เหมาะสม
- มากถึง 64 สตรีมแพ็กเก็ตที่เรียงลำดับอย่างอิสระ
- โหมดการถ่ายโอนแพ็กเก็ตที่ใช้งานง่าย 4 โหมด: ไวต่อเวลา , ไม่น่าเชื่อถือ , ถาวร และ เชื่อถือได้
- การควบคุมความแออัดของการสตรีมที่เป็นมิตรกับ TCP ดำเนินการตาม RFC 5348
- โปรโตคอลการเข้ารหัสและถ่ายโอนเฟรมที่มีประสิทธิภาพโดยมีค่าใช้จ่ายแพ็กเก็ตน้อยที่สุด
- การตรวจสอบ CRC สำหรับเฟรมที่ส่งทั้งหมด (พหุนาม: 0x132c00699)
- ปริมาณงานแพ็คเก็ต 100% และลำดับการจัดส่งที่ไม่ได้รับผลกระทบภายใต้สภาวะเครือข่ายในอุดมคติ
- การจัดการ ID ลำดับแบบกันน้ำเพื่อการลดปัญหาการซ้ำซ้อนสูงสุด
- ขีดจำกัดหน่วยความจำตัวรับที่กำหนดค่าได้ของแอปพลิเคชัน (เพื่อป้องกันการโจมตีการจัดสรรหน่วยความจำ)
- การรับทราบข้อมูลที่ไม่ได้รับการตรวจสอบ (เพื่อป้องกันอัตราการสูญเสีย / การปลอมแปลงแบนด์วิดท์)
- ยืดหยุ่นต่อการขยาย DDoS (อัตราส่วนคำขอ-ตอบกลับ 28:1)
- ออกแบบอย่างพิถีพิถันและทดสอบหน่วยเพื่อให้แน่ใจว่ามีการทำงานแบบไม่มีแผงลอย
- การใช้งานแบบไม่มีเธรดและไม่มีการบล็อก
เอกสารประกอบ
สามารถดูเอกสารได้ที่ docs.rs
สถาปัตยกรรม
แม้ว่าเวอร์ชันก่อนหน้านี้จะมีการอธิบายไว้ในเอกสารไวท์เปเปอร์ แต่ในระหว่างนี้มีการเปลี่ยนแปลงมากมายเกี่ยวกับไลบรารี (รวมถึงชื่อด้วย!) เวอร์ชันปัจจุบันมีการปรับปรุงดังต่อไปนี้:
- การควบคุมความแออัดที่เป็นมิตรกับ TCP ดำเนินการตาม RFC 5348
- ขีดจำกัดหน่วยความจำตัวรับ (สำหรับการประกอบแพ็กเก็ตอีกครั้ง)
- ไม่มีแพ็กเก็ตหรือเฟรมของแมวมอง
- โหมดการส่งแพ็กเก็ตเพิ่มเติมซึ่งทำให้แพ็กเก็ตหลุดหากไม่สามารถส่งได้ทันที (Time-Sensitive)
- ไม่มีการวนซ้ำตามจำนวนช่องสัญญาณ
การออกแบบใหม่นี้จะมีการสรุปในเอกสารไวท์เปเปอร์ที่อัปเดตเร็วๆ นี้