Tôi chọn lọc thông qua một số dấu vết mạng và nhận thấy trên máy tính của riêng tôi rằng khi tôi kết nối qua HTTP, các gói dữ liệu giống như thế:tải dữ liệu trong một TCP ack
client --> server: GET
server --> client: tcp ack
server --> client: HTTP response
client --> server: tcp ack
Tuy nhiên, tôi nhìn vào một số CIFS (SMB) dấu vết tôi đã lưu từ một vài năm trở lại. Tôi thấy những thứ như:
client --> server: Create Request
server --> client: Create response (This packet also acks the request)
Ở mức cao, tôi tự hỏi tại sao sự khác biệt - điều gì đang gây ra các hành vi khác nhau? Điều gì đang kiểm soát xem phản ứng ứng dụng có được đặt trên yêu cầu ack hay gói khác: ứng dụng hoặc hệ điều hành không?
bạn có thể chỉ định bộ hẹn giờ trễ trong bất kỳ cài đặt khởi tạo TCP nào không? – NHDaly
Bạn có thể tắt nó bằng tùy chọn TCP_QUICKACK với setsockopt theo IPPROTO_TCP (không btw di động). Nhưng việc thay đổi giá trị có thể không thực hiện được vì tôi tin rằng nó được mã hóa cứng trừ khi có sysctl mới được thêm vào cho nó (hoặc một cái gì đó tương tự). – Milan
Sau khi tôi đặt tùy chọn TCP socket để tắt TCP Quick ACK, tôi vẫn không nhận được gói kết hợp trả lời: opt = 0; setsockopt (sockfd, IPPROTO_TCP, TCP_QUICKACK, (char *) & opt, sizeof (opt)); –