เซิร์ฟเวอร์ TURN: คืออะไร ทำงานอย่างไร และใช้ที่ไหน

ผู้แต่ง: IT Sectr เผยแพร่เมื่อ: 2026-06-02 เวลาอ่าน: 8 นาที

เซิร์ฟเวอร์ TURN คือเซิร์ฟเวอร์ของโปรโตคอล Traversal Using Relays around NAT ที่ถ่ายทอดการรับส่งข้อมูลสื่อระหว่างสองพิวเมื่อการเชื่อมต่อ P2P โดยตรงเป็นไปไม่ได้ ตาม IETF RFC 5766, 2010 เซิร์ฟเวอร์ TURN ทำหน้าที่เป็นทางเลือกสำรองสุดท้าย (fallback) ในกระบวนการ ICE ของ WebRTC เพื่อรับประกันการเชื่อมต่อแม้มี NAT แบบสมมาตรและไฟร์วอลล์ขององค์กร

ประเด็นสำคัญ

  • เซิร์ฟเวอร์ TURN — เซิร์ฟเวอร์รีเลย์ที่ถ่ายทอดข้อมูลสื่อระหว่างพิวเมื่อการเชื่อมต่อ P2P โดยตรงผ่าน NAT เป็นไปไม่ได้
  • หลักการ — พิวแต่ละตัวส่งข้อมูลไปยังเซิร์ฟเวอร์ TURN ซึ่งจะส่งต่อไปยังพิวอีกตัว โดยทำหน้าที่เป็นตัวกลางในการสื่อสาร
  • บทบาทใน ICE — TURN จะถูกเปิดใช้งานเมื่อความพยายามเชื่อมต่อโดยตรงทั้งหมด (ผู้สมัคร host และ server reflexive) ล้มเหลว
  • ข้อเสีย — TURN สร้างความหน่วงเพิ่มเติมและโหลดบนเซิร์ฟเวอร์ เนื่องจากการรับส่งข้อมูลทั้งหมดผ่านรีเลย์
  • ความปลอดภัย — TURN รองรับการรับรองความถูกต้อง (username, credential, realm) และการเข้ารหัส TLS เพื่อปกป้องข้อมูลที่ถ่ายทอด

เซิร์ฟเวอร์ TURN คืออะไร

เซิร์ฟเวอร์ TURN (Traversal Using Relays around NAT) คือบริการเครือข่ายที่กำหนดใน RFC 5766 และอัปเดตใน RFC 8656 ซึ่งถ่ายทอดการรับส่งข้อมูล UDP และ TCP ระหว่างสองไคลเอนต์เมื่อการเชื่อมต่อ P2P โดยตรงเป็นไปไม่ได้เนื่องจากข้อจำกัด NAT หรือไฟร์วอลล์ ในสถาปัตยกรรม WebRTC เซิร์ฟเวอร์ TURN ทำหน้าที่เป็นกลไกสำรองสุดท้าย รับประกันการเชื่อมต่อในทุกสภาวะเครือข่าย

แตกต่างจาก STUN ซึ่งเพียงแจ้งที่อยู่ภายนอกให้ไคลเอนต์ทราบ เซิร์ฟเวอร์ TURN มีส่วนร่วมอย่างแข็งขันในการส่งข้อมูล พิวแต่ละตัวสร้างการเชื่อมต่อไปยังเซิร์ฟเวอร์ TURN และส่งข้อมูลสื่อไปยังเซิร์ฟเวอร์นั้น เซิร์ฟเวอร์ TURN จะส่งข้อมูลนี้ต่อไปยังพิวอีกตัว ผลลัพธ์คือไม่มีการเชื่อมต่อโดยตรงระหว่างพิว — การรับส่งข้อมูลทั้งหมดผ่านเซิร์ฟเวอร์รีเลย์ ซึ่งรับประกันการส่งมอบแม้ภายใต้ข้อจำกัด NAT ที่เข้มงวดที่สุด

โปรโตคอล TURN

TURN เป็นส่วนขยายของโปรโตคอล STUN ข้อความ TURN ใช้ส่วนหัว 20 ไบต์เดียวกันและกลไกแอตทริบิวต์เดียวกัน ความแตกต่างสำคัญคือ TURN กำหนดประเภทข้อความใหม่ (Allocate, Refresh, Send, Data, CreatePermission, ChannelBind) และแอตทริบิวต์ที่จำเป็นสำหรับการจัดการการจัดสรรแบบรีเลย์ ไคลเอนต์สร้างการจัดสรรบนเซิร์ฟเวอร์ TURN ผ่านข้อความ Allocate รับที่อยู่การขนส่งแบบรีเลย์ (relayed transport address) และใช้เพื่อส่งและรับข้อมูลผ่านเซิร์ฟเวอร์

เซิร์ฟเวอร์ TURN ทำงานอย่างไร

เซิร์ฟเวอร์ TURN ทำงานตามลำดับขั้นตอนต่อไปนี้ ไคลเอนต์ส่งคำขอ Allocate พร้อมการรับรองความถูกต้อง (username, credential) เซิร์ฟเวอร์ตรวจสอบข้อมูลประจำตัวและสร้างการจัดสรร — การผูกที่อยู่รีเลย์ (IP:พอร์ตบนเซิร์ฟเวอร์ TURN) กับไคลเอนต์ชั่วคราว เซิร์ฟเวอร์ส่งคืนการตอบสนอง Allocate พร้อม ที่อยู่การขนส่งแบบรีเลย์ — ที่อยู่ที่พิวอื่นจะใช้เพื่อส่งข้อมูลไปยังไคลเอนต์นี้ผ่านเซิร์ฟเวอร์ TURN

หลังจากการจัดสรรถูกสร้างขึ้น ไคลเอนต์สามารถส่งข้อมูลผ่านเซิร์ฟเวอร์ TURN โดยใช้ข้อความ Send Indication หรือผ่านช่องสัญญาณ (ChannelBind) เมื่อได้รับข้อมูลจากไคลเอนต์ เซิร์ฟเวอร์ TURN จะตรวจสอบสิทธิ์ (การอนุญาตให้ส่งข้อมูลไปยังพิวเฉพาะ) และถ่ายทอดข้อมูลไปยังพิวเป้าหมาย ในการรับข้อมูลขาเข้า ไคลเอนต์ต้องสร้างสิทธิ์สำหรับพิวที่คาดว่าจะได้รับข้อมูลก่อน มิฉะนั้นเซิร์ฟเวอร์ TURN จะละทิ้งแพ็กเก็ตขาเข้า สิทธิ์ถูกสร้างขึ้นผ่านข้อความ CreatePermission โดยระบุที่อยู่ IP ของพิว

การจัดสรรและอายุการใช้งาน

การจัดสรรบนเซิร์ฟเวอร์ TURN มีอายุการใช้งานจำกัด — ค่าเริ่มต้นคือ 10 นาที ไคลเอนต์ต้องส่งคำขอ Refresh เป็นระยะเพื่อขยายการจัดสรร อายุการใช้งานระบุเป็นวินาทีในแอตทริบิวต์ LIFETIME หากไม่ได้รับการ Refresh เซิร์ฟเวอร์จะลบการจัดสรรและปล่อยที่อยู่รีเลย์ ช่วงเวลาการรีเฟรชที่แนะนำ — 5 นาที (300 วินาที) เพื่อป้องกันการสูญเสียแพ็กเก็ต Refresh

การกำหนดค่าเซิร์ฟเวอร์ TURN ใน WebRTC

ใน WebRTC เซิร์ฟเวอร์ TURN ถูกกำหนดค่าผ่านการกำหนดค่า RTCPeerConnection ในอาร์เรย์ iceServers เซิร์ฟเวอร์ TURN สามารถใช้การขนส่ง UDP, TCP หรือ TLS การรับรองความถูกต้องมักใช้ข้อมูลประจำตัวแบบจำกัดเวลา (ข้อมูลประจำตัว TURN) ที่สร้างบนเซิร์ฟเวอร์แอปพลิเคชันด้วยระยะเวลาที่มีผลจำกัด

พิจารณาตัวอย่างการกำหนดค่าเซิร์ฟเวอร์ TURN ใน JavaScript ด้วยการรับรองความถูกต้องด้วยโทเค็น HMAC-SHA1

js
async function createPeerConnection(turnServerUrl) {
    const credentials = await fetchTurnCredentials();

    const config = {
        iceServers: [
            {
                urls: "stun:stun.l.google.com:19302"
            },
            {
                urls: turnServerUrl,
                username: credentials.username,
                credential: credentials.credential
            }
        ],
        iceTransportPolicy: "all"
    };

    return new RTCPeerConnection(config);
}

async function fetchTurnCredentials() {
    const response = await fetch("/api/turn-credentials");
    return response.json();
}

const turnUrl = "turn:turn.example.com:3478";
const pc = await createPeerConnection(turnUrl);

ในตัวอย่างนี้ เซิร์ฟเวอร์ TURN ถูกระบุร่วมกับเซิร์ฟเวอร์ STUN ในการกำหนดค่า ICE เดียวกัน กระบวนการ ICE จะพยายามใช้ผู้สมัคร host และผู้สมัคร srflx ที่ได้รับจาก STUN ก่อน หากการเชื่อมต่อโดยตรงล้มเหลว ICE จะสลับไปยังผู้สมัคร relay ที่ได้รับจากเซิร์ฟเวอร์ TURN โดยอัตโนมัติ พารามิเตอร์ iceTransportPolicy: "all" เปิดใช้งานผู้สมัคร relay — ค่าทางเลือก "relay" ปิดการใช้งานผู้สมัครทั้งหมดยกเว้น TURN ซึ่งมีประโยชน์สำหรับการทดสอบ

การรับรองความถูกต้องของเซิร์ฟเวอร์ TURN

เพื่อป้องกันการใช้งานโดยไม่ได้รับอนุญาต เซิร์ฟเวอร์ TURN ต้องการการรับรองความถูกต้อง วิธีการมาตรฐานคือข้อมูลประจำตัวแบบจำกัดเวลาที่สร้างบนเซิร์ฟเวอร์แอปพลิเคชันโดยใช้ HMAC-SHA1 เซิร์ฟเวอร์แอปพลิเคชันเข้ารหัสชื่อผู้ใช้ด้วยคีย์ลับของเซิร์ฟเวอร์ TURN และส่งคืนชื่อผู้ใช้และข้อมูลประจำตัวให้กับไคลเอนต์ ไคลเอนต์ส่งต่อไปยังการกำหนดค่า RTCPeerConnection และเบราว์เซอร์ใช้เมื่อสร้างการจัดสรรบนเซิร์ฟเวอร์ TURN เมื่อข้อมูลประจำตัวหมดอายุ ไคลเอนต์จะได้รับใหม่จากเซิร์ฟเวอร์แอปพลิเคชัน

TURN กับ STUN: การเปรียบเทียบ

TURN และ STUN แก้ปัญหางานการเจาะ NAT ที่เกี่ยวข้องกัน แต่แตกต่างกันโดยพื้นฐานในกลไกและต้นทุน TURN ถ่ายทอดการรับส่งข้อมูล ทำหน้าที่เป็นตัวกลาง ในขณะที่ STUN ช่วยระบุที่อยู่ภายนอกสำหรับการเชื่อมต่อ P2P โดยตรงเท่านั้น การเลือกระหว่างทั้งสองขึ้นอยู่กับประเภท NAT ของพิวและข้อกำหนดด้านประสิทธิภาพ

เกณฑ์STUNTURN
กลไกการค้นหาที่อยู่ภายนอกการถ่ายทอดการรับส่งข้อมูล
การเชื่อมต่อP2P โดยตรงผ่านเซิร์ฟเวอร์รีเลย์
ความหน่วงน้อยที่สุด (เส้นทางโดยตรง)เพิ่มเติม (ผ่านรีเลย์)
โหลดเซิร์ฟเวอร์เฉพาะคำขอเริ่มต้นการถ่ายทอดการรับส่งข้อมูลอย่างต่อเนื่อง
ต้นทุนต่ำ (คำขอจำนวนน้อย)สูง (การรับส่งข้อมูลเซิร์ฟเวอร์)
รองรับ NAT แบบสมมาตรไม่ใช่
แบนด์วิดท์จำกัดโดยช่องสัญญาณ P2P เท่านั้นจำกัดโดยช่องสัญญาณเซิร์ฟเวอร์

ในทางปฏิบัติ เซิร์ฟเวอร์ TURN ใช้เฉพาะสำหรับการเชื่อมต่อที่ P2P เป็นไปไม่ได้ ตามข้อมูลของ Google (สถิติ WebRTC, 2023) ประมาณ 15–20% ของการเชื่อมต่อ WebRTC ทั้งหมดต้องการรีเลย์ TURN ส่วนที่เหลือ 80–85% สร้างการเชื่อมต่อผ่าน STUN หรือผู้สมัคร host ในเครื่อง เมื่อออกแบบแอปพลิเคชัน คุณควรจัดงบประมาณสำหรับการรับส่งข้อมูล TURN ที่ 15–20% ของปริมาณสื่อทั้งหมดหากกลุ่มผู้ใช้ของคุณรวมถึงผู้ใช้จากเครือข่ายองค์กรและภูมิภาคที่มีข้อจำกัด NAT ที่เข้มงวด

ต้นทุนและประสิทธิภาพของเซิร์ฟเวอร์ TURN

เซิร์ฟเวอร์ TURN ใช้ทรัพยากรอย่างมากเนื่องจากการรับส่งข้อมูลสื่อทั้งหมดผ่านมัน การโทรที่ใช้งานแต่ละครั้งกับรีเลย์ TURN ใช้แบนด์วิดท์เซิร์ฟเวอร์เท่ากับปริมาณงานการรับส่งข้อมูลสื่อทั้งหมด (สตรีมขาเข้า + ขาออก) สำหรับการโทรวิดีโอ HD (720p) ซึ่งอาจอยู่ที่ 1.5–2.5 Mbps ต่อการเชื่อมต่อในแต่ละทิศทาง รวมเป็น 3–5 Mbps ของการรับส่งข้อมูลทั้งหมดผ่านเซิร์ฟเวอร์ TURN

มีตัวเลือกการปรับใช้หลายอย่างสำหรับ โครงสร้างพื้นฐาน TURN ไม่แนะนำให้ใช้เซิร์ฟเวอร์ TURN สาธารณะฟรีสำหรับการผลิตเนื่องจากการขาดการรับประกันคุณภาพและความปลอดภัย ผู้ให้บริการเชิงพาณิชย์ (Twilio Network Traversal Service, Xirsys, Metered) ให้บริการ TURN เป็นบริการด้วยราคาต่อกิกะไบต์ — ต้นทุนทั่วไปคือ $0.005–0.02 ต่อกิกะไบต์ การโฮสต์ด้วยตนเองด้วย coturn (เซิร์ฟเวอร์ TURN โอเพนซอร์ส) ต้องใช้เซิร์ฟเวอร์ที่มีความจุแบนด์วิดท์เพียงพอและการตั้งค่าการตรวจสอบ

  • coturn — เซิร์ฟเวอร์ TURN โอเพนซอร์สที่ได้รับความนิยมมากที่สุด ใช้ในระบบการผลิตส่วนใหญ่ รองรับการขนส่ง UDP, TCP, TLS และ DTLS
  • Twilio — บริการเชิงพาณิชย์ที่ให้ TURN + STUN ด้วยราคาตามการรับส่งข้อมูลและการรับรองความถูกต้องผ่านโทเค็นแบบจำกัดเวลา
  • Xirsys — ผู้ให้บริการ TURN เฉพาะทางที่มีเครือข่ายเซิร์ฟเวอร์ทั่วโลกและการวิเคราะห์การใช้งานโดยละเอียด
  • Metered.ca — บริการ TURN ที่มีขีดจำกัดฟรีสูงสุด 50 GB ต่อเดือนและจ่ายตามการใช้งานเมื่อเกิน
  • coturn โฮสต์ด้วยตนเอง — ควบคุมการกำหนดค่าได้อย่างสมบูรณ์ แต่ต้องมีการจัดการเซิร์ฟเวอร์และการตั้งค่าการตรวจสอบ

เมื่อเลือกโซลูชัน เซิร์ฟเวอร์ TURN ให้พิจารณาที่ตั้งทางภูมิศาสตร์ของผู้ใช้ ต้นทุนการรับส่งข้อมูล และข้อกำหนดด้านความปลอดภัย สำหรับแอปพลิเคชันที่มีการโทรพร้อมกันหลายพันครั้ง coturn ที่โฮสต์ด้วยตนเองบนเซิร์ฟเวอร์ที่มีช่องสัญญาณกว้าง (1+ Gbps) อาจคุ้มค่ากว่าผู้ให้บริการเชิงพาณิชย์ สำหรับโปรเจ็กต์ขนาดเล็กที่มีผู้ใช้หลายสิบคน บริการ TURN เชิงพาณิชย์ดีกว่าเนื่องจากไม่มีค่าใช้จ่ายในการจัดการและตรวจสอบ

คำถามที่พบบ่อย

เซิร์ฟเวอร์ TURN คืออะไรในคำง่าย ๆ?

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

เมื่อใดที่ต้องใช้เซิร์ฟเวอร์ TURN ใน WebRTC?

เซิร์ฟเวอร์ TURN จำเป็นเมื่อผู้เข้าร่วมการโทร WebRTC ทั้งสองอยู่หลัง NAT แบบสมมาตรหรือไฟร์วอลล์ขององค์กรที่บล็อกการรับส่งข้อมูล P2P ในกรณีเหล่านี้ STUN ไม่สามารถช่วยได้ และกระบวนการ ICE จะสลับไปยังผู้สมัคร relay ที่ได้รับจากเซิร์ฟเวอร์ TURN โดยอัตโนมัติ

ความแตกต่างระหว่าง TURN และ STUN คืออะไร?

STUN เพียงแสดงที่อยู่ภายนอกของคอมพิวเตอร์สำหรับการเชื่อมต่อโดยตรง TURN ถ่ายทอดการรับส่งข้อมูลผ่านตัวเองอย่างแข็งขัน STUN ไม่สร้างโหลดบนเซิร์ฟเวอร์ ในขณะที่ TURN ใช้แบนด์วิดท์ STUN ทำงานกับ NAT บางประเภทเท่านั้น TURN ทำงานเสมอแต่มีค่าใช้จ่ายสูงกว่า

เซิร์ฟเวอร์ TURN มีค่าใช้จ่ายเท่าไร?

ต้นทุนของ เซิร์ฟเวอร์ TURN ขึ้นอยู่กับผู้ให้บริการและปริมาณการรับส่งข้อมูล Twilio คิดค่าบริการประมาณ $0.005–0.01 ต่อ GB ของการรับส่งข้อมูลที่ถ่ายทอดผ่าน TURN Xirsys คิดค่าบริการตั้งแต่ $0.007 ต่อ GB การโฮสต์ coturn ด้วยตนเองต้องใช้เซิร์ฟเวอร์ที่มีแบนด์วิดท์อย่างน้อย 100 Mbps ซึ่งต้นทุนขึ้นอยู่กับผู้ให้บริการโฮสต์

วิธีตั้งค่าเซิร์ฟเวอร์ TURN ของคุณเอง?

เซิร์ฟเวอร์ TURN ของคุณเองสามารถตั้งค่าได้โดยใช้ coturn (โอเพนซอร์ส) การติดตั้งรวมถึงการกำหนดค่าพอร์ต การรับรองความถูกต้อง (ความลับที่ใช้ร่วมกัน) ใบรับรอง TLS และไฟร์วอลล์ ไฟล์การกำหนดค่าพื้นฐานประกอบด้วยพารามิเตอร์สำหรับ listening-port, realm, user และ fingerprint หลังการตั้งค่า เซิร์ฟเวอร์จะถูกระบุใน iceServers ของ WebRTC ด้วยคำนำหน้า turn: หรือ turns: สำหรับ TLS

สรุป

  • เซิร์ฟเวอร์ TURN — เซิร์ฟเวอร์รีเลย์สำหรับถ่ายทอดการรับส่งข้อมูลสื่อเมื่อการเชื่อมต่อ P2P โดยตรงระหว่างพิวเป็นไปไม่ได้
  • หลักการทำงาน — ไคลเอนต์สร้างการจัดสรรบนเซิร์ฟเวอร์ TURN รับที่อยู่การขนส่งแบบรีเลย์ และใช้เพื่อส่งและรับข้อมูลผ่านเซิร์ฟเวอร์ตัวกลาง
  • บทบาท ICE — TURN ถูกเปิดใช้งานเป็นทางเลือกสุดท้ายในกระบวนการ ICE เมื่อผู้สมัคร host และ srflx ไม่สามารถสร้างการเชื่อมต่อได้
  • ข้อจำกัด — ความหน่วงเพิ่มเติม (50–200 ms) การใช้แบนด์วิดท์เซิร์ฟเวอร์ (3–5 Mbps ต่อการโทร HD) ต้นทุนการรับส่งข้อมูล
  • เปรียบเทียบกับ STUN — TURN ทำงานกับ NAT ทุกประเภทแต่มีราคาแพงกว่าและช้ากว่า STUN เหมาะสำหรับ 80–85% ของการเชื่อมต่อ
  • เครื่องมือ — coturn (โอเพนซอร์สโฮสต์ด้วยตนเอง), Twilio NTS, Xirsys, Metered.ca สำหรับการใช้เซิร์ฟเวอร์ TURN เชิงพาณิชย์
  • คำแนะนำ — ใช้ TURN เป็นทางเลือกสำรองเมื่อ STUN ล้มเหลวเท่านั้น ติดตามเปอร์เซ็นต์ของการเชื่อมต่อ TURN และปรับให้เหมาะสมตามความจำเป็น

เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร

IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ

ปรึกษาโครงการ

อ่านเพิ่มเติม