共用方式為


Microsoft SMB 通訊協定封包交換案例

本主題提供客戶端與伺服器之間Microsoft SMB 通訊協定封包交換的範例。 下列步驟是程式的概觀:

  1. 用戶端和伺服器會建立 NetBIOS 會話。
  2. 用戶端和伺服器會交涉Microsoft SMB 通訊協定方言。
  3. 用戶端會登入伺服器。
  4. 用戶端會連線到伺服器上的共用。
  5. 用戶端會在共享上開啟檔案。
  6. 用戶端會從檔案讀取。

首先,用戶端會使用伺服器建立全雙工 TCP 連線。 然後,用戶端會透過 TCP 連線建置並傳送 NetBIOS 會話要求封包。 如果封包已正確格式化,則伺服器會傳回封包,其中包含確認已建立會話的訊息。 之後,用戶端會將第一個Microsoft SMB 通訊協定封包傳送至伺服器。

封包 1:SMB_COM_NEGOTIATE
方向: 客戶端到伺服器
描述: 用戶端要求伺服器交涉Microsoft SMB 通訊協定方言。 字串清單,識別用戶端可以使用的方言包含在封包中。
封包 2:SMB_COM_NEGOTIATE
方向: 伺服器至用戶端
描述: 伺服器會回應用戶端的要求,以識別將在會話中使用的Microsoft SMB 通訊協定方言。 傳回的封包也包含8位元組的隨機字串,將在下一個步驟中用來在登入程式期間驗證用戶端。
封包 3:SMB_COM_SESSION_SETUP_ANDX
方向: 客戶端到伺服器
描述: 此封包包含用戶端功能的相關信息,因此即使伺服器只實作共用層級安全性,也必須傳送此封包。
封包 3:SMB_COM_SESSION_SETUP_ANDX
方向: 伺服器至用戶端
描述: 如果伺服器接受挑戰/回應,則會將有效的 UID 包含在傳回給用戶端的封包中。 如果未接受,伺服器將會傳回此封包中的錯誤碼,並拒絕存取。
封包 4:SMB_COM_TREE_CONNECT_ANDX
方向: 客戶端到伺服器
描述: 用戶端要求存取共用。 封包包含 UNC 格式共用的完整指定路徑。
封包 5:SMB_COM_TREE_CONNECT_ANDX
方向: 伺服器至用戶端
描述: 如果授與共用的存取權,則伺服器會傳回對應至此封包中共用的 16 位樹狀目錄標識元 (TID)。 如果共用不存在,或用戶沒有足夠的認證存取共用,伺服器會傳回此封包中的錯誤碼,並拒絕存取共用。
封包 6:SMB_COM_OPEN_ANDX
方向: 客戶端到伺服器
描述: 用戶端要求伺服器代表客戶端開啟存取共用上的檔案。 此封包包含要開啟的檔名。
封包 7:SMB_COM_OPEN_ANDX
方向: 伺服器至用戶端
描述: 如果授與檔案的存取權,則伺服器會傳回所要求檔案的檔案標識符。 如果檔案不存在,或用戶沒有足夠的認證存取檔案,伺服器會傳回此封包中的錯誤碼,並拒絕存取檔案。
封包 8:SMB_COM_READ_ANDX
方向: 客戶端到伺服器
描述: 用戶端要求伺服器代表用戶端從開啟的檔案讀取數據,並將此數據傳回用戶端。 當檔案開啟時,用戶端取得的檔案標識碼會包含在此封包中,以識別伺服器應該從中讀取數據的開啟檔案。
封包 9:SMB_COM_READ_ANDX
方向: 伺服器至用戶端
描述: 伺服器會傳回此封包中要求的檔案數據。 因為已授與伺服器、共用和檔案的存取權,這裡不太可能發生錯誤。 不過,在某些情況下可能會發生此情況:例如,如果在開啟檔案和讀取檔案的時間之間變更共用的存取權。

注意

如果您實作不支持變更通知的 CIFS,Windows 就無法保留檔系統的未處理句柄,而且 SMB 連線可以消失而不通知。