Linux
為什麼 SSH/SFTP 對於返回較大的命令會失敗?
在我們添加另一個 ISP 之前,我們有一個執行良好的 SFTP 伺服器。與 SFTP 伺服器的連接沒有通過新的 ISP,我用
tracert
. 伺服器上也沒有進行任何更改。但從那以後,如果執行的命令返回較大,一些使用者的 SFTP 或 SSH 連接會超時/掛起。這是場景:
- 我可以繼續 ping,即使 SSH/SFTP 超時,ping 也會始終返回
- 我可以連接到伺服器,它要求身份驗證並讓我登錄。
- 如果
ls
我的根目錄的命令返回少量文件或文件夾,那麼它會顯示文件和文件夾的列表- 如果
ls
我的根目錄的命令大於 5 或 6 個文件或文件夾,那麼它會掛起/超時。- 在嘗試此操作時,我嘗試對伺服器執行 ping,並且它一直在返回。
- 這不會發生在每個人身上,但似乎會發生在另一個城市的使用者身上。
- 我嘗試了不同的 SFTP 客戶端(FileZilla 和 WinSCP)。兩者都有相同的問題。
我在我的 PC 上執行 WireShark(在我們的網路之外和城市之外),當 SFTP/SSH 超時時,我看到重新傳輸和部分段未擷取錯誤出現,這讓我相信可能有一些數據包啤酒花之間的某處損失。
Expert Info (Note/Sequence): Retransmission (suspected) Previous segment not captured (common at capture start)
SFTP/SSH 對丟包這麼敏感嗎?SSH/SFTP 不會重新傳輸/重新確認以避免這些封包遺失錯誤嗎?我可以調整伺服器設置上的某些內容以使其正常工作嗎?
我相信評論者一針見血,這是 MTU 問題的典型範例(路徑 MTU 沒有正確檢測到失敗的特定路徑所需的較小 MTU)。您應該檢查發生故障的路徑中的中間設備是否正確允許 MTU 路徑發現數據包通過,並且沒有任何具有不必要的小 MTU 的中間路由器。您可以通過向沿途的每一跳發送最大為 MTU 大小的大型 icmp 數據包來縮小範圍,以發現失敗的位置(儘管這並不總是有效)。