Thursday, July 10, 2014

Giao thức SMTP

Posted on 12:02 AM in ,
Simple Mail Transfer Protocol (SMTP) là giao thức truyền tải e-mail qua mạng, SMTP cho phép chuyển thông điệp mail từ mail server của người gửi đến mail server của người nhận. Thông điệp mail ở định dạng ASCII 7 bit. SMTP được định nghĩa trong RFC 821, điều chỉnh trong RFC 1123 và mở rộng trong RFC 2821 với tên gọi ESMTP (Extended SMTP). SMTP sử dụng cổng 25 trên nền TCP.
Trong RFC 822 định nghĩa tiêu chuẩn của định dạng thông điệp maill, gồm 2 phần: dòng tiêu đề (header) và phần thân (body).
-    Mỗi tiêu đề có một dòng tiêu đề from,to, subject và một số dòng tiêu đề khác từ lệnh SMTP. Sau tiêu đề là một dòng trống.
-    Phần thân chứa các thông điệp định dạng ở mã ASCII. Mỗi dòng thông thông điệp được kết thúc bằng một dấu chấm.
Một hệ thống e-mail có ba thành phần chính: user agents, mail server và giao thức SMTP.
-    User agentcho phép người dùng đọc, trả lời, chuyển tiếp, lưu và soạn thông điệp mail. User agent là những phần mềm gửi mail như Microsoft’s Outlook, Apple Mail (những phần mềm này sử dụng giao diện GUI).
-    Mail server là thành phần cốt lỗi trong hạ tầng hệ thống e-mail. Khi người dùng soạn xong thông điệp thì user agent sẽ gửi thông điệp đến mail server và thông điệp được đặt trong hàng đợi (message queue), sau đó sẽ gửi đến mail server của người dùng khác và được lưu tại mailbox.
-    Giao thức SMTP đảm nhiệm việc truyền tải thông điệp từ mail server của người gửi đến mail server của người nhận. SMTP thiết lập kết nối TCP trên cổng 25.

Hình 1. Hệ thống email
Phương thức hoạt động của SMTP:
-          Để mô tả hoạt động cơ bản của giao thức SMTP một cách dễ hiểu ta xem xét một hoạt cảnh phổ biến “An gửi thông điệp cho Bình” ở hình

Hình 2. Hoạt cảnh gửi email của An và Bình

Ø  Bước 1: An khởi động useragent của mình, cung cấp địa chỉ e-mail của Bình, soạn thông điệp và chỉ thị user agent gửi mail.
Ø  Bước 2: User agent của An gửi thông điệp đến mail server của An và thông điệp được đặt trong hàng đợi.
Ø  Bước 3: SNMP client chạy trên mail server của An phát hiện ra thông điệp trong hàng đợi và tiến hành mở kết nối TCP đến SMTP server chạy trên mail server của Bình.
Ø  Bước 4: Sau khi thực hiện bắt tay chào hỏi (handshaking), SMTP client của An sẽ gửi thông điệp của An đến kết nối TCP.
Ø  Bước 5: Tại mail server của Bình, SMTP server nhận được thông điệp và lưu lại trên mailbox.
Ø  Bước 6: Khi Bình khởi động user agent của mình thì sẽ thấy mail của An trong mailbox.
-          Lưu ý: SMTP không sử dụng các mail server trung gian để gửi thư, mà chỉ sử dụng một kết nối TCP trực tiếp giữa hai mail server ngay cả khi hai mail server cách nhau một khoản cách rất xa. Ví dụ: mail server của An ở thành phố Hồ Chí Minh và mail server của Bình ởMát-xcơ-va (thủ đô của Nga) thì chỉ có các kết nối TCP trực tiếp giữa hai mail server. Khi mail server của Bình bận, thì thông điệp sẽ được lưu trong hàng đợi của mail server An và chờ đợi để gửi lại tin nhắn.
SMTP truyền thông điệp mail qua ba pha: handshaking (chào hỏi), truyền thông điệp, đóng kết nối.
-          Pha handshaking: đầu tiên, SMTP client (chạy trên mail server bên gửi) thiết lập kết nối TCP trên cổng 25 tới SMTP server (chạy trên mail server bên nhận). Nếu SMTP server gặp sự cố thì client sẽ cố gắng kết nối lại. Khi kết nối được thiết lập, SMTP server và SMTP client thực hiện một số chào hỏi, SMTP client sẽ cho biết địa chỉ email của người gửi và địa chỉ email của người nhận.
-          Pha truyền thông điệp: sau cuộc chào hỏi, SMTP client tiến hành gửi thông điệp trên đường truyền tin cậy TCP.
-          Pha đóng kết nối: Nếu client muốn gửi tiếp tục gửi thông điệp thì lặp lại quá trình trên trong cùng kết nối TCP, còn không thì chỉ thị TCP đóng kết nối
Ví dụ về hoạt cảnh của client (C) là An (với tải khoản anhutech@gmail.com) gửi thông điệp "Hi Binh”,“How are you?” từ mail server gmail.com đến mail server yahoo.com của server (S) là Bình (với tài khoản binhmoskva@yahoo.com)
S: 220 yahoo.com
C: HELO gmail.com
S: 250 Hello gmail.com, pleased to meet you
C: MAIL FROM: <anhutech@gmail.com>
S: 250 an@gmail.com... Sender ok
C: RCPT TO: <binhmoskva@yahoo.com>
S: 250 binh123@yahoo.com ... Recipient ok
C: DATA
S: 354 Enter mail, end with "." on a line by itself
C: Hi Binh
C: How are you?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 yahoo.com closing connection
Client sử dụng các lệnh: HELO (viết tắt cho HELLO), MAIL FROM, RCPT TO, DATA, và QUIT với ý nghĩa giống tên của chúng. Server trả lời cho mỗi lệnh bằng một mã số trả lời và một số (tùy chọn) giải thích bằng tiếng Anh. Mỗi thông điệp được client gửi đi bắt đầu bằng lệnh HELO gmail.com và chỉ đưa ra QUIT sau khi tất cả các thông điệp đã được gửi và server thực hiện đóng kết nối TCP

Khi cần thực hiện cuộc thoại trực tiếp đến SMTP server, client có thể thực hiện lệnh “telnet<serverName> 25”. Sau khi làm điều này client sẽ nhận được trả lời 220 của server. Client có thể thực hiện telnet đến mail server của mình hay các mail server khác.

0 comments:

Post a Comment