Tải bản đầy đủ (.doc) (84 trang)

Xây dựng ứng dụng webmail

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 (481.81 KB, 84 trang )

LỜI NÓI ĐẦU
Ngày nay với sự phát triển mạnh mẽ của tin học và công nghệ Internet, hầu
như mọi người đều thấy rõ lợi ích mà các dòch vụ do mạng Internet mang lại.
Dòch vụ thư điện tử gọi tắt là Email là một trong nhưng dòch vụ được sử dụng
nhiều nhất trên Internet hiện nay. Dòch vụ này cho phép các cá nhân hay tổ chức
trao đổi thư với nhau thông qua mạng Internet. Nhiều người sử dụng Internet chỉ để
dùng dòch vụ này.
Thông thường, khi sử dụng dòch vụ thư tín điện tử, người sử dụng thường ít khi
quan tâm xem hệ thống bên trong đã thực hiện như thế nào. Vì vậy, họ ( người sử
dụng) mới chỉ thấy được một nửa của ứng dụng dòch vụ Email và phần ứng dụng đó
được gọi là Mail Client, hay là sử dụng dòch vụ thư tín máy trạm.
Nhằm mục đích hiểu rõ hơn về hoạt động bên trong của ứng dụng Email ở
phần cung cấp dòch vụ mà thường được gọi là Mail Server, trong cuốn đồ án này tôi
xin trình bày một cách cơ bản hệ thống phục vụ việc truyền thư tín điện tử trên cơ
sở tìm hiểu về các mô hình truyền thông thư tín, các giao thức truyền thông chuẩn,
các hoạt động của một hệ Mail Server.
Vì thời gian có hạn và có rất nhiều các vấn đề có liên quan, do đó đồ án này
chỉ trình bày những vấn đề cơ bản nhất về dòch vụ thư tín điện tử và cài đặt một
chương trình mang tính thử nghiệm do dòch vụ thư tín điện tử mà thôi .

Trang 1


PHẦN 1 : CƠ SỞ LÝ THUYẾT
CHƯƠNG 1 : GIỚI THIỆU CHUNG VỀ INTERNET
VÀ MỘT SỐ GIAO THỨC TRUYỀN THÔNG
TRÊN INTERNET
1.1. GIỚI THIỆU CHUNG VỀ INTERNET
M¹ng Internet lµ mét tËp hỵp gåm hµng v¹n hƯ m¹ng trªn kh¾p thÕ giíi, ®ỵc
ph¸t triĨn vµo thËp kû b¶y m¬i. Sè lỵng m¸y tÝnh nèi m¹ng vµ sè lỵng ngêi truy cËp
vµo m¹ng Internet trªn toµn thÕ giíi ®ang ngµy cµng t¨ng lªn nhanh chãng, ®Ỉc biƯt tõ


n¨m 1993 trë ®i. M¹ng Internet kh«ng chØ cho phÐp chun t¶i th«ng tin nhanh chãng
mµ cßn gióp cung cÊp th«ng tin, nã còng lµ diƠn ®µn vµ lµ th viƯn toµn cÇu ®Çu tiªn.
M¹ng Internet cã xt xø n¨m 1969 tõ m¹ng m¸y tÝnh toµn cơc ARPANET do
c¬ quan qu¶n lý c¸c dù ¸n nghiªn cøu c¸c c«ng tr×nh nghiªn cøu khoa häc tiªn tiÕn
thc Bé Qc phßng Mü (US Defense’s Advance Research Projects Agency - gäi t¾t
lµ DARPA) tµi trỵ. Tõ gi÷a n¨m 1970, trung t©m DARPA híng tíi m¹ng Internet víi
kü tht chun m¹ch gãi qua m¹ng v« tun vµ th«ng tin vƯ tinh. N¨m 1980, DARPA
thư nghiƯm dïng giao thøc TCP/IP vµ ®· ®ỵc c¸c trêng ®¹i häc ë Mü ghÐp nèi víi hƯ
®iỊu hµnh UNIX BSD (Berkely Software Distribution).
HƯ ®iỊu hµnh UNIX lµ hƯ ph¸t triĨn m¹nh víi rÊt nhiỊu c«ng cơ hç trỵ vµ ®¶m
b¶o c¸c phÇn mỊm øng dơng cã thĨ chun qua l¹i trªn c¸c hä m¸y kh¸c nhau (m¸y
mini, m¸y tÝnh lín vµ hiƯn nay lµ m¸y vi tÝnh). Bªn c¹nh ®ã hƯ ®iỊu hµnh UNIX BSD
cßn cung cÊp nhiỊu thđ tơc Internet c¬ b¶n, ®a ra kh¸i niƯm Socket vµ cho phÐp ch¬ng
tr×nh øng dơng th©m nhËp vµo Internet mét c¸ch dƠ dµng.
CÊu tróc m¹ng Internet gåm cã:
♦ TÇng øng dơng: TELNET, FTP, SMTP;
♦ TÇng giao vËn: TCP, UDP;
♦ TÇng Internet: Internet Protocol;
♦ TÇng m¹ng: X.25, Ethernet, FDDI. . .;
♦ TÇng vËt lý: lµ c¸c m«i trêng trun tin kh¸c nhau.

1.2. HỌ GIAO THỨC TCP/IP
TCP/IP lµ hä cđa c¸c giao thøc ®ỵc sư dơng cho viƯc trun th«ng m¸y tÝnh. C¸c
ch÷ c¸i ®ỵc viÕt t¾t bëi c¸c tõ (Transmission Control Protocol/Internet Protocol), hai
giao thøc nµy cã c¸ch biĨu diƠn kh¸c nhau, ngêi ta Ýt khi sư dơng víi c¸i tªn ®Çy ®đ
cđa hai giao thøc nµy. Thêng c¸c giao thøc ®ỵc nhãm l¹i thµnh c¸c hä (®«i khi cßn ®ỵc
gäi lµ c¸c suites hay c¸c stacks). C¸c giao thøc nµo ®ỵc nhãm l¹i víi nhau thêng ®ỵc
x¸c ®Þnh bëi c¸c bé cµi ®Ỉt cđa giao thøc.
Trang 2



Họ giao thức TCP/IP bao gồm các giao thức nh là IP (Internet Protocol) , ARP
(Address Resolution Protocol), ICMP (Internet Control Message Protocol), UDP (User
Datagram Protocol), TCP (Transport Control Protocol), RIP (Routing Information
Protocol), Telnet, SMTP (Simple Mail Transfer Protocol), DNS (Domain Name
System) và một số các giao thức khác. Hình bên dới mô tả kiến trúc của mạng TCP/IP
có so sánh với mô hình tham chiếu OSI để chúng ta hình dung đợc sự tơng ứng về chức
năng của các tầng.
OSI Model
Layers

Application
Layer
Presentation
Layer
Session
Layer
Transport
Layer

TCP/IP Protocol
Architecture
Layers

Application
Layer

Telnet

Host-to-Host

Transport
Layer

Network
Layer

Internet
Layer

Data Link
Layer

Network
Interface
Layer

Physical
Layer

TCP/IP Protocol Suite

FTP

SMTP

DNS

TCP

SNMP


UDP

IP

ARP

Ethernet

RIP

Token
Ring

IGMP ICMP

Frame
Relay

ATM

So sánh các kiến trúc ISO và TCP/IP
TCP/IP thực chất là một họ giao thức cùng làm việc với nhau để cung cấp phơng
tiện truyền thông liên mạng. Trong phần này chúng ta sẽ xem xét giao thức IP, giao
thức TCP và một số ứng dụng ở tầng trên nh Telnet, FTP, DNS, SMTP. . .

1.3. GIAO THệC LIEN MAẽNG IP
Mục đích chính của IP là cung cấp khả năng kết nối các mạng con thành liên
mạng để truyền dữ liệu. Vai trò của IP tơng tự vai trò của giao thức tầng mạng trong
mô hình OSI.

IP là một giao thức kiểu không liên kết (connectionless) có nghĩa là không
cần có giai đoạn thiết lập liên kết trớc khi truyền dữ liệu. Đơn vị dữ liệu dùng trong IP
đợc gọi là datagram, có khuôn dạng chỉ ra trong hình bên dới.
ý nghĩa của các tham số nh sau:
VER (4 bits): chỉ version hiện hành của IP đợc cài đặt

Trang 3


IHL (4 bits): chỉ độ dài phần đầu (Internet Header Length) của datagram, tính
theo đơn vị từ (word = 32 bits). Độ dài tối thiểu là 5 từ (20 bytes).
0

VE
R

34

IH
L

78

15 16
Type of Service

Indentification
Time to live

Header


Total Length
Fla
gs

Protocol

31

Fragment
offset

Header Checksum

Source Address
Destination Address
Options + Padding
Data
(max: 65.535 bytes)

Khuôn dạng của IP datagram


Type of service (8 bits): đặc tả các tham số về dịch vụ, có dạng cụ thể nh sau:

0

1

2


Preceden
ce

3

D

4

T

5

6

R

7

Reser
ved

trong đó:
Precedence (3 bits): chỉ thị về quyền u tiên gửi datagram, cụ thể là:
111 - Network Control (cao nhất)

011 - Flash

110 - Internetwork Control


010 - Immediate

101 - CRITIC/ECP

001 - Priority

100 - Flas Override

000 - Routine (thấp nhất)

D (Delay) (1 bit): chỉ độ trễ yêu cầu
D = 0 độ trễ bình thờng
D = 1 độ trễ thấp
T (Throughput) (1 bit): chỉ thông lợng yêu cầu
T = 0 thông lợng bình thờng
T = 1 thông lợng cao
R (Reliability) (1 bit): chỉ độ tin cậy yêu cầu
R = 0 độ tin cậy bình thờng
R = 1 độ tin cậy cao

Total Length (16 bits): chỉ độ dài toàn bộ datagram, kể cả phần header (tính
theo đơn vị bytes).
Trang 4


Indentification (16 bits): cùng với các tham số khác (nh Source Address và
Destination Address) tham số này dùng để định danh duy nhất cho một
datagram trong khoảng thời gian nó vẫn còn trên liên mạng.
Flags (3 bits): liên quan đến sự phân đoạn (fragment) các datagram, cụ thể là:

0

0

1

D
F

2

M
F

Bit 0: reserved - cha sử dụng , luôn lấy giá trị 0
Bit 1 (DF) = 0 (May Fragment)
= 1 (Dont Fragment)

Bit 2 (MF) = 0 (Last Fragment)
= 1 (More Fragment)

Fragment Offset (13 bits): chỉ vị trí của đoạn (fragment) ở trong datagram, tính
theo đơn vị 64 bits, có nghĩa là mỗi đoạn (trừ đoạn cuối cùng) phải chứa một
vùng dữ liệu có độ dài là bội số của 64 bits.
Time to live (8 bits): qui định thời gian tồn tại (tính bằng giây) của datagram
trong liên mạng để tránh tình trạng một datagram bị quẩn trên liên mạng. Thời
gian này đợc cho bởi trạm gửi và đợc giảm đi (thờng qui ớc là 1 đơn vị) khi
datagram đi qua mỗi router của liên mạng.
Protocol (8 bits): chỉ giao thức tầng trên kế tiếp sẽ nhận vùng dữ liệu ở trạm
đích (hiện tại thờng là TCP hoặc UDP đợc cài đặt trên IP).

Header Checksum (16 bits): mã kiểm soát lỗi 16 bits theo phơng pháp CRC, chỉ
cho vùng header.
Source Address (32 bits): địa chỉ của trạm nguồn.
Destination Address (32 bits): địa chỉ của trạm đích.
Options (độ dài thay đổi): khai báo các options do ngời gửi yêu cầu.
Padding (độ dài thay đổi): vùng đệm, đợc dùng để đảm bảo cho phần header
luôn kết thúc ở một mốc 32 bits.
Data (độ dài thay đổi): vùng dữ liệu, có độ dài là bội số của 8 bits, và tối đa là
65535 bytes.
Sơ đồ địa chỉ hoá để định danh các trạm (host) trong liên mạng đợc gọi là địa
chỉ IP 32 bits (32- bit- IP address). Mỗi địa chỉ IP có độ dài 32 bits đợc tách thành 4
vùng (mỗi vùng 1 byte), có thể đợc biểu thị dới dạng thập phân, bát phân, thập lục
phân hoặc nhị phân. Cách viết phổ biến nhất là dùng ký pháp thập phân có dấu chấm
(dotted decimal notation) để tách các vùng. Mục đích của địa chỉ IP là để định danh
duy nhất cho một host bất kỳ trên liên mạng. Do tổ chức và độ lớn của các mạng con
(subnet) của liên mạng có thể khác nhau, ngời ta chia các địa chỉ IP thành 5 lớp, ký
hiệu là A, B, C, D và E, với cấu trúc đợc chỉ ra trong hình bên dới.
0 1
Trang 5

7 8

15 16

23 24

31


Lớp A


0

netid

Lớp B

1 0

Lớp C

1 1 0

Lớp D

1 1 1 0

Lớp E

1 1 1 1 0

hostid
netid

Hostid

netid

hostid


Multicast address

Reserved for future use

Cấu trúc của các lớp địa chỉ IP

Lớp A cho phép định danh tới 126 mạng, với tối đa 16 triệu host trên mỗi
mạng. Lớp này đợc dùng cho các mạng có số trạm cực lớn.
Lớp B cho phép định danh tới 16384 mạng, với tối đa 65534 host trên mỗi
mạng.
Lớp C cho phép định danh tới 2 triệu mạng, với tối đa 254 host trên mỗi mạng.
Lớp này đợc dùng cho các mạng có ít trạm.
Lớp D dùng để gửi IP datagram tới một nhóm các host trên một mạng.
Lớp E dự phòng để dùng trong tơng lai.
Ví dụ:
00001
010

00000
000

00000
000

00000
000

= 10.0.0.0 (Lớp A)
netid = 10


10000
000

00000
011

00000
010

00000
011

11000
000

00000
000

00000
001

11111
111

= 128.3.2.3 (Lớp B)
netid = 128.3
hostid = 2.3
= 192.0.1.255 (Lớp C)
netid = 192.0.1
hostid = 255

hướng đến tất cả các host

Một địa chỉ có hostid (host identifier) bằng 0 đợc dùng để hớng tới mạng định
danh bởi vùng netid (network identifier). Ngợc lại, một địa chỉ có vùng hostid gồm
toàn số 1 đợc dùng để hớng tới tất cả các host nối vào mạng netid, và nếu vùng netid
cũng gồm toàn số 1 thì nó hớng tới tất cả các host trong liên mạng.
Trong nhiều trờng hợp, một mạng có thể đợc chia thành nhiều mạng con
(subnet), lúc đó có thể đa thêm các vùng subnetid để định danh các mạng con. Vùng
subnet đợc lấy từ hostid, cụ thể đối với 3 lớp A, B, C nh sau (hình bên dới).

Trang 6


Netid

Subnetid

Hostid

7 8

0

15 16

Netid

Subnetid

7 8


0

(Lớp A)

23 24

15 16

31
Hostid

23 24

Netid

Subn
etid

(Lớp B)
31
Host
id (Lớp C)

Bổ sung vùng subnetid
Cần lu ý rằng các địa chỉ IP đợc dùng để định danh các host và mạng ở tầng
mạng của Mô hình OSI, và chúng không phải là các địa chỉ vật lý (hay địa chỉ MAC Media Access Control) của các trạm đó trên một mạng cục bộ (Ethernet,Token
Ring...). Trên một mạng cục bộ nh vậy, hai trạm chỉ có thể liên lạc với nhau nếu chúng
biết địa chỉ vật lý của nhau. Nh vậy, vấn đề đặt ra là phải thực hiện ánh xạ giữa địa chỉ
IP (32 bits) và địa chỉ vật lý (48 bits) của một trạm. Giao thức ARP (Address

Resolution Protocol) đã đợc xây dựng để chuyển đổi từ địa chỉ IP sang địa chỉ vật lý
khi cần thiết. Ngợc lại, giao thức RARP (Reverse Address Resolution Protocol) đợc
dùng để chuyển đổi từ địa chỉ vật lý sang địa chỉ IP. Chú ý rằng cả ARP và RARP đều
không phải là bộ phận của IP. IP sẽ dùng đến chúng khi cần.
Một giao thức khác cũng liên quan trực tiếp đến IP, đó là ICMP (Internet Control
Message Protocol). Giao thức này thực hiện truyền các thông báo điều khiển (báo cáo
về các tình trạng lỗi trên mạng,...) giữa các gateway hoặc trạm của liên mạng. Tình
trạng lỗi có thể là: một datagram không thể tới đợc đích của nó, hoặc một router không
đủ bộ nhớ đệm để lu và chuyển một datagram,... Một thông báo ICMP đợc tạo và
chuyển cho IP. IP sẽ bọc (encapsulate) thông báo đó với một IP header và truyền đến
cho router hoặc trạm đích.
Chúng ta có thể tóm tắt các bớc thực hiện bởi một thực thể IP nh sau:
Đối với thực thể IP ở trạm nguồn, khi nhận đợc một primitive SEND từ tầng
trên , nó thực hiện các bớc sau đây:
1. Tạo một IP datagram dựa trên các tham số của primitive SEND
2. Tính checksum và ghép vào header của datagram.
3. Ra quyết định chọn đờng: hoặc là trạm đích nằm trên cùng mạng hoặc một
gateway sẽ đợc chọn cho chặng tiếp theo.
4. Chuyển datagram xuống tầng dới để truyền qua mạng.
Đối với gateway, khi nhận đợc một datagram quá cảnh, nó thực hiện các động
tác sau:
1. Tính checksum, nếu bất cập thì loại bỏ datagram.
2. Giảm giá trị của tham số Time-to-Live. Nếu thời gian đã hết thì loại bỏ
datagram.
3. Ra quyết định chọn đờng.
4. Phân đoạn datagram, nếu cần.

5. Kiến tạo lại IP header, bao gồm giá trị mới của các vùng Time-to-Live,
Fragmentation và Checksum.
Trang 7



6. Chuyển datagram xuống tầng dới để truyền qua mạng.
Cuối cùng, khi một datagram đợc nhận bởi thực thể IP ở trạm đích, nó sẽ thực
hiện các công việc sau:
1. Tính checksum. Nếu bất cập thì loại bỏ datagram.
2. Tập hợp các đoạn của datagram (nếu có phân đoạn).
3. Chuyển dữ liệu và các tham số điều khiển lên tầng trên bằng cách dùng
primitive DELIVER.

1.4. GIAO THệC ẹIEU KHIEN TRUYEN TCP
bit 0

15 16
Source Port

31
Destination Port

Sequence Number
Acknowledgment Number
D
a
t
a
o
f
f
s
e

t

UR AC PS RSSY FIN
G K H TN

Reser
ved

Window

Checksum

Urgent Pointer

Options

Padding
TCP data

Khuôn dạng của TCP segment.

TCP là một giao thức kiểu có liên kết (connection - oriented), nghĩa là cần phải
thiết lập liên kết (logic) giữa một cặp thực thể TCP trớc khi chúng trao đổi dữ liệu với
nhau.
Đơn vị dữ liệu sử dụng trong TCP đợc gọi là segment (đoạn dữ liệu), có khuôn
dạng mô tả trong hình bên dới.
Các tham số trong khuôn dạng trên có ý nghĩa nh sau:
Source Port (16 bits): số hiệu cổng của trạm nguồn.
Destination Port (16 bits): số hiệu cổng của trạm đích.
Sequence Number (32 bits): số hiệu của byte đầu tiên của segment trừ khi bit

SYN đợc thiết lập. Nếu bit SYN đợc thiết lập thì Sequence Number là số hiệu
tuần tự khởi đầu (ISN) và byte dữ liệu đầu tiên là ISN+1. Tham số này có vai
trò nh tham số N(S) trong HDLC.

Trang 8


Acknowledgment Number (32 bits): số hiệu của segment tiếp theo mà trạm
nguồn đang chờ để nhận. Ngầm ý báo nhận tốt (các) segment mà trạm đích đã
gửi cho trạm nguồn - Tham số này có vai trò nh tham số N(R) trong HDLC.
Data offset (4 bits): số lợng từ - 32 bit (32 bit words) trong TCP header (tham
số này chỉ ra vị trí bắt đầu của vùng dữ liệu).
Reserved (6 bits): dành để dùng trong tơng lai.
Control bits (các bit điều khiển):
T trái sang phải:
URG: vùng con trỏ khẩn (Urgent Pointer) có hiệu lực
ACK: vùng báo nhận (ACK number) có hiệu lực
PSH: chức năng PUSH
RST: khởi động lại (reset) liên kết
SYN: đồng bộ hoá các số hiệu tuần tự (sequence number)
FIN: không còn dữ liệu từ trạm nguồn
Window (16 bits): cấp phát credit để kiểm soát luồng dữ liệu (cơ chế cửa sổ).
Đây chính là số lợng các byte dữ liệu, bắt đầu từ byte đợc chỉ ra trong vùng
ACK number, mà trạm nguồn đã sẵn sàng để nhận.
Checksum (16 bits): mã kiểm soát lỗi (theo phơng pháp CRC) cho toàn bộ
segment (header + data).
Urgent Pointer (16 bits): con trỏ này trỏ tới số hiệu tuần tự của byte đi theo
sau dữ liệu khẩn, cho phép bên nhận biết đợc độ dài của dữ liệu khẩn. Vùng
này chỉ có hiệu lực khi bit URG đợc thiết lập.
Options (độ dài thay đổi): khai báo các Options của TCP, trong đó có độ dài

tối đa của vùng TCP data trong một segment.
Padding (độ dài thay đổi): Phần chèn thêm vào header để bảo đảm phần
header luôn kết thúc ở một mốc 32 bits. Phần thêm này gồm toàn số 0.
TCP data (độ dài thay đổi): chứa dữ liệu của tầng trên, có độ dài tối đa ngầm
định là 536 bytes. Giá trị này có thể điều chỉnh bằng cách khai báo trong vùng
options.
Một tiến trình ứng dụng trong một host truy nhập vào các dịch vụ của TCP cung
cấp thông qua một cổng (port). Một cổng kết hợp với một địa chỉ IP tạo thành một
socket duy nhất trong liên mạng. Dịch vụ TCP đợc cung cấp nhờ một liên kết logic
giữa một cặp socket. Một socket có thể tham gia nhiều liên kết với các socket ở xa
khác nhau. Trớc khi truyền dữ liệu giữa hai trạm cần phải thiết lập một liên kết TCP
giữa chúng và khi không còn nhu cầu truyền dữ liệu thì liên kết đó sẽ đợc giải phóng.
Cũng giống nh ở các giao thức khác, các thực thể ở tầng trên sử dụng TCP thông qua
các hàm dịch vụ nguyên thuỷ (service primitives), hay còn gọi là các lời gọi hàm
(function calls).

Trang 9


CHƯƠNG 2 : CƠ SỞ VỀ LẬP TRÌNH MẠNG TRÊN
MÔ HÌNH CLIENT/SERVER
2.1. LẬP TRÌNH GIAO TIẾP MẠNG VỚI WINDOWS SOCKETS
Windows NT lµ mét hƯ ®iỊu hµnh m¹nh, cho phÐp tËn dơng tèi ®a kh¶ n¨ng cđa
m¸y tÝnh lo¹i 32 bit, cung øng hµng lo¹t c¸c dÞch vơ m¹ng trªn m«i trêng Intranet vµ
Internet. HiƯn nay Windows NT ®ỵc sư dơng t¬ng ®èi phỉ biÕn ë c¸c c¬ quan; doanh
nghiƯp ViƯt Nam.
Giao thøc trun th«ng TCP/IP ®· ®ỵc dïng bëi hƯ ®iỊu hµnh UNIX vµ m¹ng
Internet, ®Ĩ c¸c m¸y trªn m¹ng NT cã thĨ giao tiÕp víi c¸c m¸y trªn m¹ng kh¸c,
Windows NT còng cung cÊp giao thøc nµy. Ngoµi mét sè lƯnh dïng giao thøc TCP/IP
®· ®ỵc viÕt s½n nh: ftp, telnet, finger..., Windows NT cho phÐp ngêi lËp tr×nh ph¸t triĨn

c¸c øng dơng khai th¸c kü tht TCP/IP th«ng qua mét th viƯn tªn lµ Windows
Sockets.
Cã ba lý do chÝnh ®Ĩ ngêi lËp tr×nh sư dơng kü tht TCP/IP:
• Cã thĨ viÕt c¸c øng dơng trªn Windows NT ®Ĩ nèi vµo m¹ng UNIX vµ khai th¸c c¸c
dÞch vơ cã s½n trªn ®ã.
• T¹o ra c¸c dÞch vơ trªn m¸y Windows NT ®Ĩ c¸c m¸y UNIX cã thĨ khai th¸c nh÷ng
dÞch vơ nµy.
• ViÕt c¸c ch¬ng tr×nh cho phÐp c¸c m¸y Windows NT giao tiÕp trªn hƯ thèng m¹ng
Internet.

2.2. MỘT SỐ KHÁI NIỆM CƠ BẢN
2.2.1.Đòa chỉ Internet
Trong hƯ thèng m¹ng Internet, mçi m¸y ®Ịu cã mét tªn vµ mét ®Þa chØ IP (còng
gäi lµ ®Þa chØ Internet). VÝ dơ nh, mét m¸y NT cã tªn lµ ntsvr.csc.hcmu.vn vµ ®Þa chØ lµ
192.48.94.200. Tªn hay ®Þa chØ IP ®Ịu x¸c ®Þnh duy nhÊt mét m¸y trong hƯ thèng
m¹ng Internet. Khi lËp tr×nh, chóng ta cã c¸c hµm ®Ĩ chun ®ỉi tõ tªn sang ®Þa chØ IP
vµ ngỵc l¹i.
2.2.2. Khái niệm socket và port
Mét socket lµ mét thiÕt bÞ trun th«ng hai chiỊu t¬ng tù nh tËp tin, chóng ta cã
thĨ ®äc hay ghi lªn nã, tuy nhiªn mçi socket lµ mét thµnh phÇn trong mét mèi nèi nµo
®ã gi÷a c¸c m¸y trªn m¹ng m¸y tÝnh vµ c¸c thao t¸c ®äc/ghi chÝnh lµ sù trao ®ỉi d÷
liƯu gi÷a c¸c øng dơng trªn nhiỊu m¸y kh¸c nhau.
Trong giao thøc trun th«ng TCP, mçi mèi nèi gi÷a hai m¸y tÝnh ®ỵc x¸c ®Þnh
bëi mét port, kh¸i niƯm port ë ®©y kh«ng ph¶i lµ mét cỉng giao tiÕp trªn thiÕt bÞ vËt lý
mµ chØ lµ mét kh¸i niƯm logic trong c¸ch nh×n cđa ngêi lËp tr×nh, mçi port ®ỵc t¬ng
øng víi mét sè nguyªn d¬ng.
Trang 10


H×nh bªn díi minh häa c¸ch giao tiÕp gi÷a hai m¸y tÝnh trong giao thøc trun

th«ng TCP. M¸y A t¹o ra mét socket vµ kÕt bc (bind) socket nµy víi port X (tøc lµ
mét sè nguyªn d¬ng cã ý nghÜa cơc bé trong m¸y A), trong khi ®ã m¸y B t¹o mét
socket kh¸c vµ mãc vµo (connect) port X trong m¸y A.

M¸y
M¸y A
A

socket

Port

socket

Mèi nèi

M¸y
M¸y B
B

HƯ thèng m¹ng

C¸c socket vµ port trong mèi nèi TCP

2.3. CÁCH CÀI ĐẶT ỨNG DỤNG CLIENT/SERVER TCP
2.3.1. Cách cài đặt server TCP
øng dơng server lµm viƯc theo qui tr×nh sau ®©y:
1. Gäi hµm socket ®Ĩ t¹o mét socket.
2. Gäi hµm bind ®Ĩ kÕt bc socket víi mét port, ®èi víi mçi giao thøc øng chn th×
sÏ cã mét h»ng sè ®ỵc ®Þnh nghÜa s½n trong Winsock cho port cđa giao thøc ®ã.

3. Gäi hµm listen ®Ĩ chê ®Õn khi cã mét client nèi vµo port.
4. Khi cã mét client nèi vµo th× hµm listen tr¶ ®iỊu khiĨn vỊ, øng dơng server gäi hµm
accept ®Ĩ x¸c nhËn mèi nèi cđa client.
5. Gäi c¸c hµm gưi hay nhËn d÷ liƯu ®Ĩ trao ®ỉi th«ng tin víi client, vÝ dơ nh hµm
send, recv.
Sau khi ®· hoµn tÊt qu¸ tr×nh trao ®ỉi d÷ liƯu, øng dơng server gäi hµm closesocket ®Ĩ
®ãng socket ®· t¹o.
2.3.2. Cách cài đặt client TCP
øng dơng client thùc hiƯn c¸c bíc sau:
1. Gäi hµm socket ®Ĩ t¹o mét socket.
2. Gäi hµm connect ®Ĩ nèi vµo server.
3. Gäi c¸c hµm gưi hay nhËn d÷ liƯu ®Ĩ trao ®ỉi th«ng tin víi server, vÝ dơ nh c¸c
hµm send, recv.
4. Sau khi ®· hoµn tÊt qu¸ tr×nh trao ®ỉi d÷ liƯu, øng dơng client gäi hµm
closesocket ®Ĩ ®ãng socket ®· t¹o.
H×nh minh häa c¸c bíc cÇn thiÕt ®Ĩ c¸c øng dơng client vµ server giao tiÕp víi
nhau nh sau:

Trang 11


ứng dụng Server

ứng dụng Client

Tạo một socket

Tạo một socket

Kết buộc socket

với một port (bind)
Đặt socket ở trạng
thái chờ client nối
vào

Nối vào port của
server

Chấp nhận kết nối
của client
Chuyển đổi dữ liệu giữa client và server
Các bước giao tiếp giữa client và server trong giao thức TCP

Trang 12


CHƯƠNG 3 : MỘT SỐ KHÁI NIỆM LIÊN QUAN
ĐẾN THƯ ĐIỆN TỬ
1.1. MAILSERVER

Theo mô hình hoạt động khách chủ, trình chủ là một dòch vụ đóng vai trò
người chủ phục vụ trình khách. Mail Server thật ra là một trình mở socket lắng
nghe các yêu cầu (hay lệnh gửi mail) từ trình khách đưa đến. Như đã nói, mail
server sẽ tiếp nhận nội dung mail, phân phối mail đến các trình chủ khác, cho phép
trình khách truy cập vào máy chủ để nhận mail về, bảo vệ mail…Chính vì vậy,
trước khi nhận hay gửi mail cần phải biết được đòa chỉ IP của máy chủ mail server.
Đòa chỉ này thường được gọi là mail host. Về khái niệm socket và đòa chỉ IP sẽ
được trình bày ở phần sau.

1.2. GIAO THỨC GỬI MAIL (MAIL TRANSPORT PROTOCOL)

Để gửi mail đến máy chủ, trình khách phải sử dụng một giao thức trò chuyện
với mail server. Tương tự trình duyệt dùng giao thức HTTP để trò chuyện với trình
chủ Web server. Các trình khách muốn bắt tay với trình chủ mail server và gửi mail
lên máy chủ sẽ sử dụng giao thức SMTP (Simple Mail Transport Protocol). SMTP
được hầu hết các mail server trên thế gới sử dụng. Đòa chỉ IP của máy chủ nhận
mail gửi đi thường được gọi là outgoing mail address. Trình chủ thực hiện chức
năng tiếp nhận mail theo giao thức SMTP gọi là SMTP Server, trình khách dùng
giao thức SMTP để gửi mail đến trình chủ mail server gọi là SMTP Client.

1.3.GIỚI THIỆU KIẾN TRÚC DỊCH VỤ THƯ ĐIỆN TỬ
1.3.1. KiÕn tróc vµ c¸c dÞch vơ
C¸c hƯ thèng th ®iƯn tư thêng bao gåm hai hƯ thèng con: c¸c t¸c nh©n ngêi sư
dơng (the user agents - gäi t¾t lµ UA), nã cho phÐp chóng ta ®äc vµ gưi th, vµ c¸c t¸c
nh©n trun th«ng ®iƯp (the message transfer agents - gäi t¾t lµ MTA), nã lµm nhiƯm
vơ chun c¸c th«ng ®iƯp tõ ngn ®Õn ®Ých. C¸c UAs lµ c¸c ch¬ng tr×nh cơc bé hç trỵ
dùa trªn ®iỊu khiĨn b»ng lƯnh, tr×nh ®¬n menu hay dïng ph¬ng ph¸p ®å ho¹ ®Ĩ t¬ng
t¸c víi hƯ thèng th ®iƯn tư. C¸c MTAs lµ c¸c tr×nh tiƯn Ých ho¹t ®éng ë chÕ ®é nỊn
(background) thùc hiƯn c¸c nhiƯm vơ cÇn thiÕt nh tiÕp nhËn th ®iƯn tư vµ chun th qua
c¸c hƯ thèng.
§Ỉc biƯt, c¸c hƯ thèng th ®iƯn tư hç trỵ n¨m chøc n¨ng c¬ b¶n, ®ỵc m« t¶ díi ®©y:
1. Composition: Xư lý viƯc t¹o c¸c th«ng ®iƯp vµ tr¶ lêi. Cho phÐp bÊt cø tr×nh
so¹n th¶o nµo cã thĨ ®ỵc sư dơng cho phÇn th©n cđa th«ng ®iƯp, c¸c hƯ
thèng cã thĨ tù nã ®¶m tr¸ch viƯc ®¸nh ®Þa chØ vµ chØ sè c¸c trêng tiªu ®Ị
Trang 13


(header fields) đợc kèm theo cùng với mỗi thông điệp. Ví dụ nh, khi trả lời
một thông điệp , hệ thống th điện tử có thể tách địa chỉ của ngời gửi từ các
th đợc gửi đến và tự động chèn nó vào các trờng thích hợp trong phần hồi âm
(reply).

2. Transfer: Làm nhiệm vụ chuyển các thông điệp từ ngời gửi đến nơi ngời
nhận. Trong phần này, việc chuyển các thông điệp yêu cầu phải thiết lập một
kết nối đến đích (ngời nhận) hay một số thao tác của thiết bị nh xuất thông
điệp và kết thúc việc kết nối. Hệ thống th điện tử làm việc này một cách tự
động mà không cần có một sự can thiệp nào của ngời sử dụng.
3. Reporting: Buộc phải thực hiện để báo cho ngời gửi những gì xảy ra đối với
thông điệp vừa gửi là ở tình huấn đã gửi đến đích cha? hoặc việc gửi đã bị
huỷ bỏ? hoặc th đã bị lạc?.
4. Displaying: Những thông điệp gửi đến đợc yêu cầu làm sao để mọi ngời có
thể đọc đợc th của họ. Đôi khi ngời ta yêu cầu quá trình chuyển đổi hay một
trình hiển thị đặc biệt để hỗ trợ, ví dụ nh, nếu thông điệp có dạng một tệp
PostScript hay tiếng nói đợc số hóa kèm theo trong thông điệp gửi đến.
5. Disposition: Là bớc cuối cùng liên quan đến những gì ngời nhận thực hiện
đối với thông điệp sau khi đã nhận nó. Những khả năng có thể là ném nó đi
trớc khi đọc, ném nó đi sau khi đọc, lu nó, v ..v. Nó cũng sẽ có thể thu nhận
để đọc lại với các thông điệp đã đợc lu lại, chuyển tiếp chúng hoặc xử lý
chúng bằng những phơng pháp khác nhau khi đợc yêu cầu của ngời sử dụng.
Thêm vào đó các dịch vụ này, hầu hết các hệ thống th điện tử cung cấp nhiều
đặc tính nâng cao khác nhau. Một số đặc tính tiêu biểu nh, khi ngời ta muốn chuyển th
hay khi họ nghĩ xa hơn về các chi tiết về thời gian , có lẽ họ muốn th của họ đợc
chuyển tiếp, chính vì thế mà hệ thống thực hiện điều này một cách tự động.
Hầu hết các hệ thống cho phép ngời sử dụng tạo các hộp th (mailboxes) để lu
trữ các th chuyển đến (incoming email). Các lệnh đợc ngời ta yêu cầu tạo và hủy bỏ
các hộp th, kiểm tra các nội dung hộp th, chèn và xóa các thông điệp khỏi hộp th, v..v.
Những ngời giám đốc công ty thờng cần gửi một thông điệp đến mỗi ngời trong
số những ngời cấp dới, những khách hàng, hay đến các nhà cung cấp. Thì điều này đa
ra một ý tởng về danh sách th (mailing list), nó là một danh sách các địa chỉ th điện tử.
Khi một thông điệp đợc gửi đến mailing list, các bản sao giống hệt đợc phát đến mọi
ngời có địa chỉ trên danh sách.
Một ý tởng quan trọng khác là th điện tử đợc đăng ký, để cho phép ngời gửi

(sender or originator) biết th của họ đã đến. Việc thông báo tự động của các th không
đợc phát đi một cách luân phiên để ngời ta có thể biết. Trong bất kỳ trờng hợp nào, ngời gửi nên có một số điều khiển thông qua thông báo những gì xảy ra.

Trang 14


02120

United Gizmo
180 Main St
Boston, MA
April, 5, 2001

Subject: Invoice 1081
Dear Mr. Dumkopf,
Our computer records
show that you still have not
paid the above invoice of
$0.00. Please send us a check
for $0.00 promptly.

(a)truly
Yous
United Gizmo

Envelope
Header

Mr. Daniel Dumkopf
18 Willow Lane

White Plains, NY 10604

Body



Name: Mr. Daniel Dumkopf
Street: 18 Willow Lane
State: NY
Zip code: 10604
Priority: Urgent
Encryption: None
From: United Gizmo
Address: 180 Main St
Location: Boston, MA 02120
Date: April, 5, 2001
Subject: Invoice 1081

Envelope

Dear Mr. Dumkopf,
Our computer records
show that you still have not
paid the above invoice of
$0.00. Please send us a check
for $0.00 promptly.

Messag
e


Yous truly
United Gizmo

(b)

Phong thư và thông điệp (a) Thư bưu điện. (b) Thư điện tử
Các đặc tính nâng cao khác là đồng gửi (carbon copies), th có mức u tiên cao
(high-priority email), bảo mật th (secret email) có nghĩa là thông điệp đợc mã hóa trớc
khi gửi đi, thay đổi ngời nhận th (alternative recipients) nếu ngời đầu tiên không có khả
năng nhận đợc, và các khả năng cho các cô th ký vận dụng th của các ông chủ của
mình.
Hiện nay th điện tử đợc sử dụng rộng rãi trong việc kinh doanh cho việc truyền
thông tin trong công ty. Nó cho phép các công nhân ở xa hợp tác về các dự án phức
tạp, ngay cả những nơi phải mất nhiều thời gian mới đến đợc. Một số công ty đã đánh
giá rằng th điện tử đã làm tăng năng suất sản xuất của họ lên 30 phần trăm (Perry and
Adam 1992).
Một khái niệm quan trọng trong tất cả các hệ thống th điện tử hiện đại là sự phân
biệt giữa phong bì (envelope) và các nội dung bên trong của nó. Phong bì bao bọc
(encapsulate) cả thông điệp. Nó chứa tất cả các thông tin cần thiết cho việc truyền tải
thông điệp, nh là địa chỉ đích, độ u tiên, và mức độ bảo mật , tất cả những cái đó đều
khác biệt với thông điệp bên trong nó. Các MTAs sử dụng phong bì cho việc định tuyến
đờng truyền, điều này cũng giống nh công việc của bu điện làm.
Thông điệp ở bên trong phong bì chứa hai phần: phần đầu th (header) và phần
thân th (body). Phần header chứa các thông tin điều khiển cho các UAs. Phần thân là
phần hoàn toàn dành cho ngời nhận th. Các phong bì và các thông điệp đợc mô tả trong
hình bên dới.

Trang 15



1.3.2. Tác nhân ngời sử dụng (The User Agent)
Các hệ thống th điện tử có hai phần cơ bản, nh chúng ta đã thấy gồm: phần UA và
phần MTA. Trong phần này chúng ta sẽ xét đến phần UA. Một UA thờng là một chơng
trình (đôi khi đợc gọi là bộ phận đọc th) nó nhận một trong những lệnh khác nhau nh là
cho mục đích soạn th, nhận th, và hồi đáp các thông điệp, cũng nh việc thao tác trên
các hộp th (mailboxes). Một số UA (User Agent) có giao diện trình đơn (menu) hay
biểu tợng (icon) khá hấp dẫn mà nó yêu cầu sử dụng chuột hoặc chấp nhận các lệnh 1
ký tự từ bàn phím có cùng chức năng với menu và các icon.
1.3.2.1.Gửỷi thử (Sending Email)
Để gửi đi một thông điệp, ngời sử dụng phải cung cấp thông điệp, địa chỉ đích và
một số tham số khác nếu có (ví dụ nh là mức u tiên hay bảo mật). Ngời sử dụng có thể
tạo thông điệp với một trình soạn thảo văn bản khác nhau, một chơng trình sử lý từ hay
với bộ soạn thảo đợc xây dựng trên UA. Địa chỉ đích phải có một định dạng mà làm
sao cho UA có thể hiểu đợc. Nhiều UA tiếp nhận các địa chỉ DNS (Domain Name
System) có dạng mailbox@location.
1.3.2.2. ẹoùc thử (Reading Email)
Khi UA đợc khởi động nó kiểm tra xem trong hộp th của ngời sử dụng có th gửi
đến không trớc khi hiển thị các thứ khác lên màn hình. Khi đó có lẽ nó sẽ thông báo
một số các thông điệp trong hộp th hay hiển thị một dòng vắn tắt của mỗi thông điệp
và chờ nhận lệnh để xử lý. Một ví dụ ở hình bên dới cho thấy một viễn cảnh sau khi
UA khởi động hiển thị những yêu cầu vắn tắt của các thông điệp. Trong ví dụ này hộp
th (mailbox) gồm có tám thông điệp.
Mỗi dòng hiển thị chứa một số trờng đợc trích ra từ phong th hay phần đầu
(header) của từng thông điệp đợc định vị trong hộp th. Trong một hệ thống th điện tử
đơn giản, sự lựa chọn của các trờng hiển thị đợc ngời ta xây dựng thành một chơng
trình. Trong các hệ thống phức tạp hơn, ngời sử dụng có thể xác định cho các trờng nào
đợc hiển thị bằng cách cung cấp một hiện trạng ngời sử dụng (User Profile), hay một
tệp mô tả định dạng hiển thị. Trong ví dụ này, trờng đầu tiên là số thông điệp có trong
hộp th. Trờng thứ hai, là các cờ có thể chứa một kí tự K, có nghĩa là thông điệp cũ đã đợc đọc kỳ trớc rồi và đợc lu lại trong hộp th; kí tự A có nghĩa là th này đã đợc hồi âm
rồi; ký tự F (có thể có), có nghĩa là th này đợc chuyển tiếp đến ngời khác. Các cờ khác

nữa cũng có thể đợc đa vào ngoài những cờ này.
#
1

Flags
K

Bytes
1030

Sender
Asw

Subject
Changes to MINIX

2

KA

6348

Radia

Comments on material you sent me

3

KF


4519

Amy N. Wong

Request for information

1236
103610

Bal
Kaashoek

Deadline for grant proposal
Text of DCS paper

4
5

Trang 16


6

1223

Emily E.

Pointer to WWW page

7

8

3110
1204

Saniya
Dmr

Referee reports for the page
Re: My students visit

Hiển thị các nội dung của hộp th.
Trờng thứ ba cho biết chiều dài của thông điệp và trờng thứ t cho biết ai là ngời
gửi thông điệp. Vì trờng này đợc trích ra từ các thông điệp rất đơn giản nên trờng này
có thể chứa các tên, họ tên đầy đủ, các tên viết tắt, các tên đăng nhập, hay bất cứ thứ gì
mà ngời gửi có thể đặt vào trong trờng này. Cuối cùng là trờng chủ đề th (Subject) cho
biết một câu vắn tắt về những gì trong nội dung thông điệp. Những ngời nào quên điền
vào trờng này thì thờng đợc cho là những câu trả lời cho th của họ là không chú ý đến
mức u tiên cao nhất.
Sau khi các phần đầu đã đợc hiển thị, ngời sử dụng có thể thực hiện bất cứ lệnh
nào có thể. Một chọn lựa tiêu biểu đợc liệt kê ở bảng bên dới (hình bên dới) là một ví
dụ khi một ngời sử dụng bằng hệ thống Mmdf của hệ điều hành UNIX. Có một số lệnh
yêu cầu có tham số. Ký hiệu # có nghĩa là chỉ số của một thông điệp (hay có thể có
nhiều thông điệp) đợc chấp nhận. Tơng tự, mẫu tự a có thể đợc sử dụng có nghĩa cho
tất cả các thông điệp.
1.3.2.3.ẹũnh daùng thoõng ủieọp (Message Formats)
Chúng ta bây giờ hãy quay đến từ giao diện ngời sử dụng đến định dạng của các
thông điệp th điện tử. Trớc tiên chúng ta xét th điện tử dựa trên bản mã ASCII sử dụng
chuẩn RFC 822 (Request for Comments). Sau đó xét đến các mở rộng đa phơng tiện
cho chuẩn RFC 822.

1.3.2.4.Chuaồn RFC 822
Các thông điệp bao gồm một phong bì gốc (đợc mô tả trong chuẩn RFC 821),
một số các trờng cho phần đầu (header), một dòng để trống và sau đó là phần thân
(body). Mỗi trờng header bao gồm các dòng văn bản ASCII chứa tên trờng, dấu hai
chấm, và cho hầu hết các trờng đều có một giá trị. RFC 822 là một chuẩn cũ và giữa
các trờng header của phong bì (envelope) không phân biệt rõ ràng nh một chuẩn mới
khác. Khi sử dụng, thông thờng UA xây dựng một thông điệp và đa nó qua bộ phận tác
nhân truyền thông điệp (message transfer agents - MTA), ở đây nó dùng một số các trờng header để xây dựng một envelope thực sự, thông điệp đợc thay đổi bởi cái cũ đi
một chút cùng với envelope.
Command
H
C
T
S
F
A
D
Trang 17

Parameter
#
#
Address
#
#
#

Description
Display header(s) on the screen
Display current header only

Type message(s) on the screen
Send a message
Forward message(s)
Answer message(s)
Delete message(s)


U
M
K
R
N
B
G
E

#
#
#
Mailbox

#

Undelete previously deleted message(s)
Move message(s) to another mailbox
Keep message(s) after exiting
Read a new mailbox
Go to the next message and display it
Backup to the previous message and display it
Go to a specific message but do not display it

Exit the mail system and update the mailbox
Các lệnh điều khiển th đặc biệt

Các trờng header chủ yếu liên quan đến việc chuyển giao thông điệp đợc liệt kê
dới bảng sau. Trờng To: trờng này cho biết địa chỉ DNS của ngời nhận đầu tiên. Trờng
hợp nhiều ngời nhận cũng có thể cho phép. Trờng Cc: cho biết địa chỉ của những ngời
nhận kế tiếp (còn gọi là địa chỉ đồng gửi). Trong các thuật ngữ của việc phát th, không
có sự phân biệt giữa những ngời nhận thứ nhất và ngời nhận thứ hai. Thuật ngữ Cc
(Carbon copy) là một mẫu đã đợc xác định, vì máy tính không sử dụng các trang giấy
bản sao. Trờng Bcc: (Blind carbon copy) giống nh trờng Cc: chỉ trừ là dòng này đợc
xóa khỏi tất cả các bản sao đợc gửi đến những ngời nhận đầu tiên và ngời nhận thứ hai.
Đặc tính này cho phép ngời ta gửi các bản sao đến những ngời trong nhóm thứ ba mà
trong đó không có ngời thứ nhất và ngời thứ hai biết.
Header
To:
Cc:
Bcc:
From:
Sender:
Received:
Return-Path:

Meaning
Email address(es) of primary recipient(s)
Email address(es) of secondary recipient(s)
Email address(es) for blind carbon copies
Person or people who created the message
Email address of the actual sender
Line added by each transfer agent along the route
Can be used to identify a path back to the sender


Các trờng header RFC 822 liên quan trong việc truyền thông điệp
Hai trờng kế tiếp, From: và Sender: cho biết để phân biệt ngời viết và ngời gửi
thông điệp. Hai trờng này hoàn toàn không giống nhau. Ví dụ một nhà quản trị doanh
nghiệp có thể viết một thông điệp nhng cô th ký là ngời thật sự truyền nó đi. Trong trờng hợp này, ngời quản trị phải đợc liệt kê vào trong trờng From: và cô th ký trong trờng Sender:.
Header
Date:
Reply-To:
Message-Id:
In-Reply-To:
Trang 18

Meaning
The date and time the message was sent
Email address to which replies should be sent
Unique number for referencing this message latter
Message-Id of the message to which this is a reply


References:
Keywords:
Subject:

Other relevant Message-Ids
User chosen keywords
Short summary of the message for the one-line display

Mét sè trêng ®ỵc sư dơng trong header th«ng ®iƯp RFC 822.
Trêng From: yªu cÇu ph¶i cã cßn trêng Sender: cã thĨ ®ỵc bá qua nÕu viƯc viÕt
vµ gưi cïng mét ngêi. C¸c trêng nµy cÇn thiÕt khi trong trêng hỵp th«ng ®iƯp kh«ng ®ỵc ph¸t ®i vµ ph¶i ®ỵc tr¶ l¹i cho ngêi gưi.

Dßng chøa trêng Received: ®ỵc ®a vµo bëi c¸c MTAs däc theo ®êng trun.
Dßng nµy chøa ®Þnh danh cđa agent, ngµy th¸ng vµ thêi gian th«ng ®iƯp ®ỵc nhËn, vµ
c¸c th«ng tin kh¸c cã thĨ ®ỵc sư dơng cho viƯc t×m kiÕm c¸c lçi trong hƯ thèng ®Þnh
tun.
Trêng Return-Path: ®ỵc ®a vµo bëi MTAs ci cïng vµ ®ỵc dïng cho viƯc gưi
trë l¹i ngêi gưi. Theo lý thut, th«ng tin nµy cã thĨ ®ỵc tËp hỵp l¹i tõ c¸c header
Received: (lo¹i trõ tªn cđa hép th ngêi gưi), nhng nã Ýt khi ®ỵc ®iỊn ®Çy ®đ nh thÕ vµ
chØ ®Ỉc biƯt chøa ®Þa chØ cđa ngêi gưi.
Thªm vµo c¸c trêng cđa h×nh bªn díi c¸c th«ng ®iƯp RFC 822 còng cã thĨ chøa
mét trong sè c¸c trêng kh¸c ®ỵc sư dơng bëi c¸c UA hay nh÷ng ngêi nhËn th. Nh÷ng
trêng th«ng thêng nhÊt ®ỵc liƯt kª trong h×nh bªn díi. HÇu hÕt nh÷ng trêng nµy cã tÝnh
c¸ch gi¶i thÝch, v× thÕ chóng ta kh«ng ®i s©u vµo tõng chi tiÕt.

1.4.PHÂN TÍCH CẤU TRÚC THƯ ĐIỆN TỬ, CÁC GIAO THỨC SMTP
VÀ POP3
1.4.1.Phân tích cấu trúc thư điện tử (RFC 822)
1.4.1.1. Giíi thiƯu
§Ĩ cã thĨ chun giao th gi÷a c¸c m¸y tÝnh trªn m¹ng, th cÇn ph¶i ®ỵc cÊu tróc
theo mét chn nµo ®ã. Th«ng thêng, mét bøc th ®ỵc cÊu t¹o bëi hai phÇn lµ phong b×
(envelope) vµ néi dung (body). Kh¸i niƯm nµy hoµn toµn gièng nh trong hƯ thèng bu
chÝnh th«ng thêng.
Trong khi phÇn phong b× chøa ®ùng nh÷ng th«ng tin cÇn thiÕt ®Ĩ cã thĨ thiÕt lËp
c¸c liªn kÕt trun th«ng vµ ph©n ph¸t th ®i, th× phÇn néi dung l¹i chøa ®ùng nh÷ng
th«ng tin vỊ ngêi gưi, ngµy gưi,...
Th thêng bao gåm nhiỊu dßng v¨n b¶n. Nã kh«ng cung cÊp nh÷ng tÝnh n¨ng
riªng biƯt nh: m· ho¸ c¸c h×nh vÏ, c¸c b¶n sao, tiÕng nãi hc nh÷ng v¨n b¶n cã cÊu
tróc. H¬n n÷a, nã còng kh«ng cã sù quan t©m ®Ỉc biƯt ®èi víi viƯc nÐn d÷ liƯu, viƯc
trun th«ng hc viƯc lu tr÷ cã hiƯu qu¶.
CÊu tróc th bao gåm mét sè trêng th«ng tin tu©n theo c¸c có ph¸p nghiªm ngỈt.
VÝ dơ nh gi÷a phÇn tiªu ®Ị th (header) vµ phÇn néi dung th (content) ph¶i cã mét dßng

trèng ng¨n c¸ch,...

Trang 19


1.4.1.2. Moõ taỷ ve caỏu truực thử
Một bức th bao gồm các trờng header và phần body. Phần body là các dòng văn
bản kí tự theo bảng mã ASCII. Nó đợc phân cách với phần header bởi một dòng trống.

1.4.1.2.1. Các trờng header dài
Mỗi trờng header có thể đợc xem nh một dòng văn bản các kí tự theo bảng mã
ASCII, cấu thành bởi tên trờng (field-name) và nội dung của trờng (field-body).
Để thuận tiện cho việc so sánh, phần field-body có thể đợc chia ra làm nhiều
dòng. Quá trình chia này đợc gọi là folding. Ví dụ:
To: "Joe & J. Harvey" <ddd @Org>, JJV @ BBN

có thể đợc thay thế bằng:
To: "Joe & J. Harvey" <ddd @ Org>,
JJV@BBN
và:
To: "Joe & J. Harvey"
<ddd@ Org>, JJV
@BBN
hay:
To: "Joe &
J. Harvey" <ddd @ Org>, JJV @ BBN

Quá trình thực hiện ngợc lại để kết hợp nhiều dòng header đã đợc folding nh trên
đợc gọi là: unfolding. Unfolding đợc thực hiện bằng cách bỏ cặp kí tự CRLF và thay
bằng một dấu cách trống.


1.4.1.2.2. Các trờng header có cấu trúc
Mỗi trờng có cấu trúc bao gồm một field-name, tiếp theo là dấu hai chấm (:),
sau đó field-body và cuối cùng là cặp kí tự CRLF.
<field-name> : <field-body> <CRLF>

Phần field-name là các kí tự in đợc trong bảng mã ASCII (có mã từ 33 đến 126,
các kí tự số, ngoại trừ dấu hai chấm).
Phần field-body có thể chứa bất kì kí tự ASCII nào, ngoại trừ cặp kí tự CRLF.
Các trờng thông tin header thực tế có thể đợc so sánh bởi các một vài hệ thống th
tín. Các trờng này đợc gọi là trờng có cấu trúc. Ví dụ nh các trờng chứa đựng thông tin
về Date, Address,.v.v. Một số trờng khác nh Subject và Comments chỉ đợc coi nh
một dòng văn bản bình thờng.
Chú ý, bất kỳ trờng nào mà phần field-body đợc định nghĩa khác đi không phải là
một dòng văn bản đơn thuần thì đợc gọi là trờng có cấu trúc.

1.4.1.2.3. Các trờng header không có cấu trúc
Một số trờng nh Subject và Comments không đợc coi là các trờng có cấu trúc
và chúng đợc xem nh một dòng văn bản đơn thuần cũng nh nội dung th trong phần
body.

Trang 20


1.4.2. Định nghĩa về các trờng Header
Các luật ngữ nghĩa ở đây đợc trình bày theo sự so sánh mức cao. Nó không dành
riêng cho trờng nào. Mục đích của nó là để trợ giúp việc so sánh và phân tích thông tin
ở các trờng.
Cấu trúc chung có dạng:
field = <field-name> : [field-body] CRLF

field-name = 1*<any CHAR, excluding CTLs,SPACE,and :>
field-body
= *text<CRLF LWSP-char field-body>

1.4.3. Các trờng header điển hình

a. Trờng RETURN-PATH
<Return> = Return-Path : route-addr

Trờng thông tin này đợc hệ thống truyền tải th tín cuối cùng (là hệ thống cuối
cùng phát th cho ngời nhận của nó) thêm vào phần header của th. Nó đợc dùng để chứa
đựng những thông tin về địa chỉ trả về (return-address) của ngời gửi ban đầu.

b. Trờng RECEIVED

<Received> = Received-From : domain

Một bản sao của trờng thông tin này sẽ đợc thêm vào bởi mỗi một hệ thống
truyền tải thông điệp mà th đợc chuyển qua. Thông tin ở trờng này rất hữu ích trong trờng hợp xảy ra lỗi trong truyền thông.
Trờng thông tin này dùng để xác định tên của máy chủ gửi (sending host), máy
chủ nhận và thời gian nhận đợc.

c. Trờng FORWARD
<Forward> = Forward-Path : route-addr

Trờng thông tin này đợc hệ thống truyền tải th tín cuối cùng (là hệ thống cuối
cùng phát th cho ngời nhận của nó) thêm vào phần header của th. Nó đợc dùng để chứa
đựng những thông tin về địa chỉ của ngời nhận th.

d. Trờng FROM


<From> = From : mailbox

Trờng thông tin này chứa đựng thông tin về ngời gửi th (sender). Quá trình gửi th
cần ngầm định trờng này là đơn. Nó xác minh địa chỉ máy tính, xác nhận bên gửi là
một ngời, hệ thống hay một tiến trình. Nếu công việc này không đợc thực hiện thì phải
thay thế bằng trờng Sender

e. Trờng DATE
<Dates> = Date : date-time

Trờng này chứa đựng thông tin về ngày, giờ gửi th.

f. Trờng TO

<To> = To : mailbox

Trờng này chứa đựng thông tin về ngời nhận th (recipient) chính thức.

g. Trờng CC
<cc> = cc : address
Trang 21


Trờng này chứa đựng thông tin về ngời nhận th thứ hai, có nghĩa đồng gửi
(carbon copy-cc).

h. Trờng BCC

<bcc> = bcc : address


Trờng này chứa đựng thông tin thêm về ngời nhận th (blind carbon copy-bcc).
Nội dung của trờng này không chứa đựng trong bản sao th gửi cho ngời nhận thứ đầu
tiên và ngời nhận th hai.

i. Trờng MESSAGE-ID
<Message-ID> = Message-ID : msg-id

Trờng này chứa đựng thông tin định danh duy nhất về bức th đợc gửi đi. Tính duy
nhất của trờng này đợc bảo đảm bởi hệ thống sinh ra nó. Trờng này đợc dùng để dành
riêng cho máy tính và không cần thiết đối với ngời sử dụng.

j. Trờng SUBJECT

<Subject> = Subject : text

Trờng này chứa đựng thông tin về tiêu đề th cần gửi.
1.4.4. Ví dụ về cấu trúc th
Date: 26 Aug 76 1430 EDT
From: George Jones <Group@Host>
Sender: Secy@SHOST
To: Al Neuman@Mad-Host,
Sam.Irving@Other-Host
Message-ID: <some.string@SHOST>
Subject: Test
...

1.5. PHAN TCH GIAO THệC SMTP (RFC 821)
1.5.1. Giới thiệu chung
Mục đích của giao thức SMTP (Simple Mail Transfer Protocol) là để truyền th

đáng tin cậy và có hiệu quả.
SMTP đọc lập về hệ thống con truyền thông đặc biệt và các yêu cầu chỉ tin cậy
theo kênh luồng dữ liệu tuần tự.
Đặc tính quan trọng của SMTP là khả năng chuyển tiếp th tín qua các môi trờng
dịch vụ truyền thông (transport service). Dịch vụ truyền thông cung cấp một môi trờng
truyền thông liên quá trình (interprocess communication environment - IPCE). IPCE
có thể là một mạng, nhiều mạng hay một tập hợp con của một mạng. Điều quan trọng
để nhận thấy rằng các hệ thống truyền thông (IPCEs) không phải là việc truyền thông
tơng ứng một tới một (one-to-one) với các mạng. Một tiến trình có thể truyền thông
qua lại trực tiếp với một tiến trình khác thông qua bất kỳ một IPCE đã đợc biết. Th tín
là một ứng dụng hay là việc sử dụng truyền thông liên tiến trình. Th tín có thể đợc
truyền qua giữa các tiến trình theo các IPCEs khác nhau bắng cách chuyển tiếp qua
một tiến tiến trình đợc kết nối tới hai hay nhiều IPCEs. Đặc biệt hơn nữa, th tín có thể
Trang 22


đợc chuyển tiếp giữa các máy chủ (hosts) trên các hệ thống truyền thông khác nhau bởi
một máy chủ trên cả hai hệ thống truyền thông.
Giao thức SMTP định nghĩa cách để chuyển giao th tín trực tiếp giữa các máy
tính trên mạng. Nó có hai vai trò là gửi (sender-SMTP) và nhận (receiver-SMTP) th.
Thông thờng, bên gửi thiết lập một liên kết TCP với bên nhận, và bên nhận sử dụng
cổng truyền thông số 25 để cung cấp dịch vụ th tín điện tử.
Trong một phiên giao dịch th tín, bên gửi và bên nhận trao đổi tuần tự các lệnh và
các thông tin phản hồi.
1.5.2. Mô hình hoạt động phiên giao dịch
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.

User
User
Sender
Sender
SMTP
SMTP

SMTP
Commands / Replies

Receiver
Receiver
SMTP
SMTP

and Mail
File
File
System
System

File
File
System

System
Sender - SMTP

Receiver - SMTP

Để

thực
Mô hình tổng quát sử dụng giao thức SMTP
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.
Trang 23


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 xoá 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 <reversepath> để 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.
Thông tin phản hồi:

250 OK

Trờng hợp còn lại bị lỗi.

Ví dụ:

S: MAIL FROM: <>
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.

Trang 24


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: <>
R: 250 OK
S: rcpt to: <>
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 toà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: <>
R: 250 OK
S: RCPT TO: <>
R: 250 OK
S: RCPT TO: <>
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
Trang 25


×