Truyền dữ liệu tin cậy

Một phần của tài liệu Bài giảng mạng máy tính ths nguyễn xuân anh (Trang 108 - 112)

Giao thức IP chuyển các gói tin không đảm bảo tính chính xác, thứ tự cũng như tính toàn vẹn dữ liệu. Các gói tin IP có thể bị tràn tại bộ đệm của thiết bị định tuyến và đo đó không bao giờ đến được đích, dữ liệu có thể đến không đúng thứ tự hay các bit trong gói tin có thể bị thay đổi. Các đoạn dữ liệu của tầng vận tải được đặt trong gói tin IP để truyền qua mạng chúng hoàn toàn có thể bị mất hoặc bị thay đổi giá trị. Giao thức TCP tạo ra một đường truyền dữ liệu tin cậy trên nền giao thức IP không tin cậy. Dịch vụ truyền dữ liệu tin cậy của TCP đảm bảo dòng dữ liệu tới tiến trình nhận không có lỗi, liên tục, không trùng gặp và đúng thứ tự, nghĩa là dòng byte nhận được giống hệt dòng byte gửi đi.

Giao thức TCP cung cấp dịch vụ truyền dữ liệu tin cậy bằng cách sử dụng cơ chế phối hợp số tuần tự, xác nhận số tuần tự ACK và đồng hồ xác định thời gian quá hạn mỗi đoạn tin cần phải phản hồi. Giao thức TCP biên nhận cho dữ liệu đã được nhận chính xác bằng cách gửi lại số tuần tự nhận của đoạn tin kế tiếp đang chờ nhận (số tuần tự của đoạn tin đã nhận chính xác cộng thêm 1). TCP cũng thực hiện việc gửi liên tục (cơ chế đường ống), cho phép bên gửi có thể gửi nhiều đoạn tin mà chưa cần nhận biên nhận ngay. Cơ chế này cho phép nâng cao đáng kể hiệu suất của đường truyền. số lượng tối đa các đoạn tin được gửi chưa cần biên nhận ngay phụ thuộc vào cơ chế kiểm soát lưu lượng và kiểm soát tắc nghẽn của giao thức TCP.

Để đơn giản, giả thiết kết nối TCP giữa hai máy A và B chuyển dữ liệu từ máy A tới máy B. Tại phía gửi (máy A), thực thể TCP lấy dữ liệu của tầng ứng dụng, đóng gói trong các đoạn dữ liệu và chuyển cho tầng mạng. Ngay sau khi chuyển đoạn tin cho tầng mạng, TCP khởi động đồng hồ thời gian cho đoạn tin đó. Thời gian đợi kết thúc mà vẫn chưa nhận được biên nhận cho đoạn tin đã gửi sẽ sinh ra một ngắt thời gian, khi đó máy A phải xử lý bằng cách truyền lại đoạn tin đã tạo nên ngắt thời gian.

Nhận được một đoạn tin chứa giá trị trường biên nhận ACK hợp lệ, thực thể TCP phía gửi phải quyết định đó là ACK lần đầu tiên nhận được (tức là biên nhận cho một đoạn tin đã gửi nhưng chưa được biên nhận) hay chỉ là ACK trùng

1

lặp (biên nhận lại một gói tin đã từng được biên nhận). Trong trường hợp là ACK đầu tiên thì bên gửi sẽ biết rằng tất cả các đoạn tin có số thứ tự không vượt giá trị biên nhận vừa nhận được đã được nhận đúng tại phía bên nhận. Khi đó, bên gửi có thể cập nhật biến trạng thái TCP kiểm soát số thứ tự của đoạn tin cuối cùng mà nó cho rằng đã được nhận chính xác và theo đúng thứ tự tại phía bên nhận. Các hành động của bên nhận được tóm tắt trong bảng sau:

Sự kiện Hành động bên nhận

Đoạn tin đến có số thứ tự là số thứ tự mong muốn. Tất cả dữ liệu đến số thứ tự mong muốn đã được biên nhận. Không có khoảng trống trong dữ liệu nhận được

Đợi một thời gian nhất định (500ms), nếu không có đoạn tin mới thì gửi ACK với số tuần tự biên nhận là số thứ tự của đoạn tin đến trước khi chờ +1.

Đoạn tin đến có số thứ tự là số thứ tự mong muốn. Đoạn tin đến trước đang đợi gửi biên nhận. Không có khoảng trống trong dữ liệu nhận được

Ngay lập tức gửi ACK.

Đoạn tin không đúng thứ tự đến, có

số thứ tự cao hơn số thứ tự mong muốn nhận. Phát hiện có khoảng trống dữ liệu.

Ngay lập tức gửi ACK trùng lặp và

chỉ ra số thứ tự của đoạn tin mong muốn nhận tiếp theo.

Segment đến lấp đầy một phần hoặc

toàn bộ trống trong dữ liệu nhận được Ngay lập tức gửi đi ACK biên nhận cho đoạn dữ khoảng liệu đúng thứ tự liên tục lớn nhất nhận được

. Khi bên nhận TCP nhận đoạn tin có số thứ tự lớn hơn số thứ tự đúng thứ tự đang được mong đợi, nó phát hiện có đoạn trống trong dòng dữ liệu - nghĩa là thiếu đoạn tin. Giao thức TCP không sử dụng biên nhận phủ định nên nó biên nhận lại đoạn tin đúng thứ tự cuối cùng mà nó nhận được (tạo ra ACK trùng lặp). Nếu bên gửi TCP nhận được 3 ACK trùng lặp cho cùng một đoạn tin, nó cho rằng đoạn tin ngay sau đoạn tin được biên nhận ba lần bị lỗi. Trong trường hợp này, TCP thực hiện cơ chế truyền lại nhanh ( [RFC 258]), gửi lại đoạn tin đó trước khi đồng hồ thời gian của của đoạn tin lỗi thực hiện ngắt.

Bên gửi của TCP

/* assume sender is not contrained b y TCP flow or congestion control, that data from above is less than MSS in size, and that data transfer is in one direction only*/

sendbase = initial_sequence number nextseqnum = initial_sequence number loop (forever) {

switch (event)

event: data received from application above

create TCP segment with sequence number nextseqnum start timer for segment nextseqnum

pass segment to IP

nextseqnum = nextseqnum + length(data)

break; /* end of event data received from above */

event: timer timeout for segment with sequence number y retransmit segment with sequence number y

compute new timeout interval for segment y break: /* end of timeout event */ event: ACK received with ACK field value of y

` ` im e ou t S e q 9 2 t im e ou t

if (y > sendbase) { /* cumulative ACK of all data up to y */ cancel all timers for segments with sequence numbers < y sendbase = y

}

else {/* a duplicate ACK for already ACKed segment */ Increment number of duplicate ACKs received for y

If (number of duplicate ACKs received for y == 3) { /* TCP fast retransmit */

Resend segment with sequence number y Restart timer for segment y

}

} break; /* end of ACK received event */ } /* end of loop forever */

Hình 6.2 Truyền lại vì mất ACK

Giả sử máy A đang chờ một đoạn tin ACK từ máy B với giá trị biên nhận 100. Đoạn tin gửi từ máy A đã đến máy B nhưng ACK gửi từ máy B đến máy A bị mất. Trong trường hợp này, khi hết thời gian đợi, máy A truyền lại một đoạn tin có số tuần tự là 99 cho B. Tất nhiên khi nhận được đoạn tin truyền lại, máy B sẽ phát hiện sự trùng lặp nhờ trường số tuần tự, vì vậy thực thể TCP trên máy B sẽ loại bỏ đoạn tin truyền lại này.

Hình 6.3 Không cần truyền lại đoạn tin vì ACK đến trước thi hết thời gian đợi Giả sử máy A gửi hai đoạn tin liên tiếp, đoạn tin đầu tiên có số thứ tự là 92, segment thứ hai có số thứ tự là 100. Giả sử cả hai đoạn tin này đều đến máy B nguyên vẹn và máy B gửi biên nhận ACK riêng rẽ cho từng đoạn tin, ACK cho đoạn tin đầu tiên có số biên nhận là 100 và cho segment thứ hai là 120. Giả thiết cả hai ACK đều không đến được máy A trước khi hết thời gian đợi của đoạn tin đầu tiên. Khi hết thời gian đợi, máy A gửi lại đoạn tin đầu tiên có số thứ tự 92. Máy A chỉ gửi lại đoạn tin thứ hai nếu hết thời gian đợi trước khi ACK có số biên nhận 120 hoặc lớn hơn đến. Vì vậy, như minh họa trên hình 4.21, nếu ACK thứ hai không mất và đến trước thời hạn của đoạn tin thứ hai thì máy A sẽ không phải gửi lại đoạn tin thứ hai. Trường hợp nếu ACK của đoạn tin đầu tiên bị mất, nhưng trước khi hết thời gian đợi của đoạn tin đầu tiên, máy A nhận được ACK có số biên nhận 120 - do đó máy A hiểu rằng mảy B đã nhận được tất cả các đoạn tin đến tận đoạn tin thứ 119, vì vậy máy A không phải gửi lại đoạn tin nào trong hai đoạn tin trên.

Mặc dù TCP là giao thức kiểu Go- Back-N nhưng chúng không giống hoàn toàn. Điểm khác biệt ở chỗ Go-Back-N truyền tất cả các đoạn tin có số tuần tự nhỏ hơn hoặc bằng số tuần tự của đoạn tin bị lỗi trong khi đó TCP chỉ truyền lại bản tin bị lỗi đó. Giả thiết cả hai giao thức cùng chuyển các đoạn tin 1…N, tất cả đoạn tin này đều được nhận đúng thứ tự và không có lỗi. Giả sử ACK của đoạn tin số M<N bị mất nhưng ACK của N- 1 segment còn lại đến bên nhận trước khi hết thời gian đợi của từng đoạn tin.

Hình 6.4 ACK tích lũy tránh việc truyền lại đoạn tin đứng trước

Trong trường hợp này, Go-Back-N sẽ truyền lại tất cả các đoạn tin M…N trong khi đó TCP sẽ truyền lại nhiều nhất là một đoạn tin có số tuần tự là thứ M, thậm chí TCP sẽ không truyền lại đoạn tin thứ M nếu ACK cho đoạn tin thứ M+1 đến trước khi hết thời gian đợi của đoạn tin thứ M. RFC 2018 đã đề xuất mở rộng cơ chế biên nhận của TCP giống kiểu giao thức lặp có lựa chọn, bên nhận phải cung cấp cho bên gửi những thông tin tường minh về các đoạn tin nào đã được nhận đúng và các đoạn tin nào bị lỗi hoặc chưa nhận được.

Một phần của tài liệu Bài giảng mạng máy tính ths nguyễn xuân anh (Trang 108 - 112)

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

(193 trang)