2012-05-04 19 views
15

Tôi đang cố gắng hiểu cách các số thứ tự của tiêu đề TCP được tạo ra.Số chuỗi TCP

Ở một số nơi tôi đọc rằng đó là "chỉ số của byte đầu tiên trong gói" (link here), trên một số trang web khác, đó là số ngẫu nhiên được tạo 32 bit sau đó được tăng lên.

tôi không thực sự biết đó là có, vì vậy đây là một số câu hỏi sau:

  • Làm thế nào là số thứ tự ban đầu được tạo ra? (số rfc nếu có)
  • Làm thế nào nó được tăng lên?
  • Khóa bí mật được tạo như thế nào?

Tôi đọc một số trong số của rfc như RFC 6528, RFC 793RFC 1948 nhưng tôi dường như không hiểu cái nào thực sự được triển khai. Tôi đọc về trạng thái "std" nhưng stil ...

Cảm ơn bạn trước!

+1

Triển khai nào? Điều gì về nguồn gốc của việc thực hiện đó là bạn đặc biệt hỏi về? – geoffspear

+0

Ồ, tôi xin lỗi. Tôi có nghĩa là khi bạn duyệt trên Internet (HTTP/TCP/IP) máy tính của bạn sử dụng những gì để tạo ra các số thứ tự này? Làm thế nào nó hoạt động ? –

+0

Vì vậy, đây không phải là một câu hỏi lập trình? – geoffspear

Trả lời

27

Mỗi điểm cuối của kết nối TCP thiết lập số thứ tự bắt đầu cho các gói mà nó gửi và gửi số này trong gói SYN mà nó gửi như một phần của việc thiết lập kết nối.

Không có yêu cầu cho cả hai đầu tuân theo quy trình cụ thể trong việc chọn số thứ tự bắt đầu. Hệ điều hành là miễn phí để sử dụng bất kỳ cơ chế nào nó thích, nhưng nói chung nó là tốt nhất nếu nó chọn một số ngẫu nhiên, vì điều này là an toàn hơn.

Từ điểm bắt đầu đó, mỗi gói được gửi bởi hai đầu chứa hai số thứ tự - một để xác định vị trí trong luồng gói và số chuỗi ACK biểu thị số byte đã nhận được. Cả hai số được bù đắp bằng số thứ tự bắt đầu.

Đọc tất cả về nó trong Wikipedia tất nhiên - tìm "số thứ tự" trong trang đó để nhận tất cả chi tiết đẫm máu.

+0

Ah cảm ơn bạn cho câu trả lời nhanh của bạn! = D Tôi hiểu rõ hơn. Chỉ hai câu hỏi tiếp theo ^^: Bạn có biết số ngẫu nhiên được tạo ra không? và Bạn có biết số RFC nào mà quy trình bạn giải thích tương ứng không? Thx lần nữa! –

+2

@AwakeZoldiek như được giải thích, số thứ tự ban đầu có thể được chọn bằng phương pháp _any_, mặc dù để bảo mật tốt nhất, nó sẽ được chọn bằng cách sử dụng trình tạo số ngẫu nhiên tốt. Số thứ tự của SYN và ACK là tất cả trong tài liệu RFC 793 lõi. – Alnitak

+0

Cảm ơn bạn đã asnwers của bạn! =) –

2

Trong 4.4BSD (và hầu hết các triển khai có nguồn gốc từ Berkeley) khi hệ thống được khởi tạo, số thứ tự gửi ban đầu được khởi tạo thành 1. Hành vi này vi phạm RFC Yêu cầu máy chủ. (Nhận xét trong mã xác nhận rằng điều này là sai.) Biến này sau đó được tăng thêm 64.000 mỗi nửa giây và sẽ quay lại 0 khoảng 9,5 giờ một lần. (Điều này tương ứng với một bộ đếm được tăng lên mỗi 8 micro giây, không phải mỗi 4 micro giây.) Ngoài ra, mỗi khi kết nối được thiết lập, biến này được tăng thêm 64.000.