檢查網路連線是否有效的最佳方法是什麼?

檢查網路連線是否有效的最佳方法是什麼?

我是學生,我透過以下方式連接到互聯網希博萊斯。實際上,我在樹莓派上有一個帶有 selenium 和 phantomjs 的 Python 腳本,可以在運行時自動連接。

我想檢查網路連線而不淹沒網路。

Icinga 監控、netstat 建立的連線、ping、nmap ...最好的方法?

答案1

假設連接要么是死的,要么是活的,並且您可以可靠地分辨出其中的區別,這是不正確的。這種假設會導致系統不可靠,因為您最終可能會依賴啟發式方法,而該啟發式方法實際上並沒有檢查您期望的活動屬性。

更好的方法是監控您需要連接為您做的事情是否真正有效。例如,如果您需要特定的客戶端連接到特定的伺服器,那麼這就是您應該監視的內容。只要兩者保持通信,您就不在乎不同的啟發式是否會認為連接已斷開。

如果監控確實偵測到問題,那麼您可能想要監控對此發出警報。您可能希望監控不僅偵測連線中斷並發出警報,而且還嘗試修正問題。然而,這會帶來更多問題。

例如,假設您擁有可以在發生中斷時重新啟動網路元件的硬體。那麼也許您不想僅僅因為客戶端和伺服器無法相互通訊而重新啟動它。可能是連接的另一端已關閉,且不需要重新啟動電源。電源循環甚至可能導致自身停電或妨礙手動幹預。

有一些方法可以解決此類問題。例如,如果與伺服器的連線似乎已關閉,那麼您可以向該伺服器發送 DNS 查找。如果您收到回复,則並不是因為連接完全斷開。但您甚至不必將請求一路發送到 DNS 伺服器。您可以發送具有低躍點限制的 DNS 查找。例如,如果您發送跳數限制為 3 的 DNS 查找並從第三跳返回 ICMP,則重新啟動第一跳不太可能解決問題。

這當然不是靈丹妙藥。即使是最好的啟發法有時也會出錯。如果您要建立一些東西來嘗試自動重新啟動斷開的連接,那麼您當然需要確保它具有指數退避策略以阻止其重複重新啟動。

顯然,如果不交換任何資料包,就無法監控連線性。但您確實希望限制處理這些資料包的成本。例如,儘管您可以將資料包發送出幾跳並從特定路由器獲取錯誤訊息,但這對大多數路由器來說並不是最便宜的操作。如果您能找到一種方法來發送和返回封包,除了路由器的硬體轉發部分之外不涉及任何其他內容,那麼即使需要更多的跳數,也會更便宜。

如果您有更多站點,則可以透過讓它們定期相互成對通訊來提高連接監控的可靠性。如果一個站點同時失去與所有其他站點的連接,則該站點很可能會出現連接問題。

答案2

如果您想知道是否可以訪問互聯網,透過 8.8.8.8 和 8.8.4.4 的伺服器進行 www.google.com 的 DNS 查找是最可靠的方法。

如果您無法得到答案,那麼您的網路連線肯定有問題。請注意,「出現問題」並不意味著根本無法存取。

您無法證明網路連線是完美的。

相關內容