NIO實現聊天室:一切都要從網絡編程的基礎開始聊起!
一、寫在開頭
大家好,Build哥回來啦!停更了大概2個月之久,之前有段時間去寫小說去了,后來又因為公司活太多,牛馬干的太投入,就落下了博客的更新,國慶節期間,難得的閑下來,準備回歸老本行啦。
大致的翻看了一下之前更新的內容,已經寫到了Java的IO部分,作為網絡傳輸的一大重點知識,IO至關重要,而為了更好的理解和使用IO,我們今天要延展的來聊一聊Java中的網絡編程。其實,這句話說得不太嚴謹,網絡編程并非Java獨有,所有依賴Web端的程序語言,或者應用們都離不開網絡編程。
二、網絡編程的基礎
ok,閑話少敘,咱們直入主題,來一起學習一下網絡編程,在開始學習之前,我們應該了解一下我們日常生活中都離不開的互聯網及周邊產品(路由器,網址,手機,電腦)等。
2.1 計算機網絡
電腦對于我們來說十分熟悉啦,在多臺聯網電腦之前,我們可以聊天,視頻,郵件交流,也可以通過不同的媒介平臺進行互通,所有在線的用戶設備之間,像一張大網串聯起來,互通有無,這就是計算機的網絡!
圖片
如上圖,是一張概括的網絡拓撲簡圖,非常形象易懂的囊括了我們當下的互聯網世界。其中,用戶設備如手機,電腦這些用于訪問網絡資源,如看劇,刷新聞,而網絡交換機則是讓手機能上網的橋梁,用來連接局域網內的設備和路由器,而路由器呢,主要工作是實現不同網絡之間的路由,可以聯通互聯網,而為了防止一些未經過授權的訪問侵入設備,設備的網絡中均設有一道防火墻,用于攔截未授權請求;而互聯網呢,則是全球互通的一個信息資源網,服務器無需多談,用于托管網絡應用和數據的處理和存儲站。
那么,看到這里我們有了這樣一個疑問,全球不同國家和地區存在著不同的局域網,遵循著不同的網絡協議,是怎么做到全球互通互聯網的呢?偉大的先輩們早就考慮到這點啦,因此,最早制定規范的那幫人,就互聯達成了全球性的協議規范,那就是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)
圖片
我們通過ipconfig可以看到我們計算機的網絡信息,我們的計算機除了本地的127.0.0.1之外,還有一個IP地址,如果多個網卡,還會有多個IP地址,那么不同計算機之前是如何通信的呢?
這里涉及“網絡號”這個概念,網絡號由IP和子網掩碼計算得來,如果兩個計算機之間的網絡號相同,則說明兩臺計算機在同一個網絡中,可以直接通信,如果不同,則不在同一個網絡,需要通過路由器或者交換機進行間接通信,這就是網關。
2.3 域名
上面說網絡上的地址多數指的是ip,很多人會奇怪,比如我們登錄百度時,輸入的并非xxx.xxx.xxx.xxx格式的,而是www.baidu.com,而這段組合就是域名!我們通過域名解析服務器 DNS 負責把域名翻譯成對應的 IP,客戶端再根據 IP 地址訪問服務器。
很明顯,相比較一堆數字組合的IP地址來說,域名更容易被記住!我們通過nslookup命令,可以查看域名對應的ip地址。
圖片
當然,我們在上面說的本機ip地址 127.0.0.1 也有對應的本機域名:localhost
圖片
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)。
圖片
但在我們在互聯網實際使用的是 TCP/IP 模型,并不是對應到 OSI 的 7 層模型,而是大致對應 OSI 的 5 層模型,也有人說是四層模型,這個看自己,無所謂,主要是要理解這個流程。
2.5 常用協議
在上圖OSI模型中,我們可以看到在應用層、傳輸層、網絡層、數據鏈路層都對應著很多的網絡協議,我們可以將之統稱為TCP/IP協議簇,我們接下來就簡要的介紹一下其中幾個重要的協議:
- IP協議(互聯網協議):一種分組交換的協議,不保證可靠傳輸,負責將數據包從源主機路由到目標主機,是網絡層的一個協議;
- TCP協議(傳輸控制協議):TCP協議是建立在IP的基礎上的,是傳輸層的協議。IP協議負責傳輸數據,而TCP協議可以在建立了安全連接的基礎上,控制數據傳輸,保證可靠性,并且支持雙向通信,像HTTP,HTTPS都是建立在TCP協議之上的。
- UDP協議(數據報文協議):與TCP協議一樣,都是傳輸層的協議,不同的是它是無連接協議,不保證可靠傳輸。在通信前不需要建立連接,因此它的傳輸效率比 TCP 高,而且 UDP 協議比 TCP 協議要簡單得多。選擇 UDP 協議時,傳輸的數據通常是能容忍丟失的,例如,一些語音視頻通信的應用會選擇 UDP 協議。
三、總結
今天就說這么多啦,主要介紹一下網絡編程相關的基礎知識,在后續的博文中針對網絡編程所需要的內容,再進一步的整理與細化。
Java成長計劃75
Java成長計劃 · 目錄#Java成長計劃
上一篇NIO的三大核心組件詳解,充分說明為什么NIO在網絡IO中擁有高性能!