網絡編程相關概念
最近在看Tomcat
源碼,涉及到網絡編程模型,所以將這塊的知識點進行一個歸納整理。
網絡
網絡是由若干節點(計算機)和連接這些節點的鏈路構成,表示諸多對象及其相互聯系。
網絡特性
-
1、資源共享
網絡的主要功能就是資源共享。共享的資源包括軟件資源、硬件資源以及存儲在公共數據庫中的各類數據資源。網上用戶能部分或全部地共享這些資源,使網絡中的資源能夠互通有無、分工協作,從而大大提高系統資源的利用率。
-
2、快速傳輸信息
分布在不同地區的計算機系統,可以通過網絡及時、高速地傳遞各種信息,交換數據,發送電子郵件,使人們之間的聯系更加緊密。
-
3、提高系統可靠性
在網絡中,由於計算機之間是互相協作、互相備份的關系,以及在網絡中采用一些備份的設備和一些負載調度、數據容錯等技術,使得當網絡中的某一部分出現故障時,網絡中其他部分可以自動接替其任務。因此,與單機系統相比,計算機網絡具有較高的可靠性。
-
4、易於進行分布式處理
在網絡中,還可以將一個比較大的問題或任務分解為若干個子問題或任務,分散到網絡中不同的計算機上進行處理計算。這種分布處理能力在進行一些重大課題的研究開發時是卓有成效的。
-
5、綜合信息服務
在當今的信息化社會里,個人、辦公室、圖書館、企業和學校等,每時每刻都在產生並處理大量的信息。這些信息可能是文字、數字、圖像、聲音甚至是視頻,通過網絡就能夠收集、處理這些信息,並進行信息的傳送。因此,綜合信息服務將成為網絡的基本服務功能。
網絡四要素
-
通信線路和通信設備 -
有獨立功能的計算機 -
軟件支持 -
實現數據通信與資源共
網絡分類
1、按拓撲結構分類:總線型、環型、星型、網狀 2、按信息交換方式分類:電路交換、報文交換、報文分組交換 3、按覆蓋范圍分類:局域網LAN
、廣域網WAN
局域網:局部區域網絡(local area network)通常簡稱為"局域網",縮寫為LAN。局域網是結構復雜程度最低的計算機網絡。局域網僅是在同一地點上經網絡連在一起的一組計算機。局域網通常挨得很近,它是如今應用最廣泛的一類網絡。
廣域網:廣域網網絡(wide area network)又稱外網、公網。是連接不同地區局域網或城域網計算機通信的遠程網。
TCP與IP
定義
TCP/IP
協議(Transfer Control Protocol/Internet Protocol
)叫做傳輸控制/網際協議,又叫網絡通訊協議,它包括上百個各種功能的協議,而TCP協議和IP協議是保證數據完整傳輸的兩個基本的重要協議。 通常說TCP/IP
是Internet協議簇,而不單單是TCP
和IP
TCP/IP
協議的基本傳輸單位是數據包(Datagram)。TCP
協議負責把數據分成若干個數據包,並給每個數據包加上包頭;IP
協議在每個包頭上再加上接收端主機地址, 這樣數據找到自己要去的地方。如果傳輸過程中出現數據丟失、數據失真等情況,TCP
協議會自動要求數據重新傳輸,並重新組包。總之,IP
協議保證數據的傳輸,TCP
協議保證數據傳輸的質量
TCP與IP協議結構
TCP/IP
協議數據的傳輸基於TCP/IP
協議的四層結構:應用層(應用層、表示層、會話層)、傳輸層、網絡層、網絡接口層(數據鏈路層、物理層),數據在傳輸時每通過一層就要在數據上加個包頭, 其中的數據供接收端同一層協議使用,而在接收端,每經過一層要把用過的包頭去掉,這樣來保證傳輸數據的格式完全一致。如下為4層(包含OSI
七層)示意圖:
IP地址
Internet
依靠TCP/IP
協議,在全球范圍內實現不同硬件結構、不同操作系統、不同網絡系統的互聯。在Internet
上,每一個節點都依靠的IP
地址互相區分和相互聯系。 IP
地址是一個32位二進制數的地址,由4個8位字段組成,每個字段之間用點號隔開,用於標識TCP/IP
宿主機。
IO
在linux
系統中有一句話:一切皆文件 ,文件就是流的概念,在進行信息的交流過程中,對這些流進行數據的收發 操作就是IO
操作。
不管socket
、管道、終端,對Linux
來說,一切都是文件,一切都是流。在信息 交換的過程中,我們都是對這些流進行數據的收發操作, 簡稱為I/O
操作(input and output
),往流中讀出數據,系統調用read
,寫入數據,系統調用write
。值得一提的是計算機里有這么多的流, 怎么知道要操作哪個流呢?這里就有可文件描述符的概念,即通常所說的fd
,一個fd
就是一個整數,所以,對這個整數的操作,就是對這個文件(流)的操作。 我們創建一個socket
,通過系統調用會返回一個文件描述符,那么剩下對socket
的操作就會轉化為對這個描述符的操作。
同步
所謂同步就是每件事情必須有回應才能進行下一件事情,也就是說必須一件一件的事情來做。如下圖:

異步
所謂異步就是客戶端發送完事件后可以干其他的事情,可以繼續發送其他的請求,等到服務端處理完成后,通過 回調將結果告知客戶端就可以。如下圖:

阻塞
所謂阻塞就是在請求沒有處理完成之前,線程一直處於等待的狀態,直到線程處理完成后才給返回結果。
非阻塞
所謂非阻塞就是在請求沒有處理完成之前,直接返回結果。不用等到線程處理完成之后才有響應。
IO模型
同步阻塞IO模型
所有的套接字默認都是阻塞的,它要等到有 數據包到達並且被復制到應用程序的進程緩沖區中或者出現了異常 才被返回 否則一直阻塞。模型如下圖:

原理:用戶線程通過系統調用read發起IO讀操作,由用戶空間轉到內核空間。 內核等到數據包到達后,然后將接收的數據拷貝到用戶空間,完成read操作。
同步非阻塞IO模型
非阻塞IO
通過進程反復調用IO
函數(多次系統調用,並馬上返回),知道等待待成功的通知。如下圖:

原理:由於socket是非阻塞的方式,因此用戶線程發起IO請求時立即返回。 但並未讀取到任何數據, 用戶線程需要不斷地發起IO請求,直到數據到達后,才真正讀取到數據,繼續執行。
同步IO多路復用模型
可以通過系統調用select、poll、epoll
實現IO
復用模型。此時進程就會組賽在這些系統調用上,而不是阻塞在真正的IO
操作上, 直到有就緒事件了,這些系統調用就會返回哪些套接字可讀寫,然后就可以進行把數據包復制到應用進程緩沖區了 IO
多路復用模型是建立在內核提供的多路分離函數select
基礎之上的,使用select
函數可以避免同步非阻塞IO模型中輪詢等待的問題。如下圖:

原理:將需要進行IO操作的socket添加到select中,然后阻塞等待select系統調用返回。 當數據到達時,socket被激活,select函數返回。用戶線程正式發起read請求,讀取數據並繼續執行。
異步IO模型
由用戶進程告知內核啟動一個操作,並且由內核去操作,操作完后給用戶進程發一個通知,通知用戶進程操作完了。如下圖

異步IO模型中,當用戶線程收到通知時,數據已經被內核讀取完畢,並放在了用戶線程指定的緩沖區內,內核在IO完成后通知用戶線程直接使用即可
小結
以上的相關概念是作者認為學習網絡編程中,我們應該知道的一些概念。我們在學習以后的內容的時候,都是以這些為基礎的。
