Giải pháp cho Ubuntu Fedora CentOS và các hệ thống Linux khác chỉ truy cập được Baidu
Trước tiên, để tôi giới thiệu một số kiến thức nền tảng về vấn đề này.
Một gói TCP điển hình có trường cửa sổ với kích thước cửa sổ tối đa 64KB. Điều này đã đủ trong những ngày đầu của Internet khi hầu hết các hệ thống không thể xử lý dữ liệu lớn hơn, nhưng nó quá nhỏ cho các ứng dụng băng thông ngày nay.
Để giải quyết vấn đề này, một giải pháp gọi là window scaling (chia tỷ lệ cửa sổ) đã được đề xuất vào năm 1992, cung cấp một tùy chọn chia tỷ lệ cửa sổ TCP bổ sung chứa hệ số chia tỷ lệ 8-bit. Giá trị của tùy chọn này chỉ định cửa sổ nên lớn bao nhiêu, đạt được bằng cách dịch chuyển giá trị kích thước cửa sổ một số bit. Ví dụ, nếu hệ số chia tỷ lệ được đặt là 5, thì kích thước cửa sổ sẽ dịch chuyển 5 bit hoặc nhân với 32.
Tùy chọn chia tỷ lệ cửa sổ tăng định nghĩa cửa sổ của TCP từ 16 bit lên 32 bit. Điều này không đạt được bằng cách sửa đổi header TCP, vẫn sử dụng 16 bit, mà bằng cách định nghĩa một tùy chọn thực hiện thao tác mở rộng 16-bit.
Trong kernel 2.6.16 và trước đó, hệ số chia tỷ lệ mặc định là 0, vì vậy kích thước cửa sổ không tăng. Trong kernel 2.6.17, hệ số chia tỷ lệ được đặt là 7. Lý tưởng thì điều này không gây ra vấn đề gì. Tuy nhiên, trong thực tế, một số router “hỏng” ghi đè tùy chọn TCP chia tỷ lệ cửa sổ - đặt hệ số chia tỷ lệ về 0 nhưng không thay đổi tùy chọn khả năng xử lý thực tế.
Về bản chất, điều này có nghĩa là một số trang web sẽ không thể truy cập được từ các hệ thống sử dụng kernel 2.6.17 trở lên. Từ quan điểm của các nhà phát triển kernel, họ coi những router đó là hỏng và cần thay thế. Trên thực tế, những router này có thể tiếp tục được sử dụng trong nhiều năm trước khi được sửa chữa hoặc thay thế.
Một cách để giải quyết vấn đề này là đặt lại tùy chọn chia tỷ lệ cửa sổ của kernel Linux. Mặc dù điều này không sửa được các router hỏng, nhưng nếu bạn bị ảnh hưởng bởi vấn đề chia tỷ lệ cửa sổ, phương pháp này có thể cho phép hệ thống của bạn kết nối với các trang web từ xa.
Giải pháp là chỉnh sửa file /etc/sysctl.conf và thêm dòng sau:
net.ipv4.tcp_window_scaling = 0Xóa dấu # ở phía trước
Điều này sẽ hoàn toàn vô hiệu hóa tính năng chia tỷ lệ cửa sổ, cho phép bạn kết nối với các trang web mà trước đó bạn không thể. Dù đúng hay sai, các nhà phát triển kernel từ chối hoàn nguyên thay đổi này, vì vậy sử dụng tùy chọn này có thể vừa vô hiệu hóa tính năng chia tỷ lệ cửa sổ của riêng bạn để quay lại cài đặt mặc định trước 2.6.17, vừa kết nối với những trang web không thể truy cập được trong khi thuyết phục họ nên tìm và thay thế các router hỏng.