閱讀更多系列文章請訪問我的GitHub部落格,示例程式碼請訪問這裡。
net模組
net 模組用於建立基於流的 TCP 或 IPC 的伺服器(net.createServer())與客戶端(net.createConnection())。
net模組是專門用於網路通訊的模組,若當前的資料互動不通過HTTP協議,就可以使用net模組,如WebSocket。
HTTP協議本質上是以文字形式傳輸資料,它的傳輸資料量較大,而且它的傳輸需要二進位制和文字之間進行轉換和解析。
在nodejs中,HTTP模組是繼承自net模組的。
OSI參考模型
OSI(Open System Interconnect),即開放式系統互聯。 它是ISO(國際標準化組織)組織在1985年研究的網路互聯模型。該體系結構標準定義了網路互聯的七層框架(物理層、資料鏈路層、網路層、傳輸層、會話層、表示層和應用層),即OSI開放系統互連參考模型。在這一框架下進一步詳細規定了每一層的功能,以實現開放系統環境中的互連性、互操作性和應用的可移植性。
OSI參考模型分層
OSI參考模型可以分為以下七層:
物理層 → 資料鏈路層 → 網路層(IP協議) → 傳輸層(TCP層) → 會話層 → 表現層 → 應用層(HTTP協議等)
OSI參考模型詳細介紹如下:
第1層物理層:處於OSI參考模型的最底層。物理層的主要功能是利用物理傳輸介質為資料鏈路層提供物理連線,以便透明的傳送位元流。常用裝置有(各種物理裝置)網路卡、集線器、中繼器、調變解調器、網線、雙絞線、同軸電纜。
第2層資料鏈路層:在此層將資料分幀,並處理流控制。遮蔽物理層,為網路層提供一個資料鏈路的連線,在一條有可能出差錯的物理連線上,進行幾乎無差錯的資料傳輸(差錯控制)。本層指定拓撲結構並提供硬體定址。常用裝置有網橋、交換機;
第3層網路層:本層通過定址來建立兩個節點之間的連線,為源端的運輸層送來的分組,選擇合適的路由和交換節點,正確無誤地按照地址傳送給目的端的運輸層。它包括通過互連網路來路由和中繼資料 ;除了選擇路由之外,網路層還負責建立和維護連線,控制網路上的擁塞以及在必要的時候生成計費資訊。
第4層傳輸層:—常規資料遞送-面向連線或無連線。為會話層使用者提供一個端到端的可靠、透明和優化的資料傳輸服務機制。包括全雙工或半雙工、流控制和錯誤恢復服務;傳輸層把訊息分成若干個分組,並在接收端對它們進行重組。不同的分組可以通過不同的連線傳送到主機。這樣既能獲得較高的頻寬,又不影響會話層。在建立連線時傳輸層可以請求服務質量,該服務質量指定可接受的誤位元速率、延遲量、安全性等引數,還可以實現基於端到端的流量控制功能。
第5層會話層:在兩個節點之間建立端連線。為端系統的應用程式之間提供了對話控制機制。此服務包括建立連線是以全雙工還是以半雙工的方式進行設定,儘管可以在層4中處理雙工方式 ;會話層管理登入和登出過程。它具體管理兩個使用者和程式之間的對話。如果在某一時刻只允許一個使用者執行一項特定的操作,會話層協議就會管理這些操作,如阻止兩個使用者同時更新資料庫中的同一組資料。
第6層表示層:主要用於處理兩個通訊系統中交換資訊的表示方式。為上層使用者解決使用者資訊的語法問題。它包括資料格式交換、資料加密與解密、資料壓縮與終端型別的轉換。
第7層應用層:OSI中的最高層。為特定型別的網路應用提供了訪問OSI環境的手段。應用層確定程式之間通訊的性質,以滿足使用者的需要。應用層不僅要提供應用程式所需要的資訊交換和遠端操作,而且還要作為應用程式的使用者代理,來完成一些為進行資訊交換所必需的功能。它包括:檔案傳送訪問和管理FTAM、虛擬終端VT、事務處理TP、遠端資料庫訪問RDA、製造報文規範MMS、目錄服務DS等協議;應用層能與應用程式介面溝通,以達到展示給使用者的目的。 在此常見的協議有:HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。
OSI參考模型各層功能
(1)物理層(Physical Layer)
物理層是OSI參考模型的最低層,它利用傳輸介質為資料鏈路層提供物理連線。
它主要關心的是通過物理鏈路從一個節點向另一個節點傳送位元流,物理鏈路可能是銅線、衛星、微波或其他的通訊媒介。
它關心的問題有:多少伏電壓代表1?多少伏電壓代表0?時鐘速率是多少?採用全雙工還是半雙工傳輸?總的來說物理層關心的是鏈路的機械、電氣、功能和規程特性。
(2)資料鏈路層(Data Link Layer)
資料鏈路層是為網路層提供服務的,解決兩個相鄰結點之間的通訊問題,傳送的協議資料單元稱為資料幀。
資料幀中包含實體地址(又稱MAC地址)、控制碼、資料及校驗碼等資訊。該層的主要作用是通過校驗、確認和反饋重發等手段,將不可靠的物理鏈路轉換成對網路層來說無差錯的資料鏈路。
此外,資料鏈路層還要協調收發雙方的資料傳輸速率,即進行流量控制,以防止接收方因來不及處理髮送方來的高速資料而導致緩衝器溢位及線路阻塞。
(3)網路層(Network Layer)
網路層是為傳輸層提供服務的,傳送的協議資料單元稱為資料包或分組。
該層的主要作用是解決如何使資料包通過各結點傳送的問題,即通過路徑選擇演算法(路由)將資料包送到目的地。
另外,為避免通訊子網中出現過多的資料包而造成網路阻塞,需要對流入的資料包數量進行控制(擁塞控制)。
當資料包要跨越多個通訊子網才能到達目的地時,還要解決網際互連的問題。
(4)傳輸層(Transport Layer)
傳輸層的作用是為上層協議提供端到端的可靠和透明的資料傳輸服務,包括處理差錯控制和流量控制等問題。
該層向高層遮蔽了下層資料通訊的細節,使高層使用者看到的只是在兩個傳輸實體間的一條主機到主機的、可由使用者控制和設定的、可靠的資料通路。
傳輸層傳送的協議資料單元稱為段或報文。
(5)會話層(Session Layer)
會話層主要功能是管理和協調不同主機上各種程式之間的通訊(對話),即負責建立、管理和終止應用程式之間的會話。會話層得名的原因是它很類似於兩個實體間的會話概念。例如,一個互動的使用者會話以登入到計算機開始,以登出結束。
(6)表示層(Presentation Layer)
表示層處理流經結點的資料編碼的表示方式問題,以保證一個系統應用層發出的資訊可被另一系統的應用層讀出。
如果必要,該層可提供一種標準表示形式,用於將計算機內部的多種資料表示格式轉換成網路通訊中採用的標準表示形式。
資料壓縮和加密也是表示層可提供的轉換功能之一。
(7)應用層(Application Layer)
應用層是OSI參考模型的最高層,是使用者與網路的介面。
該層通過應用程式來完成網路使用者的應用需求,如檔案傳輸、收發電子郵件等。
TCP
TCP完成了OSI參考模型中的第四層傳輸層的功能,net模組簡單來說就是TCP協議的node實現。
TCP(Transmission Control Protocol 傳輸控制協議)是一種面向連線的、可靠的、基於位元組流的傳輸層通訊協議,由IETF的RFC 793定義。
當應用層向TCP層傳送用於網間傳輸的、用8位位元組表示的資料流,TCP則把資料流分割成適當長度的報文段,最大傳輸段大小(MSS)通常受該計算機連線的網路的資料鏈路層的最大傳送單元(MTU)限制。之後TCP把資料包傳給IP層,由它來通過網路將包傳送給接收端實體的TCP層。
TCP為了保證報文傳輸的可靠 [1] ,就給每個包一個序號,同時序號也保證了傳送到接收端實體的包的按序接收。然後接收端實體對已成功收到的位元組發回一個相應的確認(ACK);如果傳送端實體在合理的往返時延(RTT)內未收到確認,那麼對應的資料(假設丟失了)將會被重傳。
TCP的可靠性雖然很好,但它也因此犧牲了效率,它比較適合於傳輸檔案等場景。如果在對可靠性要求不高,但對效率要求很高的場景,如視訊直播等,就可以使用UDP。
UDP
UDP 是User Datagram Protocol的簡稱, 中文名是使用者資料包協議,是OSI(Open System Interconnection,開放式系統互聯) 參考模型中一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務,IETF RFC 768是UDP的正式規範。UDP在IP報文的協議號是17。
UDP報文沒有可靠性保證、順序保證和流量控制欄位等,可靠性較差。但是正因為UDP協議的控制選項較少,在資料傳輸過程中延遲小、資料傳輸效率高,適合對可靠性要求不高的應用程式,如音訊、視訊和普通資料在傳送時使用UDP較多,或者可以保障可靠性的應用程式,如DNS、TFTP、SNMP等。
Nodejs也提供了UDP/Datagram模組,可以在需要使用UDP時呼叫。
參考資料
Net模組:nodejs.org/dist/latest…
UDP/Datagram模組:nodejs.org/dist/latest…
OSI參考模型:baike.baidu.com/item/OSI%E5…