เชิงเทคนิค · คำตอบพร้อมแหล่งอ้างอิง

SMTP ใช้ TCP หรือ UDP: วิเคราะห์โปรโตคอลทางเทคนิค

SMTP เป็นโปรโตคอล TCP อาศัย Transmission Control Protocol เพื่อให้ข้อความอีเมลถูกส่งอย่างน่าเชื่อถือ ตามลำดับที่ถูกต้อง และไม่มีข้อมูลสูญหาย ซึ่งสำคัญสำหรับโปรโตคอลสื่อสารที่ทุกไบต์ของข้อความต้องมาถึงครบถ้วน

ทำไม SMTP ต้องใช้ TCP

SMTP ต้องใช้โปรโตคอลแบบเชื่อมต่อ (connection-oriented) เพราะการส่งอีเมลรับการสูญหายของแพ็กเก็ตไม่ได้ TCP มี three-way handshake เพื่อสร้างเซสชัน หมายเลขลำดับเพื่อเรียงแพ็กเก็ต และ acknowledgment เพื่อยืนยันการรับ หากแพ็กเก็ตหายระหว่างส่ง TCP จะร้องขอส่งซ้ำโดยอัตโนมัติ ส่วน UDP เป็นแบบไม่เชื่อมต่อและไม่รับประกันการส่งถึง จึงไม่เหมาะกับลักษณะคำสั่ง-ตอบกลับที่มีโครงสร้างของเซสชัน SMTP

กระบวนการ SMTP Handshake

การเชื่อมต่อ TCP ทำให้ SMTP โต้ตอบกันเป็นบทสนทนาได้ หลังเปิด TCP socket เซิร์ฟเวอร์ส่งคำทักทาย 220 จากนั้นไคลเอนต์ส่ง EHLO หรือ HELO เพื่อเริ่มเซสชัน การโต้ตอบแบบมีสถานะนี้ดำเนินต่อไปผ่านคำสั่ง MAIL FROM และ RCPT TO หากไม่มีสตรีมที่เชื่อถือได้จาก TCP เซิร์ฟเวอร์และไคลเอนต์จะซิงก์การเปลี่ยนสถานะเหล่านี้หรือจัดการรหัสข้อผิดพลาดอย่างมีประสิทธิภาพไม่ได้

พอร์ต TCP มาตรฐานของ SMTP

SMTP ทำงานบนพอร์ต TCP ที่ลงทะเบียนไว้หลายพอร์ตตามกรณีใช้งาน พอร์ต 25 ใช้ relay ระหว่างเซิร์ฟเวอร์ พอร์ต 587 เป็นมาตรฐานสำหรับการส่งจากไคลเอนต์โดยใช้ STARTTLS พอร์ต 465 ใช้สำหรับ implicit TLS การกำหนดทั้งหมดนี้จัดการโดย IANA และใช้ชั้นการขนส่ง TCP โดยเฉพาะ เพื่อรักษาความสมบูรณ์ของเซสชันระหว่างส่งเฮดเดอร์และเนื้อหาข้อความ

ความปลอดภัยและชั้นการขนส่ง

การใช้งาน SMTP สมัยใหม่ห่อสตรีม TCP ไว้ใน TLS เพื่อเข้ารหัส ทำได้ทั้งผ่านคำสั่ง STARTTLS บนพอร์ต 587 หรือ implicit TLS บนพอร์ต 465 เนื่องจาก TLS เองต้องมีชั้นการขนส่งที่เชื่อถือได้เพื่อทำ handshake และแลกเปลี่ยนคีย์ การเชื่อมต่อ TCP เบื้องล่างจึงเป็นสิ่งจำเป็น นักพัฒนาใช้เครื่องมือฟรีของ SendHQ ตรวจสอบการตั้งค่า DNS สำหรับการเชื่อมต่อที่ปลอดภัยเหล่านี้ได้

เปรียบเทียบกับโปรโตคอล UDP

แม้ SMTP ใช้ TCP แต่บริการอื่นที่เกี่ยวกับอีเมลอย่าง DNS ใช้ UDP สำหรับการค้นหาที่รวดเร็วและมีภาระต่ำ อย่างไรก็ตาม เมื่อ DNS resolve IP ของเมลเซิร์ฟเวอร์ผ่าน UDP แล้ว การส่งเมลจริงจะเปลี่ยนไปใช้ TCP แนวทางแบบผสมนี้ให้ทั้งการค้นหาที่เร็วและการส่งที่เชื่อถือได้ UDP ใช้เพื่อความเร็วและประสิทธิภาพ ส่วน TCP ใช้เพื่อความถูกต้องและการจัดการเซสชัน

คำถามที่ทีมมักถาม

SMTP ทำงานบน UDP ได้หรือไม่

ไม่ ข้อกำหนดของ SMTP ต้องการสตรีมข้อมูลที่เชื่อถือได้และเรียงลำดับ ซึ่งมีเพียง TCP เท่านั้นที่ให้ได้ UDP ไม่รองรับการจัดการเซสชันที่จำเป็น

ควรใช้พอร์ต TCP ใดส่งอีเมลดีที่สุด

พอร์ต 587 เป็นพอร์ตที่แนะนำสำหรับการส่งอีเมล เพราะรองรับ STARTTLS เพื่อการส่งที่ปลอดภัย

TLS เปลี่ยนโปรโตคอลการขนส่งหรือไม่

ไม่ TLS เป็นชั้นเข้ารหัสที่อยู่บน TCP เข้ารหัสข้อมูลแต่ยังพึ่ง TCP ในการขนส่งแพ็กเก็ตจริง

ทำไม DNS ใช้ UDP ทั้งที่ SMTP ใช้ TCP

DNS ใช้ UDP สำหรับคำค้นขนาดเล็กที่รวดเร็วเพื่อลดความหน่วง ส่วน SMTP ใช้ TCP เพราะแพ็กเก็ตเดียวที่สูญหายอาจทำให้ข้อความอีเมลทั้งฉบับเสียหาย

แหล่งข้อมูลหลัก