vc Socket

 一.Socket:
1.Socket的中文是“套接字”。
2.TCP/IP協議使用的套接字分爲3類:流式套接字、 數據報套接字、 原始套接字。
(1)流式套接字:SOCK——STREAM
      嚮應用提供面向連接的、可靠的通信流,數據發送無差錯、無重複且保證接收到數據的順序性。
      流式套接字最典型的的應用是BBS和HTTP服務。以BBS應用爲例,用戶通過TELNET協議和服務器建立連接,在瀏覽論壇帖子的交互過程中,數據總是順序地在源端和目的端之間傳輸的。
      流式套接字的通信能力是有TCP協議保證,
(2)數據報套接字:SOCK--DGRAM
      嚮應用提供的是無連接的服務。數據以報文的形式發送,且不能保證數據的無差錯和順序到達。使用數據報套接字的例子包括DNS(Domain Name Service域名服務)和NFS(網絡文件系統)等。
      數據報套接字的一個顯著優點是在於它的開銷較小,適合於網絡廣播和組播等需要一對多發送數據的場合和頻繁交互的應用(如DNS)。數據包套接字依賴UDP協議提供服務,這是他具有上訴屬性的原因。
進程要正常工作,而數據報套接字不能保證傳輸的正確性,因此應用程序內必須建有差錯消除機制,廣泛採用的策略是發送端確定一個等待時間,如果在等待時間內沒有接受接收端的確定報文,就接着發送欲發送的報文,直到接受接收端的確認爲止。
(3).原始套接字--SOCK--RAW
       應用程序中一般極少使用原始套接字。它功能強大,但操作比較複雜。它可以訪問底層的協議(如IP,ICMP),一般用於協議的開發。常用的DOS程序ping可以用原始套接字實現。
二.客戶機/服務器模式
   TCP/IP應用的主要工作模式是客戶機/服務器(Client/Server,簡稱C/S模式)在兩個不同進程的通信過程中,一方發出服務請求,一方提供服務,通常稱他們爲“客戶進程”和“服務進程”。顯然,兩個進程之間的通信實際上是基於通信協議的進程的同步過程,服務過程作爲資源的提供者,爲衆多主機上的客戶進程提供服務,服務進程要先於客戶進程開啓,在某一確定的網絡地址(IP地址+端口號)等待客戶進程的請求,如有請求到達,服務進程採取某種方式(併發服務或者重複服務)爲客戶進程提供服務,直到客戶進程關閉,然後服務進程繼續等待下一個請求服務的進程。
   服務器通常採用併發服務的方式。所謂併發服務,就是服務進程在有客戶請求到來時,激活新的進程來專門爲此客戶請求提供服務,並在客戶終止請求後殺死該進程,與此同時,原先的進程可以繼續在原來的端口等待下一個客戶的連接。Socket編程接口爲新的請求創建專門的服“數據套接字”,併發服務器根據該套接字創建專門的服務進程。併發服務的最大優點是及時響應請求,雖然創建新進程會增加系統開銷。與此相對應的是重複服務,它利用“數據套接字”,在監聽的進程上直接進行服務。

三.流式套接字的工作流程:
       服務器
         |
     創建流式套接字
         |
     將S和本地地址和端口綁定                                 客戶機
         |                                                     |
     監聽,等待連接請求                                   創建流式套接字
    --------|                                                  |
    |接受客戶連接,創建客戶套接字ns 《---建立連接---》利用CS和遠程服務器建立連接
    |     |                                                    |
    |利用ns和客戶進程通信,提供服務  《--請求/應答--》利用CS和服務器進程通信,
    |(是否激活新進程依靠服務器類型而定)                  完成數據傳輸
    |     |                                                    |
    |關閉NS,如果是併發服務,還需要退出該進程          關閉套接字CS,結束TCP會話
    |--- >|
     關閉套接字,停止服務
四.數據報套接字服務的工作流程:
   服務器                                               客戶機
   |                                                      |
創建數據報套接字S                              創建流式套接字CS
    |                                                      |
將S與本地地址和端口綁定                    利用CS和遠程服務器進行連接
    |                                                      |
相應客戶請求,完成數據傳輸                 利用CS和服務器進程通信,完成數據傳輸
    |                                                      |
關閉套接字S,停止服務                      關閉套接字CS,結束UDP會話
五.堵塞和非堵塞:
Socket調用有兩種基本模式:堵塞模式和非堵塞模式。
堵塞模式:進程調用某一Socket函數後由於某種原因不能馬上完成,這是調用進程就一直等待,直到函數返回爲止。
非堵塞模式在調用Socket函數後馬上返回,等待調用完成時系統自動會以消息的方式通知調用進程,絕大部分Bekeley Socket調用都是堵塞調用,由於UNIX是搶先式多任務操作系統,在進程阻塞時,系統會將CPU的使用權交給等到的其它進程。這樣不會堵塞其它進程的執行。而WINDOWS操作系統是非搶佔式的,進程不會主動放棄對CPU的控制權,因此一個等待阻塞調用返回的進程會阻塞整個系統。Windows Socket規範根據WINDOWS平臺的具體特點,在BSD Socket基礎上擴充了非阻塞的Socket調用模式,使Socket編程更加符合Windows系統消息驅動的特性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章