Tải bản đầy đủ (.pdf) (39 trang)

Đồ án web server mailing list và mail system nhằm xây dựng IM hoàn chỉnh - 2 docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (225.12 KB, 39 trang )

Quá trình cấu hình sẽ được bắt đầu bằng cách tham khảo httpd.conf và các chỉ thị
của nó. Mặc dù các file access.conf và srm.conf còn tồn tại song chúng là những file
cũ mà không được sử dụng nhiều bởi hầu hết các nhà quản trị và người sử dụng sẽ
không tìm thấy bất kỳ chỉ thị nào ở đó.
Httpd.conf chứa rất nhiều các tư liệu của chính nó, được sinh ra bởi các chỉ thị cấu
hình mặc định gửi gắm khi khởi động với Apache server. Bắt đầu bằng cách đọc các
lời chú thích để hiểu file cấu hình và làm một số thay đổi nhỏ, khởi động lại Apache
trong một cửa sổ giao tiếp với mỗi thay đổi. Nếu người sử dụng tạo ra một lỗi, nó sẽ
dễ dàng sao lưu để định dạng lần làm việc cuối cùng .
Các khác nhau của Apache trên Windows chính là:
+ Bởi vì Apache trên Windows thì đang luồng, nó không sử dụng các tiến trình
riêng biệt cho mỗi yêu cầu như là của Unix. Thay cho việc thường chỉ có 2 tiến
trình đang chạy: Một tiến trình cha và một tiến trình con để xử lý các yêu cầu. Với
tiến trình con mỗi yêu cầu được xử lý bởi một luồng riêng.Vì thế tiến trình quản lý
các chỉ thị là khác nhau:
+ Các chỉ thị mà chấp nhận các tên file như các đối số phải sử dụng các tên file kiểu
Windows thay cho các tên file Unix. Tuy nhiên, bởi vì Apache server sử dụng các
tên file kiểu Unix bên trong, phải tiến hành cắt bớt, không cắt phần sau. Các ký tự
điều khiển có thể được sử dụng, nếu bỏ qua, ký tự điều khiển với Apache khả thi sẽ
đảm nhận.
+ Apache trên Windows có khả năng nạp các mô đun ngay khi chay mà không biên
dịch lại server. Nếu Apache biên dịch bình thường, nó sẽ cài đặt một số mô đun tuỳ
chọn trong thư mục /module, để kích hoạt chúng hoặc các mô đun khác sử dụng
lệnh sau đây:
LoadModule status_module modules/mod_status.so
+ Apache cũng có thể nạp các phần mở rộng ISAPI (các dịch vụ ứng dụng Internet)
chẳng hạn các ứng dụng được sử dụng bởi Microsoft IIS và các server Windows
khác. (Chú ý: Apache không nạp các bộ lọc ISAPI).
+ Khi đang chạy CGI script, các phương thức Apache tìm kiếm các giải thích cho
script được cấu hình đang sử dụng chỉ thị ScriptInterpreterSource.
9. Apache và các dịch vụ hỗ trợ:


a) HTTPD:
Tên dòng lệnh:
httpd [ -X ] [ -R libexecdir ] [ -d serverroot ] [ -f config]
[ -C directive ] [ -c directive ] [ -D parameter ]
Mô tả:
là một chương trình HTTP server . Nó được thiết kế để chạy như một tiến trình
deamon một mình. Khi dùng đến dịch vụ này, nó sẽ tạo ra một nhóm các tiến trình
con để đáp ứng các yêu cầu. Để ngừng dịch vụ này, nó sẽ gửi một tín hiệu TERM
đến tiến trình cha. PIG của tiến trình này sẽ ghi lên một file và dưa vào file cấu
hình. HTTPD sẽ được gọi bởi Internet deamon inetd mỗi khi có một kết nối đến
dịch vụ HTTP đã được thiết lập.
Các đối số cụ thể của dòng lệnh
-R libexecdir: Tham số này chỉ có hiệu lực nếu Apache được cài đặt với tập
SHARED_CORE cho phép, nó tác động đến nhân nhị phân của Apache để thay thế
vào trong một file đối tượng chia xẻ động (DSO). File này được dò tìm trên một
đường dẫn hardcoded bên dưới ServerRoot mặc định
-d serverroot: Thiết lập giá trị ban đầu của chỉ thị ServerRoot đến serverroot. Chức
năng này có thể bị bỏ qua bởi dòng lệnh ServerRoot trong file cấu hình. Mặc định
server root là usr/local/apache.
-f : Thực thi các lệnh trong file config khi Startup. Nếu file config không bắt đầu
với a/, lúc đó nó sẽ lấy một một đường dẫn có liên quan đến ServerRoot. Mặc định
của nó là conf/httpd.conf.
-C directive: Thực hiện cấu hình các chỉ thị trước khi đọc file config.
-c directive: Thực hiện cấu hình các chỉ thị sau khi đọc file config.
-D parameter: Thiết lập một thông số cấu hình mà nó có thể sử dụng với cặp thẻ
<IfDefine> … </IfDefine> trong các file cấu hình để bỏ qua có điều kiện hoặc thực
hiện các lệnh.
b) APACHECTD:
Là một đầu vào các HTTP server. Nó được thiết kế để giúp người quản trị điều
khiển các chức năng của Apache HTTPD deamon.

Tên dòng lệnh:
apachectl command [ ]
Với các lệnh:
Start: Khởi động Apache deamon. Đưa ra một thông báo lỗi nếu chương trình đang
chạy lúc đó.
Stop: Ngừng dịch vụ Apache deamon.
Restart: Khởi động lại Apache deamon bằng cách gửi cho nó một SIGHUP. Lệnh
này tự động kiểm tra các file cấu hình qua văn bản cấu hình trước khi bắt đầu khởi
động lại để chắc chắn rằng Apache vẫn còn đang hiện diện trong máy.
Fullstatus: Hiển thị đầy đủ các báo cáo trạng thái từ mod_status. Để lệnh này được
thi hành, cần phải cho phép mod_status trên server và một trình duyệt text_based
chẳng hạn như Lynx có sẵn trong hệ thống. URL sử dụng nó để truy cập bản báo
cáo trạng thái có thể được thiết lập bằng giá trị STATUSURL có sẵn trong script.
Status: Hiển thị ngắn gọn bảng trạng thái giống như chức năng fullstatus trừ phi
danh sách các yêu cầu phục vụ thời bị bỏ quên.
Configtest: Chạy một đoạn văn bản các cụ pháp của file cấu hình. Nó phân tích các
file cấu hình và các bảng Syntax Ok hoặc thông tin chi tiết về các lỗi cú pháp đặt
biệt.
Help: Hiển thị các thông báo lỗi được sắp xếp.
c) APXS
Tên dòng lệnh:
apxs -g [ -S variable=value ] -n name
apxs -q [ -S variable=value ] query
apxs -i [ -S variable=value ] [ -n name ] [ -a ] [ -A ] dsofile
apxs -e [ -S variable=value ] [ -n name ] [ -a ] [ -A ] dsofile

Mô tả:
Là một công cụ để xây dựng và các đặt các mô đun mở rộng cho Apache HTTP
server. Được thực hiện bằng cách cài đặt một DSO từ một hay nhiều nguồn hoặc
đối tượng file mà sau đó nó có thể nạp vào Apache trong thời gian chương trình

đang chạy qua chỉ thị LoadModule từ mod_so.
Để sử dụng kỹ thuật mở rộng này, máy tính của người sử dụng phải hỗ trợ DSO và
Apache HTTPD nhị phân phải được xây dựng với mô đun mod_so. Công cụ apxs sẽ
tự động nhắc nhở nếu là các trường hợp ngược lại. Ta cần phải kiểm tra việc này
bằng dòng lệnh:
$ httpd -l
mô đun mod_so phải có trong danh sách được hiển thị. Nếu các yêu cầu này được
thỏa mãn, thì có thể dễ dàng mở rộng các chức năng của Apache server bằng cách
cài đặt các mô đun của mình với kỹ thuật DSO bằng công cụ apxs này.
Ví dụ:
$ apxs -i -a -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
cp mod_foo.so /path/to/apache/libexec/mod_foo.so
chmod 755 /path/to/apache/libexec/mod_foo.so
[activating module `foo' in /path/to/apache/etc/httpd.conf]
$ apachectl restart
/path/to/apache/sbin/apachectl restart: httpd not running, trying to start
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): loaded module foo_module
/path/to/apache/sbin/apachectl restart: httpd started
Các đối số File có thể là bất kỳ một file nguồn c (.c), file đối tượng (.o) hoặc ngay
cả một thư việc lưu trữ (.a). Công cụ apxs tự động công nhận các phần mở rộng này
và tử động sử dụng các file nguồn C cho việc biên dịch trong khi nó chỉ sử dụng các
file đối tượng và lưu trữ cho giai đoạn liên kết. Nhưng khi sử dụng nhiều đối tượng
trước biên dịch , phải chắc chắn rằng chứng được liên kết cho PIC để có thể sử
dụng chúng cho một DSO. Cho ví dụ với GCC, người sử dụng luôn chỉ phải sử
dụng –fpic. Đối với các các biên dịch C khác yêu cầu phải tham khảo tài liệu hướng
dẫn của nó hoặc chờ đợi các cờ apxs, để biên dịch các file đối tượng.
Các đối số cụ thể của dòng lệnh:
- n name: Thiết lập tên mô đun cho chức năng –i (cài đặt) và –g (tạo khuôn mẫu).

Sử dụng nó để chỉ ra tên mô đun. Chức năng –g là bắt buộc, chức năng –I thì có tác
dụng khiến công cụ apxs cố gắng xác định tên từ nguồn hoặc ít nhất cũng đoán
được từ tên file.
-q : Thực hiện ruy vấn cho apxs về các cài đặt nào đó. Tham số truy vấn có thể là
một hoặc nhiều các giá trị:
CC TARGET
CFLAGS SBINDIR
CFLAGS_SHLIB INCLUDEDIR
LD_SHLIB LIBEXECDIR
LDFLAGS_SHLIB SYSCONFDIR
LIBS_SHLIB PREFIX
Sử dụng các chức năng này để hướng dẫn xác định các thông số cài đặt:
INC = I ‘apxs –q INCLUDEDIR’
bên trong các Makefile nếu cần hướng dẫn các truy cập đến các file tiêu đề của
Apache.
-S variable = value: Chức năng này thay đổi các cài đặt apx đi kèm với các giá trị
đặc biệt theo sau như:
• Chức năng tạo ra một khuôn mẫu:
-q: chức năng tạo ra một thư mục con và 2 file trong đó: Một file nguồn ví dụ mô
đun tên là mod_name.c mà nó có thể sử dụng như một khuôn mẫu cho việc tạo các
mô đun của chính người sử dụng hoặc như một quá trình khởi động nhanh cho việc
chạy các kỹ thuật apxs. Và một mẫu thư Makefile với mục đích là dễ tạo và cài đặt
các mô đun này.
• Chức năng biên dịch DSO:
-c : Chức năng này chỉ ra thao tác biên dịch. Đầu tiên nó biên dịch các file nguồn C
(.c) của files vào trong các file đối tượng tương ứng (.o) và sau đó cài đặt một DSO
vào trong dsofile bằng cách liên kết các file đối tượng này cùng với các file đối
tượng còn lại (.o và .a) của files.
-o dsofile: Chỉ ra tên file của file DSO đã tạo. Nếu không có sự chỉ định và tên file
không thể đoán được từ bảng liệt kê các file, tên dự phòng mod_unknow.so được

sử dụng.
• Chức năng cài đặt và định dạng DSO:
-i : Chức năng này để chỉ thao tác cài đặt và cài đặt một hoặc nhiều hơn các DSO
vào trong thư mục libexec của server.
-a : Chức năng này để chỉ thao tác kích hoạt đến mô đun bằng cách tự động thêm
vào một dòng LoadModule đến file cấu hình httpd.conf của Apache hoặc cho phép
nó thực thi nếu đã tồn tại.
-A :Chức năng này cũng giống như –a nhưng nó tạo một chỉ thị LoadModule được
đặt thêm vào một dấu (#), có nghĩa là mô đun chỉ cho phép cho các thi hành ngay
sau đó còn lúc đầu thì bị cấm.
-e : Chức năng này dành cho thao tác hiệu chỉnh, có thể sử dụng kèm với chức năng
–a và –A, cũng giống như chức năng –I: Thao tác hiệu chỉnh file cấu hình
httpd.conf của Apache mà không cố găng cài đặt các mô đun.
Ví dụ:
Giả sử người sử dụng đã có sẵn một mô đun Apache tên là mod_foo.c mà nó sẽ mở
rộng chức năng server của Apache. Để làm việc đó, trước hết cần phải biên dịch
một nguồn C vào trong một DSO phù hợp cho việc nạp vào trong Apache server.
Có thể sử dụng lệnh sau:
$ apxs -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
$ _
Sau đó tiến hành cập nhật cấu hình Apache bằng cách chắc chắn rằng một chỉ thị
LoadModule được đưa ra để nạp DSO này. Để đơn giản bước này, apxs cung cấp
một cách tự động cách cài đặt DSO vào trong thư mục libexec và cập nhật file
httpd.conf.
Bằng cách sử dụng các lệnh:
$ apxs -i -a mod_foo.c
cp mod_foo.so /path/to/apache/libexec/mod_foo.so
chmod 755 /path/to/apache/libexec/mod_foo.so

[activating module `foo' in /path/to/apache/etc/httpd.conf]
$ _
Cách này là một dòng lệnh có tên:
LoadModule foo_module libexec/mod_foo.so
được thêm vào để cấu hình file nếu vẫn chưa được đưa ra. Nếu muốn cấm thao tác
này sử dụng thêm vào chức năng –A.
$ apxs -i -A mod_foo.c
Để kiểm tra nhanh apxs, người sử dụng tạo ra một mẫu ví dụ mô đun Apache cùng
với một thư từ Makefile bằng cách:
$ apxs -g -n foo
Creating [DIR] foo
Creating [FILE] foo/Makefile
Creating [FILE] foo/mod_foo.c
$ _
Sau đó có thể biên dịch ngay mô đun ví dụ này vào một DSO và nạp nó lên Apache
server:
$ cd foo
$ make all reload
apxs -c mod_foo.c
gcc -fpic -DSHARED_MODULE -I/path/to/apache/include -c mod_foo.c
ld -Bshareable -o mod_foo.so mod_foo.o
apxs -i -a -n "foo" mod_foo.so
cp mod_foo.so /path/to/apache/libexec/mod_foo.so
chmod 755 /path/to/apache/libexec/mod_foo.so
[activating module `foo' in /path/to/apache/etc/httpd.conf]
apachectl restart
/path/to/apache/sbin/apachectl restart: httpd không chạy,cố gắêng khởi động
[Tue Mar 31 11:27:55 1998] [debug] mod_so.c(303): nạp foo_module
/path/to/apache/sbin/apachectl restart: httpd khởi động
$ _

Người sử dụng có thể sử dụng apxs để biên dịch các mô đun phức tạp bên ngoài cây
nguồn Apache, cũng như PHP bởi vì apxs tự động chấp nhận nguồn C và các file
đối tượng.
10. Biên dịch Apache trên Windows:
Để biên dịch Apache đòi hỏi Microsoft Visual C++ 5.0 hoặc 6.0 phải được cài đặt
sẵn sàng. Nó có thể được cài đặt với các công cụ dòng lệnh hoặc với môi trường
Viual Studio. Tham khảo sách hướng dẫn C++ để xác định cách cài đặt chúng. Đặc
biệt nhất là nhận thấy file vcvars32.bat từ thư mục Program
Files/DevStudio/VC/bin và và file setenv.bat từ Platform SDK được yêu cầu để
chuẩn bị các công cụ dòng lệnh cho việc sử dụng dòng lệnh. Để cài đặt Apache với
file Makefile.win hoặc dự án Install.Bin trong Visual Studio IDE, tiện ích awk cũng
được yêu cầu.
Đầu tiên bản phải cài đặt awk.exe ở nơi nó có thể được tìm thấy trong đường dẫn và
môi trường DevStudio nếu dự định sử dụng IDE, có nhiều phiên bản của awk sẵn có
trên Windows. Cách dễ nhất là cài đặt bằng cái có sẵn được tải xuống từ
và nên lưu nó với tên awk.exe
hơn là awk95.exe.
Sau đó bung gói Apache đưa vào trong một thư mục thích hợp, mở cửa sổ dòng
lệnh và thay đổi thư mục con src của Apache. Các tài liệu chính cung cấp cho các
file tạo Apache được chứa trong file Makefile.win. Để biên dịch Apache trên
Windows chỉ cần sử dụng các dòng lệnh:
nmake /f Makefile.win _apacher (release build)
nmake /f Makefile.win _apached (debug build)
Nếu được một thông báo lỗi kiểu như "the name specified is not recognized " thì
phải chạy file vevas32.bat trước: bằng dòng lệnh sau:
"C:\Program Files\DevStudio\VC\Bin\VCVARS32.BAT"
(cần phải sửa đổi dòng lệnh này nếu VC được cài ở nơi khác)
Sau đó chạy nmake một lần nữa.
Apache cũng có thể được biên dịch với môi trường Visual Studio development của
VC++. Để đơn giản tiến trình này một vùng làm việc Visual Studio, Apachedsw

(được cung cấp trong thư mục src) đưa ra danh sách lối vào của các dự án
working.dsb được yêu cầu để hoàn thành Apache (binary release). Nó cung cấp các
phần phụ thuộc giữa các tiến trình. Nó bao gồm cả các phần phụ thuộc giữa các dự
án để đảm bảo rằng chúng được cài đặt theo một trật tự thích hợp. InstallBin là một
dự án cao cấp mà nó sẽ cài đặt tất cả các dự án, và cài đặt các file biên dịch vào nơi
thích hợp của nó.
Các nhân dự án .dsp được cài đặt bởi Apache.dsw và makefile.win là:
os\win32\ApacheOS.dsp
os\win32\Win9xConHook.dsp
regex\regex.dsp
ap\ap.dsp
lib\expat-lite\xmltok.dsp
lib\expat-lite\xmlparse.dsp yêu cầu xmltok
lib\sdbm.dsp
main\gen_uri_delims.dsp
main\gen_test_char.dsp
ApacheCore.dsp yêu cầu tất cả các file ở trên
Apache.dsp yêu cầu ApacheCore
Trong phần thêm vào, thư mục con os/win32 chứa các file dự án cho các mô đun
chức năng, tất cả chúng đều yêu cầu ApacheCore.
os\win32\mod_auth_anon.dsp
os\win32\mod_auth_dbm.dsp cũng yêu cầu sdbm
os\win32\mod_auth_digest.dsp
os\win32\mod_cern_meta.dsp
os\win32\mod_digest.dsp
os\win32\mod_expires.dsp
os\win32\mod_headers.dsp
os\win32\mod_info.dsp
os\win32\mod_mime_magic.dsp
os\win32\mod_proxy.dsp

os\win32\mod_rewrite.dsp
os\win32\mod_speling.dsp
os\win32\mod_status.dsp
os\win32\mod_unique_id.dsp
os\win32\mod_usertrack.dsp
os\win32\mod_vhost_alias.dsp
Thư mục support chứa các file dự án cho các chương trình được thêm vào mà nó
không nằm trong phần Apache đang chạy nhưng nó được sử dụng bởi người quản
trị để duy trì password và các file log.
support\htdigest.dsp
support\htpasswd.dsp
support\logresolve.dsp
support\rotatelogs.dsp
Một khi Apache đã biên dịch nó cần được cài đặt trong thư mục gốc server của nó,
mặc định là /Apache trên đĩa cứng đang sử dụng.
Để tự động cài đặt các file vào trong thư mục c:/ServerRoot, sử dụng lệnh nmake:
nmake /f Makefile.win installr INSTDIR=c:\ServerRoot (for release build)
nmake /f Makefile.win installd INSTDIR=c:\ServerRoot (for debug build)
Đối số c:\ServerRoot để cho INTSDIR nhận các thư mục cài đặt (nó có thể được bỏ
qua nếu Apache được cài đặt trong thư mục \Apache)
Quá trình cài đặt sẽ diễn ra như sau:
c:\ServerRoot\Apache.exe – Chương trình Apache
c:\ServerRoot\ApacheCore.dll - Apache runtime [shared libary]
c:\ServerRoot\Win9xConHook.dll - Win9x console fixups [shared library]
c:\ServerRoot\xmlparse.dll – phân tích cú pháp XML [shared library]
c:\ServerRoot\xmltok.dll - XML token engine [shared library]
c:\ServerRoot\bin\*.exe – Các chương trình quản trị
c:\ServerRoot\cgi-bin – Ví dụ CGI scripts
c:\ServerRoot\conf – Thư mục chứa các file cấu hình.
c:\ServerRoot\icons - Icons for FancyIndexing

c:\ServerRoot\include\*.h – Các file header củaApache
c:\ServerRoot\htdocs - Site Welcome index.html
c:\ServerRoot\htdocs\manual – Tài liệu Apache.
c:\ServerRoot\lib – Các file tài liệu động.
c:\ServerRoot\libexec – Thư viện liên kết động.
c:\ServerRoot\logs – Thư mục rỗng logging.
c:\ServerRoot\modules\mod_*.dll – Các mô đun nạp Apache.
CHƯƠNG II CÁC NGHI THỨC TRUYỀN NHẬN
(Mail System) đòi hỏi hình thành các chuẩn về Mail. Điều này giúp cho việc gởi
nhận các message được đảm bảo, làm cho những người ở các nơi khác nhau có thể
trao đổi thông tin cho nhau.
Có 2 chuẩn về Mail quan trọng nhất và được sử dụng nhiều nhất từ trước đến
nay là X.400 và SMTP (Simple Mail Transfer Protocol). SMTP thường đi kèm với
chuẩn POP3 và do hạn chế của SMTP mà ngày nay người ta dùng chuẩn mở rộng
của nó là ESMTP (Extended SMTP). Mục đích chính của X.400 là cho phép các
mail có thể được truyền nhận thông qua các loại mạng khác nhau bất chấp cấu hình
phần cứng, hệ điều hành mạng , giao thức truyền dẫn được dùng. Còn mục đích của
chuẩn SMTP miêu tả cách điều khiển các message trên mạng Internet. Điều quan
trọng của chuẩn SMTP là giả định máy nhận phải dùng giao thức SMTP gởi Mail
cho 1 Server luôn luôn hoạt động. Sau đó, người nhận sẽ đến lấy Mail của họ từ
Server khi nào họ muốn dùng giao thức POP (Post Office Protocol), ngày nay POP
được cải tiến thành POP3 (Post Officce Protocol vertion 3). Các giao thức Mail
thông dụng : chuẩn X.400, chuẩn MAIP, SMTP (ESMTP), POP3 . Ở đây chỉ trình
bày chi tiết về POP3 và SMTP.
PHẦN 1 GIAO THỨC SMTP (SIMPLE MAIL TRANSFER PROTOCOL )
Bộ phận chính của hệ thống Internet Mail chính là các MTA ( Message Transfer
Agent), các MTA giữ 1 vai trò quan trọng trong việc chuyển giao email. Ví dụ sau
khi một người sử dụng gửi một bức mail tới hàng đợi message, MTA sẽ lấy đó và
chuyển nó tới một MTA khác. Quá trình đó sẽ tiếp tục tiếp diễn cho đến khi
message đến được nơi nhận. Để có thể liên lạc với các MTA thông qua kết nối TCP

các MTA của hệ thống Internet Mail có thể sử dụng nhiều nghi thức khác nhau để
chuyển giao các thông tin (X400,ESMTP, ), Nhưng ở đây ta chỉ xét nghi thức
SMTP. Đây là một nghi thức cho phép chuyển mail từ điểm này sang điểm khác
cho đến đích trên mạng Internet. Nó được cấu tạo bởi tập các câu lệnh để Client có
thể yêu cầu Sever thực hiện một số tác vụ và tập các câu trả lời để Server hồi đáp lại
cho Client về kết quả thực hiện các tác vụ đó. Một chương trình muốn gởi được
mail thì nó phải biết địa chỉ của một SMTP server. Server này có nhiệm vụ chuyển
mail đến nơi cần thiết.
I- GIỚI THIỆU
Một đặc trưng quan trọng của SMTP là khả năng chia ca Mail qua môi trường dịch
vụ giao chuyển, một dịch vụ giao chuyển cung cấp một môi trường truyền thông
liên quá trình (Interprocess Communication Environment –IPCE ). Một môi trường
truyền thông liên quá trình có thể bao gồm một Network, vài Network, hay một tập
hợp con của Network. Điều đó quan trọng cho việc thực hiện hệ thống giao chuyển
(hay các IPCE) one-to-one với Network, một quá trình có thể giao tiếp với một quá
trình khác thông qua việc nhận biết IPCE. Mail là ứng dụng hay là cách dùng của
giao tiếp liên quá trình, Mail có thể giao tiếp giữa các quá trình trong những IPCE
khác bằng cách chia ca thông qua một quá trình được kết nối đến hai (hay nhiều )
IPCE. Chi tiết hơn Mail có thể chia ca giữa những Host trên hệ thống giao chuyển
khác nhau bằng một Host trên cả hai hệ thống chuyển giao.
II- MÔ HÌNH SMTP:
SMTP được thiết kế dựa trên mô hình giao tiếp sau: như kết quả của một yêu cầu
Mail của user . Sender- SMTP thiết lập một kênh hai đường vận chuyển đến một
receiver- SMTP . Receiver- SMTP có thể là đích đến cuối cùng hay một trung gian.
Những lệnh SMTP được sinh ra bởi Sender-SMTP gửi đến Receiver- SMTP.
Những reply SMTP được gửi từ Receiver- SMTP đến Sender- SMTP trong sự đáp
ứng cho những lệnh đó.
Khi một kênh giao chuyển được thiết lập Sender-SMTP gửi đi 1 lệnh Mail biểu thị
cho người gửi của mail đó. Nếu Receiver-SMTP có thể chấp nhận mail, nó trả lời
với một OK reply. Sau đó Sender-SMTP gửi một lệnh RCPT nhận diện Receiver

mail nếu Receiver-SMTP có thể chấp nhận mail nó trả lời với 1 OK reply nếu
không nó sẽ lời với 1 reply bác bỏ receiver đó (nhưng không phải toàn bộ sự giao
dịch đó). Sender- SMTP và Receiver- SMTP có thể điều đình với vài recipient, khi
những recipient đã được dàn xếp Sender-SMTP gửi mail data kết thúc với một
chuỗi đặc biệt nếu receiver xử lý mail data thành công nó trả lời với 1 OK reply.
Cuộc hội thoại một cách chủ ý lock –step (one-at-a-time).
Sơ đồ trên là mô hình cho cách dùng SMTP.
SMTP cung cấp những cơ chế giao chuyển Mail một cách trực tiếp từ Host của user
gửi đến host của user nhận khi cả hai host được kết nối đến cùng dịch vụ giao
chuyển hay qua nhiều SMTP-Sever tiếp vận khi host xuất phát hay đích đến không
được kết nối đến cùng dịch vụ chuyển giao. Để có thể cung cấp khả năng tiếp vận
SMTP-Sever phải được cung cấp tên của host đến cùng chẳng hạn như hạn của
mailhost đến .
Đối số của lệnh mail là 1 reverse-path nó đặc tả mail đó từ đâu đến; đối số cho
RCPT là 1 Forward-path nó đặc tả mail đó đi đến đâu. Forward-path là một lộ trình
nguồn, reverse-path là một lộ trình trở về (nó có thể được dùng để trả về một
message cho người gửi khi xảy ra lỗi với 1 message được tiếp nhận).
Khi cùng một message được gửi cho nhiều recipient SMTP khuyến khích chuyển
giao chỉ một bản sao của data cho tất cả các Receiver ở cùng một host đích.
Những command và reply mail có những cú pháp khắc khe. Những reply cũng có
một mã số. Trong những thí dụ theo sau sẽ xuất hiện những lệnh (commands) và
những trả lời (replies) , một danh sách các lệnh và reply hoàn chỉnh trong phần 4.
Các command và reply không phân biệt kiểu chữ hoa hay thường. Lưu ý, điều này
không đúng với tên của User mailbox. Cho một số host tên của user có phân biệt
kiểu chữ, SMTP phải thi hành đầy đủ việc nhận kiểu chữ và giữ gìn kiểu chữ của
những user name như chúng đã xuất hiện trong những đối số của mailbox. Host
names không phân biệt kiểu chữ.
Các command và reply là những ký tự được tạo ra từ tập ký tự ASCII{1}, khi dịch
vụ vận chuyển cung cấp một kênh chuyển giao 8 bit (octet). Mỗi một ký tự 7 bit
được truyền đúng bằng cách chuyển nó về hệ 8 (octet) với bit có thứ tự cao nhất bị

xóa về 0.
Khi đặc tả cấu trúc thông thường của command và reply, một đối số (hay
một ký hiệu đặc biệt ) sẽ được biểu thị bằng một biến meta-linguistic (hay một hằng
số), ví dụ như : “<string>”, hay “<reverse-path>”. Ở đây dấu ngoặc nhọn chỉ định
chúng là những biến meta-linguistic. Tuy nhiên các đối số thì dùng dấu ngoặc nhọn
một cách literal. Ví dụ như, một reverse-path thực được bao trong dấu ngoặc nhọn
như, “<>” là một trường hợp của <reverse-path> (dấu
ngoặc nhọn được giao chuyển trong command và reply là mã thực của nó).
III. MAIL:
1- Khái quát :
Có 3 bước cho sự giao dịch SMTP mail. Giao dịch được bắt đầu với yêu cầu
Mail mang sự nhận diện người gửi, tiếp theo sau là một chuỗi của một hay nhiều
lệnh RCPT trao những thông tin của receiver, sau đó một lệnh DATA cho mail
data.Và cuối cùng là phần chỉ định kết thúc mail data xác nhận giao dịch đó.
Bước đầu tiên trong thủ tục là lệnh MAIL <reverse-path> chứa mailbox nguồn:
MAIL <SP> FROM : <reverse-path> <CRLF>
Lệnh này báo cho receiver biết một giao dịch mail mới sẽ bắt đầu và để reset tất cả
các bảng trạng thái và các buffer của nó bao gồm tất cả recipient hay mail data. Nó
phát ra reverse-path có thể được dùng để báo lỗi. Nếu được chấp nhận receiver-
SMTP trả về một reply 250 OK.
<Reverse-path> có thể chứa nhiều hơn một mailbox.<Reverse-path> là một lộ trình
nguồn trở về liệt kê các host và mailbox nguồn. Host đầu tiên trong reverse-path sẽ
là host gửi lệnh này.
Bước thứ hai trong thủ tục này là lệnh RCPT :
RCPT <SP> To : <forward-path> <CRLF>
Lệnh này phát đi một forward-path nhận diện recipient. Nếu được chấp nhận
receiver-SMTP trả về một reply 250 OK. Và lưu lại forward-path. Nếu recipient
không nhận biết thì receiver trả về reply 550 Failure. Bước thứ hai của thủ tục này
có thể lặp lại nhiều lần.
Forward-path có thể chứa nhiều hơn một mailbox. Forward-path là lộ trình nguồn

liệt kê các host và mailbox đích. Host đầu tiên trong <forword-path> sẽ là host nhận
lệnh này.
Bước thứ ba trong thủ tục là lệnh DATA
DATA <CRLF>
Nếu chấp nhận receiver-SMTP trả về một reply 354 và coi tất cả các dòng nối tiếp
đó là message text. Khi văn bản cuối cùng được nhận và lưu trữ receiver-SMTP gửi
một reply 250 OK.
Kể từ khi mail được gửi trên kênh chuyển giao, điểm kết thúc của mail phải được
chỉ định để hội thoại command và reply có thể bắt đầu trở lại. SMTP chỉ định kết
thúc của mail bằng cách gửi một dòng chứa chỉ một dấu chấm.
Chú ý rằng mail data bao gồm những mục (item) memo header chẳng hạn như
Subject, To, Cc, From.
Phần chỉ định kết thúc của mail data cũng xác nhận sự giao dịch mail và báo cho
receiver-SMTP biết để xử lý việc lưu trữ recipient và mail data ngay lúc đó. Nếu
được chấp nhận receiver-SMTP trả về một reply 250 OK. Lệnh DATA sẽ chỉ lỗi
nếu giao dịch mail không hoàn thành (ví dụ không có receiver) hoặc nếu tài nguyên
không có hiệu lực.
Thủ tục trên là một ví dụ của một giao dịch mail. Những lệnh này chỉ được dùng
trong những trật tự được trình bày ở trên. Ví dụ :
Một minh họa cách dùng những lệnh này:
Ut; end with <CRLF>.<CRLF>
S: Blah blah blah
S: etc. etc. etc.
S: <CRLF>.<CRLF>
R: 250 OK
Bây giờ mail được chấp nhận cho Jones và Brown. Green không có một mailbox
trên Beta host.
2- Sự định hướng :
Có một số trường hợp thông tin của đích đến trong <forward-path> bị sai nhưng
receiver-SMTP biết đích đến đúng. Trong trường hợp như vậy một trong những

reply sau sẽ được dùng để cho phép người gửi tiếp xúc đến đích đúng :
251 User not local ; will forward to <forward-path>
Reply này chỉ cho receiver-SMTP biết mailbox của user đó nằm trên một host khác
và chỉ định forward-path đúng để sau đó sử dụng. Lưu ý một trong hai host hay user
hay cả hai có thể khác nhau . Receiver chịu trách nhiệm cho việc phân phối những
message.
551 User not local ; please try <forward-path>
Reply này chỉ cho receiver-SMTP biết mailbox của user nằm trên một host khác và
chỉ định forward-path đúng để sử dụng . Lưu ý host hoặc là user hay cả hai có thể
khác nhau . Receiver từ chối chấp nhận mail cho user A. Người gửi phải định
hướng lại cho mail đó tuỳ theo những thông tin được cung cấp hoặc là trả trả lời
error cho user khởi đầu.Ví dụ sau minh hoạ cách dùng của những đáp ứng này :
S: RCPT TO:
R: 251 User not local; will forward to <>
Hay
S: RCPT TO:<>
R: 551 User not local; please try
3- Kiểm tra và mở rộng :
SMTP cung cấp thêm những điểm đặc trưng, các lệnh để kiểm tra một user name
hay mở rộng một danh sách địa chỉ được làm với lệnh VRFY và EXPN nó dùng đối
số kiểu chuổi ký tự. Với lệnh VRFY chuỗi đó là một user name, và câu trả
lời(response) có thể bao gồm full name của user đó và phải bao gồm mailbox của
user đó. Với lệnh EXPN chuổi đó định danh một danh sách địa chỉ và câu trả lời có
nhiều dòng có thể chứa full name của các user đó và phải chứa những mailbox trên
danh sách địa chỉ (mailing list).
Nếu một host được bổ sung lệnh VRFY hay EXPN thì ít nhất những mailbox cục bộ
phải được thừa nhận như là“user names”. Nếu một host chọn lựa để thừa nhận
những chuổi khác như “user names” thì điều đó được cho phép.
Trong một số host sự phân biệt giữa một mailing list và một bí danh cho single
mailbox hơi mơ hồ. Từ đó một cấu trúc dữ liệu phổ biến có thể giữ cả hai kiểu

phần tử và nó có thể dùng các mailing list của một mailbox. Nếu một yêu cầu được
tạo ra để kiểm tra một mailing list một câu trả lời khẳng định có thể được cho nếu
trên message nhận được đã được định địa chỉ nó sẽ được phân phát cho tất cả mọi
người trong danh sách đó. Mặt khác một lỗi sẽ được báo cáo (e.g., "550 That is a
mailing list, not a user"). Nếu một yêu cầu được tạo ra để mở rộng một user name
một câu trả lời khẳng định có thể được cấu hình bằng cách trả về một danh sách
chứa một tên hay một lỗi có thể được báo cáo (e.g., "550 That is a user name, not a
mailing list").
Trong trường hợp một reply nhiều dòng (thường cho EXPN) là một mailbox được
đặc tả trên từng dòng của reply đó một cách chính xác. Trong trường hợp này một
yêu cầu nhập nhằng khó hiểu như : “VRFY Smith” có hai câu trả lời của Smith
phải là "553 User ambiguous".
Ví dụ kiểm tra một user name
S: VRFY Smith
R: 250 Fred Smith <>
Hay
S: VRFY Smith
R: 251 User not local; will forward to <>
Hay
S: VRFY Jones
R: 550 String does not match anything.
Hay
S: VRFY Jones
R: 551 User not local; please try <>
Hay
S: VRFY Gourzenkyinplatz
R: 553 User ambiguous.
Trường hợp mở rộng một mailbox list đòi hỏi một reply nhiều dòng xem trong ví dụ
sau: mở rộng một mailing list (danh sách địa chỉ)
S: EXPN Example-People

R: 250-Jon Postel <>
R: 250-Fred Fonebone <>
R: 250-Sam Q. Smith <>
R: 250-Quincy Smith <@USC-ISIF.ARPA:>
R: 250-<> R: 250 <>
Hay
S: EXPN Executive-Washroom-List
R: 550 Access Denied to You.
Những đối số chuổi ký tự của lệnh VRFY và EXPN không thể vượt qua giới hạn
được quyền trên sự bổ sung đa dạng của user name và khái niệm mailbox. Trên một
số hệ thống nó có thể dành riêng cho đối số của lệnh EXPN để là một file name cho
một file chứa một mailing list nhưng lại có một qui ước đa dạng của việc đặc tên
file trong internet.
Lệnh VRFY và EXPN không được bao gồm trong sự thực thi tối thiểu (trình bày
trong phần sau) và không được đòi hỏi để làm việc thay ca khi chúng được thực thi.
4- Sending and Mailing :
Mục đích chính của SMTP là phân phối những message đến những mailbox của
user . Một dịch vụ rất phổ biến được cung cấp bởi một số host là để phân phối
những message đến những terminal của user( cung cấp cho user làm việc trên host
đó). Sự phân phát đến những mail box của user được gọi là “mailing”, sự phân phát
đến những user terminal được gọi là “sending”. Bởi vì một số host có sự thực thi
của sending gần giống với sự thực thi của mailing chúng là hai chức năng được liên
kết với SMTP. Mặc dù lệnh sending không bao gồm trong yêu cầu thực thi tối
thiểu( xem phần sau). Những user có khả năng điều khiển việc ghi message lên
những terminal của họ. Hầu hết các host cho phép chấp nhận hay từ chối những
message.
Ba lệnh sau được định nghĩa để cung cấp những option cho sending. Chúng được
dùng trong giao dịch mail thay cho lệnh MAIL và cung cấp cho receiver-SMTP
những ngữ nghĩa giao dịch đặc biệt:
SEND <SP> FROM:<reverse-path> <CRLF>

Lệnh SEND đòi hỏi mail data được gửi đến user terminal. Nếu user đó không hoạt
động (hay không chấp nhận những terminal message) trên host đó một reply 450 có
thể được trả cho một lệnh RCPT. Giao chuyển mail thành công khi message đó
được phân phát đến terminal.
SOML <SP> FROM:<reverse-path> <CRLF>
Lệnh này là SEND Or MAIL đòi hỏi mail data được phân phát đến terminal
của user nếu user đó đang hoạt động (và chấp nhận những message terminal) trên
host đó. Nếu user không hoạt động (haykhông chấp nhận terminal message) thì mail
data được đưa vào trong mailbox của user . Giao chuyển mail thành công khi
message đó được phân phát đến terminal hay mailbox.
SAML <SP> FROM:<reverse-path> <CRLF>
Lệnh này là SEND And MAIL đòi hỏi mail data được phân phát đến
terminal của user nếu user đó đang hoạt động (và chấp nhận những message
terminal) trên host đó. Trong những tất cả trường hợp mail data được đưa vào trong
mailbox của user. Giao dịch mail thành công khi message đó được phân phát đến
mailbox.
Những mã reply tương tự được dùng cho lệnh MAIL cũng được dùng cho
những lệnh này.
5- Opening and Closing :
Ngay thời điểm mà kênh giao chuyển được open có một sự trao đổi để đảm
bảo những host đó đang giao tiếp với những host khác.
Hai lệnh sau được dùng trong việc đóng mở kênh truyền
HELLO <SP> <domain><CRLF>
QUIT <CRLF>
Trong lệnh HELLO host này gửi đi những nhận dạng lệnh của nó có thể
được dịch như "HELLO, I am <domain>".
* Ví dụ mở kết nối :

×