【TCP/IP的狀態圖解決Cannot assign requested address】

lijieshare發表於2017-12-31

系統出現:Cannot assign requested address

 

網上找了下原因,大致上是由於客戶端頻繁的連伺服器,由於每次連線都在很短的時間內結束,導致很多的TIME_WAIT,以至於用光了可用的端 口號,所以新的連線沒辦法繫結埠,即“Cannot assign requested address”。是客戶端的問題不是伺服器端的問題。通過netstat,的確看到很多TIME_WAIT狀態的連線。

 

client端頻繁建立連線,而埠釋放較慢,導致建立新連線時無可用埠。

 

網上的解決方法:

 

執行命令修改如下2個核心引數 (需要root許可權) 

sysctl -w net.ipv4.tcp_timestamps=1  開啟對於TCP時間戳的支援,若該項設定為0,則下面一項設定不起作用

sysctl -w net.ipv4.tcp_tw_recycle=1  表示開啟TCP連線中TIME-WAIT sockets的快速回收

 

 



 

 

 

linux核心中存在兩個引數:

      net.ipv4.tcp_tw_reuse = 1表示開啟重用。允許將TIME-WAIT sockets重新用於新的TCP連線,預設為0,表示關閉;

      net.ipv4.tcp_tw_recycle = 1表示開啟TCP連線中TIME-WAIT sockets的快速回收,預設為0,表示關閉。

    在/etc/sysctl.conf檔案中加入上述引數,然後執行/sbin/sysctl -p讓引數生效。

    但是由於我們專案在docker中執行,並且很難單純通過增加機器進行橫向擴充套件。當時從網上找到了docker調整網路核心引數的方式,但是經過試驗,沒有效果。

相關文章