Điểm:1

Có vô ích khi trả lời các tin nhắn đã nhận (trên TCP) trên lớp ứng dụng để thông báo cho người gửi rằng các tin nhắn đã được nhận thành công không?

lá cờ cn

Mọi mất mát dữ liệu đều được phát hiện và tự động sửa chữa, đó là lý do tại sao TCP còn được gọi là giao thức đáng tin cậy.

Nói cách khác,

lớp vận chuyển chịu trách nhiệm phân phối từ đầu đến cuối không có lỗi dữ liệu từ máy nguồn đến máy đích.

TCP là đảm bảo trở thành một đáng tin cậy truyền tải thực sự. Một câu hỏi được đặt ra, phải chăng dư thừa (hoặc vô dụng, xin lỗi vì tiếng Anh kém của tôi) để trả lời các tin nhắn đã nhận (được chuyển trên TCP) trên lớp ứng dụng để thông báo cho người gửi rằng các tin nhắn đã được nhận thành công?

lá cờ ru
Hãy xem xét một máy khách HTTP đã gửi yêu cầu POST tới máy chủ, liệu máy khách có hài lòng nếu máy chủ không gửi lại bất kỳ phản hồi nào không?
John avatar
lá cờ cn
@Chitholian Thực sự không phải là một ví dụ hay.
Điểm:9
lá cờ se

Nó không phải là dư thừa. TCP chỉ quan tâm đến việc phân phối giữa hai hệ thống, không phải giữa hai ứng dụng. ACK được gửi sau khi dữ liệu được nhận thành công. Tải trọng của các gói sau đó được đưa vào bộ đệm ổ cắm của ứng dụng ở phía người nhận. Do đó, ACK được gửi trước khi ứng dụng đọc tải trọng (từ bộ đệm ổ cắm) và cụ thể là trước khi nó xử lý tải trọng, ví dụ: thực hiện các thay đổi đối với cơ sở dữ liệu dựa trên tải trọng đã xử lý.

Do đó, một khách hàng chỉ có thể biết rằng các ứng dụng đã xử lý thành công tải trọng nếu nó nhận được một số loại xác nhận ở cấp ứng dụng.Tuy nhiên, đây không cần phải là một xác nhận rõ ràng - chỉ cần gửi phản hồi lại là đủ. Chi tiết phụ thuộc vào ngữ nghĩa của giao thức ứng dụng.

John avatar
lá cờ cn
Tôi hoàn toàn hiểu và đồng ý rằng "ACK được gửi sau khi dữ liệu được nhận thành công". Nhưng tại sao ý của bạn là "đặt vào bộ đệm ổ cắm ứng dụng."? Theo như tôi biết, các ACK có thể **không** được biết bởi các ứng dụng **thực sự**ï¼
Steffen Ullrich avatar
lá cờ se
@John: TCP thường được xử lý bởi nhân hệ điều hành. Từ phía ứng dụng có ổ cắm có thể đọc và viết. Nếu dữ liệu được nhận bởi kernel, chúng sẽ được đưa vào bộ nhớ đệm được liên kết với bộ đệm - bộ đệm đọc. Lần đọc sau từ ứng dụng sẽ chỉ lấy dữ liệu từ bộ đệm đọc này. Trong trường hợp chặn đọc (tức là ứng dụng đang chờ dữ liệu), dữ liệu sẽ được nhân đưa vào bộ đệm đọc và sau đó ứng dụng bị chặn sẽ được đánh thức để nó có thể đọc dữ liệu từ bộ đệm.
John avatar
lá cờ cn
Tôi hiểu rồi. Bạn có nghĩa là dữ liệu ** khác ** ACK được đưa vào bộ đệm sẽ được ứng dụng đọc sau này. Cảm ơn sự trình bày rõ ràng của bạn.
Steffen Ullrich avatar
lá cờ se
@John: Có, tôi không coi ACK là *dữ liệu*. Đây chỉ là thông tin vận chuyển. Thay vào đó, tôi đã nói rõ hơn bằng cách nói về *payload*.
John avatar
lá cờ cn
Tôi thấy, cảm ơn bạn rất nhiều.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.