CÁC GIAO THỨC ÐỒNG BỘ

Một phần của tài liệu Giáo trình truyền dữ liệu (Trang 97 - 115)

CÁC CHUẨN GIAO TIẾP

6.2 CÁC GIAO THỨC ÐỒNG BỘ

Một hệ thống thụng tin cú thể ủược ủịnh dạng bằng cỏc giao thức khỏc nhau.

Trong chế ủộ truyền ủồng bộ, cú thể chia giao thức ra làm hai loại :

- Giao thức ủiều khiển Byte hay ký tự (Byte - Controlled Protocol, BCP, hay Character-Oriented Protocol).

- Giao thức hướng Bit (Bit - Orientied Protocol, BOP).

- Trong giao thức ủiều khiển byte (BCP), khối dữ liệu bao gồm nhiều ký tự, mỗi ký tự là một ủơn vị thụng tin (7 hoặc 8 bit) và cỏc thụng tin ủiều khiển cũng xuất hiện dưới dạng từ. Cỏc ký tự dữ liệu (bản tin chớnh thức) hợp với từ ủiều khiển thành một khung thụng tin.

Một khung thụng tin thường bắt ủầu bằng một hay nhiều từ dựng cho sự ủồng bộ, thường là từ SYNC, nú bỏo cho mỏy thu biết bắt ủầu một khối dữ liệu. Ngoài ra, trước và sau bản tin chớnh thức cũn cú cỏc từ ủiều khiển, bao gồm cỏc ủịa chỉ cỏc ủài, trạm, cỏc từ bỏo bắt ủầu và kết thúc văn bản, các từ báo mã kiểm tra lỗi ...

- Trong giao thức hướng bit (BOP), khối dữ liệu xem như một chuỗi bit, cỏc từ ủiều khiển và ký tự dữ liệu không hẳn là các từ 8 bit mà có thể là một tập hợp các bit tùy theo giao thức cụ thể.

Giống như trong BCP, bắt ủầu khối tin cũng cú tớn hiệu bỏo, ủú là từ 8 bit gọi là Cờ (Flag) , cờ này cũng ủược ủặt ở cuối bản tin. Như vậy tỏc dụng của cờ là thiết lập sự ủồng bộ và ủỏnh dấu ủiểm bắt ủầu và ủiểm kết thỳc. Khối dữ liệu bao gồm cả cỏc cờ hỡnh thành một Khung (Frame). Trước và sau bản tin chớnh thức cú cỏc từ ủiều khiển, ủược gọi chung là Trường ủiều khiển (Control Field). Tất cả qui ủịnh chi tiết về bản tin, cỏc thụng bỏo hỏi nhận ủều thực hiện trong trường ủiều khiển này. (H 6.2) cho ta hai dạng khung của hai protocol này

(H 6.2) Chỳng ta giới thiệu dưới ủõy:

- Giao thức ủiều khiển byte ủược ủề nghị bởi IBM vào năm 1964 và ủược sử dụng rất rộng rói trong cỏc ứng dụng ủiểm - ủiểm (poin - point) và nhiều ủiểm (multipoint) với cỏc phương thức ủơn cụng và bỏn song cụng. éú là giao thức truyền ủồng bộ nhị phõn (Binary Synchronous Communication, BSC, ủụi khi gọi là BISYNC). Giao thức BSC ủược ISO lấy làm cơ sở ủể xõy dựng giao thức hướng ký tự chuẩn quốc tế với tờn Basic Mode (dữ liệu dùng mã EBCDIC thay cho mã ASCII và mã dò sai là CRC thay cho BCC)

- Giao thức hướng bit, do hãng IBM phát triển và sử dụng có tên là Ðiều khiển liên kết dữ liệu ủồng bộ (Synchronous Data Link Control - SDLC) và ISO lấy làm cơ sở ủể phỏt triển thành giao thức ủiều khiển liờn kết dữ liệu mức cao (High Level Data Link Control, HDLC).

6.2.1 Giao thức ủồng bộ nhị phõn . 6.2.2 Giao thức hướng bit .

6.2.1 Giao thức ủồng bộ nhị phõn :

éõy là giao thức ủiều khiển việc truyền nhận dữ liệu nhờ một số ký tự ủặc biệt trong cỏc bảng mó. Cỏc thụng tin dữ liệu ủược gửi ủi trong cỏc khung dữ liệu mà hai biờn là cỏc ký tự SYNC ủể bỏo mỏy thu biết bắt ủầu bản tin.

Cỏc từ ủiều khiển dựng trong BISYNC lấy từ bản mó ASCII, gồm một số từ như sau : SYN Ký tự ủồng bộ mó ASCII dạng Hex 16H

SOH Ký tự bắt ủầu của Header 01H STX Ký tự bắt ủầu văn bản 02H ETX Ký tự kết thúc văn bản 03H EOT Ký tự kết thúc phát 04H ETB Ký tự kết thúc truyền khối 17H ENQ Ký tự hỏi 05H ACK Ký tự bỏo cho biết ủó nhận dữ liệu 06H NAK Ký tự báo cho biết chưa nhận dữ liệu 15H NUL Ký tự rỗng 00H DLE Ký tự giải phúng ủường dữ liệu 10H CAN Ký tự hủy 18H

Một khung dữ liệu của BISYNC tiêu biểu có cấu trúc sau :

SYN SYN SOH header STX text ETX BCC Ðầu Cuối

- Phần văn bản (text) chứa dữ liệu thông tin. Kích thước vùng text có giới hạn nên với các văn bản lớn người ta chia thành những khối nhỏ (block) và trong phần Header có phần identifier (id) ủể chỉ thứ tự cỏc khối.

- Phần header chứa ủiạ chỉ ủến và tớn hiệu trả lời ACK/NAK nếu cú yờu cầu.

- BCC là ký tự 1 Byte dựng kiểm tra khung. éõy là byte duy nhất ủược tạo ra ủể kiểm tra lỗi trong toàn khối. BCC có thể là một phép kiểm tra chẵn lẻ (dùng trong BSC), hoặc chặc chẽ hơn là kiểm tra dư thừa theo chu kỳ ( Cycle Redundancy Check, CRC ) (Dùng trong Basic Mode, với CRC - 16).

Dưới ủõy là vớ dụ truyền chữ TEST và kiểm tra chẵn lẻ theo hàng

STX T E S T EXT BCC

0 1 0 0 0 0 0 1

0 0 1 0 1 0 1 1

1 0 1 0 0 0 1 1

1 1 0 0 1 0 1 0

0 0 1 0 1 0 1 1

1 1 0 0 0 0 0 0

1 1 1 0 1 0 0 0

b0

b1

b2

b3

b4

b5

b6

b7

éối với vớ dụ trờn cỏc bit sẽ ủược truyền như sau :

STX T E S T ETX BCC

01000001 00101011 10100011 11001010 00101011 11000000 11101000 Ðầu Cuối

Trong ví dụ này người ta dùng kiểm tra chẵn và BCC chỉ kiểm tra các ký tự từ STX ủến ETX. Trờn thực tế, sự kiểm tra ủược thực hiện trờn toàn khối (từ SOH ủến ETX).

Khi nhận ủược bản tin, mỏy thu thực hiện phộp tớnh kiểm tra tổng, so sỏnh với BCC nhận ủược, sau ủú sẽ trả lời bằng tớn hiệu ACK (éỳng) hoặc NAK (Khụng ủỳng).

Mỏy phỏt sẽ khụng gửi bản tin khỏc khi chưa ủược xỏc nhận rằng bản tin trước ủó nhận ủỳng (phương thức bỏn song cụng).

Dưới ủõy là một số thủ tục chớnh trong BSC/Basic Mode:

- Mời truyền tin:

Giả sử trạm A muốn mời trạm B truyền tin, trạm A sẽ gửi lệnh sau ủõy tới B:

EOT B ENQ

Trong ủú B là ủịa chỉ của trạm ủược mời truyền tin EOT ủể chuyển liờn kết sang trạng thỏi ủiều khiển Khi B nhận ủược lệnh này, cú thể xảy ra 2 trường hợp:

- Nếu B cú tin ủể truyền thỡ B tạo cấu trỳc tin theo dạng chuẩn và gửi ủi

- Nếu B khụng cú tin ủể truyền thỡ gửi ủi lệnh EOT ủể trả lời

Ở phớa A một khoảng thời gian xỏc ủịnh sau khi gửi lệnh ủi mà khụng ủược trả lời hoặc nhận ủược trả lời sai thỡ A sẽ chuyển sang trạng thỏi phục hồi (Recovery state).

- Mời nhận tin:

Giả sử trạm A muốn mời trạm B nhận tin, trạm A sẽ gửi lệnh sau ủõy tới B:

EOT B ENQ Trong ủú EOT cú thể vắng mặt.

Khi nhận ủược lệnh này, nếu B sẵn sàng nhận tin thỡ nú gửi lệnh ACK ủể trả lời, nếu không thì gửi lệnh NAK

Ở phớa A một khoảng thời gian xỏc ủịnh sau khi gửi lệnh ủi mà khụng ủược trả lời hoặc nhận ủược trả lời sai thỡ A sẽ chuyển sang trạng thỏi phục hồi (Recovery state).

- Yêu cầu trả lời:

Khi một trạm cần trạm kia trả lời một yờu cầu nào ủú ủó gửi ủi trước ủú thỡ nú chỉ cần gửi lệnh ENQ ủến trạm kia

- Ngừng truyền tin (tạm thời): Gửi lệnh EOT - Giải phóng liên kết: Gửi lệnh DLE EOT

- Trạng thỏi phục hồi: Khi một trạm nào ủú ủi vào trạng thỏi "phục hồi" nú sẽ thực hiện một trong cỏc hành ủộng sau:

- Lặp lại lệnh ủó gửi ủi n lần (n là số nguyờn chọn trước) hoặc - Gửi "yêu cầu trả lời" n lần hoặc kết thúc truyền bằng lệnh EOT - Chế ủộ thụng suốt (Transparent Mode).

Trong trường hợp cỏc mó ủiều khiển xuất hiện trong văn bản (Text) nhưng khụng mang ý nghĩa ủiều khiển mà phải ủược hiểu như là dữ liệu, hệ thống ủược chuyển sang chế ủộ thụng suốt bằng cỏch dựng ký tự DLE ủặt trước STX và DLE ủặt trước ETX ủể chấm dứt chế ủộ này.

6.2.2 Giao thức hướng bit :

Giao thức hướng bit ủược thiết kế ủể thoả món nhiều yờu cầu trong cỏch truyền ủồng bộ, bao gồm :

- Truyền giữa hai ủài (trạm) (point to point) hay nhiều ủài (multipoint).

- Bán song công hay song công.

- Liên lạc giữa trạm sơ cấp và trạm thứ cấp.

- Liên lạc với khoảng cách ngắn (nối trực tiếp), hoặc rất xa (vệ tinh).

Giao thức này có một số tính chất sau :

- Người sử dụng có thể sử dụng bất cứ loại mã nào.

- Cú khả năng thớch hợp với nhiều loại ủường truyền.

- Hiệu suất cao : giảm tối thiểu tỉ lệ hao hụt.

- Ðộ tin cậy cao : cho phép kiểm tra lỗi có hiệu quả và có khả năng phục hồi dữ liệu.

Cú thể núi cỏc tớnh chất của giao thức hướng bit ủược thể hiện ở trường ủiều khiển bởi cỏc tổ hợp bit mó húa cỏc từ ủiều khiển.

Cú nhiều giao thức hướng bit ủó ủược ủề nghị bởi cỏc cơ quan khỏc nhau và ủược sử dụng rộng rãi :

- Thủ tục ủiều khiển thụng tin dữ liệu cao cấp (Advanced Data Communication Control Procedure - ADCCP) phát triển bởi Viện chuẩn quốc gia Hoa Kỳ (American National Standard Institute - ANSI) ủõy là chuẩn trong hệ thống thụng tin quốc gia.

- Thủ tục truy xuất ủường truyền cõn bằng (Link Access Procedure, balance - LAP-B) thực hiện bởi Hội ủồng Tư vấn éiện tớn và éiện thoại quốc tế (International Telegraph &

Telephone Consultative Committee - CCITT). Ðây là một chuẩn về mạng.

- éiều khiển liờn kết dữ liệu ủồng bộ (Synchronous Data Link Control - SDLC) ủược dựng bởi hóng IBM (International Business Machine Corporation) và ISO lấy làm cơ sở ủể phỏt triển thành giao thức ủiều khiển liờn kết dữ liệu mức cao (High Level Data Link Control, HDLC).

Thật ra không có mấy khác biệt giữa các chuẩn nói trên: HDLC và ADCCP có thể xem là một còn LAP-B và SDLC là những tập con của HDLC.

Phần sau ủõy sẽ bàn tới chuẩn SDLC.

6.2.2.1 Ðặc tính cơ bản . 6.2.2.2 Cấu trúc của khung . 6.2.2.3 Vận hành .

6.2.2.4 So sánh giữa Bisynch và SDLC .

6.2.2.5 Giao thức Ðiều khiển liên kết dữ liệu cấp cao .

6.2.2.1 Ðặc tính cơ bản :

SDLC ủịnh nghĩa 3 loại trạm, 2 dạng truyền và 2 chế ủộ vận hành.

* 3 loại trạm:

- Trạm sơ cấp: (Primary) cú trỏch nhiệm ủiều khiển vận hành của hệ thống, những khung phát bởi trạm sơ cấp gọi là lệnh (command)

- Trạm thứ cấp: (secondary) vận hành dưới sự ủiều khiển của trạm sơ cấp, những khung phỏt bởi trạm thứ cấp là lời ủỏp (response) Trạm sơ cấp duy trỡ việc nối logic với từng trạm thứ cấp trong hệ thống một cách riêng rẻ .

- Trạm hỗn hợp: Cỏc trạm ủồng thời giữ vai trũ sơ và thứ cấp.

* 2 dạng truyền:

- Dạng không cân bằng : dùng giữa 2 trạm hoặc nhiều trạm, gồm một trạm sơ cấp và một hoặc nhiều trạm thứ cấp, có thể truyền song công và bán song công.

- Dạng cân bằng : chỉ dùng giữa 2 trạm hỗn hợp, có thể truyền song công hoặc bán song công.

* 2 chế ủộ vận hành :

- Chế ủộ trả lời chuẩn (Normal Response Mode - NRM) : ủõy là một dạng truyền khụng cõn bằng, một trạm sơ cấp cú thể khởi ủộng ủể truyền dữ liệu ủến trạm thứ cấp và trạm thứ cấp chỉ cú thể truyền dữ liệu ủể trả lời khi trạm sơ cấp yờu cầu.

- Chế ủộ bỡnh thường khụng kết nối (DISC) : Ở chế ủộ này trạm thứ cấp nhận tin nhưng khụng tỏc ủộng ủược vào bản tin.

(H 6.3) mô tả dạng truyền cân bằng và không cân bằng.

Primar y

Commands→



← Responses



↓ 

 

Secondar y

Secondar y

(a) Dạng không cân bằng

Combined

← Commands → --- -- ← Responses →

Combined

b) Dạng cân bằng (H 6.3)

6.2.2.2 Cấu trúc của khung : (H 6.4)

Một khung thụng tin trong SDLC gồm cỏc trường sau ủõy : - Cờ : 8 bit

- Ðiạ chỉ : 1 byte.

- Ðiều khiển : 8 bit.

- Thụng tin : thay ủổi theo bản tin.

- Chuỗi kiểm tra khung (Frame Check Sequence - FCS) : 16 bit.

- Cờ : 8 bit.

Cỏc trường cờ, ủiạ chỉ và ủiều khiển ủặt trước trường thụng tin gọi là ủầu khung (header) và cỏc trường FCS và cờ ủặt sau trường thụng tin gọi là cuối khung (Trailer). (H 6.4) cho dạng của khung và các trường trong khung

FLAG AADDRESS CONTROL INFORMATION FCS FLAG

←8 bit→ ←8 bit → ← 8bit→ ← variable → ← 16 bit→ ← 8 bit → (H 6.4) Dạng khung thông tin SDLC

a. Trường cờ . b. Trường ủịa chỉ . c. Trường ủiều khiển . d. Trường thông tin .

e. Trường kiểm tra khung . a. Trường cờ (Flag Field) :

Trường cờ ủặt ở ủầu và cuối một khung ủể giới hạn khung, gồm 8 bit theo qui ủịnh là 01111110 (6 bit 1 liên tiếp giữa 2 bit 0 ).

Giữa 2 khung cú thể cú một trong cỏc trường hợp sau ủõy:

- Một cờ xuất hiện giữa bản tin gọi là cờ ủơn vừa dựng chấm dứt một khung ủồng thời bắt ủầu một khung khỏc.

- Một cờ chấm dứt khung trước và một cờ bắt ủầu khung sau. Giữa 2 cờ này cú thể chỉ dùng một bit 0.

- Có thể chèn vào giữa 2 cờ một số cờ khác.

Khung x : Khung x+1 . . . . 01111110 . . . .

. . . . 01111110 : 01111110 . . . . . . . . 011111101111110 . . . .

. . . . 01111110 01111110 : 01111110 01111110 . . . .

Do SDLC khụng cú qui ủịnh chặc chẽ về mó dựng cho dữ liệu nờn cỏc mó cú dạng của cờ có thể xuất hiện trong bản tin và gây nên nhằm lẫn ở máy thu. Ðể tránh sự sai sót này, máy phát dùng kỹ thuật nhồi bit nghĩa là khi thấy trong chuỗi dữ liệu có 5 bit 1 liên tiếp thì thêm vào bit 0 ngay sau 5 bit 1 này. Ở máy thu sau tín hiệu có khi gặp liên tiếp 5 bit 1 thì tự ủộng bỏ bit 0 theo sau ủú ủể phục hồi dữ liệu. Như vậy bảo ủảm sự chớnh xỏc của dữ liệu.

Thớ dụ: Trạm B cú ủịa chỉ là C2 phỏt ủi văn bản “C?”

- Khung thông tin chưa nhồi bit: (Viết theo chiều mũi tên hướng về bên trái) 01111110 01000011 01111110 11111110 11000011 11110110

Cờ ð/c= C2 TðK mã ″=7F mã C= C3 mã ?= 6F 11111110 FCS 01111110 111111111111. . . .

″=7F Cờ Bit nghỉ - Khung thông tin có bit nhồi (o):

01111110 01000011 011111o10 11111o110 11000011 111o10110 Cờ ð/c= C2 TðK mã ″=7F mã C= C3 mã ?=

6F

11111o110 FCS 01111110 111111111111. . . . ″=7F Cờ Bit nghỉ b. Trường ủịa chỉ (Address field) :

Trường ủịa chỉ dựng ủể xỏc ủịnh trạm thứ cấp trong hệ thống. éịa chỉ trong bản tin luụn luụn là ủịa chỉ của trạm thứ cấp dự nú do trạm sơ cấp hay thứ cấp gửi ủi.

Trường này không cần thiết trong trường hợp hệ thống chỉ gồm hai trạm.

Trường ủịa chỉ dài 8 bớt. Nếu tất cả cỏc bit trong trường ủịa chỉ ủều =1 cú nghĩa trạm sơ cấp yêu cầu liên lạc với tất cả trạm thứ cấp.

Giỏ trị 00 khụng ủược xem là một ủịa chỉ (gọi là void address) c. Trường ủiều khiển (Control field) (H 6.5) :

SDLC ủịnh nghĩa 3 loại khung của trường ủiều khiển, mỗi loại cú dạng khỏc nhau Một hoặc hai bớt ủầu tiờn của trường ủiều khiển dựng ủịnh nghĩa khung : bớt thứ nhất

= 0 chỉ khung thông tin, bít thứ nhất và hai = 10 chỉ khung giám sát và = 11 chỉ khung không số. Những bớt cũn lại ủược tổ chức như những tập bớt con mà ý nghĩa của nú sẽ ủược giải thớch cụ thể ủối với từng loại khung.

Một frame của SDLC ủược coi là bất hợp lệ nếu nú khụng ủược ủúng khung bởi 2 Cờ ở hai ủầu hoặc cú tổng kớch thước cỏc vựng nằm giữa 2 Cờ nhỏ hơn 32 bớt.

1 (LSB) 2 3 4 5 6 7 8

I : Information 0 Ns P/F Nr

S : Supervisory 1 0 S P/F Nr

U : Unnumbered 1 1 M P/F M

Ns = Send sequence number Nr = Receive sequence number S = Supervisory function bits M = Unnumbered function bits P/F = Poll/Final bit

(H 6.5) Dạng trường ủiều khiển

- Khung loại I: (Thụng tin, Information frame, I-frame) , ủõy là khung chứa bản tin cần phỏt ủi của người sử dụng.

Khi khung I ủược dựng thỡ bản văn phỏt ủi ủược ủỏnh số thứ tự.

Bit 5 trong khung thông tin có tên là bit P/F (Poll/Final).

* Nếu bản tin phỏt ủi từ trạm sơ cấp ủến trạm thứ cấp thỡ ủõy là bit P, nếu P=0 thỡ trạm thứ cấp khụng cần thiết phải trả lời ngay, nếu P=1 thỡ ủõy là bit thăm dũ và trạm thứ cấp phải trả lời ngay.

* Nếu bản tin phỏt ủi từ trạm thứ cấp ủến trạm sơ cấp thỡ ủõy là bit F, nếu F=0 thỡ ủõy chưa phải là bản tin cuối cùng và trạm sơ cấp không cần thiết phải trả lời ngay, nếu F=1 có nghĩa ủõy là bản tin cuối cựng và trạm sơ cấp phải trả lời ngay.

* Ns chỉ số thứ tự bản tin ủang ủược phỏt ủi.

* Nr là số thứ tự nhận, nếu phỏt ủi từ trạm sơ cấp thỡ liờn hệ ủến số Ns phỏt ủi từ trạm thứ cấp và nếu phỏt ủi từ trạm thứ cấp thỡ liờn hệ với Ns phỏt ủi từ trạm sơ cấp. Nr chỉ số thứ tự bản tin mà trạm ủang chờ và ủồng thời xỏc nhận ủó nhận tốt cỏc bản tin trước ủú (tức ủến số Nr-1)

Thớ dụ, trạm thứ cấp phỏt ủi Ns=2 và Nr=3 cú nghĩa là nú ủang phỏt ủi bản tin thứ 2 và ủó nhận tốt cỏc bản tin thứ 2 trở về trước.

Do cỏc số Ns chỉ cú 3 bit nờn số lượng tối ủa mỗi lần phỏt chỉ ủược 7 bản tin, như vậy buộc máy thu phải xác nhận trước khi số Ns vượt quá 7 (Ns=111).

Dưới ủõy là một thớ dụ, Giả sử trạm sơ cấp ủang phỏt và cỏc số Nr và Ns ủều bắt ủầu bằng số 0

Sơ cấp Thứ cấp

Ns P Nr

Ns F Nr

0 000 0 000

0 100 0 000

0 010 1 000

0 000 0 110

0 100 1 110

T

rạm sơ cấp phát 3 khung thông tin.

Khung thứ 3 là khung thăm dò Trạm thứ cấp báo nhận với Nr=3.

Nó gửi lại 2 khung thông tin.

Trạm sơ cấp báo nhận tốt 2 khung với Nr=2. Gửi

0 110 0 010

0 001 0 010

0 101 0 010

0 011 0 010

0 111 0 010

0 000 1 010

0 011 0 101

0 111 0 101

0 000 0 101

0 100 1 101

0 010 0 101

0 110 0 101

0 001 0 101

0 101 0 101

0 011 1 101

0 010 0 011

0 110 0 011

0 001 1 011

10 00 1 010

10 00 1 101

(RR) or

10 01 1 101

(REJ)

tiếp 6 khung

Vì Nr=6, Trạm thứ cấp báo nhận Nr-1=5 khung và yêu cầu phát lại khung 6. Vì trạm sơ cấp không biết chỉ khung 6 hay tất cả các khung theo sau có sai FCS nên nó phát lại tất cả từ khung 6

Trạm sơ cấp báo nhận tốt khung 4 với Nr=5.

Tiếp tục phỏt lại khung 6. (Lưu ý là số ủếm Ns ủó vượt trị cho phép nên trở về 0)

Trạm thứ cấp báo nhận tất cả các khung với Nr=2.

Vỡ trạm thứ cấp khụng cũn gỡ ủể gửi, khung giỏm sỏt ủược dựng

Trạm sơ cấp gửi tiếp 5 khung

Trạm thứ cấp xác nhận khung 4 và yêu cầu phát lại từ khung 5 (Nr=5)

- Khung loại S: (Giỏm sỏt , Supervisory frame, S-frame), dựng ủể ủếm số khung gửi/nhận; một số lệnh và lời ủỏp bỏo tỡnh trạng của mỏy thu (như sẵn sàng hay bận) kiểm soát và báo lỗi.

Một phần của tài liệu Giáo trình truyền dữ liệu (Trang 97 - 115)

Tải bản đầy đủ (PDF)

(212 trang)