JAVA深化篇_35—— 網絡編程基本概念
網絡編程基本概念
計算機網絡
計算機網絡是指將地理位置不同的具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網絡操作系統,網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享和信息傳遞的計算機系統。
從其中我們可以提取到以下內容:
- 計算機網絡的作用:資源共享和信息傳遞。
- 計算機網絡的組成:
- 計算機硬件:計算機(大中小型服務器,臺式機、筆記本等)、外部設備(路由器、交換機等)、通信線路(雙絞線、光纖等)。
- 計算機軟件:網絡操作系統(Windows 2000 Server/Advance Server、Unix、Linux等)、網絡管理軟件(WorkWin、SugarNMS等)、網絡通信協議(如TCP/IP協議棧等)。
網絡通信協議
什么是網絡通信協議
通過計算機網絡可以實現不同計算機之間的連接與通信,但是計算機網絡中實現通信必須有一些約定即通信協議,對速率、傳輸代碼、代碼結構、傳輸控制步驟、出錯控制等制定標準。
國際標準化組織(ISO,即International Organization for Standardization)定義了網絡通信協議的基本框架,被稱為OSI(Open System Interconnect,即開放系統互聯)模型。要制定通訊規則,內容會很多,比如要考慮A電腦如何找到B電腦,A電腦在發送信息給B電腦時是否需要B電腦進行反饋,A電腦傳送給B電腦的數據格式又是怎樣的?內容太多太雜,所以OSI模型將這些通訊標準進行層次劃分,每一層次解決一個類別的問題,這樣就使得標準的制定沒那么復雜。OSI模型制定的七層標準模型,分別是:應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層。
OSI七層協議模型:
網絡協議的分層
雖然國際標準化組織制定了這樣一個網絡通信協議的模型,但是實際上互聯網通訊使用最多的網絡通信協議是TCP/IP網絡通信協議。
TCP/IP 模型,也是按照層次劃分,共四層:應用層,傳輸層,網絡層,網絡接口層(物理+數據鏈路層)。
OSI模型與TCP/IP模型的對應關系:
數據封裝與解封
數據封裝(Data Encapsulation)是指將協議數據單元(PDU)封裝在一組協議頭和協議尾中的過程。在OSI七層參考模型中,每層主要負責與其它機器上的對等層進行通信。該過程是在協議數據單元(PDU)中實現的,其中每層的PDU一般由本層的協議頭、協議尾和數據封裝構成。
-
數據發送處理過程
- 應用層將數據交給傳輸層,傳輸層添加上TCP的控制信息(稱為TCP頭部),這個數據單元稱為段(Segment),加入控制信息的過程稱為封裝。然后,將段交給網絡層。
- 網絡層接收到段,再添加上IP頭部,這個數據單元稱為包(Packet)。然后,將包交給數據鏈路層。
- 數據鏈路層接收到包,再添加上MAC頭部和尾部,這個數據單元稱為幀(Frame)。然后,將幀交給物理層。
- 物理層將接收到的數據轉化為比特流,然后在網線中傳送。
-
數據接收處理過程
- 物理層接收到比特流,經過處理后將數據交給數據鏈路層。
- 數據鏈路層將接收到的數據轉化為數據幀,再除去MAC頭部和尾部,這個除去控制信息的過程稱為解封,然后將包交給網絡層。
- 網絡層接收到包,再除去IP頭部,然后將段交給傳輸層。
- 傳輸層接收到段,再除去TCP頭部,然后將數據交給應用層。
從以上傳輸過程中,可以總結出以下規則:
- 發送方數據處理的方式是從高層到底層,逐層進行數據封裝。
- 接收方數據處理的方式是從底層到高層,逐層進行數據解封。
接收方的每一層只把對該層有意義的數據拿走,或者說每一層只能處理發送方同等層的數據,然后把其余的部分傳遞給上一層,這就是對等層通信的概念。
IP地址
IP地址
IP是Internet Protocol Address,即"互聯網協議地址"。
用來標識網絡中的一個通信實體的地址。通信實體可以是計算機、路由器等。 比如互聯網的每個服務器都要有自己的IP地址,而每個局域網的計算機要通信也要配置IP地址。
路由器是連接兩個或多個網絡的網絡設備。
IP地址分類:
| 類別 | 最大網絡數 | IP地址范圍 | 單個網段最大主機數 | 私有IP地址范圍 |
|---|---|---|---|---|
| A | 126(2^7-2) | 1.0.0.1-127.255.255.254 | 16777214 | 10.0.0.0-10.255.255.255 |
| B | 16384(2^14) | 128.0.0.1-191.255.255.254 | 65534 | 172.16.0.0-172.31.255.255 |
| C | 2097152(2^21) | 192.0.0.1-223.255.255.254 | 254 | 192.168.0.0-192.168.255.255 |
目前主流使用的IP地址是IPV4,但是隨著網絡規模的不斷擴大,IPV4面臨著枯竭的危險,所以推出了IPV6。
IPV4,采用32位地址長度,只有大約43億個地址,它只有4段數字,每一段最大不超過255。隨著互聯網的發展,IP地址不夠用了,在2019年11月25日IPv4位地址分配完畢。
IPv6采用128位地址長度,幾乎可以不受限制地提供地址。按保守方法估算IPv6實際可分配的地址,整個地球的每平方米面積上仍可分配1000多個地址。
IP地址實際上是一個32位整數(稱為IPv4),以字符串表示的IP地址如192.168.0.1實際上是把32位整數按8位分組后的數字表示,目的是便于閱讀。
IPv6地址實際上是一個128位整數,它是目前使用的IPv4的升級版,以字符串表示類似于2001:0db8:85a3:0042:1000:8a2e:0370:7334
公有地址
公有地址(Public address)由Inter NIC(Internet Network Information Center互聯網信息中心)負責。這些IP地址分配給注冊并向Inter NIC提出申請的組織機構。通過它直接訪問互聯網。
私有地址
私有地址(Private address)屬于非注冊地址,專門為組織機構內部使用。
以下列出留用的內部私有地址
A類 10.0.0.0–10.255.255.255
B類 172.16.0.0–172.31.255.255
C類 192.168.0.0–192.168.255.255
注意事項
- 127.0.0.1 本機地址
- 192.168.0.0–192.168.255.255為私有地址,屬于非注冊地址,專門為組織機構內部使用
端口port
端口號用來識別計算機中進行通信的應用程序。因此,它也被稱為程序地址。
一臺計算機上同時可以運行多個程序。傳輸層協議正是利用這些端口號識別本機中正在進行通信的應用程序,并準確地進行數據傳輸。
總結
- IP地址好比每個人的地址(門牌號),端口好比是房間號。必須同時指定IP地址和端口號才能夠正確的發送數據。
- IP地址好比為電話號碼,而端口號就好比為分機號。
端口分配
端口是虛擬的概念,并不是說在主機上真的有若干個端口。通過端口,可以在一個主機上運行多個網絡應用程序。 端口的表示是一個16位的二進制整數,對應十進制的0-65535。
操作系統中一共提供了0~65535可用端口范圍。
按端口號分類:
**公認端口(Well Known Ports):**從0到1023,它們緊密綁定(binding)于一些服務。通常這些端口的通訊明確表明了某種服務的協議。例如:80端口實際上總是HTTP通訊。
**注冊端口(Registered Ports):**從1024到65535。它們松散地綁定于一些服務。也就是說有許多服務綁定于這些端口,這些端口同樣用于許多其它目的。例如:許多系統處理動態端口從1024左右開始。
URL
URL作用:
URL(Uniform Resource Locator),是互聯網的統一資源定位符。用于識別互聯網中的信息資源。通過URL我們可以訪問文件、數據庫、圖像、新聞等。
在互聯網上,每一信息資源都有統一且唯一的地址,該地址就叫URL,URL由4部分組成:協議 、存放資源的主機域名、資源文件名和端口號。如果未指定該端口號,則使用協議默認的端口。例如http 協議的默認端口為 80。 在瀏覽器中訪問網頁時,地址欄顯示的地址就是URL。
在java.net包中提供了URL類,該類封裝了大量復雜的涉及從遠程站點獲取信息的細節。
Socket
我們開發的網絡應用程序位于應用層,TCP和UDP屬于傳輸層協議,在應用層如何使用傳輸層的服務呢?在應用層和傳輸層之間,則是使用套接字Socket來進行分離。
套接字就像是傳輸層為應用層開的一個小口,應用程序通過這個小口向遠程發送數據,或者接收遠程發來的數據;而這個小口以內,也就是數據進入這個口之后,或者數據從這個口出來之前,是不知道也不需要知道的,也不會關心它如何傳輸,這屬于網絡其它層次工作。
Socket實際是傳輸層供給應用層的編程接口。Socket就是應用層與傳輸層之間的橋梁。使用Socket編程可以開發客戶機和服務器應用程序,可以在本地網絡上進行通信,也可通過Internet在全球范圍內通信。
TCP協議和UDP協議
TCP協議
TCP(Transmission Control Protocol,傳輸控制協議)。TCP方式就類似于撥打電話,使用該種方式進行網絡通訊時,需要建立專門的虛擬連接,然后進行可靠的數據傳輸,如果數據發送失敗,則客戶端會自動重發該數據。
TCP在建立連接時又分三步走:
n 第一步,是請求端(客戶端)發送一個包含SYN即同步(Synchronize)標志的TCP報文,SYN同步報文會指明客戶端使用的端口以及TCP連接的初始序號。
n 第二步,服務器在收到客戶端的SYN報文后,將返回一個SYN+ACK的報文,表示客戶端的請求被接受,同時TCP序號被加一,ACK即確認(Acknowledgement)。
n 第三步,客戶端也返回一個確認報文ACK給服務器端,同樣TCP序列號被加一,到此一個TCP連接完成。然后才開始通信的第二步:數據處理。
n 這就是所說的TCP的三次握手(Three-way Handshake)。
UDP協議
UDP(User Data Protocol,用戶數據報協議)
UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接, 當它想傳送時就簡單地去抓取來自應用程序的數據,并盡可能快地把它扔到網絡上。 在發送端,UDP傳送數據的速度僅僅是受應用程序生成數據的速度、 計算機的能力和傳輸帶寬的限制; 在接收端,UDP把每個消息段放在隊列中,應用程序每次從隊列中讀一個消息段。
UDP方式就類似于發送短信,使用這種方式進行網絡通訊時,不需要建立專門的虛擬連接,傳輸也不是很可靠,如果發送失敗則客戶端無法獲得。
UDP 因為沒有擁塞控制,一直會以恒定的速度發送數據。即使網絡條件不好,也不會對發送速率進行調整。這樣實現的弊端就是在網絡條件不好的情況下可能會導致丟包,但是優點也很明顯,在某些實時性要求高的場景(比如電話會議)就需要使用 UDP 而不是 TCP
TCP和UDP區別
這兩種傳輸方式都在實際的網絡編程中使用,重要的數據一般使用TCP方式進行數據傳輸,而大量的非核心數據則可以通過UDP方式進行傳遞,在一些程序中甚至結合使用這兩種方式進行數據傳遞。
由于TCP需要建立專用的虛擬連接以及確認傳輸是否正確,所以使用TCP方式的速度稍微慢一些,而且傳輸時產生的數據量要比UDP稍微大一些。
| UDP | TCP | |
|---|---|---|
| 是否連接 | 無連接 | 面向連接 |
| 是否可靠 | 不可靠傳輸,不使用流量控制和擁塞控制 | 可靠傳輸,使用流量控制和擁塞控制 |
| 連接對象個數 | 支持一對一,一對多,多對一和多對多交互通信 | 只能是一對一通信 |
| 傳輸方式 | 面向報文 | 面向字節流 |
| 首部開銷 | 首部開銷小,僅8字節 | 首部最小20字節,最大60字節 |
| 適用場景 | 適用于實時應用(IP電話、視頻會議、直播等) | 適用于要求可靠傳輸的應用,例如文件傳輸 |
總結
- TCP是面向連接的,傳輸數據安全,穩定,效率相對較低。
- UDP是面向無連接的,傳輸數據不安全,效率較高。
浙公網安備 33010602011771號