SMTP đợc thiết kế dựa trên mơ hình truyền thơng sau: khi ngời sử dụng (user) gửi một yêu cầu dịch vụ th tín, trớc tiên Sender-SMTP thành lập một kênh truyền thơng hai chiều tới Receiver-SMTP. Receiver-SMTP cĩ thể là đích cuối cùng hoặc là một trạm trung gian. Sau đĩ, các lệnh của SMTP đợc sinh ra từ phía Sender-SMTP và gửi tới Receiver-SMTP. Receiver-SMTP sẽ thao tác trên các lệnh đĩ và gửi trả kết quả về phía Sender-SMTP.
SMTP cung cấp cơ chế chuyển th trực tiếp từ máy chủ của ngời gửi đến máy chủ của ngời nhận khi hai máy chủ đợc kết nối trên cùng một dịch vụ truyền thơng hoặc qua một hoặc nhiều Server-SMTP chuyển tiếp khi các máy chủ nguồn và máy chủ đích khơng cùng đợc kết nối tới cùng một dịch vụ truyền thơng.
Để thực File System File System SMTP Commands / Replies Sender SMTP Sender SMTP Sender - SMTP
Mơ hình tổng quát sử dụng giao thức SMTP
Receiver SMTP Receiver SMTP Receiver - SMTP and Mail File System File System User User
hiện đợc khả năng chuyển tiếp th tín trên mạng, cần phải cung cấp tên của máy chủ cũng nh tên của hộp th (mailbox) cuối cùng cần gửi tới cho SMTP Server.
SMTP cung cấp một tập các lệnh cho phép các máy tính trên mạng cĩ thể trao đổi thực tiếp các thơng tin theo một chuẩn qui định. Nhờ vào tập lệnh này, các hệ thống th tín khác nhau cĩ thể trao đổi dữ liệu th đợc với nhau. Mỗi lệnh đều cĩ cùng chiều dài bốn kí tự, hầu hết đều cĩ tham số kèm theo.
Các lệnh sử dụng trong việc gửi/nhận th tín tuân theo một cú pháp khắt khe. Đĩ là các thơng tin phản hồi luơn ở dạng mã số kèm theo là các mơ tả về kết quả thực hiện lệnh. Các lệnh và mã phản hồi khơng phân biệt chữ hoa và chữ thờng. Điều này cĩ nghĩa là một lệnh hoặc một thơng báo phản hồi cĩ thể ở dạng in hoa, in thờng hoặc trong bất kì một kiểu kết hợp nào giữa in hoa và in thờng.
Lu ý rằng điều này là khơng đúng với tên của ”user mailbox”. Với một số máy chủ, user name là phân biệt chữ hoa, thờng và việc thực hiện các lệnh SMTP cần phải quan tâm để đảm bảo sự thực hiện đúng đắn trong trờng hợp này. Tên của máy chủ cũng khơng phân biệt chữ hoa, thờng.
Các lệnh và thơng tin phản hồi đợc xây dựng bởi các kí tự từ bộ mã ASCII. Khi dịch vụ giao vận cung cấp kênh truyền thơng 8 bit, mỗi kí tự truyền đi sẽ chỉ sử dụng 7, bit cao nhất sẽ đợc xố về 0.
Mỗi phiên giao dịch SMTP phải trải qua một số giai đoạn. Các giai đoạn đĩ đợc thực hiện thơng qua các thủ tục SMTP, kèm theo đĩ là các thơng tin phản hồi:
• Thủ tục MAIL. • Thủ tục FORWARDING. • Các thủ tục MAILING và SENDING. • Các thủ tục OPENING và CLOSING. • Các mã trả lời của lệnh SMTP. 1.5.3. Thủ tục Mail
Để bắt đầu một phiên giao dịch th tín thì cần phải thực hiện thủ tục MAIL. Nĩ bao gồm 3 bớc:
• Lệnh MAIL đợc gửi đi kèm theo là tham số về địa chỉ ngời gửi th.
• Lệnh RCPT đợc gửi đi kèm theo là tham số về địa chỉ ngời nhận th. Cĩ thể thực hiện nhiều lần lệnh này trong trờng hợp muốn gửi th cho nhiều ngời.
• Lệnh DATA đợc gửi đi để xác nhận bắt đầu gửi dữ liệu của th. Dới đây là phần chi tiết về 3 lệnh trên.
a. Lệnh MAIL FROM <reverse-path>
• Tham số: là một xâu ký tự định danh mailbox của ngời gửi th.
• Hạn chế: Chỉ cĩ thể thực hiện khi cha thực hiện chính lệnh này.
• Chi tiết: Lệnh này dùng để xác nhận ngời gửi th đồng thời thiết lập một phiên giao dịch SMTP với Receiver-SMTP (Server). Nĩ đa ra đờng dẫn <reverse- path> để sử dụng trong trờng hợp phiên giao dịch khơng thực hiện thành cơng. Ngợc lại, thơng tin về ngời gửi sẽ đợc lu lại.
250 OK
Trờng hợp cịn lại bị lỗi.
Ví dụ:
S: MAIL FROM: <Smith@Alpha.edu> R: 250 OK
b. Lệnh RCPT TO <forward-path>
• Tham số: là một xâu ký tự định danh mailbox của ngời nhận th.
• Hạn chế: Chỉ cĩ thể thực hiện khi đã định danh ngời gửi th bằng lệnh MAIL.
• Chi tiết: Lệnh này dùng để xác nhận ngời nhận th đợc chỉ định trong tham số <forward-path>. Nếu Receiver-SMTP chấp nhận thì thơng tin về ngời gửi sẽ đ- ợc lu lại. Lệnh này cĩ thể thực hiện nhiều lần để xác nhận nhiều ngời nhận th.
• Thơng tin phản hồi: 250 OK Trờng hợp cịn lại bị lỗi. Ví dụ S: RCPT TO: <Jones@Beta.gov> R: 250 OK S: rcpt to: <Green@Beta.gov> R: 550 No such user here
c. Lệnh DATA
• Tham số: khơng.
• Hạn chế: Chỉ cĩ thể thực hiện khi đã thực hiện thành cơng việc xác nhận ngời gửi và ngời nhận th.
• Chi tiết: Lệnh này dùng để xác nhận bắt đầu việc gửi nội dung th. Nếu SMTP Receiver chấp nhận, nĩ sẽ tiến hành nhận và lu trữ tất cả các dịng văn bản đợc gửi đến. Để kết thúc việc gửi dữ liệu, SMTP Sender cần gửi một dịng chỉ chứa một dấu chấm ”.”. Lu ý rằng phần dữ liệu sau lệnh DATA bao gồm tồn bộ phần header của th (nh các trờng Date, Subject, CC, From, ...) cũng nh nội dung th.
• Thơng tin phản hồi: 250 OK
Ví dụ:
S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF> S:. . . Sends body of mail message . . .
S: <CR><LF>.<CR><LF> R: 250 OK
S: QUIT
S: 221 Beta.gov Service Closing Transmission Channel
Sau đây là một ví dụ minh hoạ cho một phiên giao dịch th tín SMTP. Phần thơng tin phía Server đợc bắt đầu bằng R: và mã số, tiếp sau là thơng tin. Phần phía Client là các lệnh thực thi của SMTP bắt đầu bằng S:. Ta sẽ sử dụng dịch vụ Telnet để kích hoạt dịch vụ th tín trên cổng 25 (SMTP).
d. Ví dụ về một phiên giao dịch SMTP
R: 220 BERKELEY.ARPA Simple Mail Transfer Service Ready S: HELO USC-ISIF.ARPA
R: 250 BERKELEY.ARPA
S: MAIL FROM: <Postel@USC-ISIF.ARPA> R: 250 OK
S: RCPT TO: <fabry@BERKELEY.ARPA> R: 250 OK
S: RCPT TO: <eric@BERKELEY.ARPA>
R: 552 Recipient storage full, try again in another transaction S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF> S: Blah blah blah...
S: ...etc. etc. etc. S: .
R: 250 OK
S: MAIL FROM: <Postel@USC-ISIF.ARPA> R: 250 OK
S: RCPT TO: <eric@BERKELEY.ARPA> R: 250 OK
S: DATA
R: 354 Start mail input; end with <CRLF>.<CRLF> S: Blah blah blah...
S: ...etc. etc. etc. S: .
R: 250 OK S: QUIT
R: 221 BERKELEY.ARPA Service closing transmission channel
1.5.4. Thủ tục Forwarding
Trong một số trờng hợp địa chỉ trong tham số <forward-path> bị sai, nhng SMTP Receiver lại biết chính xác địa chỉ đích thì các thơng tin phản hồi cĩ thể đợc sử dụng để cho phép ngời gửi xác nhận lại địa chỉ đúng.
251 User not local; will forward to <forward-path>
Thơng tin phản hồi này chỉ ra rằng mailbox của ngời nhận thuộc một máy chủ (host) khác. Nh vậy, SMTP Receiver sẽ chỉ ra <forward-path> chính xác để sử dụng và nĩ sẽ chịu trách nhiệm gửi th này.
551 User not local; please try <forward-path>
Thơng tin phản hồi này chỉ ra rằng, SMTP Receiver biết đợc mailbox của ngời nhận thuộc một máy chủ khác. Nĩ sẽ đa ra địa chỉ chính xác để sử dụng nhng trong tr- ờng hợp này nĩ khơng thực hiện việc gửi th đi. Chính vì vậy, ngời gửi cần phải xác nhận lại các thơng tin cho chính xác theo thơng tin phản hồi của SMTP Receiver hoặc trả lại thơng báo lỗi cho ngời gửi ban đầu.
Sau đây là ví dụ về cách sử dụng thủ tục này: S: RCPT TO:<Postel@USC-ISI.ARPA>
R: 251 User not local;
or
S: RCPT TO:<Paul@USC-ISIB.ARPA> R: 551 User not local;
please try <Mockapetris@USC-ISIF.ARPA>
1.5.5. Các thủ tục Mailing và Sending
SMTP chủ yếu cung cấp các chức năng phát th đến mailbox của ngời sử dụng. Tuy nhiên, nĩ cũng cĩ một số các chức năng thực hiện việc chuyển th đến terminal của ngời sử dụng.
Việc phát th đến mailbox của ngời sử dụng đợc gọi là ”mailing”, cịn việc phát th đến terminal đợc gọi là ”sending”. Dịch vụ sending là phần mở rộng của một hệ thống th tín điện tử.
Cĩ ba dạng câu lệnh đợc định nghĩa để hỗ trợ cho các tùy chọn sending. Các câu lệnh này đợc dùng trong các phiên giao dịch SMTP thay thế cho câu lệnh MAIL và báo cho Receiver-SMTP biết ý nghĩa đặc biệt của phiên giao dịch này.
a. Lệnh SEND FROM <reverse-path>
• Tham số: địa chỉ terminal của ngời nhận.
• Chi tiết: Lệnh này yêu cầu dữ liệu của th đợc phân phát tới terminal của ngời sử dụng. Nếu ngời sử dụng cha kích hoạt (hoặc khơng chấp nhận kiểu giao dịch này) thì Receiver-SMTP sẽ gửi trả mã 450. Phiên giao dịch là thành cơng nếu th đợc chuyển đến terminal của ngời sử dụng.
• Thơng tin phản hồi: 450 OK
b. Lệnh SOML FROM <reverse-path>
• Tham số: địa chỉ terminal của ngời nhận.
• Chi tiết: Lệnh này (viết tắt của chữ Send Or MaiL) yêu cầu dữ liệu của th đợc phân phát tới terminal của ngời sử dụng trong trờng hợp ngời sử dụng kích hoạt (và chấp nhận kiểu giao dịch này). Trong trờng hợp ngợc lại, nghĩa là ng- ời sử dụng cha kích hoạt thì dữ liệu của th sẽ đợc chuyển đến mailbox của ngời nhận. Phiên giao dịch thành cơng nếu th đợc chuyển đến terminal của ngời sử dụng.
c. Lệnh SAML FROM <reverse-path>
• Tham số: địa chỉ terminal của ngời nhận.
• Chi tiết: Lệnh này (viết tắt của chữ Send And MaiL) yêu cầu dữ liệu của th đợc phân phát tới terminal của ngời sử dụng trong trờng hợp ngời sử dụng kích hoạt (và chấp nhận kiểu giao dịch này). Trong bất cứ trờng hợp nào thì dữ liệu của th cũng sẽ đợc chuyển đến mailbox của ngời nhận. Phiên giao dịch thành cơng nếu th đợc chuyển đến mailbox của ngời sử dụng.
1.5.6. Các thủ tục Opening và Closing
Khi một phiên giao dịch th tín đợc mở, cần phải cĩ sự trao đổi thơng tin giữa các máy chủ (host) để đảm bảo sự chính xác trong giao dịch. Cĩ hai lệnh để thực hiện việc đĩng/mở một phiên giao dịch.
a. HELO <domain>
• Tham số: tên domain của máy chủ thực hiện việc gửi th (cĩ thể khơng cĩ).
• Chi tiết: Lệnh này dùng để xác nhận domain máy chủ SMTP Sender.
• Thơng tin phản hồi: 250 <domain>
Ví dụ:
R: 220 BBN-UNIX.ARPA Simple Mail Transfer Service Ready S: HELO USC-ISIF.ARPA
R: 250 BBN-UNIX.ARPA
b. QUIT
• Tham số: khơng.
• Chi tiết: Lệnh này dùng để kết thúc phiên giao dịch SMTP.
• Thơng tin phản hồi: 250 CRLF
Ví dụ:
S: QUIT
R: 221 BBN-UNIX.ARPA Service closing transmission channel
1.5.7. Mã trả lời của các câu lệnh SMTP
Trong một phiên giao dịch SMTP, phía SMTP Sender gửi các lệnh yêu cầu cịn phía SMTP Receiver sẽ gửi trả các thơng tin phản hồi và các mã phản hồi.
Để đảm bảo tính thống nhất truyền thơng trong quá trình truyền th, đồng thời để đảm bảo phía SMTP Sender luơn biết đợc chính xác trạng thái của SMTP Receiver, mọi câu lệnh yêu cầu đều phải đợc trả lời bằng các mã thơng tin phản hồi chính xác.
Bảng Mã thơng tin phản hồi của SMTP
Mã thơng tin phản hồi Thơng tin kèm theo
500 Syntax error or Command unregconized 501 Syntax error in parameters or arguments
503 Bad sequence of command
504 Command parameter not implement
211 System status or System help reply
214 Help message
220 Simple Mail Transfer Service ready 221 Service closing transmission channel
421 Service not available, closing transmission channel
250 OK
251 User not local; will forward to <forward-path> 450 Mailbox unavailable (not found or no access) 551 User not local; please try <forward-path> 452 Insufficent system storage
553 Mailbox name not allow (mailbox syntax incorrect) 354 Start mail input, end with <CRLF>.<CRLF>
554 Transaction failed
Một mã thơng tin phản hồi là một số cĩ 3 chữ số và tiếp theo là một chuỗi văn bản mơ tả về mã đĩ. Bảng trên đây sẽ trình bày chi tiết các thơng tin phản hồi:
Truyền thơng giữa Sender-SMTP và Receiver-SMTP đợc coi nh một cuộc hội thoại, đợc điều khiển bởi Sender-SMTP. Nh vậy, Sender-SMTP đa ra một lệnh yêu cầu và Receiver- SMTP sẽ trả lại một mã thơng tin phản hồi. Sau khi Sender-SMTP đa ra lệnh yêu cầu, nĩ phải đợi thơng tin phản hồi từ Receiver-SMTP rồi mới đa ra lệnh tiếp theo.
Trong các mã thơng tin phản hồi, mã phản hồi quan trọng nhất là 220. Nĩ đặc tr- ng cho việc thực hiện thành cơng yêu cầu.
1.6. PHÂN TÍCH GIAO THệÙC POP3 (RFC 1081,1082)1.6.1. Giới thiệu 1.6.1. Giới thiệu
Giao thức POP3 cho phép một máy trạm cĩ thể truy nhập để lấy th trên máy chủ. Nĩ định nghĩa cách thức giao tiếp với POP3 Server bởi các lệnh chuẩn đợc quy định trong RFC 1081 để lấy th về.
1.6.2. Mơ hình hoạt động phiên giao dịch
Vào thời điểm bắt đầu, tiến trình phía Server bắt đầu dịch vụ POP3 bằng cách ”lắng nghe” trên cổng TCP 110. Thuật ngữ ”lắng nghe” ở đây đợc hiểu theo nghĩa là tiến trình phía Server luơn luơn tiếp nhận các thơng tin đến ở cổng dịch vụ mà nĩ cung cấp - trong trờng hợp này là cổng dịch vụ 110 - xử lý và gửi kết quả về cho tiến trình yêu cầu dịch vụ phía Client.
Khi một tiến trình phía Client muốn sử dụng dịch vụ, nĩ thiết lập một kết nối TCP tới máy chủ phía Server. Khi kết nối đợc thiết lập, POP3 Server gửi một thơng báo chấp nhận và sau đĩ tiến trình phía Client và POP3 Server cĩ thể trao đổi các lệnh cũng nh các thơng tin phản hồi cho đến khi kết nối bị hủy bỏ hoặc phiên giao dịch kết thúc.
Các lệnh trong POP3 bao gồm từ khĩa, cĩ thể theo sau là một hoặc nhiều tham số. Tất cả các lệnh đều đợc kết thúc bởi cặp ký tự CRLF. Từ khĩa và các tham số là các kí tự in đợc trong bảng mã kí tự ASCII, giữa chúng đợc phân cách bởi một kí tự dấu cách trống. Từ khĩa cĩ thể dài ba hoặc bốn kí tự, cịn các tham số cĩ thể dài tới bốn m- ơi kí tự.
Thơng tin phản hồi của POP3 bao gồm một thơng báo trạng thái và một từ khĩa cĩ thể theo sau một số thơng tin thêm. Tất cả các thơng tin phản hồi đều đợc kết thúc bởi cặp ký tự CRLF.
Cĩ hai thơng báo trạng thái là: Xác định (”+OK”) để xác nhận thành cơng và phủ định (”-ERR”) để xác nhận trong trờng hợp cĩ lỗi.
Các thơng tin phản hồi cho các lệnh thực tế là nhiều dịng. Trong những trờng hợp này, sau khi gửi dịng đầu tiên của thơng tin phản hồi và một cặp CRLF, bất cứ một dịng thêm vào nào đợc gửi thì đều phải kết thúc bằng cặp CRLF. Khi tất cả các
thơng tin phản hồi đều đã đợc gửi, một dịng cuối cùng đợc gửi, bao gồm mã kết thúc (mã thập phân 046, ”.”) và một cặp CRLF.
Nếu cĩ một dịng nào trong thơng tin phản hồi đa dịng bắt đầu với một mã ký tự kết thúc (dấu chấm ”.”), thì dịng đĩ coi nh cha đợc xử lí xong đối với thơng tin phản hồi . Vì vậy, một thơng tin phản hồi đa dịng đợc kết thúc bởi bộ năm octets là ”CRLF. CRLF”.
Một phiên giao dịch POP3 phải trải qua một số các trạng thái trong suốt thời gian tồn tại của phiên làm việc. Mỗi lần kết nối TCP đợc mở và POP3 Server gửi thơng báo chấp nhận, phiên làm việc chuyển sang trang thái AUTHORIZATION. ở trạng thái này, Client phải tự định danh của mình cho POP3 Server.
Mỗi khi Client thực hiện xong việc định danh, Server nhận đợc tài nguyên tơng ứng với hộp th của Client, nĩ sẽ chuyển sang trạng thái TRANSACTION.
Trong trạng thái này, các yêu cầu của Client đợc chuyển sang và đợc thực hiện bên phía POP3 Server. Khi Client đa ra lệnh QUIT, phiên làm việc chuyển sang trạng thái UPDATE. Trong trạng thái này, POP3 Server giải phĩng mọi tài nguyên thu đợc trong suốt trạng thái TRANSACTION và kết thúc. Đồng thời, kết nối TCP kết thúc.
Một POP3 Server cĩ thể cĩ một bộ xác định thời gian. Nếu sau một khoảng thời gian xác định trớc mà phía Client khơng cĩ tác động gì thì POP3 Server cĩ thể tự động