NIO實現聊天室之:一切都要從網路程式設計的基礎開始聊起!

JavaBuild發表於2024-10-07

一、寫在開頭

大家好,Build哥回來啦!停更了大概2個月之久,之前有段時間去寫小說去了,後來又因為公司活太多,牛馬乾的太投入,就拉下了部落格的更新,國慶節期間,難得的閒下來,準備迴歸老本行啦。

大致的翻看了一下之前更新的內容,已經寫到了Java的IO部分,作為網路傳輸的一大重點知識,IO至關重要,而為了更好的理解和使用IO,我們今天要延展的來聊一聊Java中的網路程式設計。其實,這句話說的不太嚴謹,網路程式設計並非Java獨有,所有依賴Web端的程式語言,或者應用們都離不開網路程式設計。

二、網路程式設計的基礎

ok,閒話少敘,咱們直入主題,來一起學習一下網路程式設計,在開始學習之前,我們應該瞭解一下我們日常生活中都離不開的網際網路及周邊產品(路由器,網址,手機,電腦)等。

2.1 計算機網路

電腦對於我們來說十分熟悉啦,在多臺聯網電腦之前,我們可以聊天,影片,郵件交流,也可以透過不同的媒介平臺進行互通,所有線上的使用者裝置之間,像一張大網串聯起來,互通有無,這就是計算機的網路!

image

如上圖,是一張概括的網路拓撲簡圖,非常形象易懂的囊括了我們當下的網際網路世界。其中,使用者裝置如手機,電腦這些用於訪問網路資源,如看劇,重新整理聞,而網路交換機則是讓手機能上網的橋樑,用來連線區域網內的裝置和路由器,而路由器呢,主要工作是實現不同網路之間的路由,可以聯通網際網路,而為了防止一些為經過授權的訪問侵入裝置,裝置的網路中均設有一道防火牆,用於攔截未授權請求;而網際網路呢,則是全球互通互相的一個資訊資源網,伺服器無需多談,用於託管網路應用和資料的處理和儲存站。

那麼,看到這裡我們有了這樣一個疑問,全球不同國家和地區存在著不同的區域網,遵循著不同的網路協議,是怎麼做到全球互通網際網路的呢?偉大的先輩們早就考慮到這點啦,因此,最早制定規範的那幫人,就互聯達成了全球性的協議規範,那就是TCP/IP協議,下面我們聊到協議時會說。

2.2 IP

對於IP來說,大家也很熟悉,我們在日常上網的過程中,所說的網址,其實主要就是這個IP(Internet Protocol),中文譯作國際互聯協議。它像一個身份證號一樣,唯一的標識著網路中的一個介面,任何聯入到網際網路中的計算機都只要擁有一個IP地址。

目前IP分為IPv4和IPv6,因為v4版本採用32位地址,算起來越42億個地址,目前已經用盡,所以推出了v6版本,採用128位地址,340萬億億億億個地址,對,你沒看錯,2的128次方個地址就是這麼多,這個數字是人類滅絕了都用不完的。

一個特殊的 IP 地址,稱之為本機地址,它總是127.0.0.1

IPv4(如:101.302.88.22)
IPv6 (如:2001:0DA8:100A:0000:0000:1020:F2F3:1428)

image

我們透過ipconfig可以看到我們計算機的網路資訊,我們的計算機除了本地的127.0.0.1之外,還有一個IP地址,如果多個網路卡,還會有多個IP地址,那麼不同計算機之前是如何通訊的呢?

這裡涉及“網路號”這個概念,網路號由IP和子網掩碼計算得來,如果兩個計算機之間的網路號相同,則說明兩臺計算機在同一個網路中,可以直接通訊,如果不同,則不在同一個網路,需要透過路由器或者交換機進行間接通訊,這就是閘道器。

2.3 域名

上面說網路上的地址多數指的是ip,很多人會奇怪,比如我們像登入百度時,輸入的並非xxx.xxx.xxx.xxx格式的,而是www.baidu.com,而這段組合就是域名!我們透過域名解析伺服器 DNS 負責把域名翻譯成對應的 IP,客戶端再根據 IP 地址訪問伺服器。

很明顯,相比較一堆數字組合的IP地址來說,域名更容易被記住!我們透過nslookup命令,可以檢視域名對應的ip地址。

image

當然,我們在上面說的本機ip地址 127.0.0.1 也有對應的本機域名:localhost

image

2.4 網路模型

對於多種裝置公用網際網路這件事,並非我們圖1中幾條線就可以搞定噠,其內部,底層設計十分複雜,為了能夠在全球範圍內達成一種公用的標準介面,很多組織都發布了 類似的標準規範,其中最著名,也是現在普遍認可的是--開放式系統互聯通訊參考模型(英語:Open System Interconnection Reference Model,縮寫:OSI;簡稱為OSI模型)是一種概念模型,由國際標準化組織提出,一個試圖使各種計算機在世界範圍內互連為網路的標準框架。

OSI模型分為七層,自下而上為 物理層(Physical Layer)、資料鏈路層(Data Link Layer)、網路層(Network Layer)、傳輸層(Transport Layer)、會話層(Session Layer)、表達層(Presentation Layer)、應用層(Application Layer)。

image

但在我們在網際網路實際使用的是 TCP/IP 模型,並不是對應到 OSI 的 7 層模型,而是大致對應 OSI 的 5 層模型,也有人說是四層模型,這個看自己,無所謂,主要是要理解這個流程。

2.5 常用協議

在上圖OSI模型中,我們可以看到在應用層、傳輸層、網路層、資料鏈路層都對應著很多的網路協議,我們可以將之統稱位TCP/IP協議簇,我們接下來就簡要的介紹一下其中幾個重要的協議:

  1. IP協議(網際網路協議):一種分組交換的協議,不保證可靠傳輸,負責將資料包從源主機路由到目標主機,是網路層的一個協議;
  2. TCP協議(傳輸控制協議):TCP協議是建立在IP的基礎上的,是傳輸層的協議。IP協議負責傳輸資料,而TCP協議可以在建立了安全連線的基礎上,控制資料傳輸,保證可靠性,並且支援雙向通訊,像HTTP,HTTPS都是建立在TCP協議之上的。
  3. UDP協議(資料包文協議):與TCP協議一樣,都是傳輸層的協議,不同的是它是無連線協議,不保證可靠傳輸。在通訊前不需要建立連線,因此它的傳輸效率比 TCP 高,而且 UDP 協議比 TCP 協議要簡單得多。選擇 UDP 協議時,傳輸的資料通常是能容忍丟失的,例如,一些語音影片通訊的應用會選擇 UDP 協議。

三、總結

今天就說這麼多啦,主要介紹一下網路程式設計相關的基礎知識,在後續的博文中針對網路程式設計所需要的內容,在進一步的整理與細化。

相關文章