天天看點

《Windows網絡與通信程式設計(第3版)》——1.2 計算機網絡參考模型

本節書摘來自異步社群《windows網絡與通信程式設計(第3版)》一書中的第1章,第1.1節,作者: 陳香凝 , 王烨陽 , 陳婷婷 , 張铮 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

了解網絡的相關概念之後,本節将讨論計算機網絡中主機之間是如何進行通信的,以及各種通信協定之間的關系等。

1.2.1 協定層次

為了降低設計難度,大部分網絡都以層(layer或level)的形式組織在一起,每一層都建立在它的下層之上,使用它的下層提供的服務,下層對它的上層隐藏了服務實作的細節。這種方法幾乎應用于整個計算機科學領域,也可以稱為資訊隐藏、資料類型抽象、資料封裝、面向對象程式設計等。

一個機器上的第n層和另一個機器的第n層交流,所使用的規則和協定合起來稱為第n層協定。這裡的協定,是指通信雙方關于如何進行通信的一種約定。各層和各層協定的集合稱為網絡體系(network architecture)。特定系統所使用的一組協定稱為協定堆棧(protocol stack)。下面介紹inernet網絡分層情況和它的協定堆棧。

1.2.2 tcp/ip參考模型

為了幫助不同的廠商标準化和一體化它們的網絡軟體,1974年,國際标準化組織(iso,international organization for standardization)為在機器之間傳送資料定義了一個軟體模型,就是著名的osi模型(open systems interconnection,開放式系統互聯模型)。這個模型共有7層,如圖1.1所示。

《Windows網絡與通信程式設計(第3版)》——1.2 計算機網絡參考模型

osi參考模型僅是一個理想方案,幾乎沒有什麼系統能夠完全實作它,它存在的作用是給人們一個設計網絡體系的架構。機器上的每一層都假設它正在直接與另一機器的同一層“交談”,它們“說”相同的語言,或者協定,各層的目的是向更高的層提供服務,抽象低層的實作細節。tcp/ip實作了osi參考模型中的5層,如圖1.2所示,各層使用的協定連在一起便是網際網路協定堆棧。

《Windows網絡與通信程式設計(第3版)》——1.2 計算機網絡參考模型

1.2.3 應用層(application layer)

應用層是網絡應用程式和它們的應用層協定存在的地方。internet應用層包含許多協定,如http(它提供web文檔的請求和傳輸)、smtp(它提供e-mail消息的傳輸)和ftp(它提供兩個終端系統間的檔案傳輸)。一些特定的網絡功能,如映射主機名到它們的網絡位址的dns(domain name system,域名伺服器)也在此層完成。

應用層程式設計在現實生活中應用最廣泛,因為它是直接面向使用者的。本書在後面要讨論的用戶端和伺服器端程式、p2p通信程式等都屬于此層。本書使用應用層消息來表示應用層的資料傳輸單元。

1.2.4 傳輸層(transport layer)

internet的傳輸層在應用程式的客戶和伺服器之間傳遞應用層消息,在這裡定義了兩個點對點的傳輸協定——tcp(transmission control protocol,傳輸控制協定)和udp(user datagram protocol,使用者資料報協定)。

tcp 是一個可靠的面向連接配接的協定,它允許源于一個機器的位元組流被無錯誤地傳輸到internet 上的任何其他機器。tcp将上層傳遞的位元組流分成封包,再接着傳遞到它的下層——網絡層。在接收方,tcp重新集合接收到的封包,将其轉化成為輸出流。tcp也處理流控制,以確定一個快的發送者不會發送太多的封包而淹沒接收者。

udp是一個不可靠的無連接配接的協定,它是為那些不需要tcp的序列号管理和流控制,而想自己提供這些功能的應用程式設計的。

windows為傳輸層的程式設計接口提供了socket函數,即通常所說的winsock。網絡程式設計者可以非常友善地使用winsock開發基于tcp或者udp的應用程式。本章後面要詳細讨論這些程式設計接口。

本書使用節(segment)來表示傳輸層封包。

1.2.5 網絡層(network layer)

internet的網絡層負責将網絡層封包從一個主機移動到其他主機,這裡的網絡封包稱為資料報(datagram)。在源主機,internet傳輸層協定(tcp或udp)向網絡層傳遞一個傳輸層節和一個目的位址,就如同你給郵差一個帶有位址的信。然後,網絡層提供将這個節郵遞到目的主機傳輸層的服務。

internet的網絡層有兩個基本元件。一個是ip協定,它定義了資料報中各域以及終端系統和路由器如何在這些域上進行操作。僅有一個ip(internet protocol)協定,所有網絡層的internet元件都必須運作這個協定。另一個是路由協定,它們用來決定資料報所走的路徑。網絡層的路由協定很多,因為internet含有多種不同類型的網絡,各個網絡使用的路由協定有可能不同。即便是這樣,網絡層還是經常被人們簡單地稱為ip層,反映了ip是将internet綁在一起的膠帶。

網絡層包含了子網的操作,是懂得網絡拓撲結構(網絡中機器的實體配置、帶寬的限制等)的最高層,也是内網通信的最高層。它的責任是确定資料的實體路徑。

1.2.6 鍊路層(link layer)

internet的網絡層通過一系列的路由器在源位址和目的位址之間傳輸資料報。為了将封包從路徑上的一個節點移動到下一個節點,網絡層依賴于鍊路層的服務。在每個節點,網絡層傳遞資料報到下面的鍊路層,讓它将之發送到路徑上的下一個節點。在下一個節點,鍊路層再把這個資料報傳遞給網絡層。

鍊路層間的通信方式有兩種,一種是将資料發給它所有相鄰的節點,這便是廣泛用于lan(local area network,區域網路)的廣播通信;另一種是應用于wan中的點對點通信,例如,兩個路由器之間或者住宅的撥号數據機(modem)和isp路由之間的通信。對應這兩種通信方式的常用協定有ethernet和point-to-point(ppp)。

對一個給定的連接配接來說,鍊路層協定主要實作在擴充卡中,即我們平常所說的nic(network interface card,網卡),它有一個主機總線接口和一個連接配接接口。傳輸節點的網絡層把網絡層資料報傳遞到擴充卡,由擴充卡将此資料報封裝到鍊路層的幀中,然後把這個幀傳輸到實體層通信鍊路。在另一方,接收擴充卡接收到整個幀,從中萃取出網絡層資料報,将它傳給網絡層。

本書将使用幀(frame)來表示鍊路層封包。

1.2.7 實體層(physical layer)

鍊路層的工作是從一個網絡節點向其臨近的網絡節點傳送整個幀,其下面的實體層的工作是将幀中的原始比特流從一個節點傳送到下一個節點。應用于此層的協定在tcp/ip參考模型中并沒有定義,它們與連接配接有關,更依賴于傳輸媒體。例如,以太網有許多實體層協定,有針對雙絞線的,有針對同軸電纜的,有針對光纖的,等等。它們都以不同的方式在連結中傳送資料位。

繼續閱讀