Java—网络编程相关概念
1. 概述
?
計算機網絡是通過傳輸介質、通信設施和網絡通信協議,把分散在不同地點的計算機設備互連起來的,實現資源共享和數據傳輸的系統。網絡編程就是編寫程序使互聯網的兩個(或多個)設備(如計算機)之間進行數據傳輸。Java語言對網絡編程提供了良好的支持。通過其提供的接口我們可以很方便地進行網絡編程。
?
2. 網絡分層
計算機網絡20世紀60年代出現,經歷了20世紀70年代、80年代和90年代的發展,進入21世紀后,計算機網絡已經成為信息社會的基礎設施,深入到人類社會的方方面面,與人們的工作、學習和生活息息相關。計算機網絡分為網絡協議和網絡體系結構。
?
2.1 網絡體系結構
通過網絡發送數據是一項復雜的操作,必須仔細地協調網絡的物理特性以及所發送數據的邏輯特征。通過網絡將數據從一臺主機發送到另外的主機,這個過程是通過計算機網絡通信來完成。
?
網絡通信的不同方面被分解為多個層,層與層之間用接口連接。通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信,理解批次定義好的規則和約定。每一層表示為物理硬件(即線纜和電流)與所傳輸信息之間的不同抽象層次。在理論上,每一層只與緊挨其上和其下的層對話。將網絡分層,這樣就可以修改甚至替換某一層的軟件,只要層與層之間的接口保持不變,就不會影響到其他層。
?
計算機網絡體系結構是計算機網絡層次和協議的集合,網絡體系結構對計算機網絡實現的功能,以及網絡協議、層次、接口和服務進行了描述,但并不涉及具體的實現。接口是同一節點內相鄰層之間交換信息的連接處,也叫服務訪問點(SAP)。
?
?
?
計算機網絡層次模型
?
世界上第一個網絡體系結構由IBM公司提出(1974年,SNA),以后其他公司也相繼提出自己的網絡體系結構。為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基于具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM(Open System Interconnection Reference Model)。
?
ISO制定的OSI參考模型過于龐大、復雜招致了許多批評。與此相對,美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,由于TCP/IP協議棧的簡單,獲得了廣泛的應用,并成為后續因特網使用的參考模型。
?
?2.1.1 OSI參考模型
這里首先介紹OSI參考模型。OSI模型把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。
?
?
物理層
物理層處于OSI的最底層,是整個開放系統的基礎。物理層涉及通信信道上傳輸的原始比特流(bits),它的功能主要是為數據端設備提供傳送數據的通路以及傳輸數據。
?
數據鏈路層
數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸線加上數據鏈路協議以后,構成邏輯上可靠的數據鏈路。需要完成的功能有鏈路管理、成幀、差錯控制以及流量控制等。其中成幀是對物理層的原始比特流進行界定,數據鏈路層也能夠對幀的丟失進行處理。
?
網絡層
網絡層涉及源主機節點到目的主機節點之間可靠的網絡傳輸,它需要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。
?
傳輸層
傳輸層起著承上啟下的作用,涉及源端節點到目的端節點之間可靠的信息傳輸。傳輸層需要解決跨越網絡連接的建立和釋放,對底層不可靠的網絡,建立連接時需要三次握手,釋放連接時需要四次揮手。
?
會話層和表示層
會話層的主要功能是負責應用程序之間建立、維持和中斷會話,同時也提供對設備和結點之間的會話控制,協調系統和服務之間的交流,并通過提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。
?
表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。
?
應用層
應用層為OSI的最高層,是直接為應用進程提供服務的。其作用是在實現多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。
?
?2.1.2 TCP/IP參考模型
TCP/IP,即Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協議/因特網互聯協議,是Internet最基本的協議,Internet國際互聯網絡的基礎。
?
TCP/IP協議是一個開放的網絡協議簇,它的名字主要取自最重要的網絡層IP協議和傳輸層TCP協議。TCP/IP協議定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。TCP/IP參考模型采用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。
?
?
?
網絡接口層
TCP/IP協議對網絡接口層沒有給出具體的描述,網絡接口層對應著OSI參考模型的物理層和數據鏈路層
?
網絡層(IP層)
網絡層是整個TCP/IP協議棧的核心。它的功能是把分組發往目標網絡或主機。同時,為了盡快地發送分組,可能需要沿不同的路徑同時進行分組傳遞。因此,分組到達的順序和發送的順序可能不同,這就需要上層必須對分組進行排序。網絡層除了需要完成路由的功能外,也可以完成將不同類型的網絡(異構網)互連的任務。除此之外,互聯網層還需要完成擁塞控制的功能。
?
傳輸層(TCP層)
TCP層負責在應用進程之間建立端到端的連接和可靠通信,它只存在與端節點中。TCP層涉及兩個協議,TCP和UDP。其中,TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。UDP協議提供無連接的服務,用于不需要或無法實現面向連接的網絡應用中。
?
應用層
應用層為Internet中的各種網絡應用提供服務。
?
2.2 網絡協議
? 如同人與人之間相互交流是需要遵循一定的規則(如語言)一樣,計算機之間能夠進行相互通信是因為它們都共同遵守一定的規則,即網絡協議。
?
OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:
?
?
網絡協議之間的關系圖如下:
?
?
?2.2.1 IP協議(Internet protocol)
? IP協議的作用在于把各種數據包準備無誤的傳遞給對方,其中兩個重要的條件是IP地址和MAC地址。由于IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器里面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。IP地址采用的IPv4格式,目前正在向IPv6過渡。
?
?2.2.2 TCP協議(Transmission Control Protocol)
TCP(傳輸控制協議)是面向連接的傳輸層協議。TCP層是位于IP層之上,應用層之下的中間層。不同主機的應用層之間經常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機制,而是提供不可靠的包交換。TCP協議采用字節流傳輸數據。
?
?2.2.2.1 TCP的報文格式
TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分后面是選項部分。
?
?
?
下面是報文段首部各個字段的含義:
?
源端口號以及目的端口號:各占2個字節,端口是傳輸層和應用層的服務接口,用于尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
序號:Seq序號,占4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
確認序號:Ack序號,占4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
數據偏移:占4個字節,用于指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
保留字段占6位,暫時可忽略,值全為0。
標志位,6個
URG(緊急):為1時表明緊急指針字段有效
ACK(確認):為1時表明確認號字段有效
PSH(推送):為1時接收方應盡快將這個報文段交給應用層
RST(復位):為1時表明TCP連接出現故障必須重建連接
SYN(同步):在連接建立時用來同步序號
FIN(終止):為1時表明發送端數據發送完畢要求釋放連接
?接收窗口:占2個字節,用于流量控制和擁塞控制,表示當前接收緩沖區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩沖區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。
校驗和:占2個字節,范圍包括首部和數據兩部分。
選項是可選的,默認情況是不選。
2.2.2.2 三次握手與四次揮手
TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。
?
TCP三次握手過程如下:
?
?
1. 第一次握手(客戶端發送請求)
?
客戶機發送連接請求報文段到服務器,并進入SYN_SENT狀態,等待服務器確認。發送連接請求報文段內容:SYN=1,seq=x;SYN=1意思是一個TCP的SYN標志位置為1的包,指明客戶端打算連接的服務器的端口;seq=x表示客戶端初始序號x,保存在包頭的序列號(Sequence Number)字段里。
?
2. 第二次握手(服務端回傳確認)
?
服務器收到客戶端連接請求報文,如果同意建立連接,向客戶機發回確認報文段(ACK)應答,并為該TCP連接分配TCP緩存和變量。服務器發回確認報文段內容:SYN=1,ACK=1,seq=y,ack=x+1;SYN標志位和ACK標志位均為1,同時將確認序號(Acknowledgement Number)設置為客戶的ISN加1,即x+1;seq=y為服務端初始序號y。
?
3. 第三次握手(客戶端回傳確認)
?
客戶機收到服務器的確認報文段后,向服務器給出確認報文段(ACK),并且也要給該連接分配緩存和變量。此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。客戶端發回確認報文段內容:ACK=1,seq=x+1,ack=y+1;ACK=1為確認報文段;seq=x+1為客戶端序號加1;ack=y+1,為服務器發來的ACK的初始序號字段+1。
?
注意:握手過程中傳送的包里不包含數據,三次握手完畢后,客戶端與服務器才正式開始傳送數據。
?
TCP四次揮手過程如下:
?
?
由于TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務后就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN后仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。
?
1. TCP客戶端發送一個FIN,用來關閉客戶端到服務端的數據傳送,客戶端進入FIN_WAIT_1狀態。發送報文段內容:FIN=1,seq=u;FIN=1表示請求切斷連接;seq=u為客戶端請求初始序號。
?
2. 服務端收到這個FIN,它發回一個ACK給客戶端,確認序號為收到的序號加1。和SYN一樣,一個FIN將占用一個序號;服務端進入CLOSE_WAIT狀態。發送報文段內容:ACK=1,seq=v,ack=u+1;ACK=1為確認報文;seq=v為
總結
以上是生活随笔為你收集整理的Java—网络编程相关概念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中strip、startsw
- 下一篇: Dubbo核心概念