為什麼我無法再從本機網路上的另一台 PC 連線到 SQL Server?

為什麼我無法再從本機網路上的另一台 PC 連線到 SQL Server?

為什麼 SQL Server 用戶端停止連接到本機網路上另一個節點上執行的 SQL Server?

這已經正常工作了很長一段時間。客戶端 PC (PC A) 兩天前正在連線。 PC A 或託管 SQL Server (MYSERVER) 的 PC 上沒有任何變更。當我嘗試連接時,收到錯誤“與 SQL Server 建立連接時發生網路相關錯誤。找不到伺服器或無法存取伺服器。”我可以從另一台 PC(PC B)成功連線到同一個 SQL Server 執行個體。

兩台 PC 在 C# 程式中使用相同的連線字串,但我已確認 PC A 上的 SQL Server Management Studio 的連線也失敗。如果我將伺服器名稱變更為伺服器節點的 IP 位址(即 192.168.178.20\SQLEXPRESS),SQL Server Management Studio 中的連線也可以運作,但 MYSERVER\SQLEXPRESS 無法連線。 Windows 或 SQL 用戶端似乎無法解析主機名稱(儘管直到幾天前才這樣做)。

兩台客戶端 PC 和伺服器 PC 都運行 Windows 10。兩個客戶端正在使用 Windows 驗證連接到伺服器。

在 PC A 上,我檢查了

  • HOSTS 檔案不包含任何位址

  • 我可以 ping MYSERVER,它解析為正確的位址 192.168.178.20

  • 沒有 SQL 別名

  • PC 在路由器上使用正確的 DNS 伺服器

作為解決方法,我已將 MYSERVER 包含在主機檔案中,並將 MYSERVER 的 IP 位址變更為靜態位址 192.168.178.20,但我不希望永久這樣做。

有什麼建議說明為什麼伺服器名稱沒有被解析或我可以做些什麼來進一步調查嗎?

答案1

答案很簡單。我重新啟動了路由器。

我在以下的幫助下解決了這個問題Wireshark。我比較了客戶端PC 和伺服器之間的封包,無論是當伺服器的位址位於客戶端的Windows HOSTS 檔案中(當與SQL Server 的連線始終有效時),還是當HOSTS 檔案為空時(當客戶端PC 從未連接時) 。在這兩種情況下,我都可以看到正在交換的 TCP 封包,但透過主機檔案中的伺服器位址,還有用於加密連線的 TLS 封包。在另一種情況下,客戶端似乎向伺服器發送了連線請求,但沒有 TLS 加密資料。

路由器中可能存在一些 DNS 問題。從客戶端到伺服器的 ping 工作正常,但有輕微的延遲。雖然用戶端能夠從路由器解析伺服器位址以成功傳送 TCP 封包,但我認為嘗試進行 Windows 驗證時可能會延遲,這導致客戶端無法正確傳送身份驗證請求。

不管怎樣,重新啟動路由器清除了任何 DNS 問題,客戶端現在無需 Windows HOSTS 檔案中的伺服器位址即可進行連線。

相關內容