1. 程式人生 > >Windows Socket網路程式設計——第二章 Windows Socket概念

Windows Socket網路程式設計——第二章 Windows Socket概念

第二章 Windows Sockets的概念

2.1 OSI網路模型

OSI(Open SystemInterconnect)網路模型,即開放系統互連網路模型,其組成結構如下圖所示。

           7

應用層               

提供使用者介面、實現應用所需的服務(例如,檔案傳輸、電子郵件、終端模擬等)。

6

表示層

閣書畫資料(例如,加密或解密、壓縮或解壓,或者在不同的表示系統之間進行轉換)。

5

會話層

在兩臺網路主機之間開啟一個會話(一個“虛擬連線”),對兩個端點之間的會話進行控制,然後關閉會話。

4

傳輸層

進行可靠或非可靠的資料傳輸。可靠傳輸需要建立連線(一個“虛擬連線”),然後在傳輸完成後拆除該連結。

3

網路層

為分組定址和建立路由,通過中間結點,為兩個網路主機之間建立起端到端的通訊功能。

2

資料鏈路層

建立和管理兩個端點之間的物理通訊鏈路,對共享介面上的競爭鏈路進行復用,將位元流組織成幀。

1

物理層

提供到傳輸媒介上的電氣連線,是傳送端的一個位元能夠被接收端正確識別為一個位元。

上層:5、6、7。下層:1、2、3、4。而Windows Sockets API就位於上層與下層之間。

在Windows Sockets 模型中,我們將下層成為網路系統,把上層稱為WinSock應用程式。

服務和介面

OSI網路參考模型明確了一個7層的架構,每一層承擔一種功能(即一組相關的服務)。每一層通過相鄰下層的介面來訪問其提供的服務。介面提供一組定義良好的功能呼叫,從而使其服務可被訪問。

在OSI網路參考模型中,工作流是從上倒下執行的,上層依賴於下層來對付那些瑣事,實現其構想。各層通過下層介面依次向下遞交其工作,上層並不關心下層是怎樣完成其服務的,它們只關心任務是否完成。也就是說,下層的活動及其實現細節對於上層來說是透明的。只有在發生故障時,下層對上層才是不透明的,,故障在OSI的層次之間就像“冒泡”一樣從下往上呈現。因為當一個服務請求失敗是,隨之會帶來上層的失效,由此形成一個連鎖反應。

2.2 WinSock網路模型

將OSI網路模型的高層稱作Winsock應用程式,低層則構成網路系統,WinSock的應用程式設計介面(API)位於兩者之間。這樣就構成了WinSock網路模型。

WinSock應用程式:提供高層的工程(OSI的5~7層)

網路系統:提供低層的功能(OSI的1~4層)

Winsock API:允許高層訪問低層的服務。

下圖是一個典型的網路系統具有的模組化結構。


2.2.1 資訊與資料

資訊是“加工過的”,或者承載了耨中含義,兵器總是完整的。資料則與此想法,資料時“原始的”,佈局有什麼含義,並且通常是不完整的。資料包含資訊,但不是所有資料都具有資訊價值。資訊具有結構和意義,資料則兩者都不具備,資料時8為位元(位元組)的任意組合。

2.2.2 應用協議

應用協議定義了網路應用程式之間通訊所要遵循的規則。這些規則描述了應用程式的資訊,以及應用程式在傳送和接收資訊是應該怎樣使用中。兩個應用程式之間要進行與通訊,必須有一個應用協議,因為協議定義了應用程式彼此之間應傳遞什麼訊息。

Windows SocketsAPI 嚮應用程式遮蔽了“下層”的協議,如此一來程式設計師只管做自己的事就好,不需要去擔心“下層”是如何完成工作的。

2.3 WinSock中的OSI層次

2.3.1 應用層

應用層負責與使用者的互動。它提供接收使用者命令和顯示資訊的使用者介面。

Windows Sockets應用程式的應用層處理使用者的輸入(命令)和應用程式的輸出(響應),應用層的服務定義了應用程式的目的。例如,電子郵件程式,使用者利用應用層閱讀和撰寫電子郵件。

除了提供使用者介面和輔助功能外,應用層還承擔主要的資訊處理任務,實現與具體應用相關的資訊處理機制。例如,在電子郵件中,應用層建立要傳送的郵件訊息的首部,積習所接受的郵件訊息的首部。郵件訊息就是用用層的資訊單元。

2.3.2 表示層

表示層負責該層接受來自應用層的資訊,並對其進行格式化。如果這個應用程式需要進行任何形式的資料轉換,那麼都會在表示層進行。常見的表示層功能的例子有:壓索、加密、螢幕格式化以及程式碼轉換(例如,ASCII到EBCDIC)。表示層不是必需的,如果應用程式不需要任何資料格式化服務的話,那麼應用程式中可以沒有表示層。

2.3.3 會話層

會話層負責建立、控制和關閉一個被稱為會話的“高級別的"連結。一個會話與一個”低級別的“傳輸層連線不同。會話是一個”虛連線“,這意味著它可以存在於無連線的傳輸層協議之上,甚至當網路通訊已經停止時。應用程式在繪畫成上維持其通訊的狀態,即使不存在連線,會話層也可以通過該狀態模擬一個連線。

會話層的服務對於傳輸大檔案的應用層很有用,尤其是在一個不可靠的網路系統中,會話層與遠端主機建立起一個會話,然後開始傳輸檔案,按照預先設定的間隔,接收方發揮一個”同步訊息“,向傳送方表明已經成功接受了多少資料。傳送方和接收方均儲存這個訊息。如果傳輸失敗,虛連線依然存在,一旦會話層獲得一個新的傳輸連線,則檔案可以從上一個同步點重新開始傳輸,從而不必從頭傳輸該檔案。當檔案傳輸完成時,會話層結束該會話(虛連線)。

會話層利用傳輸層的服務來建立、控制和關閉會話。

2.3.4 傳輸層

傳輸層提供那些通常與網路互聯相關的服務,即資料的”端到端“(從源到目的)的傳輸。這個傳輸可以是可靠的,也可以是不可靠的,可靠傳輸要求一個連結,不可靠傳輸則無連線的要求。

傳輸層通過與網路層的介面實現資料包的封裝、定址和傳送從會話層傳遞過來的資料。對於可靠的資料傳輸,傳輸層要負責所接收資料的確認、資料序號分配、快取、流量控制和重傳。

傳輸層使用網路層的介面,很多情況下,網路層的介面對應用程式來說是不可見的,因為它被隱藏在協議棧軟體的內部。在Windows Sockets規範中沒有定義這個API,而在Berkeley Sockets的4.3版本中SOCK_RAW API卻是事實上的標準。

SOCK_RAW功能對某些特殊的應用程式來說是很有用的,但是我們應該避免使用它,應為大多數程式並不需要SOCK_RAW,它會大大降低應用程式的可移植性。

2.3.5 網路層

網路層負責資料包的路由、分片和重組。它的主要目的是定址,這包括路由服務,即能夠為資料包在網橋和路由器互聯起來的網路中建立起傳輸路徑。

2.3.6 資料鏈路層

資料鏈路層也被稱為網路驅動層。它控制網路介面硬體,當有兩個或多個網路層需要同時使用網路介面時,它負責管理競爭的請求。再把資料包傳送到物理層之前,資料鏈路層建立媒體訪問控制(Medium Access Control,MAC)首部。將其作為從網路層接收的資料包的字首。相反地,接收時,再把資料包上傳給網路層之前,資料鏈路層要把MAC首部剝離下來,再上傳。

2.3.7 物理層

物理層是硬體,即網絡卡本身。該層直接與物理網路介質的”對話“。它採用規定的方法(例如電壓電平,無線訊號或者光脈衝)產生(和檢測)介質上傳輸的訊息。物理層的主要目的是以位元流的形式傳送資料並確保其正常接收。

2.4 模組化的層次框

每一層都隱藏了其實現細節,所以每一層的內容都是可以改變的,但是它所提供的服務和介面保持不變。Windows Sockets支援多種協議AppleTalk、DECnet以及Novell公司的IPX/SPX協議。

2.5 服務和協議

兩個網路主機的對等層之間的對話,使用相同的協議進行彼此間“交談”,協議是對等層之間進行通訊所遵循的一組明確的規定。這些規定描述了當前狀態下應有的請求和相應。換言之,協議定義了每一層資訊的前後相關聯的語法和語義。

兩個對等層之間的“對話”在樓繼上獨立於其他對等層的對話,協議實現該層的服務,並且對上層的請求作出相應。

2.6 協議和API

Windows SocketsAPI是獨立於協議的,訪問不同協議棧的API間的差異,帶來了各種協議簇間不同的定址需求。此外,在可用的傳輸服務上也有一些細微的差異,但是這些差異對應用程式而言大多是透明的。

API和協議簇不能混為一談。API提供對西醫戰中服務的訪問,但是協議簇並不能決定API的標識和結構。不同的協議提供相同的服務,相反地,一個協議簇能夠通過任何API提供服務。

兩個程式能夠進行通訊,只要兩邊的應用程式都採用同樣的協議簇,並且在同一網路中,API的不同不會有任何影響,只要上層的協議也是相容的,兩邊的應用程式就能夠通訊。與此不同的,兩邊的應用程式採用了不同的協議簇,儘管都採用同樣的API,兩邊的程式還是不能夠通訊。總的來說,API 不需要相同,但是協議棧必須相同。