故障現象:
用戶端管理員為保證用戶端資源訪問安全,設定了組策略中的“互動式登入:需要網域控制站身分識別驗證以進行解鎖”。客戶離開座位時習慣鎖屏,正常情況下輸入密碼可以迅速恢複案頭,但個別需要等待30-60秒不等時間才能通過驗證,影響了辦公效率。
環境描述:
用戶端大部分為XP系統,少量WIN7;AD父子域結構,子域負責用戶端登陸驗證,域控2003和2008系統混合,分屬不同網站,用戶端預設使用2003域控驗證。
解決方案:在用戶端上建立並設定以下註冊表索引值:
Path:HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa\ Kerberos\Parameters
Name: MaxPacketSize
Type: REG_DWORD
Value: 1
原因分析:
2003以後,AD使用Kerberos協議進行身分識別驗證,分為TCP和UDP兩種。在RFC 1510的規範下,XP用戶端預設首先通過UDP發送資料包到域控KDC的88連接埠。而現在RFC4120逐漸取代1510,指定KDC必須接受TCP請求,預設下,vista和2008以後直接使用TCP
預設下,2003使用UDP資料包最大size為1465位元組,而對於XP是2000位元組,TCP用於超過此最大值的情況,可以通過修改註冊表更改UDP包最大值。XP用戶端向2003域控提交驗證資料包時,首先使用UDP,資料包大小根據使用者賬戶而大小不一,其中影響較大的是SID記錄和群組成員資格(故障的使用者賬戶大部分是經常用於組測試的,即反覆從不同的組中添加刪除,判斷這是造成上述的SID記錄龐大的原因)。當超過最大值,系統將資料包分段打包發送,由於UDP天生不可靠性,到底目的地無序而且沒有完整性檢驗的反饋,最後結果就是丟包。這一切用戶端無從得知,只能乾等,隔一定時間後重新發送UDP以及後續改用TCP才成功驗證。
註冊表中的MaxPacketSize=1可以強制用戶端使用TCP發送kerberos資料包,由於連線導向所以不會丟包(注意,vista和2008以後預設MaxPacketSize=0,但事實上已經強制使用TCP了),這樣就解釋了為什麼XP/WIN7/SERVER2003/2008不同組合會有不同的登陸結果
本文出自 “天鬼皇” 部落格,請務必保留此出處http://ghostlan.blog.51cto.com/5413429/1300000
更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/server/