最近花了一周多的時間将TCP/IP網絡互聯技術(客戶-伺服器程式設計與應用(windows 套接字))一書閱讀了一遍.
有如下幾點感受:
1.UDP協定軟體通常是駐留在作業系統中,是以溢出問題的解決變得特别因難,是以程式員可以預配置設定子線程,預配置設定往往足以消除封包丢失。
很多網絡檔案系統NFS的實作都采用預配置設定技術避免資料報丢失。仔細研究一下運作着的NFS系統,會發現一組預配置設定伺服器都在同一個UDP套接字讀取資料,是以,是否使用了預配置設定技術,往往意味着NFS的實作到底能不能用。
2.如果程式員不清楚目前的并發處理是否合理,他們該如何優化時延和吞吐量呢?
我們可以采用延遲并發技術,在并發處理與循環處理之間動态選擇。
3.設計者通過子線程預配置設定和延遲配置設定提高并發伺服器的性能;預配置設定技術對于并發的,無連接配接伺服器來說很重要,因為用于處理請求的時間很短,使得建立線程或程序的開銷很大。
4.隧道技術與應用網關的差別?
分析:應用網關優點:程式員可以在不改變計算機作業系統的情況下建立應用風關;應用網關使得現有網絡系統不受幹擾地繼續運作。
應用網關缺點:應用網關技術要求程式員為每一種服務構造單獨的應用網關程式。每當機構在網絡系統中增加一項新的服務時,程式員必須構造一個新的應用網關;應用網關還需要使用額外的硬體資源。
隧道技術優點:采用新的服務時無需任何改變,一旦投入使用,傳輸層隧道就成為低層網絡結構的一部分。由于應用程式意識不到它的存在,隧道技術可以用于任何應用服務,采用隧道技術的機構以可以使用單一傳輸協定,是以它能保證傳輸服務的一緻性。
隧道技術的缺點:為了安裝能提供完整功能的傳輸層隧道,站點必須修改網關的作業系統,這個網關是用來連接配接兩個網絡系統的,機構還可能要修改使用隧道技術的主機軟體;機構采用隧道技術是為了在異構網絡環境中提供一緻的傳輸服務;低層網絡協定的改變往往會導緻與使用者互動的客戶軟體的改動;最終,衆多方面考慮,很多機構選擇應用網關解決方案。
5.伺服器軟體設計的算法和問題
1)循環的,面各連接配接的伺服器算法
- 建立套接字,并将其綁定到伺服器所使用的熟知位址上。
- 将套接字設定為被動模式,使其準備為伺服器所用。
- 從該套接字上接收下一個連接配接請求,擷取該連接配接的新的套接字。
- 重複地接受客戶的請求,構造應答,按照應用協定向客戶發回響應。
- 完成與某個客戶的互動後,關閉連接配接,回到步驟3以接受新的連接配接。
2)循環的,無連接配接伺服器算法。
- 建立套接字并将其綁定到伺服器所使用的熟知位址上。
- 重複地接收來自用戶端的請求,按照應用協定構造應答并發回給客戶。
3)并發的,無連接配接伺服器的算法
- 主線程1)建立套接字并将其綁定到服務所使用的熟知端口上,使該套接字處于未連接配接狀态。
- 主線程2)重複調用recvfrom 接受用戶端的下一個請求,并且建立新的子線程處理響應。
- 子線程1)線上程建立時接收一個給定的請求,并通路套接字.
- 子線程2)根據應用協定構造應答,并調用sendto将應答發回給客戶。
- 子線程3)退出(即子線程處理完一個請求後便終止)。
4)并發的,面向連接配接的伺服器算法
- 主線程1)建立套接字并将其綁定到服務所使用的熟知位址上,使套接字處于未連接配接狀态。
- 主線程2)将套接字設定為被動模式,使其準備為伺服器所用。
- 主線程3)重複調用accept接收用戶端的請求并且建立子線程處理響應。
- 子線程1)線上程建立時,接收連接配接請求。
- 子線程2)用該連接配接與用戶端進行互動,接收請求并發回應答。
- 子線程3)關閉連接配接并退出,子線程在處理完來自一個用戶端的所有請求後退出。
5)使用單個線程實作表面上的并發性
- 建立套接字并将其綁定到伺服器所使用的熟知端口上,将套接字加到可以執行I/O操作的清單上。
- 調用select在現有套接字上等待I/O。
- 如果最初的套接字準備就緒,就調用accept獲得下一個連接配接,并将這個新的套接字加入可以執行I/0清單上。
- 如果最初套接字以外的套接字準備就緒,調用recv獲得下一個請求,形成一個應答,并調用send把應答發回客戶。
- 繼續步驟2進行處理。