網頁伺服器的功能
當我們在網址列輸入「http://www.hightech.tw」,如<圖一>所示,意思其實是:使用 HTTP 通訊協定以網頁瀏覽器和 www.hightech.tw 這台網頁伺服器進行通訊,一般的網頁內容包含一個 HTML 檔案,以及文字、圖形、影片的連結檔。
圖一、網頁瀏覽器 Google Chrome
Apache 伺服器
由 Apache Group 組織所開發的網頁伺服器軟體稱為「Apache」,是公開原始程式碼的軟體,可以安裝在網頁伺服器內提供企業或機關團體架設網站,也是目前世界上用來架設網站使用最多的伺服器軟體,可以架設在許多不同的作業系統上,例如:Unix、Linux、OS2、Windows 等,由微軟(Microsoft, MSFT-US)公司自行開發的網頁伺服器軟體稱為「Windows Server IIS」,不過大家都知道微軟公司並不公開原始程式碼。
相反的,Apache 是公開原始程式碼的軟體,大部分的軟體漏洞都已經被全球各地的軟體工程師找出來並且修補起來,所以安全性較高,而且 Apache 是在 Unix 與 Linux 等作業系統下開發出來的軟體,穩定性高,價格又低,所以被許多企業或機關團體用來架設網站。
三向交握(Three way handshake)
用戶端電腦(Client)與網頁伺服器(Web server)連線的流程稱為「三向交握(Three way handshake)」,包括下列三個步驟,如<圖二>所示:
➤用戶端要求(Request):由用戶端電腦的網頁瀏覽器向 Apache 伺服器發出連線的要求,使用 HTTP 通訊協定以網頁瀏覽器與 Apache 伺服器溝通。
➤伺服器回應(Response):由 Apache 伺服器回應用戶端電腦接受連線要求,並且開啟一個「程式(Process)」來處理這個連線要求,程式會佔用伺服器的運算資源。
➤用戶端確認(ACK:Acknowledgement):由用戶端電腦回應 Apache 伺服器確認訊號,此時 Apache 伺服器開始傳送資料,用戶端電腦準備開始接收資料。
圖二、網頁伺服器的三向交握流程
網頁伺服器的攻擊
網路上的怪客(Cracker)攻擊網頁伺服器時有所聞,這裡我們舉出一個簡單的例子,讓大家了解如何進行攻擊,例如:怪客先寫好一個簡單的軟體,由用戶端電腦向 Google 的網頁伺服器發出「要求(Request)」連線的封包,這個時候 Google 的網頁伺服器會開啟一個程式(Process)來處理這個連線要求,並且「回應(Response)」同意連線的封包。
此時用戶端電腦故意不回覆「確認(ACK)」的封包,並且再發出第二個「要求(Request)」連線的封包,依此類推,不停地發出成千上萬個要求連線(Request)的封包,Google 的網頁伺服器就會打開成千上萬個程式(Process),卻一直等不到用戶端電腦回應(Response)同意連線的封包,不停開啟成千上萬個程式(Process)直到伺服器不堪負荷當機為止,網頁伺服器就掛囉!
有什麼方法可以避免這種情形發生呢?方法其實很簡單,目前所有的網頁伺服器都會設定一個等待時間,如果收到某一台用戶端電腦發出要求(Request)連線的封包,經過一段時間卻沒有收到確認(ACK)的封包,網頁伺服器就會自動將這個程式(Process)關閉,以避免打開過多的程式(Process)而當機了,這就叫做邪不勝正嘛!這麼簡單的方法你(妳)是不是也想到了呢?
【請注意】上述內容經過適當簡化以適合大眾閱讀,與產業現狀可能會有差異,若您是這個領域的專家想要提供意見,請自行聯絡作者;若有產業與技術問題請參與社群討論。
《知識力》授權轉載
【延伸閱讀】