Theo đề nghị của con số 3,19, phạm vi cho phép số thứ tự cho truyền nhưng chưa được công nhận các gói dữ liệu có thể được xem như là một cửa sổ của kích thước N trên khu vực của số thứ tự. Như giao thức hoạt động, cửa sổ này trình bày về phía trước trong chuỗi số không gian. Vì lý do này, N thường được gọi là kích thước cửa sổ và các GBN giao thức chính nó như là một giao thức cửa sổ trượt. Bạn có thể tự hỏi tại sao chúng tôi sẽ thậm chí hạn chế số lượng xuất sắc, unac knowledged gói với một giá trị của N tại địa điểm đầu tiên. Tại sao không cho phép một số lượng không giới hạn của gói tin như vậy? Chúng ta sẽ thấy trong phần 3.5 rằng kiểm soát dòng chảy là một lý do để áp đặt một giới hạn về người gửi. Chúng ta sẽ xem xét một lý do để làm như vậy trong phần 3.7, khi chúng tôi nghiên cứu TCP tắc nghẽn kiểm soát.Trong thực tế, một gói dữ liệu chuỗi số được thực hiện trong một lĩnh vực chiều dài cố định trong tiêu đề gói. Nếu k là số bit trong trường số thứ tự gói, phạm vi của các số thứ tự là như vậy [0, 2k-1]. Với một phạm vi hữu hạn của số thứ tự, tất cả số học liên quan đến số thứ tự sau đó phải được thực hiện bằng cách sử dụng theo modulo 2k số học. (Có nghĩa là, không gian chuỗi số có thể được dùng như một vòng kích thước 2k, nơi dãy số 2k-1 ngay sau đó là theo thứ tự số 0.) Nhớ lại rằng rdt3.0 có một số 1-bit chuỗi và một loạt các số thứ tự của [0,1]. Eral Sev của vấn đề ở phần cuối của chương này khám phá những hậu quả của một loạt hữu hạn các số thứ tự. Chúng ta sẽ thấy trong phần 3.5 TCP có một trường số 32-bit chuỗi, nơi mà số thứ tự TCP truy cập byte trong dòng byte chứ không phải là các gói dữ liệu.Con số 3,20 và 3,21 cho một mô tả FSM mở rộng của các bên người gửi và người nhận của một giao thức dựa trên ACK, NAK-Việt, GBN. Chúng tôi tham khảo này mô tả FSM là một FSM mở rộng bởi vì chúng tôi có thêm biến (tương tự như pro gramming ngôn ngữ biến) cho cơ sở và nextseqnum, và gia tăng các hoạt động trên các biến và có điều kiện hành động liên quan đến các biến này. Lưu ý rằng đặc điểm kỹ thuật FSM mở rộng bây giờ là bắt đầu trông giống như một đặc tả ngôn ngữ lập trình. [Bochman 1984] cung cấp một cuộc khảo sát tuyệt vời của tiện ích mở rộng thêm về kỹ thuật FSM khác lập trình-ngôn ngữ dựa trên công nghệ-niques để chỉ định giao thức.Người gửi GBN phải đáp ứng với ba loại sự kiện:Invocation từ phía trên. Khi rdt_send() được gọi là từ phía trên, người gửi đầu tiên kiểm tra để xem nếu cửa sổ là đầy đủ, có nghĩa là, cho dù có những gói dữ liệu xuất sắc, unacknowledged N. Nếu cửa sổ là không đầy đủ, một gói dữ liệu được tạo ra và gửi, và biến được cập nhật một cách thích hợp. Nếu cửa sổ là đầy đủ, người gửi chỉ đơn giản là trả về dữ liệu về lớp trên, một dấu hiệu tiềm ẩn cửa sổ là đầy đủ. Lớp trên có lẽ là sau đó có thể thử lại sau. Một thực hiện thật, người gửi nhiều khả năng sẽ có hoặc đệm (nhưng không phải ngay lập tức gửi) dữ liệu này, hoặc sẽ có một cơ chế đồng bộ hóa (ví dụ, semaphore một hoặc một lá cờ) mà sẽ cho phép lớp trên gọi rdt_send() chỉ khi cửa sổ không đầy đủ.Nhận được một ACK. Trong giao thức GBN của chúng tôi, một sự thừa nhận cho một gói với chuỗi số n sẽ được thực hiện để là một sự thừa nhận tích lũy, indicat-ing mà tất cả các gói dữ liệu với một số chuỗi lên đến và bao gồm n đã cor-rectly đã nhận được lúc người nhận. Chúng tôi sẽ trở lại để vấn đề này ngay khi chúng tôi kiểm tra phía nhận của GBN.Một sự kiện thời gian chờ. Giao thức của tên, "Go-Back-N," có nguồn gốc từ hành vi của người gửi sự hiện diện của gói dữ liệu bị mất hoặc bị trì hoãn quá. Như trong các giao thức dừng và chờ đợi, một bộ đếm thời gian một lần nữa sẽ được sử dụng để phục hồi từ dữ liệu bị mất hoặc thừa nhận gói. Nếu một thời gian chờ xảy ra, người gửi thời tất cả các gói dữ liệu mà đã là previ-ously gửi nhưng mà đã không được được ghi nhận. Chúng tôi gửi trong hình 3,20 sử dụng chỉ là một thời gian duy nhất, mà có thể được dùng như một bộ đếm thời gian cho gói dữ liệu truyền nhưng không được công nhận lâu đời nhất. Nếu một ACK được nhận nhưng có được bổ sung vẫn còn truyền nhưng chưa ghi nhận các gói dữ liệu, bộ đếm thời gian khởi động lại. Nếu không có không có gói dữ liệu nổi bật, unacknowledged, bộ đếm thời gian được dừng lại.Hành động của người nhận trong GBN cũng rất đơn giản. Nếu một gói với chuỗi num-ber n nhận được một cách chính xác và là theo thứ tự (có nghĩa là, các dữ liệu cuối gửi đến lớp trên đến từ một gói với chuỗi số n-1), người nhận sẽ gửi một ACK cho gói n và cung cấp phần dữ liệu của gói tin cho lớp trên. Trong tất cả các trường hợp khác, người nhận loại bỏ gói và thời một ACK cho gói trong thứ tự đặt mới nhận được. Lưu ý rằng kể từ khi gói tin được chuyển giao một lúc một thời gian cho lớp trên, nếu gói k đã được nhận và giao hàng, sau đó tất cả các gói dữ liệu với một số thứ tự thấp hơn k cũng đã được chuyển giao. Vì vậy, việc sử dụng các hoạt động cùng cumula acknowledgments là một sự lựa chọn tự nhiên cho GBN.Trong của chúng tôi giao thức GBN, người nhận loại bỏ ra thứ tự gói. Mặc dù nó có vẻ ngớ ngẩn và lãng phí để bỏ gói một cách chính xác nhận (nhưng ra thứ tự), có một số biện minh để làm như vậy. Nhớ lại rằng người nhận phải cung cấp dữ liệu để lớp trên. Cho rằng bây giờ mà gói n dự kiến, nhưng gói n + 1 đến. Bởi vì dữ liệu phải được phân phối theo thứ tự, người nhận có thể đệm (save) gói n + 1 và sau đó cung cấp gói này cho lớp trên sau khi nó sau đó đã nhận được và gửi gói n. Tuy nhiên, nếu n gói bị mất, cả nó và gói n + 1 sẽ cuối cùng được retransmitted là kết quả của quy tắc retransmission GBN lúc người gửi. Do đó, người nhận chỉ đơn giản là có thể loại bỏ gói n + 1. Lợi thế của phương pháp này là sự đơn giản của nhận đệm — người nhận không cần đệm bất kỳ gói dữ liệu ra trật tự. Vì vậy, trong khi người gửi phải duy trì phía trên và thấp hơn giới hạn của các cửa sổ của nó và vị trí của nextseqnum trong cửa sổ này, mảnh thông tin người nhận, chỉ cần duy trì là số thứ tự của gói tin trong thứ tự tiếp theo. Giá trị này được tổ chức trong biến expectedseqnum, thể hiện trong nhận FSM trong hình 3,21. Tất nhiên, những bất lợi của ném đi một gói tin nhận được một cách chính xác là retransmission gói đó, tiếp theo có thể được bị mất hoặc bị cắt xén và do đó truyền lại hơn sẽ được yêu cầu.Con số 3,22 cho thấy hoạt động của các giao thức GBN cho trường hợp của một kích thước cửa sổ của bốn gói. Vì hạn chế kích thước cửa sổ này, người gửi gửi gói-ets 0 đến 3 nhưng sau đó phải chờ đợi cho một hoặc nhiều của các gói dữ liệu được acknowl cạnh trước khi tiếp tục. Như mỗi ACK kế tiếp (ví dụ, ACK0 và ACK1) được nhận, các trang trình bày cửa sổ chuyển tiếp và người gửi có thể truyền tải một gói mới (pkt4 và pkt5, tương ứng). Ở phía bên nhận, gói 2 bị mất và do đó gói 3, 4 và 5 có thứ tự và được loại bỏ.Trước khi đóng cửa của chúng tôi thảo luận về GBN, nó là đáng chú ý rằng một implementa-tion của giao thức này trong một chồng giao thức nào có khả năng có một cấu trúc tương tự như FSM mở rộng trong hình 3,20. Việc thực hiện sẽ cũng có khả năng là trong các hình thức của các thủ tục thực hiện các hành động được thực hiện để đáp ứng với các sự kiện khác nhau mà có thể xảy ra. Trong chương trình dựa trên sự kiện, pro-cedures khác nhau được gọi là (invoked) hoặc bằng cách khác quy trình trong ngăn xếp giao thức, hoặc như là kết quả của một ngắt. Ở người gửi, những sự kiện này sẽ là (1) một cuộc gọi từ các tổ chức trên lớp để gọi rdt_send(), (2) một bộ đếm thời gian gián đoạn, và (3) một cuộc gọi từ các lớp thấp hơn để gọi rdt_rcv() khi một gói dữ liệu đến. Các bài tập lập trình ở phần cuối của chương này sẽ cung cấp cho bạn một cơ hội để thực sự thực hiện các thói quen trong một thiết lập mô phỏng, nhưng thực tế, mạng.We note here that the GBN protocol incorporates almost all of the techniques that we will encounter when we study the reliable data transfer components of TCP in Section 3.5. These techniques include the use of sequence numbers, cumulative acknowledgments, checksums, and a timeout/retransmit operation.3.4.4 Selective Repeat (SR)The GBN protocol allows the sender to potentially “fill the pipeline” in Figure 3.17 with packets, thus avoiding the channel utilization problems we noted with stop-and-wait protocols. There are, however, scenarios in which GBN itself suffers from performance problems. In particular, when the window size and bandwidth-delay product are both large, many packets can be in the pipeline. A single packet error can thus cause GBN to retransmit a large number of packets, many unnecessarily. As the probability of channel errors increases, the pipeline can become filled with these unnecessary retransmissions. Imagine, in our message-dictation scenario, that if every time a word was garbled, the surrounding 1,000 words (for example, a win-dow size of 1,000 words) had to be repeated. The dictation would be slowed by all of the reiterated words.
đang được dịch, vui lòng đợi..
