Có nhiều phương pháp có thể đối phó với mất gói tin (nhiều hơn trong số đó được khám phá trong các bài tập ở phần cuối của chương này). Ở đây, chúng tôi sẽ đặt gánh nặng của việc phát hiện và phục hồi từ các gói tin bị mất trên người gửi. Giả sử rằng người gửi truyền đi một gói dữ liệu và một trong hai gói dữ liệu đó, hoặc ACK của người nhận của gói tin đó, bị mất. Trong cả hai trường hợp, không có trả lời là sắp tới ở người gửi từ người nhận. Nếu người gửi là sẵn sàng chờ đợi đủ lâu để nó chắc chắn là một gói tin đã bị mất, nó chỉ đơn giản là có thể truyền lại các gói dữ liệu. Bạn nên thuyết phục bản thân rằng giao thức này thực sự làm việc.
Nhưng bao lâu người gửi phải chờ đợi để chắc chắn rằng một cái gì đó đã bị mất? Người gửi phải chờ đợi rõ ràng ít nhất là dài như một sự chậm trễ chuyến đi vòng quanh giữa người gửi và người nhận (có thể bao gồm đệm tại router trung gian) cộng với bất cứ số lượng thời gian cần thiết để xử lý một gói tin ở người nhận. Trong nhiều net-công trình, trường hợp xấu nhất trì hoãn tối đa này là rất khó khăn ngay cả để ước tính, ít nhiều biết một cách chắc chắn. Hơn nữa, các giao thức lý tưởng nên phục hồi từ mất gói tin càng sớm càng tốt; chờ đợi cho một trường hợp xấu nhất có thể chậm trễ có nghĩa là chờ đợi khá lâu cho đến khi khôi phục lỗi được bắt đầu. Cách tiếp cận như vậy được thông qua trong thực tế là cho người gửi để sáng suốt lựa chọn một giá trị thời gian như vậy mà mất gói tin là có khả năng, mặc dù không được bảo đảm, như đã xảy ra. Nếu một ACK không được nhận trong thời gian này, các gói tin được truyền lại. Lưu ý rằng nếu một gói tin bị chậm trễ đặc biệt lớn, người gửi có thể truyền lại các gói tin mặc dù cả hai gói dữ liệu cũng không ACK của nó đã bị mất. Này giới thiệu các khả năng của các gói dữ liệu trùng lặp trong các kênh gửi đến người nhận. Hạnh phúc, giao thức rdt2.2 đã có đủ chức năng (có nghĩa là, số thứ tự) để xử lý các trường hợp của các gói tin trùng lặp.
Từ quan điểm của người gửi, truyền lại là một thuốc chữa bách bệnh. Người gửi không biết liệu một gói dữ liệu đã mất, một ACK bị mất, hoặc nếu các gói tin ACK hoặc chỉ đơn giản là quá chậm. Trong tất cả các trường hợp, các hành động là như nhau: truyền lại. Thực hiện một cơ chế truyền lại dựa trên thời gian đòi hỏi một đồng hồ đếm ngược có thể gián đoạn cho người gửi sau khi một số tiền nhất định của thời gian đã hết. Do đó người gửi sẽ cần để có thể (1) bắt đầu đếm thời gian mỗi lần một gói (hoặc một gói tin lần đầu hoặc phát lại) được gửi, (2) đáp ứng với một bộ đếm thời gian gián đoạn (có những hành động thích hợp), và (3 ) dừng bộ đếm thời gian.
Hình 3.15 cho thấy các FSM người gửi cho rdt3.0, một giao thức truyền tải dữ liệu đáng tin cậy trên một kênh có thể bị hỏng hoặc bị mất gói tin; trong các bài tập về nhà, bạn sẽ được yêu cầu cung cấp các FSM thu cho rdt3.0. Hình 3.16 cho thấy cách các col nguyên thủy hoạt động không có gói tin bị mất hoặc bị trì hoãn và làm thế nào nó handle mất gói dữ liệu. Trong hình 3.16, thời gian di chuyển về phía trước từ phía trên cùng của sơ đồ phía dưới cùng của biểu đồ; lưu ý rằng nhận được thời gian cho một gói tin là nhất thiết phải muộn hơn thời gian gửi cho một gói như là một kết quả của việc truyền tải và lan truyền sự chậm trễ. Trong hình 3.16 (b) - (d), dấu ngoặc đơn gửi-side cho biết thời gian mà một bộ đếm thời gian được thiết lập và thời gian sau đó ra. Một số trong những khía cạnh tinh tế hơn của giao thức này được khám phá trong các bài tập ở phần cuối của chương này. Bởi vì số thứ tự gói tin luân phiên giữa 0 và 1, pro-tocol rdt3.0 đôi khi được gọi là giao thức xen-bit.
Chúng tôi đã tập hợp các yếu tố chính của một giao thức truyền dữ liệu. Kiểm tra-tiền, số thứ tự, giờ, và sự thừa nhận tích cực và tiêu cực pack-ETS từng đóng một vai trò rất quan trọng và cần thiết trong hoạt động của các giao thức. Bây giờ chúng ta có một giao thức truyền dữ liệu đáng tin cậy làm việc!
3.4.2 pipeline đáng tin cậy chuyển giao dữ liệu giao thức
giao thức rdt3.0 là một giao thức có chức năng chính xác, nhưng nó không chắc rằng mọi người sẽ được hạnh phúc với hiệu quả của nó, đặc biệt là trong các mạng tốc độ cao ngày nay. Tại trung tâm của vấn đề hiệu suất của rdt3.0 là một thực tế rằng nó là một giao thức stop-and-wait.
Để đánh giá các tác động hiệu quả của các hành vi dừng-và-chờ đợi này, hãy xem xét một trường hợp lý tưởng hóa của hai máy, một nằm trên Tây Bờ biển của Hoa Kỳ và các khác nằm trên bờ biển Đông, như thể hiện trong hình 3.17. Tốc độ của ánh sáng-round-trip delay tuyên truyền giữa hai hệ thống kết thúc, RTT, là xấp xỉ-30 mili giây. Giả sử rằng chúng được kết nối bởi một kênh với một tỷ lệ xuyên nhiệm vụ, R, của 1 Gbps (109 bit mỗi giây). Với một gói kích thước, L, 1.000 byte (8.000 bit) cho mỗi gói, bao gồm cả lĩnh vực tiêu đề và dữ liệu, thời gian cần thiết để thực sự truyền tải các gói dữ liệu vào các liên kết 1 Gbps là
hình 3.18 (a) cho thấy rằng với chúng tôi dừng-và giao thức -wait, nếu người gửi bắt đầu gửi các gói tin tại t = 0, sau đó tại t = L / R = 8 micro, các bit cuối cùng đi vào kênh ở phía người gửi. Các gói sau đó làm cho ney 15 msec của nó xuyên quốc gia jour-, với các bit cuối cùng của gói mới nổi ở người nhận tại t = RTT / 2 + L / R = 15,008 msec. Giả sử vì đơn giản rằng ACK gói là rất nhỏ (vì vậy mà chúng ta có thể bỏ qua thời gian truyền của họ) và rằng người nhận có thể gửi một ACK ngay khi bit cuối cùng của một gói dữ liệu được nhận, ACK nổi lên trở lại ở người gửi tại t = RTT + L / R = 30,008 msec. Tại thời điểm này, người gửi có thể truyền tải thông điệp tới. Như vậy, trong 30,008 msec, người gửi đã gửi cho chỉ 0.008 ms. Nếu chúng ta xác định việc sử dụng của người gửi (hoặc kênh) là phần nhỏ thời gian gửi thực sự là bit gửi bận rộn vào các kênh, các phân tích trong hình 3.18 (a) cho thấy rằng các giao thức stop-and-wait có khá ảm đạm sử dụng người gửi, Usender, trong
đó là, người gửi là bận rộn chỉ có 2,7 phần trăm của một phần trăm của thời gian! Được xem một cách khác, người gửi đã có thể gửi chỉ 1.000 byte trong 30,008 triệu-liseconds, một thông lượng hiệu quả của chỉ 267 kbps-mặc dù một liên kết 1 Gbps đã có sẵn! Hãy tưởng tượng người quản lý mạng không hài lòng người chỉ cần trả một tài sản cho một liên kết có dung giga-bit nhưng quản lý để có được một thông lượng chỉ 267 kilobits mỗi giây! Đây là một ví dụ đồ họa như thế nào giao thức mạng có thể hạn chế khả năng được cung cấp bởi các phần cứng mạng cơ bản. Ngoài ra, chúng tôi đã bỏ qua lớp thấp hơn lần giao thức chế biến ở người gửi và người nhận, cũng như việc xử lý và sự chậm trễ xếp hàng có thể xảy ra ở bất kỳ router trung gian giữa người gửi và người nhận. Bao gồm các hiệu ứng sẽ chỉ phục vụ để tăng thêm sự chậm trễ và tiếp tục nhấn mạnh hiệu suất kém.
Các giải pháp cho vấn đề này hiệu suất đặc biệt là đơn giản: Thay vì oper-ăn một cách stop-and-wait, người gửi được phép gửi nhiều gói với-ra chờ đợi những lời cảm ơn, như minh họa trong hình 3.17 (b). Hình 3.18 (b) cho thấy rằng nếu người gửi được phép chuyển ba gói tin trước khi phải chờ đợi những lời cảm ơn, việc sử dụng của người gửi được về cơ bản tăng gấp ba lần. Kể từ người gửi đến người nhận các gói dữ liệu nhiều quá cảnh có thể được hình dung như là điền vào một đường ống dẫn, kỹ thuật này được gọi là pipelining. Pipelining có những hậu quả sau đây cho các giao thức truyền dữ liệu đáng tin cậy:
Phạm vi của các số thứ tự phải được tăng lên, kể từ (truyền lại không đếm) mỗi gói, quá cảnh phải có một dãy số duy nhất và có thể có nhiều, quá cảnh, các gói tin không được thừa nhận.
Các bên gửi và người nhận trong các giao thức có thể phải đệm nhiều hơn một gói. Tối thiểu, người gửi sẽ phải đệm gói tin đã được trans-đệ trình nhưng chưa được thừa nhận. Đệm của các gói tin nhận được một cách chính xác cũng có thể cần thiết ở người nhận, như được thảo luận dưới đây.
Phạm vi của các số thứ tự cần thiết và yêu cầu buffering sẽ phụ thuộc vào cách thức mà một giao thức truyền dữ liệu đáp ứng mất, cor-rupted, và các gói tin quá chậm . Hai cách tiếp cận cơ bản để pipeline phục hồi lỗi có thể được xác định: Go-Back-N và lặp lại chọn lọc.
3.4.3 Go-Back-N (GBN)
Trong một Go-Back-N (GBN) giao thức, người gửi được phép chuyển nhiều các gói dữ liệu (nếu có) mà không cần chờ đợi một sự thừa nhận, nhưng bị hạn chế như không có nhiều hơn một số số lượng tối đa cho phép, N, các gói dữ liệu không được thừa nhận trong các đường ống. Chúng tôi mô tả các giao thức GBN ở một số chi tiết trong phần này. Nhưng trước khi đọc-ing trên, bạn được khuyến khích để chơi với các applet GBN (một applet awesome!) Tại trang web đồng.
Hình 3.19 cho thấy quan điểm của người gửi hàng loạt các số thứ tự trong một giao thức GBN. Nếu chúng ta định nghĩa cơ bản là số thứ tự của các gói tin không được thừa nhận lâu đời nhất và nextseqnum là số thứ tự không sử dụng nhỏ nhất (có nghĩa là, số thứ tự của gói tin tiếp theo được gửi), sau đó bốn khoảng thời gian trong khoảng từ số thứ tự có thể được xác định. Số thứ tự trong khoảng [0, cơ sở-1] tương ứng với các gói tin đã được truyền và nhận. Các liên val [cơ sở, nextseqnum-1] tương ứng với gói tin đã được gửi đi nhưng chưa được thừa nhận. Số thứ tự trong khoảng [nextseqnum, cơ sở + N-1] có thể được sử dụng cho các gói tin có thể được gửi ngay lập tức, dữ liệu sẽ đến từ các lớp trên. Cuối cùng, số thứ tự lớn hơn hoặc bằng với cơ sở + N không thể được sử dụng cho đến khi một gói tin không được thừa nhận hiện nay trong các đường ống (cụ thể, các gói tin với cơ sở số thứ tự) đã được công nhận.
đang được dịch, vui lòng đợi..