目錄
1. IP 協議報文格式
2. 網段劃分
3. 地址管理
1) 動態分配
2) NAT 機制 (網絡地址轉換)
3) IPv6
4. 路由選擇
1. IP 協議報文格式
IP 協議是網絡層的重點協議。
網絡層要做的事情,主要就是兩方面:
1) 地址管理
制定一系列的規則,通過地址,描述出網絡上一個設備的位置。
2) 路由選擇
網絡環境是比較復雜的,從一個節點到另一個節點之間,存在很多條不同的路徑,就需要通過路由選擇這種方式,篩選/規劃出更合適的路徑進行傳輸。
我們先來看看 IP 協議長什么樣。
2. 網段劃分
一個 IP 地址,分為兩個部分:網絡號(標識了一個局域網) + 主機號(標識了局域網中的一個設備)
比如:
一個 IP 地址,哪個部分是網絡號,哪個部分是主機號,通過子網掩碼就能知道。
子網掩碼是一個 32 位的整數,左側都是 1,右側都是 0 ,不會? 1? 0? 交替出現。
帶有子網掩碼的網段劃分,是當下的網絡環境的現狀。
很久之前也有過下面這種方式劃分:
但是在現在,這種方式已經看不到了,只會在教材上出現這種劃分方式。
如果一個 IP 地址,主機號全為 0,當前這個 IP 就表示網絡號,一個具體的主機是不能分配這個 IP 的。
192.168.17.0
255.255.255.0
如果一個 IP 地址,主機號全為 1,當前這個 IP 就表示廣播地址,一個具體的主機是不能分配這個 IP 的。
192.168.17.255
255.255.255.0
如果一個 IP 地址是以 127 開頭的,那么這個 IP 地址就是 "環回 IP ",表示的是設備自身,最常用的是 127.0.0.1,操作系統提供了一個特殊的虛擬網卡,關聯到了這個 IP 上,環回 IP 主要是測試用的,它能夠排除網絡不通干擾因素,更好的排查代碼中的問題。
IP 協議的兩個核心功能:地址管理和路由選擇。
3. 地址管理
IP 地址是一個 32 位的整數,2^32?=> 42億9千萬
地址,理論上來說,是不應該重復的。
在以前看來,可能會覺得這個數字很大,綽綽有余,但是到了今天,能上網的設備早就超過了 42億9千萬 這個數字。
那么如何解決 IP 地址不夠用的問題呢?
1) 動態分配
你要上網才給你分配 ip,不上網就不分配 ip。但是這個方案,指標不治本,提高了 ip 地址的利用率,并沒有增加 ip 的數量。
2) NAT 機制 (網絡地址轉換)
本質上是讓一個 ip 地址,代表一批設備。
把 IP 地址分為兩個大類:
1. 內網 IP (局域網 IP)
如果一個地址,是以 10.* 或者 172.16.*? -? 172.31.* 或者 192.168.* 開頭的,那么這個 ip 就是內網 ip。
同一個局域網內部,內網 IP 不能重復。不同的局域網之間,內網 IP 之間,可以重復。
2. 外網 IP (廣域網 IP)
剩下的 ip 就是外網 ip。
外網 ip 則始終都不允許重復,只能唯一。
當前情況下,通常都是一個小區/一個學校/一個公司,構成一個大的局域網,這個局域網中可能就有幾千個,上萬個設備,這樣的局域網,就使用一個外網 ip 即可。
那么 NAT 機制具體是怎么工作的呢?
如圖:
如果當前局域網內,有多個主機,都訪問同一個網站服務器,此時服務器返回的響應經過路由器之后,要交還給哪個主機呢?
如圖:
如果同一時間,同一局域網,并且是相同的端口的主機同時請求同一服務器的話:
當前的網絡環境,就是以 NAT + 動態分配的方式來解決 IP 地址不夠用的問題的。
NAT 機制,最大的優勢是:"純軟件的方案"。
也正是因為這個機制,局域網內部的設備,能夠主動訪問外網的設備,外網的設備無法主動訪問局域網內部的設備,這個局限性也不是壞事,能夠很好保護我們的設備。
3) IPv6
IPv6 使用 16 個字節來表示 IP 地址,這個就從根本上解決了 IP 地址不夠用的問題。
2^8^16 = 2^128 = 2^32 * 2^32 * 2^32 * 2^32 = 42 億的四次方,最終的結果是個天文數字。
這個數字大到可以給地球上的每一粒沙子都分配一個不同的 ip 地址,還綽綽有余。
但是,IPv6 的普及程度,是比較低的。
IPv6 最大的問題是和 IPv4 不兼容,想要支持 IPv6 就得換設備,要花錢,可是花了錢,網速上也不會有提升,所以就沒人樂意主動升級 IPv6,但是我國是 IPv6 普及程度最高的國家,因為國家大力推進支持升級 IPv6,現在近幾年裝的寬帶,都是主動送你支持 IPv6 的路由器的。
4. 路由選擇
路由選擇,就是描述了 IP 協議(IP 數據報) 的轉發過程。
從 A 到 B,中間有很多條路徑可以走。
進行數據包轉發的時候,每個路由器都是無法知道網絡的 "全貌" 的,只知道一些局部信息(一個路由器能知道哪些設備和它自己是相連的),這就意味著,IP 數據在轉發過程中,是一個 "探索式", "啟發式" 的過程,這個過程很難給出最優解,只能是較優解。
一個網絡層的數據報,每次到達一個路由器,都會進行 "問路"。
每個路由器都有一個數據結構 "路由表"(路由表內容可以手動配置,也可以自動獲取),根據數據報中的目的 IP,來查詢路由表,如果查到了(相當于問路人,路人知道怎么走),就直接按照路由表給定的方向(從哪個網絡接口進行轉發),繼續轉發就行了,如果沒查到(問路人,路人也不知道怎么走),路由表里面有一個 "默認的表項" (下一個地址),按照默認的表項轉發即可。