首先讓我為大家介紹一下這個問題的背景知識。
典型tcp資料報有乙個最大視窗大小為64kb的視窗域。這在網際網路發展初期,大部分系統都沒有能力處理比這更大的資料,因此這個大小是足夠的,但是對於現在的接入頻寬應用來說,這已經太小了。為了解決這個問題,2023年提出了一種稱為視窗縮放的解決方案,它提供了乙個額外的tcp視窗擴**項,該選項包含乙個8位的擴大因子。這個選項 的值指定了視窗應該多大,它是由通過滑動幾個位元的視窗大小值來實現的。例如,如果擴大因子設定為5,那麼視窗大小應該移動5個位元或乘以32。視窗擴**項使tcp的視窗定義從16位增加到32位,這並不是通過修改tcp首部來實現的,tcp首部仍然使用16位,而是通過定義乙個選項實現對16位的擴大操作來完成的。
在2.6.16和更早核心中預設擴大因子為0,所以沒有增加視窗大小。在2.6.17核心中,擴大因子被設定為7。理想的情況下,這不會有什麼問題。但實際上,一些「壞掉」的路由器會重寫視窗縮放tcp選項——將擴大因子設定為0但是實際處理能力選項卻沒有改變。本質上,這意味著有一些**使用2.6.17和更高核心的系統將會連線不上。從核心開發人員的立場看他們會認為那些路由器是壞掉的需要進行替換。實際上,這些路由器在修理或替換前可能還可以繼續使用好多年。
解決這個問題的乙個方法是重新設定linux核心的視窗縮放選項。雖然這不會修復壞掉的路由器,但是如果你正受到視窗縮放問題的影響,該方法可以使你的系統連線到遠端站點。
TCP連線被意外重置的原因
今天在做伺服器壓力測試的時候,出現了很奇怪的情況,與伺服器建立連線會成功,但是很快會被重置 reset 掉。花了半天時間,終於找到原因所在,我把過程和結果寫下來與大家分享。伺服器正常邏輯是 接受連線,等待使用者註冊報文,處理其他請求,如果連線一段時間沒有活動,則主動關閉連線。客戶端邏輯是 與伺服器建...
linux下mysql重置密碼
重置密碼 第一步跳過mysql的密碼認證過程 vim etc my.cnf 注 windows下修改的是my.ini 在文件中搜尋mysqld定位到 mysqld 在後面任意一行新增skip grant tables,如下 mysqld skip grant tables 儲存並退出 重啟mysql...
linux下mysql重置密碼
如果忘記mysql的root密碼可以採取下面的步驟重新設定 1。kill掉所有mysql的程序 2。使用 skip grant tables的引數啟動mysql shell mysqld safe skip grant tables 3。在開啟乙個連線,設定新的密碼,mysql update mys...