Trong TCP bắt tay 3 chiều, 3 phân đoạn sẽ được gửi (SYN, SYN ACK, ACK). Điều gì xảy ra nếu đoạn thứ ba (ACK) bị mất? Người gửi có gửi lại phân đoạn hoặc từ bỏ việc thiết lập kết nối không? Và làm thế nào để hai máy chủ biết phân khúc bị mất?Điều gì xảy ra nếu đoạn bắt tay TCP bị mất?
Trả lời
TCP có số thứ tự trong tất cả các gói. Do đó nó dễ dàng để biết nếu một gói tin bị mất hay không. Nếu một máy chủ không nhận được một ACK trên một gói, anh ta chỉ gửi lại nó.
Trong hầu hết các trường hợp, ngay cả khi ACK đó bị mất, sẽ không có sự gửi lại vì một lý do rất đơn giản. Ngay sau ACK, máy chủ đã mở giao thức TCP có khả năng bắt đầu gửi dữ liệu. Dữ liệu đó, vì tất cả các gói TCP, có một số ACK, do đó người nhận sẽ nhận được một ACK theo cách đó. Do đó, người gửi SYN-ACK nên hợp lý không quan tâm rằng nó không nhận được ACK, bởi vì nó nhận được một "ẩn" ACK trong gói sau.
Việc gửi lại SYN-ACK chỉ cần thiết mà không có dữ liệu nào được nhận.
Cập nhật: tôi thấy diễn ra trong RFC rằng quy định chính xác này:
Nếu SYN chúng tôi đã được công nhận (có lẽ trong phân khúc đến nay) mức độ ưu tiên của đoạn đến phải trận đấu mức độ ưu tiên địa phương chính xác, nếu không đặt lại phải được gửi.
Nói cách khác, nếu ACK bị loại bỏ nhưng gói tiếp theo không bị xóa, thì mọi thứ đều ổn. Nếu không, kết nối phải được đặt lại. Mà làm cho cảm giác hoàn hảo.
ACK cuối cùng của cái bắt tay không phải là chính nó ACK'ed, mặc dù. –
ACKing một ACK sẽ làm cho việc truyền dữ liệu thực tế là không thể. –
Tôi có điểm. Cảm ơn bạn! – ZHOU
Tôi không phải là chuyên gia về tình huống cụ thể này, nhưng tôi nghi ngờ điều gì sẽ xảy ra là khách hàng sẽ nghĩ rằng nó được kết nối nhưng máy chủ sẽ không. Nếu máy khách cố gắng gửi dữ liệu đến máy chủ, máy chủ sẽ từ chối nó và gửi một gói RST tới máy khách để nó có thể thiết lập lại "kết nối" của nó.
Máy chủ sẽ thấy kết nối được thiết lập khi gửi SYN-ACK. Nhưng điều này có thể là một chi tiết thực hiện, tôi đã không tìm thấy các thông số kỹ thuật thực tế để làm gì trong trường hợp này. Có lẽ không có. –
@LennartRegebro: theo [RFC 793 Phần 3.4] (http://tools.ietf.org/html/rfc793#section-3.4), máy chủ không nhập trạng thái 'ESTABLISHED' cho đến khi nó nhận được ACK cuối cùng. Khi nó gửi 'SYN + ACK', nó vẫn ở trạng thái' SYN-RECEIVED'. Máy khách vào trạng thái 'ESTABLISHED' khi nó nhận' SYN + ACK'. –
Tìm thấy: "Nếu SYN của chúng tôi đã được xác nhận (có lẽ trong phân đoạn đến này), mức độ ưu tiên của phân đoạn đến phải là khớp chính xác với mức độ ưu tiên của địa phương, nếu không phải đặt lại." Nói cách khác, nếu ACK và * chỉ * ACK bị ngắt, kết nối sẽ được thiết lập. Nếu có nhiều thứ bị bỏ đi, có một thiết lập lại. " –
- 1. điều gì sẽ xảy ra nếu php.ini bị thiếu?
- 2. Điều gì sẽ xảy ra sau khi gói bị bắt?
- 3. Điều gì xảy ra nếu lỗi mới?
- 4. Khi xảy ra gián đoạn, điều gì xảy ra với hướng dẫn trong đường ống?
- 5. Điều gì sẽ xảy ra nếu một Dịch vụ được bắt đầu nhiều lần?
- 6. Điều gì sẽ xảy ra nếu đăng ký phân đoạn CS được thay đổi?
- 7. TCP bắt tay với SOCK_RAW socket
- 8. Điều gì sẽ xảy ra nếu tôi ReleaseMutex() hai lần?
- 9. Điều gì xảy ra nếu minSdkVersion thấp hơn targetSdkVersion?
- 10. Nếu không xóa biến ThreadLocal, Điều gì sẽ xảy ra?
- 11. Trong Java nếu một sợi bị giết, điều gì sẽ xảy ra với luồng khác?
- 12. Điều gì xảy ra khi chương trình java bắt đầu?
- 13. Điều gì sẽ xảy ra nếu một hàm tạo của shared_ptr bị lỗi?
- 14. Điều gì sẽ xảy ra với Braintree.js nếu Javascript bị tắt?
- 15. Điều gì sẽ xảy ra nếu khung bị xóa khỏi ứng dụng?
- 16. Điều gì xảy ra với kết nối TCP trên chuyển mạch tháp 3G?
- 17. Điều gì xảy ra với kết nối TCP khi máy tính chuyển sang chế độ ngủ?
- 18. Spring MVC: Điều gì sẽ xảy ra nếu tôi bắt đầu một chuỗi trong một hành động điều khiển?
- 19. điều gì đã xảy ra với syscalls.h?
- 20. Trong Java, điều gì sẽ xảy ra nếu bạn sử dụng Double.NaN trong một hoạt động?
- 21. Điều gì đã xảy ra với regtlibv12?
- 22. Điều gì sẽ xảy ra nếu phần đầu tiên của cấu trúc nếu là sai?
- 23. điều gì sẽ xảy ra khi một chuỗi bị gián đoạn trong khi chặn trên một wait()?
- 24. Điều gì đã xảy ra với Array.Sort() trong .NET 4.0? TrySZSort() đã biến mất chưa?
- 25. Điều gì đã xảy ra với NVD3?
- 26. Điều gì đang xảy ra trong __libc_start_main?
- 27. Điều gì xảy ra với lớp System.Linq.Expressions.LogicalBinaryExpression?
- 28. Android APK - trường nào là bắt buộc và điều gì sẽ xảy ra nếu thông tin đó thay đổi?
- 29. Điều gì xảy ra nếu ném; câu lệnh được thực hiện bên ngoài khối catch?
- 30. Điều gì sẽ xảy ra nếu đối tượng mẫu mới không được gán cho một biến?
https://tools.ietf.org/rfc/rfc793.txt sẽ giải thích điều gì xảy ra. –
@EdHeal: bạn có thể chỉ vào một phần cụ thể không? – skrtbhtngr