Tôi đã thử nghiệm các tham số TCP trong Linux (với kernel 3.5). Về cơ bản liên quan đến kết nối này:
Máy chủ: Gigabit đường lên trong trung tâm dữ liệu, băng thông thực tế (do chia sẻ đường lên) là khoảng 70 MB / s khi được kiểm tra từ trung tâm dữ liệu khác.
Khách hàng: Gigabit cục bộ kết nối với sợi 200mbit. Tìm nạp tệp thử nghiệm thực sự đạt được 20 MB / s.
Độ trễ: Khoảng 50ms khứ hồi.
Máy chủ từ xa được sử dụng làm máy chủ tệp cho các tệp trong phạm vi từ 10 đến 100mb. Tôi nhận thấy rằng việc sử dụng initcwnd 10 thời gian truyền cho các tệp này bị ảnh hưởng nặng nề bởi TCP khởi động chậm, mất 3,5 giây để tải 10mb (tốc độ tối đa đạt: 3,3 MB / giây) vì nó bắt đầu chậm và sau đó tăng tốc. được hoàn thành trước khi đạt được tốc độ tối đa. Mục tiêu của tôi là điều chỉnh thời gian tải tối thiểu của các tệp đó (vì vậy không phải thông lượng thô cao nhất hoặc độ trễ tròn thấp nhất, tôi sẵn sàng hy sinh cả hai nếu điều đó làm giảm thời gian thực sự để tải tệp)
Vì vậy, tôi đã thử một phép tính đơn giản để xác định initcwnd lý tưởng là gì, bỏ qua mọi kết nối khác và tác động có thể có đến người khác. Sản phẩm trễ băng thông là 200 Mbit / s * 50ms = 10 Mbit hoặc 1.310.720 byte. Xem xét rằng initcwnd được đặt theo đơn vị MSS và giả sử MSS có khoảng 1400 byte, điều này sẽ yêu cầu cài đặt: 1.310.720 / 1400 = 936
Giá trị này rất xa so với mặc định (10 * MSS trong Linux, 64kb trong Windows), vì vậy không nên đặt nó như thế này. Nhược điểm dự kiến của việc cấu hình nó như thế này là gì? Ví dụ:
- Nó sẽ ảnh hưởng đến những người dùng khác của cùng một mạng?
- Nó có thể tạo ra tắc nghẽn không thể chấp nhận cho các kết nối khác?
- Bộ đệm bộ định tuyến lũ ở đâu đó trên đường dẫn?
- Tăng tác động của việc mất gói nhỏ?
70 MB/s
và không nói megabits không? Chỉ cần tìm kiếm để làm rõ.