Tôi đang cố gắng hiểu lý do đằng sau thiết kế như vậy. Tôi lướt qua một vài RFC nhưng không tìm thấy bất cứ điều gì rõ ràng.Tại sao bit SYN hoặc FIN trong phân đoạn TCP sử dụng một byte trong không gian số thứ tự?
22
A
Trả lời
21
Nó không phải là đặc biệt tinh tế - nó để các bit SYN và FIN có thể được thừa nhận (và do đó được gửi lại nếu chúng bị mất). Ví dụ: nếu kết nối được đóng mà không gửi thêm dữ liệu, thì nếu FIN đã làm không tiêu thụ số thứ tự, thì kết thúc đóng không thể cho biết sự khác biệt giữa ACK cho FIN và ACK cho dữ liệu đã được gửi trước FIN.
6
SYN và FIN yêu cầu xác nhận, do đó chúng tăng số thứ tự của luồng lên một khi được sử dụng.
Các vấn đề liên quan
- 1. Có thể endianness tham chiếu đến thứ tự bit trong một byte không?
- 2. Tại sao Guid.ToString() đảo ngược thứ tự byte?
- 3. Lợi ích của "Không phân đoạn" trên gói TCP?
- 4. Tại sao HTTP sử dụng TCP?
- 5. Tại sao tôi không nên sử dụng ký tự thứ 23 trong muối của hàm crypt()?
- 6. Sử dụng chế độ xem hoặc phân đoạn trong ViewPager
- 7. Tại sao ghi vào một chuỗi ký tự trong phân đoạn chương trình C này?
- 8. Các trường bit và các số thứ tự
- 9. Cần hàm băm để tạo giá trị 32 bit trong số ipv6 16 Địa chỉ byte và số cổng TCP 2 Byte
- 10. thay thế byte trong 32 bit số
- 11. Tại sao kích thước cửa sổ nhỏ hơn hoặc bằng một nửa số thứ tự trong giao thức SR?
- 12. Tại sao fread lộn xộn với thứ tự byte của tôi?
- 13. Tại sao onResume() được gọi trong các phân đoạn ẩn?
- 14. Tại sao phạm vi byte -128 đến 127 trong Java?
- 15. Tại sao chế độ sử dụng 4 byte?
- 16. Tại sao BinaryReader.ReadUInt32() đảo ngược mẫu bit?
- 17. Chúng ta có gọi bit đầu tiên trong bit byte 1 hoặc 0 không?
- 18. một chức năng để kiểm tra xem bit thứ n được đặt trong một byte
- 19. Tại sao một chữ bát phân không phải là một chuỗi ký tự thành một số?
- 20. Tại sao RTP sử dụng UDP thay vì TCP?
- 21. tại sao parse_url trở lại phân đoạn?
- 22. Tại sao và khi nào sử dụng PowerShell hoặc ISE 32 hoặc 64 bit?
- 23. Trong các hệ thống 64 bit, một cột 32 bit chiếm ít không gian hơn một bit 64 bit?
- 24. Viết số phân đoạn trong Java hoặc Android
- 25. Hoạt động bit C/sao chép một bit từ byte này sang byte khác
- 26. Có một thứ như một `bit` đúng trong JavaScript không?
- 27. Đăng ký phân đoạn sử dụng
- 28. Sử dụng nhiều phân đoạn trong một hoạt động
- 29. Tại sao tôi không thể sử dụng "." như một dấu phân cách trong hàm split()?
- 30. Tại sao một số ứng dụng web sử dụng trang trung gian trước khi chuyển hướng?
Nếu người dùng chỉ định rằng bất cứ thứ gì mở kết nối phải gửi byte 00 ở đầu kết nối (mà người nhận phải bỏ qua) và 00 khác ở cuối (người nhận sẽ bỏ qua) cùng ngữ nghĩa như các bit SYN/FIN, nhưng với chi phí truyền hai byte nhiều hơn với mỗi kết nối? – supercat
Supercat: Sau đó bạn sẽ làm gì nếu dữ liệu trong luồng bắt đầu hoặc kết thúc bằng một byte rỗng? – EricLaw
Để bắt đầu, gói đầu tiên được gửi bởi bên trả lời SYN ban đầu sẽ có số thứ tự bằng với số nhận được trong SYN, thay vì bằng với số cộng thêm; do đó, một người nhận sẽ coi byte đầu tiên của gói đó như là một sự truyền lại vô dụng. Để kết thúc, giao thức sẽ phải được định nghĩa để nói rõ ràng rằng byte cuối cùng của truyền dẫn sẽ bị bỏ qua. – supercat