2012-03-30 29 views
8

Tôi đã tự hỏi làm thế nào chính xác TCP thực hiện giao hàng theo thứ tự.TCP thực hiện/bảo đảm truyền dữ liệu theo thứ tự như thế nào?

phép nói đây là danh sách các sự kiện

  1. packet1 gửi, ACK nhận được.
  2. packet2 đã gửi, không nhận được ack.
  3. packet3 được gửi.
  4. packet4 được gửi.
  5. ack4 đã nhận được.
  6. ack3 đã nhận được.
  7. ack2 đã nhận được.

Bạn có thể mô tả cho tôi chính xác những gì xảy ra tuần tự không?

Trả lời

7

Câu trả lời ngắn gọn là mỗi gói chứa thông tin bù đắp (được cải trang thành số thứ tự), xác định vị trí tải trọng của luồng trong luồng.

Giả sử điều sau xảy ra: gói 1 được nhận, gói 2 không được nhận và gói 3 và 4 được nhận. Tại thời điểm này nhận được TCP stack biết nơi để sao chép nội dung của gói 3 và 4 trên bộ đệm, và nó biết rằng nó vẫn chưa nhận được dữ liệu trước, do đó, nó sẽ làm cho dữ liệu gói 1 có sẵn để đọc, nhưng nó sẽ không làm cho gói dữ liệu 3 hoặc 4 có sẵn cho đến khi gói 2 được nhận.

Truyền TCP stack thường không chờ xác nhận cho bất kỳ gói nào trước khi gửi gói tiếp theo, nhưng nếu nó không nhận được xác nhận cho gói đã cho (và ACK có thể và được gói lại với nhau trong một gói duy nhất cho hiệu quả), nó sẽ truyền lại cho đến khi nhận được ACK.

Chuỗi sự kiện chính xác phụ thuộc vào điều kiện mạng, triển khai ngăn xếp TCP, chính sách TCP được chọn, tùy chọn ổ cắm và các yếu tố khác.

4

gói TCP có số thứ tự (byte offset kể từ khi bắt đầu, từ bộ nhớ) và các thông điệp ACK thừa nhận rằng một cụ thể bù đắp được nhận:

enter image description here

Vì vậy, bạn có thể kết thúc với một tình huống như thế :

data 1 (10 bytes)   -> 
          <- ack (10, data1) 
data 2 (15 bytes)   -> 
data 3 (10 bytes)   -> 
data 4 (8 bytes)   -> 
          <- ack (25, data1/2/3) 
          <- ack (33, data1/2/3/4) 

Nói cách khác, người gửi có thể tiếp tục gửi bất kể lời cảm ơn đến điểm mà bộ đệm của nó có đầy đủ (nó có để giữ các gói tin không được thừa nhận trong trường hợp cần thiết để tái truyền cho họ).

Điều này "ngắt kết nối" giữa gửi và xác nhận có thể đẩy nhanh lưu lượng dữ liệu.

Khi kết thúc nhận, các gói có thể không hoạt động, và chúng được giữ cho đến khi có thể phân phối đến mức cao hơn theo thứ tự.

Ví dụ: nếu data 3 đến trước data 2, đầu tiếp nhận sẽ giữ cho đến khi data 2 đến, sau đó cả hai người trong số họ sẽ được gửi lên trên để gửi.

Các vấn đề liên quan