3.5.3 Round-Trip Time Ước tính và Timeout
TCP, như giao thức RDT của chúng tôi tại mục 3.4, sử dụng một cơ chế thời gian chờ / truyền lại để phục hồi từ các phân đoạn bị mất. Mặc dù đây là khái niệm đơn giản, nhiều vấn đề tinh tế phát sinh khi chúng ta thực hiện một cơ chế thời gian chờ / truyền lại một thực tế proto-col như TCP. Có lẽ câu hỏi rõ ràng nhất là chiều dài của khoảng thời gian chờ. Rõ ràng, thời gian chờ nên lớn hơn thời gian đi của kết nối (RTT), đó là, thời gian từ khi một phân khúc được gửi cho đến khi nó được thừa nhận. Khác-khôn ngoan, truyền lại không cần thiết sẽ được gửi đi. Nhưng làm thế nào lớn hơn? Làm thế nào các RTT được ước tính ở nơi đầu tiên? Một bộ đếm thời gian nên được liên kết với nhau và mỗi phân đoạn không được thừa nhận? Vì vậy, nhiều câu hỏi! Cuộc thảo luận của chúng tôi trong phần này dựa trên công việc TCP trong [Jacobson 1988] và IETF rec-ommendations hiện tại để quản lý giờ TCP [RFC 6298].
Ước lượng thời Round-Trip
Hãy bắt đầu nghiên cứu của chúng tôi quản lý timer TCP bằng cách xem xét như thế nào TCP ước tính thời gian đi giữa người gửi và người nhận. Điều này được thực hiện như sau. Các mẫu RTT, ký hiệu SampleRTT, cho một bộ phận là số lượng thời gian giữa khi phân khúc này được gửi (có nghĩa là, thông qua để IP) và khi một acknowledg-ment cho phân khúc đã nhận được. Thay vì đo một SampleRTT cho mỗi phân đoạn truyền, hầu hết các trường TCP chỉ cần một SampleRTT Đo-urement tại một thời điểm. Đó là, tại bất kỳ thời điểm nào, các SampleRTT đang được ước tính chỉ là một trong những phân đoạn truyền nhưng hiện tại không được thừa nhận, dẫn đến một giá trị mới của SampleRTT khoảng một lần mỗi RTT. Ngoài ra, TCP bao giờ com-putes một SampleRTT cho một phân khúc mà đã được truyền lại; nó chỉ đo SampleRTT cho các phân đoạn đã được truyền đi một lần [Karn 1987]. (A prob-lem vào cuối chương hỏi bạn phải xem xét lý do tại sao.)
Rõ ràng, các giá trị SampleRTT sẽ dao động từ phân đoạn để phân khúc do tắc nghẽn trong các bộ định tuyến và tải trọng khác nhau trên hệ thống kết thúc. Do biến động này, bất kỳ giá trị SampleRTT nhất định có thể không điển hình. Để ước tính một RTT điển hình, nó là do tự nhiên để có một số loại trung bình của các giá trị Sam-pleRTT. TCP duy trì một mức trung bình, được gọi là EstimatedRTT, các giá trị Sam-pleRTT. Khi có một SampleRTT mới, TCP cập nhật EstimatedRTT theo công thức sau:
EstimatedRTT = (1 -) • EstimatedRTT + • SampleRTT
Công thức trên được viết dưới hình thức của một ngôn ngữ lập trình statement-giá trị mới của EstimatedRTT là một sự kết hợp có trọng số các giá trị trước đó của EstimatedRTT và các giá trị mới cho SampleRTT. Các giá trị được đề nghị là = 0,125 (có nghĩa là, 1/8) [RFC 6298], trong trường hợp các công thức trên trở thành:
EstimatedRTT = 0,875 • EstimatedRTT + 0,125 • SampleRTT
Lưu ý rằng EstimatedRTT là bình quân gia quyền của các giá trị SampleRTT. Như đã thảo luận trong một vấn đề làm bài tập ở cuối chương này, người khẳng định độ tuổi có trọng này đặt trọng lượng hơn trên các mẫu gần đây hơn trên các mẫu cũ. Điều này là tự nhiên, như các mẫu gần đây phản ánh tốt hơn sự ùn tắc hiện nay trong mạng. Trong statis-tics, trung bình như vậy được gọi là một chuyển động có trọng số trung bình hàm mũ (EWMA). Từ "cấp số nhân" xuất hiện trong EWMA vì trọng lượng của một định Sam-pleRTT phân rã nhanh theo hàm mũ như các bản cập nhật tiếp tục. Trong các bài tập về nhà prob-vấn bạn sẽ được yêu cầu để lấy được các hạn theo cấp số nhân trong EstimatedRTT.
TCP cung cấp truyền dữ liệu đáng tin cậy bằng cách sử dụng các báo nhận tích cực và tính giờ theo cách tương tự mà chúng tôi nghiên cứu trong Phần 3.4. TCP thừa nhận rằng dữ liệu đã được nhận một cách chính xác, và sau đó nó truyền lại phân đoạn khi phân đoạn hoặc các cam kết tương ứng của họ được cho là bị mất hoặc bị hỏng. Một số phiên bản của TCP cũng có một tiềm ẩn NAK cơ chế với các cơ chế truyền lại nhanh TCP của việc nhận ba ACKs Dupli-cate cho một phân khúc nhất định phục vụ như một NAK tiềm ẩn đối với phân khúc sau, trang điểm-gering truyền lại rằng phân đoạn trước khi thời gian chờ. TCP sử dụng chuỗi các con số để cho phép người nhận để xác định phân đoạn bị mất hoặc bị trùng lặp. Cũng như trong trường hợp của giao thức truyền dữ liệu đáng tin cậy của chúng tôi, rdt3.0, TCP có thể bản thân nó không nói cho chắc chắn nếu một phân đoạn, hoặc ACK của nó, bị mất, bị hỏng, hoặc quá chậm. Ở người gửi, phản ứng của TCP sẽ giống nhau: truyền lại các đoạn trong câu hỏi.
TCP cũng sử dụng pipelining, cho phép người gửi có nhiều truyền nhưng phân đoạn nổi bật tại bất kỳ thời gian nhất định nào-để-được-thừa nhận. Chúng tôi đã thấy trước đó pipelining rằng rất có thể cải thiện thông lượng của một phiên khi tỷ lệ kích thước phân đoạn để chậm trễ chuyến đi vòng quanh là nhỏ. Số lượng cụ thể của xuất sắc, các phân đoạn không được thừa nhận rằng một người gửi có thể đã được xác định bằng cách kiểm soát dòng và tắc nghẽn kiểm soát cơ chế TCP. Kiểm soát lưu lượng TCP được thảo luận ở phần cuối của phần này; TCP kiểm soát tắc nghẽn là dis-thảo luận trong Phần 3.7. Trong thời gian này, chúng tôi chỉ đơn giản là phải nhận thức được rằng người gửi TCP sử dụng pipelining.
Hình 3.32 cho thấy các giá trị SampleRTT và EstimatedRTT với giá trị = 1/8 cho một kết nối TCP giữa gaia.cs.umass.edu (ở Amherst, Massachu -setts) để fantasia.eurecom.fr (ở miền Nam nước Pháp). Rõ ràng, sự khác biệt trong SampleRTT được làm mượt trong tính toán của EstimatedRTT.
Ngoài việc có một ước tính của RTT, nó cũng là giá trị để có một thước đo của sự biến đổi của RTT. [RFC 6298] định nghĩa các biến thể RTT, DevRTT, như một ước tính bao nhiêu SampleRTT thường lệch khỏi EstimatedRTT:
DevRTT = (1 -) • DevRTT + • | SampleRTT - EstimatedRTT |
Lưu ý rằng DevRTT là một EWMA của sự khác biệt giữa SampleRTT và EstimatedRTT. Nếu các giá trị SampleRTT có chút dao động, sau đó DevRTT sẽ được nhỏ; Mặt khác, nếu có rất nhiều biến động, DevRTT sẽ lớn. Các giá trị được đề nghị của β là 0,25.
Thiết lập và Quản lý Tiếp sóng Timeout Interval
giá trị Given của EstimatedRTT và DevRTT, những gì giá trị nên được sử dụng cho khoảng thời gian timeout của TCP? Rõ ràng, khoảng thời gian phải lớn hơn hoặc bằng EstimatedRTT, hoặc truyền lại không cần thiết sẽ được gửi đi. Nhưng khoảng thời gian chờ không nên lớn hơn quá nhiều so với EstimatedRTT; nếu không, khi một seg-ment bị mất, TCP sẽ không nhanh chóng truyền lại phân khúc này, dẫn đến dữ liệu lớn chậm trễ trans-fer. Do đó, mong muốn thiết lập thời gian chờ bằng EstimatedRTT cộng với một số lợi nhuận. Các lề phải lớn khi có rất nhiều biến động trong giá trị SampleRTT; nó phải là nhỏ khi có rất ít biến động. Giá trị của DevRTT do đó nên đi vào chơi ở đây. Tất cả những điều kiện được xem xét trong phương thức TCP để xác định việc phát lại thời gian chờ khoảng thời gian:
TimeoutInterval = EstimatedRTT + 4 • DevRTT
Một giá trị TimeoutInterval ban đầu là 1 thứ hai được đề nghị [RFC 6298]. Ngoài ra, khi một timeout xảy ra, giá trị của TimeoutInterval tăng gấp đôi để tránh một thời gian chờ sớm xảy ra cho một phân đoạn tiếp theo sẽ sớm được acknowl lưỡi. Tuy nhiên, ngay sau khi một phân khúc được nhận và EstimatedRTT được cập nhật, TimeoutInterval một lần nữa được tính toán bằng cách sử dụng công thức trên.
đang được dịch, vui lòng đợi..