Java DatagramSocket และการส่งต่อ UDP ผ่าน SOCKS5
ทำความเข้าใจว่าเหตุใด UDP socket ของ Java จึงต้องมีการใช้งาน SOCKS5 UDP แม้ว่าการเชื่อมต่อ TCP จะใช้ SOCKS อยู่แล้ว
คำขอ HTTP ของ Java ทำงานผ่าน SOCKS แต่คุณลักษณะ UDP ยังคงส่งทราฟฟิกโดยตรงหรือล้มเหลว การตั้งค่า คุณสมบัติ SOCKS ของ JVM ไม่ได้ให้ DatagramSocket มีการใช้งาน SOCKS5 UDP
DatagramSocket API ส่งและรับดาตาแกรมที่กำหนดที่อยู่ไปยังปลายทางเครือข่าย เมธอด connect() ของเมธอดจะเลือกคู่สนทนาสำหรับซ็อกเก็ตนั้น มันไม่ได้ดำเนินการเจรจา SOCKS กับคู่สนทนา
เส้นทาง UDP ผ่าน SOCKS5 ต้องทำงานเพิ่ม
SOCKS5 กำหนด ความสัมพันธ์ UDP ที่สร้างขึ้นบนการเชื่อมต่อควบคุม TCP จากนั้นไคลเอนต์จะ แลกเปลี่ยนดาตาแกรมที่ห่อหุ้มกับที่อยู่รีเลย์ที่พร็อกซีให้มา ข้อความที่ห่อหุ้มแต่ละข้อความระบุปลายทางของตน การใช้งานไคลเอนต์ต้องจัดการการห่อหุ้มนั้นและอายุของการเชื่อมต่อควบคุม
การชี้ UDP socket ธรรมดาไปยังพอร์ตฟัง TCP ของพร็อกซีจะข้ามขั้นตอนเหล่านั้น การส่งดาตาแกรมดิบของ แอปพลิเคชันไปยังที่อยู่นั้นไม่ใช่สิ่งทดแทนความสัมพันธ์
เลือกไลบรารีหรือคุณลักษณะของแอปพลิเคชันที่รองรับการส่งต่อ UDP ผ่าน SOCKS5 อย่างชัดเจน และยืนยันว่า เซิร์ฟเวอร์รองรับด้วย ไลบรารีที่โฆษณาการรองรับ SOCKS อาจใช้งานได้เฉพาะ TCP CONNECT ข้อกำหนดของ โปรโตคอลแยกคำสั่งเหล่านี้
การส่งต่อ UDP ก็ต้องมีเส้นทางที่ใช้งานได้
การเชื่อมต่อ TCP ที่สำเร็จไปยังพร็อกซีจะสร้างเฉพาะเส้นทางควบคุม ไฟร์วอลล์หรือพฤติกรรมของ NAT ยังคง รบกวนดาตาแกรมที่ส่งไปยังรีเลย์ได้ รวบรวมปลายทางรีเลย์ที่ส่งคืนมาและข้อผิดพลาดของรีเลย์ใด ๆ ก่อนสรุปว่า ปลายทางของแอปพลิเคชันออฟไลน์
สุดท้าย การรองรับการขนส่ง SOCKS ไม่ได้เพิ่มการรับประกันการส่งมอบให้กับ UDP เวลาหมดเวลา การจัดการการ สูญหาย และข้อจำกัดขนาดข้อความของแอปพลิเคชันของคุณยังคงมีผลหลังเส้นทางเปลี่ยน