上篇介紹了網絡原理傳輸層TCP協議的知識,本篇博客給大家帶來的是網絡原理剩余的內容, 總體來說,這部分內容沒有上兩篇文章那么重要,本篇知識有一個印象即可.
🐎文章專欄: JavaEE初階
🚀若有問題 評論區見
? 歡迎大家點贊 評論 收藏 分享
如果你不知道分享給誰,那就分享給薯條.
你們的支持是我不斷創作的動力 .
王子,公主請閱🚀
- 要開心
- 要快樂
- 順便進步
- 1. 網絡層
- 1.1 IP協議
- 1.2 地址管理
- 1.2.1 地址管理
- 1.2.2 路由選擇
- 2. 數據鏈路層
- 3.應用層協議DNS
要開心
要快樂
順便進步
1. 網絡層
1.1 IP協議
Ⅰ 基本概念
主機: 配有IP地址, 但是不進行路由控制的設備;
路由器: 即配有IP地址, 又能進行路由控制;
節點: 主機和路由器的統稱;
Ⅱ 協議頭格式
① 4位版本號(version): 指定IP協議的版本, 對于IPv4來說, 就是4. 對于IPv6來說,就是6.
② 4位頭部長度(header length): IP頭部的長度是多少個32bit, 也就是 length * 4 的字節數. 4bit表示最大的數字是15, 因此IP頭部最大長度是60字節.
③ 8位服務類型(Type Of Service): 3位優先權字段(已經棄用), 4位TOS字段, 和1位保留字段(必須置為0). 4位TOS分別表示: 最小延時, 最大吞吐量, 最高可靠性, 最小成本. 這四者相互沖突, 只能選擇一個. 對ssh/telnet這樣的應用程序, 最小延時比較重要; 對于ftp這樣的程序, 最大吞吐量比較重要. 總的來說,8位服務類型能夠讓IP協議切換形態.
④ 16位總長度(total length): IP數據報整體占多少個字節. IP協議與UDP協議一樣,存在64KB的限制, 但是IP協議自身支持"拆包組包"功能.
⑤ 16位標識(id): 唯?的標識主機發送的報文. 如果一個大的IP數據報拆成了多個小的,拆出來的這多個小包的16位標識是相同的數值.
⑥ 3位標志字段: 第一位保留(暫時不用), 第二位置為1表示禁止拆包. 第三位表示"更多分片", 如果最后一個分片置為1, 其他是0. 類似于一個結束標記.
⑦ 13位分片偏移(framegament offset): 描述當前每個小的數據包(分片)的相對位置.
⑧ 8位生存時間(Time To Live, TTL): 數據報到達目的地的最大報文跳數. 一般是64. 每次經過一個路由, TTL -= 1, 一直減到0還沒到達, 那么就丟棄了. 這個字段主要是用來防止出現路由循環. 其實就是描述了這個 IP 數據包,在網絡上還能繼續存活多久.
⑨ 16位頭部校驗和: 使用CRC進行校驗, 來鑒別頭部是否損壞.
⑩ 32位源地址和32位目標地址(重要): 表示發送端和接收端. IP 地址,本質上就是一個 32位的整數.為了方便人來理解, 用 點分十進制 方式來表示.
1.2 地址管理
1.2.1 地址管理
Ⅰ 網絡號和主機號
IP地址分為兩個部分, 網絡號和主機號
網絡號: 保證相互連接的兩個網段具有不同的標識;
主機號: 同一網段內, 主機之間具有相同的網絡號, 但是必須有不同的主機號;
同一局域網中的設備,網絡號必須相同,主機號必須不同.
一個 IP 地址, 哪個部分是網絡號, 哪個部分是主機號,不是一定的,要通過子網掩碼來確定網絡號的。 如下圖: 一個255表示8個1. 被標記成1的就是網絡號.
上圖的 1總共是24個,但是有些情況不是24個, 這并不是固定的,需要根據實際的網絡環境靈活配置.
Ⅱ 特殊的IP地址
① 將IP地址中的主機號全部設為0, 就成為了網絡號, 代表這個局域網; 這種IP不能給具體的主機分配. 比如: 192.168.100.0
② 將IP地址中的主機號全部設為1, 就成為了廣播地址, 用于給同一個鏈路中相互連接的所有主機發送數據包; 這種IP也不能給具體的主機分配. 比如: 192.168.100.255
前面說UDP 天然能支持廣播,就是和這個 IP 有關系,使用 UDP socket 給這個地址發送 UDP 數據報,局域網中所有的設備,都能收到這個數據報而TCP 無法和這個地址建立連接.
如果一個 IP 是 127 開頭的, 此時這個 |P 就是"環回 ip"(loopback) 這些IP地址都表示設備自身,自己發給自己. 比如最常用的127.0.0.1;
操作系統提供了一個特殊的"虛擬網卡",關聯到了這個 IP 上,這里的 環回 IP 主要的用途就是進行一些測試性的工作,環回 IP 能夠排除 網絡不通等干擾因素, 更好地排査代碼中的問題.
Ⅲ IP地址的數量限制
IP 地址是一個 32 位的整數. 2^32 約等于 42億9千萬, 按理來說地址是不應該重復的,互聯網發展到今天,能上網的設備是非常非常多的. 早就超過了 42億9千萬這個數字. 那么IP協議是如何解決IP地址不夠用的問題的?
IP協議解決地址不夠用問題的方法由下面兩個方案結合而成.
① 動態分配IP
設備不上網就不用分配IP地址,設備上網就給設備分配IP.
② NAT機制(網絡地址轉換)
本質上就是讓一個IP地址,代表一批設備.
把IP地址分成兩大類:
1. 內網IP(局域網IP), 如果一個IP地址是類似以下三種地址的話就表示內網IP.
10.x 或者172.16.x-172.31.x 或者192.168.x
在同一個局域網內部,內網IP 之間,不能重復在不同的局域網中, 內網 IP 之間, 可以重復。
2. 外網IP(廣域網IP), 除了內網IP剩下的就是外網IP了. 外網 IP 則始終都不允許重復,務必做到唯一.
通常一個小區/一個學校/一個公司,都是構成一個大的局域網 (這一個局域網中可能就有幾干甚至上萬個設備).
這樣的一個局域網,使用一個外網 IP 即可表示, 一個外網 |P 就代表了幾于個上萬個設備.
NAT機制具體是怎么工作的?
路由器會將我的電腦的源IP替換成一個外網IP, 比如123.139.168.15. 之后傳輸給服務器,如下圖所示:
內網IP無法在廣域網上使用, 當我的設備的IP數據包傳輸給服務器時, 路由器會對設備的源IP進行替換, 替換成一個外網IP. 同樣地, 當數據包從服務器傳回我的設備時, 也會對源IP進行替換.
如下圖所示:
當服務器返回數據之后,路由器如何決定這個數據要交給哪個設備?
是要結合端口號來進行區分,“端口號可以用來區分同一個主機的不同進程,也可以區分不同主機的不同進程”.
NAT 機制最大的優勢就是純軟件方案, 也正是因為這個機制,局域網內部的設備,能夠主動訪問外網的設備外網的設備無法主動訪問局域網內部的設備. 之前寫的 UDP echo server 必須部署到云服務器上才能被其他主機訪問.
Ⅳ IPv6
IPv6 使用 16 個字節來表示 IP 地址, 總共有 2^128個地址,這個數字大到什么程度? 大到可以給地球上的每一粒砂子都分配一個不同的 ip 地址,甚至還綽綽有余.
IPv6并不是IPv4的簡單升級版. 這是互不相的兩個協議, 彼此并不兼容; 但是目前IPv6還沒有普及,因為升級成IPv6需要成本,并且花了錢網速不見得有多少提升,世界上大部分人都不愿意花這冤枉錢. 然而截止到 2023 年 8 月 28 日, 我國 IPv6 活躍用戶數達7.67億(網民總數為10.79億, 占比 71%), 世界領先.
我國為什么會大力推行IPv6呢?
IPv4 地址是由美國的一個"民間組織"負責分配, 所謂的民間組織,背后卻是由美國軍方贊助. 假設中美雙方之間出現了極端情況, 美國人這邊不給我們分配IP地址, 并且將之前給我們的地址收回,那勢必會對我們國家的互聯網行業造成重大損失, 為了預防美國人這一手, 國家大力推行IPv6是必然的.
目前來看,中國幾乎所有的互聯網公司都支持IPv6, 當然沒有默認開啟, 非必要應該不會默認開啟.
Ⅴ 私有IP地址和公網IP地址
如果一個組織內部組建局域網,IP地址只用于局域網內的通信,而不直接連到Internet上,理論上 使用任意的IP地址都可以,但是RFC 1918規定了用于組建局域網的私有IP地址.
① 10.x,前8位是網絡號,共16,777,216個地址
② 172.16.到172.31.,前12位是網絡號,共1,048,576個地址
③ 192.168.*,前16位是網絡號,共65,536個地址包含在這個范圍中的, 都成為私有IP, 其余的則稱為全局IP(或公網IP);
一個路由器可以配置兩個IP地址, 一個是WAN口IP, 一個是LAN口IP(子網IP).
路由器LAN口連接的主機, 都從屬于當前這個路由器的子網中.
不同的路由器, 子網IP其實都是一樣的(通常都是192.168.1.1). 子網內的主機IP地址不能重復. 但是子網之間的IP地址就可以重復了.
每一個家用路由器, 其實又作為運營商路由器的子網中的一個節點. 這樣的運營商路由器可能會有很多級, 最外層的運營商路由器, WAN口IP就是一個公網IP了.
子網內的主機需要和外網進?通信時, 路由器將IP首部中的IP地址進行替換(替換成WAN口IP), 這樣逐級替換, 最終數據包中的IP地址成為一個公網IP. 這種技術稱為NAT(Network Address
Translation,網絡地址轉換).
如果希望我們自己實現的服務器程序, 能夠在公網上被訪問到, 就需要把程序部署在一臺具有外網IP的服務器上. .
1.2.2 路由選擇
在復雜的網絡結構中, 找出?條通往終點的路線;
路由的過程, 是一跳一跳(Hop by Hop) “問路” 的過程. 所謂 “一跳” 就是數據鏈路層中的一個區間. 具體在以太網中指從源MAC地址到目的MAC地址之間的幀傳輸區間.
IP數據包的傳輸過程也和問路一樣.
① 當IP數據包, 到達路由器時, 路由器會先查看目的IP;
② 路由器決定這個數據包能否直接發送給目標主機, 還是需要發送給下一個路由器;
③ 依次反復, 一直到達目標IP地址;
那么如何判定當前這個數據包該發送到哪里呢? 這個就依靠每個節點內部維護一個路由表; 此處路由表不展開說明.
2. 數據鏈路層
“以太網” 不是一種具體的網絡, 而是一種技術標準; 既包含了數據鏈路層的內容, 也包含了一些物理層的內容. 例如: 規定了網絡拓撲結構, 訪問控制方式, 傳輸速率等;
例如以太網中的網線必須使用雙絞線; 傳輸速率有10M, 100M, 1000M等;
以太網是當前應用最廣泛的局域網技術; 和以太網并列的還有令牌環網, 無線LAN等;
① 以太網幀格式
源地址和目的地址是指網卡的硬件地址(也叫MAC地址), 長度是48位,是在網卡出廠時固化的;
幀協議類型字段有三種值,分別對應IP、ARP、RARP;
幀末尾是CRC校驗碼.
② 認識MAC地址
MAC地址用來識別數據鏈路層中相連的節點;
長度為48位, 即6個字節. 一般用16進制數字加上冒號的形式來表示(例如: 08:00:27:03:fb:19)
一臺電腦的MAC地址在網卡出廠時就確定了, 不能修改. MAC地址通常是唯一的,所以MAC地址 可以作為 一臺網絡設備 的身份標識
IP地址描述的是路途總體的 起點 和 終點;
MAC地址描述的是路途上的每一個局部區間的起點和終點;
3.應用層協議DNS
DNS是一整套從域名映射到IP的系統.
① DNS背景
TCP/IP中使用IP地址和端口號來確定網絡上的一臺主機的一個程序. 但是IP地址不方便記憶.
于是人們發明了一種叫主機名的東西, 是一個字符串, 并且使用hosts文件來描述主機名和IP地址的關系.
DNS是應用層協議.
DNS底層使用UDP進行解析.
瀏覽器會緩存DNS結果.
② 全世界有很多設備需要同時進行 DNS 的請求, 這一組 DN服務器,能抗住這么高的請求量? 一個服務器硬件資源是有限的,服務器處理每個請求,肯定都是要消耗一定的資源的,單位時間內,請求太多,消耗的總資源超過了機器本身的資源上限,機器就掛了.
1. 開源, 搭建DNS系統的大佬們號召各個網絡運營商都可以自己搭建一組"DNS 鏡像服務器", 鏡像服務器的數據,都從他們這邊來同步, 此時用戶就會優先訪問離自己最近的鏡像服務器.
2. 節流, 讓請求量變少. 讓每個上網的設備,搞個本地緩存,假設我的電腦1分鐘之內要訪問10次百度,那么只讓第一次訪問請求DSN,把請求的結果保存到本地,后面9次請求都使用第一次的結果即可.
一般進行 DNS 解析,訪問的都是就近的運營商的鏡像DNS.
本篇博客到這里就結束啦, 感謝觀看 ???
🐎期待與你的下一次相遇😊😊😊