Networking
設置 netplan 靜態 ip 時,如果離開一段時間,連接似乎處於休眠狀態
我正在嘗試通過禁用 cloud-init 在 ubuntu 20.04 伺服器上設置靜態本地 IP,然後設置我的50-cloud-init.yaml
這是在帶有有線連接的 Raspberry Pi 4 上。
network: ethernets: eth0: addresses: [192.168.1.11/24] dhcp4: false gateway4: 192.168.1.1 nameservers: addresses: [8.8.8.8, 8.8.4.4] version: 2
執行 netplan generate 然後 netplan 嘗試。它工作,並成功設置靜態本地IP。
但是,這會導致“睡眠”。當我 ssh 到它,然後離開它片刻,輸入將需要幾秒鐘才能再次響應。這不僅在 SSH 上,我還執行了一個 TCP 伺服器,並且發生了同樣的事情,如果離開一段時間,它似乎會休眠。
它僅在設置靜態 ip 後發生。
誰能建議發生了什麼?
我不小心發現了問題的可能原因,我嘗試安裝 netsniff-ng 並且它的安裝以某種方式消除了滯後,唯一值得注意的變化是 Systemd-timesyncd 被刪除,我正在調查這與我的網路問題有何關係。
Linux 內置了對
keepalive
. 您可以更改設置,sysctl
以便能夠在執行時配置核心參數。涉及 keepalive 的過程使用三個使用者驅動的變數:
tcp_keepalive_time
:最後一個數據包發送(簡單的ACK不被認為是數據)和第一個keepalive探測之間的間隔;在連接被標記為需要保持連接後,此計數器不再使用
tcp_keepalive_intvl
:後續keepalive探測之間的間隔,無論連接在此期間交換了什麼
tcp_keepalive_probes
:在考慮連接死亡並通知應用層之前要發送的未確認探測的數量您可以嘗試使用以下方法更改這些值:
echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes
如果這解決了您的問題,您可以通過以下方式使更改永久生效
/etc/sysctl.conf
:net.ipv4.tcp_keepalive_time = 600 net.ipv4.tcp_keepalive_intvl = 60 net.ipv4.tcp_keepalive_probes = 20