TURN Server: چیست، چگونه کار می‌کند و کجا استفاده می‌شود

نویسنده: IT Sectr منتشر شده: 2026-06-02 زمان مطالعه: 8 دقیقه

TURN Server — سرور پروتکل Traversal Using Relays around NAT است که ترافیک رسانه‌ای را بین دو همتا در زمانی که اتصال مستقیم P2P ممکن نیست، رله می‌کند. بر اساس IETF RFC 5766, 2010، سرور TURN به عنوان آخرین راه‌حل (fallback) در فرآیند ICE در WebRTC عمل می‌کند و اتصال تضمین‌شده را حتی در NAT متقارن و فایروال‌های شرکتی فراهم می‌کند.

موارد کلیدی

  • TURN Server — یک سرور رله است که داده‌های رسانه‌ای را بین همتاها در زمانی که اتصال مستقیم P2P از طریق NAT ممکن نیست، رله می‌کند.
  • اصل کار — هر همتا داده‌ها را به سرور TURN ارسال می‌کند که آنها را به همتای دیگر ارسال می‌کند و به عنوان واسطه در ارتباط عمل می‌کند.
  • نقش در ICE — TURN زمانی فعال می‌شود که تمام تلاش‌های اتصال مستقیم (کاندیداهای host و server reflexive) ناموفق باشند.
  • عیب — TURN تأخیر و بار اضافی بر سرور ایجاد می‌کند، زیرا تمام ترافیک از طریق رله عبور می‌کند.
  • امنیت — TURN از احراز هویت (username, credential, realm) و رمزنگاری TLS برای محافظت از داده‌های رله‌شده پشتیبانی می‌کند.

TURN Server چیست

TURN Server (Traversal Using Relays around NAT) — یک سرویس شبکه است که در RFC 5766 تعریف شده و در RFC 8656 به‌روزرسانی شده است که ترافیک UDP و TCP را بین دو کلاینت زمانی که اتصال مستقیم P2P به دلیل محدودیت‌های NAT یا فایروال‌ها ممکن نیست، رله می‌کند. در معماری WebRTC، سرور TURN به عنوان مکانیسم پشتیبان نهایی عمل می‌کند و اتصال را در هر شرایط شبکه‌ای تضمین می‌کند.

بر خلاف STUN که فقط آدرس خارجی کلاینت را به آن اطلاع می‌دهد، سرور TURN فعالانه در انتقال داده شرکت می‌کند. هر همتا با سرور TURN اتصال برقرار می‌کند و داده‌های رسانه‌ای خود را به آن ارسال می‌کند. سرور TURN به نوبه خود این داده‌ها را به همتای دیگر هدایت می‌کند. در نتیجه هیچ اتصال مستقیمی بین همتاها وجود ندارد — تمام ترافیک از طریق سرور رله عبور می‌کند که تحویل را حتی در سخت‌ترین محدودیت‌های NAT تضمین می‌کند.

پروتکل TURN

TURN یک توسعه پروتکل STUN است. پیام‌های TURN از همان هدر ۲۰ بایتی و مکانیزم ویژگی‌ها استفاده می‌کنند. تفاوت کلیدی این است که TURN انواع پیام جدید (Allocate, Refresh, Send, Data, CreatePermission, ChannelBind) و ویژگی‌های لازم برای مدیریت تخصیص‌های رله را تعریف می‌کند. کلاینت یک تخصیص روی سرور TURN از طریق پیام Allocate ایجاد می‌کند، آدرس حمل‌ونقل رله‌شده (relayed transport address) را دریافت می‌کند و از آن برای ارسال و دریافت داده از طریق سرور استفاده می‌کند.

سرور TURN چگونه کار می‌کند

سرور TURN طبق دنباله مراحل زیر کار می‌کند. کلاینت یک درخواست Allocate با احراز هویت (username, credential) ارسال می‌کند. سرور اعتبارنامه را بررسی می‌کند و یک تخصیص ایجاد می‌کند — اتصال موقت آدرس رله (IP:پورت روی سرور TURN) به کلاینت. سرور یک پاسخ Allocate با relayed transport address برمی‌گرداند — آدرسی که سایر همتاها برای ارسال داده به این کلاینت از طریق سرور TURN استفاده خواهند کرد.

پس از ایجاد تخصیص، کلاینت می‌تواند داده‌ها را از طریق سرور TURN با استفاده از پیام‌های Send Indication یا از طریق کانال‌ها (ChannelBind) ارسال کند. هنگام دریافت داده از کلاینت، سرور TURN مجوزها (permissions) را بررسی می‌کند و داده‌ها را به همتای هدف رله می‌کند. برای دریافت داده‌های ورودی، کلاینت باید ابتدا مجوزی برای همتایی که از آن انتظار داده دارد ایجاد کند، در غیر این صورت سرور TURN بسته ورودی را دور می‌ریزد. مجوز از طریق پیام CreatePermission با مشخص کردن آدرس IP همتا ایجاد می‌شود.

تخصیص و طول عمر

تخصیص روی سرور TURN طول عمر محدودی دارد — به طور پیش‌فرض ۱۰ دقیقه. کلاینت باید به طور دوره‌ای درخواست Refresh را برای تمدید تخصیص ارسال کند. طول عمر بر حسب ثانیه در ویژگی LIFETIME مشخص می‌شود. در صورت عدم وجود Refresh، سرور تخصیص را حذف و آدرس رله را آزاد می‌کند. فاصله به‌روزرسانی توصیه‌شده ۵ دقیقه (۳۰۰ ثانیه) برای جلوگیری از از دست رفتن بسته‌های Refresh است.

پیکربندی سرور TURN در WebRTC

در WebRTC سرور TURN از طریق پیکربندی RTCPeerConnection در آرایه iceServers پیکربندی می‌شود. سرورهای TURN می‌توانند از حمل‌ونقل UDP، TCP یا TLS استفاده کنند. برای احراز هویت معمولاً از اعتبارنامه‌های موقت (TURN credentials) استفاده می‌شود که در سرور برنامه تولید شده و مدت زمان محدودی دارند.

مثالی از پیکربندی سرور 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 نیاز به احراز هویت دارد. رویکرد استاندارد — اعتبارنامه‌های محدود به زمان (time-limited credentials) است که در سرور برنامه با استفاده از HMAC-SHA1 تولید می‌شود. سرور برنامه نام کاربری را با کلید مخفی سرور TURN رمزگذاری کرده و username و credential را به کلاینت برمی‌گرداند. کلاینت آنها را در پیکربندی RTCPeerConnection قرار می‌دهد و مرورگر هنگام ایجاد تخصیص روی سرور TURN از آنها استفاده می‌کند. پس از انقضای اعتبارنامه‌ها، کلاینت اعتبارنامه جدیدی از سرور برنامه دریافت می‌کند.

TURN در مقابل STUN: مقایسه

TURN و STUN وظایف مرتبط عبور از NAT را حل می‌کنند اما از نظر مکانیزم و هزینه تفاوت اساسی دارند. TURN ترافیک را رله می‌کند و به عنوان واسطه عمل می‌کند، در حالی که STUN فقط به تعیین آدرس خارجی برای اتصال مستقیم P2P کمک می‌کند. انتخاب بین آنها با نوع NAT همتاها و الزامات عملکرد تعیین می‌شود.

معیارSTUNTURN
مکانیزمتعیین آدرس خارجیرله ترافیک
اتصالمستقیم P2Pاز طریق سرور رله
تأخیرحداقل (مسیر مستقیم)اضافی (از طریق رله)
بار بر سرورفقط درخواست‌های اولیهرله دائمی ترافیک
هزینهکم (تعداد کمی درخواست)زیاد (ترافیک روی سرور)
کار با Symmetric NATخیربله
پهنای باندفقط محدودیت کانال P2Pمحدودیت کانال سرور

در عمل سرور TURN فقط برای اتصالاتی استفاده می‌شود که P2P در آنها ممکن نیست. بر اساس آمار Google (WebRTC statistics, 2023)، حدود ۱۵–۲۰٪ از تمام اتصالات WebRTC نیاز به رله TURN دارند. ۸۰–۸۵٪ باقی‌مانده از طریق STUN یا کاندیداهای محلی host برقرار می‌شوند. هنگام طراحی برنامه باید بودجه‌ای برای ترافیک TURN به میزان ۱۵–۲۰٪ از کل حجم داده‌های رسانه‌ای در نظر گرفت، اگر مخاطب شامل کاربرانی از شبکه‌های شرکتی و مناطق با محدودیت‌های NAT شدید باشد.

هزینه و عملکرد سرور TURN

سرور TURN منابع قابل توجهی مصرف می‌کند، زیرا تمام ترافیک رسانه‌ای از طریق آن عبور می‌کند. هر تماس فعال با رله TURN از پهنای باند سرور معادل مجموع پهنای باند ترافیک رسانه‌ای (ورودی + خروجی) استفاده می‌کند. برای تماس تصویری با کیفیت HD (720p) این می‌تواند ۱.۵–۲.۵ مگابیت بر ثانیه برای هر جهت باشد، یعنی ۳–۵ مگابیت بر ثانیه ترافیک کلی از طریق سرور TURN.

چندین گزینه برای استقرار زیرساخت TURN وجود دارد. سرورهای TURN عمومی رایگان برای محیط تولید توصیه نمی‌شوند به دلیل عدم تضمین کیفیت و امنیت. ارائه‌دهندگان تجاری (Twilio Network Traversal Service, Xirsys, Metered) TURN را به عنوان سرویس با پرداخت به ازای گیگابایت ترافیک ارائه می‌دهند — هزینه معمول $۰.۰۰۵–۰.۰۲ به ازای هر گیگابایت است. استقرار مستقل با استفاده از coturn (سرور TURN متن‌باز) نیازمند سروری با پهنای باند کافی و پیکربندی مانیتورینگ است.

  • coturn — محبوب‌ترین سرور TURN متن‌باز که در اکثر سیستم‌های تولید استفاده می‌شود و از حمل‌ونقل UDP، TCP، TLS و DTLS پشتیبانی می‌کند.
  • Twilio — سرویس تجاری که TURN + STUN را با پرداخت به ازای ترافیک و احراز هویت از طریق توکن‌های موقت ارائه می‌دهد.
  • Xirsys — ارائه‌دهنده تخصصی TURN با شبکه جهانی سرورها و تحلیل دقیق مصرف.
  • Metered.ca — سرویس TURN با سقف رایگان تا ۵۰ گیگابایت در ماه و پرداخت برای مصرف اضافی.
  • Self-hosted coturn — کنترل کامل بر پیکربندی، اما نیازمند مدیریت سرور و پیکربندی مانیتورینگ دسترسی.

هنگام انتخاب راه‌حل برای سرور TURN باید جغرافیای کاربران، هزینه ترافیک و الزامات امنیتی را در نظر گرفت. برای برنامه‌هایی با هزاران تماس همزمان، coturn خودمیزبان روی سرورهای با پهنای باند بالا (۱+ گیگابیت بر ثانیه) ممکن است مقرون‌به‌صرفه‌تر از ارائه‌دهندگان تجاری باشد. برای پروژه‌های کوچک با ده‌ها کاربر، سرویس‌های تجاری TURN به دلیل عدم وجود هزینه‌های مدیریت و مانیتورینگ ترجیح داده می‌شوند.

سوالات متداول

سرور TURN به زبان ساده چیست؟

سرور TURN واسطه‌ای است که داده‌ها را بین کاربران زمانی که نمی‌توانند مستقیماً متصل شوند، منتقل می‌کند. اگر دو کامپیوتر پشت روترهایی قرار دارند که اتصال مستقیم را ممکن نمی‌سازند، سرور TURN داده‌ها را از یکی دریافت کرده و به دیگری ارسال می‌کند.

چه زمانی در WebRTC به سرور TURN نیاز است؟

سرور TURN زمانی نیاز است که هر دو شرکت‌کننده تماس WebRTC پشت NAT متقارن یا فایروال‌های شرکتی قرار دارند که ترافیک P2P را مسدود می‌کنند. در چنین مواردی STUN نمی‌تواند کمک کند و فرآیند ICE خودکار به کاندیدای relay دریافت‌شده از سرور TURN سوئیچ می‌کند.

تفاوت بین TURN و STUN چیست؟

STUN فقط آدرس خارجی کامپیوتر را برای اتصال مستقیم نشان می‌دهد. TURN فعالانه ترافیک را از طریق خود رله می‌کند. STUN باری بر سرور ایجاد نمی‌کند، TURN پهنای باند مصرف می‌کند. STUN فقط با انواع خاصی از NAT کار می‌کند، TURN همیشه کار می‌کند اما هزینه بیشتری دارد.

هزینه سرور TURN چقدر است؟

هزینه سرور TURN به ارائه‌دهنده و حجم ترافیک بستگی دارد. Twilio حدود $۰.۰۰۵–۰.۰۱ به ازای هر گیگابایت ترافیک عبوری از TURN دریافت می‌کند. Xirsys از $۰.۰۰۷ به ازای هر گیگابایت. استقرار مستقل coturn نیازمند سروری با پهنای باند حداقل ۱۰۰ مگابیت بر ثانیه است که هزینه آن به ارائه‌دهنده هاستینگ بستگی دارد.

چگونه سرور TURN خود را پیکربندی کنیم؟

سرور TURN شخصی با استفاده از coturn (متن‌باز) پیکربندی می‌شود. نصب شامل پیکربندی پورت‌ها، احراز هویت (shared secret)، گواهی‌های TLS و فایروال است. فایل پیکربندی پایه شامل پارامترهای listening-port, realm, user و fingerprint است. پس از پیکربندی، سرور در iceServers در WebRTC با پیشوند turn: یا turns: برای TLS مشخص می‌شود.

خلاصه

  • TURN Server — سرور رله برای رله ترافیک رسانه‌ای در صورت عدم امکان اتصال مستقیم P2P بین همتاها.
  • اصل کار — کلاینت یک تخصیص روی سرور TURN ایجاد می‌کند، آدرس حمل‌ونقل رله‌شده را دریافت می‌کند و از آن برای ارسال و دریافت داده از طریق سرور واسطه استفاده می‌کند.
  • نقش در ICE — TURN به عنوان آخرین راه‌حل در فرآیند ICE فعال می‌شود زمانی که کاندیداهای host و srflx اتصال را فراهم نکرده‌اند.
  • محدودیت‌ها — تأخیر اضافی (۵۰–۲۰۰ میلی‌ثانیه)، مصرف پهنای باند سرور (۳–۵ مگابیت بر ثانیه برای هر تماس HD)، هزینه‌های ترافیک.
  • مقایسه با STUN — TURN با هر نوع NAT کار می‌کند اما گران‌تر و کندتر است. STUN برای ۸۰–۸۵٪ اتصالات ترجیح داده می‌شود.
  • ابزارها — coturn (متن‌باز خودمیزبان)، Twilio NTS، Xirsys، Metered.ca برای استفاده تجاری از سرور TURN.
  • توصیه — از TURN فقط به عنوان fallback در صورت شکست STUN استفاده کنید، درصد اتصالات TURN را نظارت کرده و در صورت نیاز بهینه‌سازی کنید.

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه

همچنین بخوانید