網絡編程相關概念


網絡編程相關概念

最近在看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協議簇,而不單單是TCPIP TCP/IP協議的基本傳輸單位是數據包(Datagram)。TCP協議負責把數據分成若干個數據包,並給每個數據包加上包頭;IP協議在每個包頭上再加上接收端主機地址, 這樣數據找到自己要去的地方。如果傳輸過程中出現數據丟失、數據失真等情況,TCP協議會自動要求數據重新傳輸,並重新組包。總之,IP協議保證數據的傳輸,TCP協議保證數據傳輸的質量

TCP與IP協議結構

TCP/IP協議數據的傳輸基於TCP/IP協議的四層結構:應用層(應用層、表示層、會話層)、傳輸層、網絡層、網絡接口層(數據鏈路層、物理層),數據在傳輸時每通過一層就要在數據上加個包頭, 其中的數據供接收端同一層協議使用,而在接收端,每經過一層要把用過的包頭去掉,這樣來保證傳輸數據的格式完全一致。如下為4層(包含OSI七層)示意圖:

![](https://cdn.triumphxx.com.cn/net/tcp-ip.png)
#### 各層作用 - 物理層:原始的比特流的傳輸,電子信號傳輸。 - 數據鏈路層:將數據分幀,並且處理流控制,指定拓撲結構並且提供硬件尋址。 - 網絡層:通過尋址建立倆個節點之間的連接。 - 傳輸層:數據遞送 - 會話層:在兩個節點之間建立連接 - 表示層:格式化數據,方便為應用程序提供通用的接口 - 應用層:直接為應用程序提供服務

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完成后通知用戶線程直接使用即可

小結

以上的相關概念是作者認為學習網絡編程中,我們應該知道的一些概念。我們在學習以后的內容的時候,都是以這些為基礎的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM