Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Mạng Máy Tính – V1.0
/* Dừng đồng hồ và tắt sự kiện quá thời hạn cho khung thứ k đang gởi đi */
/* Khởi động đồng hồ phụ và bật sự kiện quá thời hạn cho khung phản hồi*/
/* Dừng đồng hồ phụ và tắt sự kiện quá thời hạn cho khung phản hồi*/
/* Cho phép tầng mạng tạo sự kiện tầng mạng đã sẵn sàng */
/* Macro để tăng giá trị K theo kiểu quay vòng */
/* Cấm tầng mạng tạo sự kiện tầng mạng đã sẵn sàng */
Biên Sọan: Th.s Ngô Bá Hùng – Ks Phạm Thế Phi - 01/2005
41
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Mạng Máy Tính – V1.0
4.3.1 Giao thức truyền đơn công không ràng buộc (Unrestricted Simplex
Protocol)
Protocol 1 (utopia) được dùng cho việc truyền tải thông tin theo một chiều từ người
gởi sang người nhận. Kênh truyền được giả định là không có lỗi và bên nhận được giả
định rằng có thể xử lý được hết tất cả các thông tin gởi đến một cách nhanh chóng.
Chính vì thế mà bên gởi chỉ đơn thuần thực hiện một vòng lặp đưa dữ liệu lên đường
truyền với tốc độ nhanh nhất có thể
.
/* Vùng đệm để chứa khung gởi đi */
/* Vùng đệm để chứa gói tin gởi đi */
P4.1 Giao thức truyền đơn công không ràng buộc
Giao thức Stop-and-wait cũng được thiết kế cho các cuộc truyền tải thông tin một chiều
từ người gởi sang người nhận. Kênh truyền tải thông tin một lần nữa cũng được giả định
rằng không có lỗi như giao thức Unrestricted Simplex Protocol. Tuy nhiên, trong trường
hợp này, bên nhận chỉ có một vùng lưu trữ có khả năng hạn chế và một tốc độ xử lý
giới hạn, vì thế giao thức phải
được thiết kế dự phòng cho trường hợp dữ liệu máy gởi
đến nhanh làm tràn vùng lưu trữ thông tin của bên nhận.
/* Vùng đệm để chứa khung gởi đi */
Biên Sọan: Th.s Ngô Bá Hùng – Ks Phạm Thế Phi - 01/2005
43
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Mạng Máy Tính – V1.0 4.3.3 Giao thức truyền đơn công cho kênh truyền có nhiễu (Simplex Protocol
for Noisy Channel )
Giả sử ta bỏ đi giả thuyết kênh truyền không có lỗi. Trong trường hợp này, với các kỹ thuật xử lý
lỗi (Parity check, CRC), bên nhận có thể phát hiện ra được các khung bị lỗi. Tuy nhiên, điều gì sẽ
xảy ra nếu khung gởi đi bị mất, không đến được nơi nhận. Khi đó sẽ dẫn đến tình trạng như sau:
Người gởi không biết được khung có đến nơi nhận tố
t hay không.
¾ Giải pháp là yêu cầu người nhận gởi các khung báo nhận thông báo về tình hình
các khung bị lỗi.
Các khung báo nhận có thể bị mất.
¾ Giải pháp: Mỗi khi gởi một khung đi, Bên gởi sẽ thiết lập một bộ đếm thời
gian. Nếu sau một khoảng thời gian qui định mà không nhận được khung báo
nhận, bên gởi sẽ gởi lại các khung không được báo nhận
Bên nhận không phân biệt đượ
c các khung trùng lắp do bên gởi gởi lại.
¾ Giải pháp: Mỗi khung sẽ có một số thứ tự để phân biệt lẫn nhau. Số thứ tự này
sẽ được tăng dần cho đến một giá trị cực đại sau đó lại quay về giá trị 0. Trong
ví dụ sau, số thứ tự có giá trị cực đại là 1. Như vậy ta chỉ sử dụng 2 giá trị là 0
và 1 để đánh số thứ t
ự cho khung.
/* Vùng lưu trữ cho gói tin gởi */ /* Khởi động số thứ tự cho khung gởi */
/* Nhận gói tin đầu tiên từ tầng mạng để gởi đi */
/* Xây dựng khung để gởi đi */
/* Đánh số thứ tự cho khung */
/* Gởi khung xuống tầng vật lý để truyền đi */
/* Nếu khung báo nhận đến chậm, tạo sự kiện
time-out *
/
/* Số thứ tự của gói tin chờ nhận kế tiếp */
/* Khung nhận và khung báo nhận */
/* Khởi động số thứ tự cho khung nhận */
/* Chờ một sự kiện xảy ra*/
/* Nếu là sự kiện khung đến */
/* - Nhận khung dữ liệu từ tầng vật lý */
/* - Nếu đúng là khung đang chờ */
/* - Gởi dữ liệu nhận được lên t
ầ
ng
mạng */
/* Giá t
r
ị
t
ố
để bên nhận theo dõi các khung mà nó được phép nhận, gọi là cửa sổ nhận (Receiving Windows).
Cấu trúc củ
a cửa sổ được mô tả như sau:
Phần tô đen là phạm vi của cửa sổ gồm có
cửa trước và cửa sau cùng di chuyển theo
một chiều.
Kích thước của cửa sổ là chiều của cung
giới hạn từ cửa sau đến cửa trước.
Kích thước của cửa sổ có thể thay đổi. Khi
cửa trước di chuyển, cửa sổ
được mở rộng
ra. Ngược lại khi cửa sau di chuyển, kích
thước của cửa sổ bị thu hẹp lại và nó làm
cho cửa sổ thay đổi vị trí, trượt / quay
quanh một tâm của vòng tròn.
Kích thước nhỏ nhất của cửa số là 0, khi đó
cửa trước và cửa sau nằm cùng một vị trí. Giả sử, có n=2
k
vị trí cho các cửa, khi đó kích
thước tối đa của cửa sổ là n-1 (không là n để phân biệt với kích thước là 0).
H4.7 Cấu trúc cửa sổ trượt
Giả sử ta dùng k bit để đánh số thứ tự cho các khung. Ta sẽ có 2
k
khung, đánh số từ 0 đến
2
k
-1. Khi đó cửa sổ trượt sẽ được chia thành 2
k
vị trí tương ứng với 2
0 là số thứ tự của khung báo nh
ận bên gởi đang chờ. Kích thước cửa sổ trượt lúc này là 1,
đạt đến kích thước tối đa nên nó không được phép gởi thêm khung nữa (Hình b).
Bên nhận nhận được khung 0: nó kiểm tra và nhận thấy khung không có lỗi. Nó gởi khung
báo nhận số 0 về cho bên nhận. Đồng thời cửa sau của nó di chuyển để loại khung số 0 ra
khỏi cửa sổ trượt. Cửa trước cũng di chuyển để mở rộng kích thước cửa s
ổ đến giá trị tối
đa. Lúc này cửa sổ nhận chứa khung số 1 là khung mà nó đang chờ nhận tiếp (Hình c).
Bên gởi nhận được khung báo nhận số 0: Vì đây là khung báo hiệu bên nhận đã nhận tốt
nên cửa sau của cửa sổ gởi di chuyển để loại khung số 0 ra khỏi cửa sổ gởi. Lúc này cửa sổ
gởi có kích thước là 0, bên gởi có quyền gởi tiếp khung (Hình d)
Như vậy khi kích thướ
c của cửa sổ trượt là 1, ta có giao thức stop-and-wait.
Biên Sọan: Th.s Ngô Bá Hùng – Ks Phạm Thế Phi - 01/2005
/* Số thứ tự của khung gởi đi kế tiếp */
/* Số thứ tự của khung báo nhận đang chờ nhận */
/* Khung nhận và khung gởi */
/* Gói tin chờ gởi */
/* Khởi động số thứ tự khung gởi */
/* Khởi động số thứ tự khung báo nhận chờ nhận */
/* Nhận gói tin từ tầng mạng để gởi đi */
/* Đưa gói tin dữ liệu vào khung để gởi */
/* Đặt số thứ tự cho khung */
/* Đặt số thứ tự báo nhận vào khung */
Biên Sọan: Th.s Ngô Bá Hùng – Ks Phạm Thế Phi - 01/2005
47
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Mạng Máy Tính – V1.0
4.4.6 Ví dụ về 2 kịch bản của giao thức trên
(a): Việc gởi nhận diễn ra bình thường theo đúng tuần tự
(b): Việc gởi nhận diễn ra theo một trình tự bất kỳ
Ký hiệu A send (seq, ack, packet number) để chỉ rằng A gởi B một khung có số thứ tự là seq,
đồng thời báo cho B biết A đã nhận được tốt khung có số thứ tự ack của B gởi sang. Khung chứa
gói tin th
ứ packet number. Dấu * biểu thị rằng khung tốt, và gói tin được lấy ra khỏi khung để
chuyển cho tầng mạng.
H4.10 Giao thức Go-Back-N
Trong ví dụ trên, bên nhận phát hiện ra khung số 2 bị lỗi nó bỏ qua các khung sau đó (3,4,5,6,7,8),
chỉ chờ nhận lại khung số 2. Phía bên gởi chờ báo nhận từ bên nhận cho đến khi quá thời gian, nó
sẽ thực hiện gởi lại các khung 2, 3, 4, 5, 6,
Đoạn chương trình sau cài đặt giao thức Go-Back-N
g
g
ởi
g
ói tin đi *
/
/* Khun
g
đ
ể
g
ởi
g
ói tin đi *
/
/* Đưa
g
ói tin vào khun
g
*
/
/* Đ
ặ
t s
ố
thứ t
ự
cho khun
/* Số thứ tự cho khung gởi kế tiếp */
/* Khung lâu nhất chưa được báo nhận */
/* Khung chờ nhận kế tiếp /
/* Khung */
/* Vùng bộ nhớ đệm cho các khung gởi đi */
/* Số lượng bộ nhớ đệm đang được dùng */
/* Chỉ số mảng của vùng nhớ đệm */ /* Cho phép tầng mạng tạo sự kiện network_layer_ready */
/* Đặt báo nhận đầu tiên chờ nhận là 0 */
/
*
Khung đ
ầuti
ên g
ởi
đilà0
*
/
Biên Sọan: Th.s Ngô Bá Hùng – Ks Phạm Thế Phi - 01/2005
49
Đại Học Cần Thơ - Khoa Công Nghệ Thông Tin - Giáo Trình Mạng Máy Tính – V1.0
/* Chờ 1 trong 4 sự kiện liệt kê ở trên xảy ra */ /* Tầng mạng có một gói tin cần gởi đi */
/
*
Ch
h
ư
ớc
cửa
sổ
gở
i *
/
/* Di chuyển cửa trước của cửa sổ gởi */
/* Là khun
g
đan
g
đ
ư
ợ
c chờ đ
ợ
i *
/
/* Chuyển gói tin lên tầng mạng */
Di chuyển cửa sau của cửa sổ nhận */
/
*
G
ở
i kh