فنی · پاسخ مستند
SMTP از TCP استفاده میکند یا UDP؟ تحلیل فنی پروتکل
SMTP یک پروتکل مبتنی بر TCP است. SMTP به Transmission Control Protocol متکی است تا پیامهای ایمیل بهطور قابلاطمینان، با ترتیب درست و بدون از دست رفتن داده تحویل شوند؛ موضوعی که برای پروتکلهای ارتباطی که هر بایت پیام باید دستنخورده برسد حیاتی است.
چرا SMTP به TCP نیاز دارد
SMTP به یک پروتکل اتصالگرا نیاز دارد، چون تحویل ایمیل هیچ از دست رفتن بستهای را تحمل نمیکند. TCP برای برقراری نشست یک handshake سهمرحلهای، برای مرتبسازی بستهها شمارههای ترتیبی و برای تأیید دریافت، پیامهای acknowledgment فراهم میکند. اگر بستهای در طول انتقال از دست برود، TCP خودکار درخواست ارسال مجدد میدهد. UDP بدون اتصال است و تحویل را تضمین نمیکند و به همین دلیل برای ماهیت ساختاریافته فرمان-پاسخ در نشستهای SMTP مناسب نیست.
فرایند handshake در SMTP
اتصال TCP به SMTP امکان میدهد یک تبادل گفتوگومحور انجام دهد. پس از باز شدن سوکت TCP، سرور پیام خوشامد 220 را ارسال میکند. سپس کلاینت برای آغاز نشست EHLO یا HELO میفرستد. این تعامل حالتمند با فرمانهای MAIL FROM و RCPT TO ادامه پیدا میکند. بدون جریان داده قابلاطمینانی که TCP فراهم میکند، سرور و کلاینت نمیتوانستند این تغییر حالتها را هماهنگ کنند یا کدهای خطا را بهدرستی مدیریت کنند.
پورتهای استاندارد TCP برای SMTP
SMTP بسته به کاربرد روی چند پورت ثبتشده TCP کار میکند. پورت 25 برای relay سرور به سرور استفاده میشود. پورت 587 استاندارد ارسال از سمت کلاینت (submission) با STARTTLS است. پورت 465 برای TLS ضمنی (implicit TLS) استفاده میشود. همه این تخصیصها توسط IANA مدیریت میشوند و بهطور مشخص از لایه انتقال TCP استفاده میکنند تا یکپارچگی نشست در طول انتقال هدرها و بدنه پیام حفظ شود.
امنیت و لایه انتقال
پیادهسازیهای امروزی SMTP جریان TCP را برای رمزگذاری در TLS میپیچند. این کار یا با فرمان STARTTLS روی پورت 587 انجام میشود یا با TLS ضمنی روی پورت 465. چون خود TLS برای انجام handshake و تبادل کلید به یک لایه انتقال قابلاطمینان نیاز دارد، اتصال TCP زیربنایی الزامی است. توسعهدهندگان میتوانند با ابزارهای رایگان SendHQ تنظیمات DNS خود را برای این اتصالهای امن بررسی کنند.
مقایسه با پروتکلهای UDP
در حالی که SMTP از TCP استفاده میکند، سرویسهای دیگر مرتبط با ایمیل مانند DNS برای کوئریهای سریع و کمسربار از UDP استفاده میکنند. با این حال، پس از اینکه کوئری DNS از طریق UDP نشانی IP سرور ایمیل را resolve کرد، انتقال واقعی ایمیل به TCP منتقل میشود. این رویکرد ترکیبی امکان lookup سریع و تحویل قابلاطمینان را فراهم میکند. UDP برای سرعت و کارایی و TCP برای دقت و مدیریت نشست به کار میرود.
پرسشهایی که تیمها میپرسند
آیا SMTP ممکن است روی UDP اجرا شود؟
خیر، مشخصات SMTP به جریان داده قابلاطمینان و مرتب نیاز دارد که فقط TCP آن را فراهم میکند. UDP از مدیریت نشست لازم پشتیبانی نمیکند.
کدام پورت TCP برای ارسال ایمیل بهتر است؟
پورت 587 پورت توصیهشده برای ارسال ایمیل (submission) است، چون از STARTTLS برای انتقال امن پشتیبانی میکند.
آیا TLS پروتکل انتقال را تغییر میدهد؟
خیر، TLS یک لایه رمزنگاری است که روی TCP قرار میگیرد. دادهها را رمزگذاری میکند، اما برای انتقال واقعی بستهها همچنان به TCP متکی است.
اگر SMTP از TCP استفاده میکند، چرا DNS از UDP استفاده میکند؟
DNS برای کوئریهای کوچک و سریع از UDP استفاده میکند تا تأخیر کاهش یابد. SMTP از TCP استفاده میکند چون از دست رفتن حتی یک بسته میتواند کل پیام ایمیل را خراب کند.