三全新的內核 從體系結構上看
IIS
和IIS
其實是一樣的
它們都是在用戶模式下運行的發布Web內容的應用程序
或者在Inetinfo進程之內以System帳戶運行
或者在Inetinfo進程之外以IWAM用戶運行
雖然在較重的負載下
IIS
也有相當出色的表現
不過從IIS
開始
我們對IIS底層結構的看法應該改變了
為了使IIS不僅能夠輕松地支持
個Web網站
而且能夠支持
個甚至更多的網站
同時還要提高Web服務器的安全性和可靠性
微軟放棄了原有的IIS內核
重新構造了一個
另一個促使微軟重新構建IIS內核的原因是
微軟(以及其他廠商)認識到
Web服務器的性能和可靠性問題絕大部分是由於質量低劣的Web應用造成
IIS
通過帶緩沖池的Out of Process容器減輕這類問題
在IIS
中
在Out of Process池中運行的應用一旦崩潰
一般不會波及到IIS本身
因為應用程序在Inetinfo之外的進程中運行
但運行在Out of Process池之內的所有Web應用都會終止——在默認情況下
所有的應用程序都在該池之中運行
在這種情況下
排解故障很不容易
因為要確定哪一個應用程序導致了問題非常困難
IIS
將監聽請求
創建和監視Web網站
運行Web服務這些不同的任務隔離了開來
這一新型體系可望解決IIS
存在的問題
從理論上看
新的體系將極大地改善可用性
安全和性能
從實際情況看
根據微軟和Beta測試者的報告
新的體系令穩定性和性能有了奇跡般地提高
IIS
的內核體系主要建立在三個組件之上
W
SVC
http
sys
以及W
Core
■ W
SVC
W
SVC也許是IIS
體系中最不令人注意的組件
不過這並不說明它不重要
W
SVC的任務是根據配置數據的設置創建和監視工作線程
由工作線程運行Web網站應用
在IIS
中
與IIS
W
SVC組件最接近的是IIS管理服務
IIS管理服務是Inetinfo的一部分
因此
如果Inetinfo出現問題
IIS管理服務也會出現問題
而且此時的IIS管理服務不能再重新啟動Inetinfo或其他故障的應用程序
在IIS
中
W
SVC作為一個獨立的進程運行
Web應用的故障不可能波及W
SVC
因為W
SVC之內根本沒有第三方的代碼運行
W
SVC總是處於運行狀態
因此它能夠監視Web應用的健康狀況
並在必要時采取行動
由於這一策略
服務器能夠根據用戶指定的參數監視和重新啟動應用程序
■ http
sys
IIS
體系設計中最重大的變化是加入了http
sys驅動程序
http
sys驅動程序的任務是處理HTTP請求
而且它在內核模式下執行操作
不要小看這一改變
將處理HTTP請求的任務從IIS
IIS
的用戶模式改變到IIS
的內核模式標志著新一代IIS服務器的誕生
在Win
K和NT
中
IIS在用戶模式下運行
運行在用戶模式下的應用程序不直接與硬件通信
它們直接調用的是一些標准過程
這些標准過程或者將數據傳入內核模式的組件(例如網卡驅動程序
圖形子系統)
或者調用內核模式組件的函數
以此完成保存文件
設置IP地址
將HTML文件發送到網絡之類的任務
用戶模式和內核模式之間的轉換是一項開銷很大的操作
服務器首先從內核模式的TCP/IP棧將傳入的HTTP請求傳遞給用戶模式的Winsock
由Winsock將請求傳遞給IIS
從內核模式到用戶模式的切換很快發生
但不可避免地給處理過程帶來瞬間的延遲
當負載較大時
這種延遲不斷累加
同時由於這種轉換是必不可少的
所以管理員根本沒有辦法優化處理過程
IIS
的內核模式驅動程序極大地減少了用戶模式和內核模式之間的切換次數
http
sys監聽著HTTP請求
決定由哪一個用戶模式的進程來處理該請求
或者是否由驅動程序本身返回用戶請求的內容
IIS
在用戶模式下運行
完全依賴內核模式的http
sys作為接收用戶請求的服務器引擎
因此
http
sys必須能夠在任何時候作出相應
必須具有極高的可靠性
用戶代碼可能導致進程出錯
所以微軟把http
sys設計成不執行任何用戶代碼
這樣
即使應用程序出現了故障
也不會影響到IIS
本身
IIS
仍能夠照常監聽HTTP請求
如果要從內核模式的緩沖區返回靜態的應答
一個高速的
內核模式的
不允許運行應用程序代碼的HTTP處理器是十分理想的
它減少了切換到用戶模式的昂貴開銷
能夠從內核模式的緩沖區快速返回應答
IIS
的http
sys就管理著這樣一個緩沖區
而且使用了高度優化的啟發式緩沖區算法來確定哪些內容要放入緩沖區
例如
http
sys可能只緩沖那些出現了一次以上請求的內容
由於http
sys直接從應答緩沖區提取靜態內容
不必再切換到用戶模式
所以與IIS
的性能相比
IIS
的整體性能有了顯著提升
根據微軟的資料顯示
WebBench基准測試表明IIS
返回靜態內容的速度要比IIS
快
%
即使以IIS
的隔離模式運行IIS
服務器(這時
IIS
的體系結構與IIS
的相似)
同樣也能從http
sys驅動程序的應答緩沖區和其他改進之處獲益
另外
微軟在http
sys驅動程序中采用了許多優化的算法
使其能夠將請求直接轉發到適當的工作進程
在IIS
和IIS
中
必須通過多個步驟才能確定進程的哪一個實例擁有了應當接收當前請求的Web應用
但在IIS
中
http
sys注冊了所有IIS
應用
賦予每一個進程一個句柄
IIS內部利用這些句柄來標識注冊的應用程序要用到的一個或多個名稱空間
因此
當http
sys接收到一個HTTP請求
它能夠很快地將請求從內核模式的http
sys傳遞到正確的用戶模式的Web應用
http
sys驅動程序還要執行其他一些任務
其中包括
⑴ 將傳入的URL與各種長度
格式方面的規則進行比較
⑵ 管理傳入請求的隊列
⑶ 擔負著記錄IIS Web網站日志信息的任務(從而提高了記錄日志的性能)
⑷ 實施帶寬限制策略以及支持TCP/IP級的管理
⑸ 實現客戶證書請求服務(但不支持安全套接字層——SSL)
由於http
sys是一個操作系統的驅動程序
而不是一個IIS組件
因此該驅動程序的配置在注冊表而不是IIS配置數據中進行
當前
還有許多http
sys的注冊表設置項目尚無正式的說明文檔
它可能意味著微軟不鼓勵用戶修改這些設置
因為這些設置項目將來可能會有變化
http
sys驅動程序的注冊表設置項目位於HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP下面
在這裡可添加各種注冊鍵(默認配置中不包含這些注冊鍵)
諸如
⑴ EnableNonUTF
如果加入EnableNonUTF
子鍵
並將它的值設置成
http
sys只接受UTF
編碼的URL
UTF
的全稱是Universal Character Set(UCS)Transformation Format
這是一種字符集標准
標准全文在
它允許使用多國語言的字符集
默認情況下
EnableNonUTF
的值是
表示IIS接受UTF
ANSI
雙字節字符集(DBCS)編碼的URL
⑵ PercentUAllowed
當這個子鍵設置成
時(默認值)
http
sys認可那些部分字符用%uNNNN表示的URL
其中NNNN是一組表示實際字符的數字
當PercentUAllowed設置成
時
IIS
將拒絕那些部分字符用這種方式表示的URL
%uNNNN是一種不太常用的Unicode符號
不要將它與常見的UTF
表示形式混淆
在UTF
表示形式中
%
表示一個空格
例如相當於
兩者之間的轉換由IE浏覽器自動完成
不管EnableNonUTF
和PercentUAllowed設置成了什麼值
IIS
都會接受
這兩項設置
再加上其他可以在IIS
文檔中找到的設置項目
從一個側面反映了IIS
在URL解析方面的改進
在IIS
中
一些重大的安全問題與Web服務器解析URL的方式有密切的關系
現在微軟終於解決了原先存在的缺陷
同時作出了一些改進
允許管理員更加明確地定義IIS
解析URL的規則
在天生具有國際化特點的Internet上
多國語言並存
這些改進之處尤其具有重要意義
關於Unicode的更多信息
請參見
關於IIS
缺陷的更多信息
請參見
在Windows Server
Resource Kit中可以找到一個幫助配置http
sys的工具
■ W
Core
默認情況下
IIS
在工作進程隔離模式下運行
如圖五所示
在這種模式中
對於每一個Web應用
IIS
都用一個獨立的w
wp
exe的實例來運行它
w
wp
exe也稱為工作進程(Worker Process)
或W
Core
圖 因此
工作進程隔離模式不存在進程內(In
Process)應用程序存在的問題
有效地提高了可靠性和安全性
可靠性的提高是因為一個Web應用的故障不會影響到其他Web應用
也不會影響http
sys
每一個Web應用由W
SVC單獨地監視其健康狀況
安全性的提高是由於應用程序不再象IIS
和IIS
的進程內應用那樣用System帳戶運行
默認情況下
w
wp
exe的所有實例都在一個權限有限的
網絡服務
帳戶下運行
如圖六所示
必要時
還可以將工作進程配置成用其他用戶帳戶運行
圖 如果緩沖區溢出攻擊成功入侵了一個Web應用
攻擊者只能訪問當時運行工作進程的帳戶有權訪問的資源
默認的網絡服務帳戶不能寫入Inetpub文件夾
執行權限也極其有限
所以象CodeRed蠕蟲之類的攻擊根本不可能得逞
某些Web應用
特別是有些Internet Server API(ISAPI)篩選器
在進程外運行時可能會遇到問題
在IIS
和IIS
中
ISAPI篩選器總是在Inetinfo之內運行
它們
From:http://tw.wingwit.com/Article/os/fwq/201311/29845.html