1. 程式人生 > >重學計算機網路(二) - 曾記否,查IP地址

重學計算機網路(二) - 曾記否,查IP地址

先獻上幾個梗

  • 1.1.1.1 不是測試用的,原來一直沒分配,現在被用來做一個DNS了,宣傳是比谷歌等公司的dns服務
    更保護使用者隱私。
  • IP地址255.255.255.255,代表有限廣播,它的目標是網路中的所有主機。
  • IP地址0.0.0.0,通常代表未知的源主機。當主機採用DHCP動態獲取IP地址而無法獲得合法IP地址時,會用IP地址0.0.0.0來表示源主機IP地址未知。
  • NID不能以數字127開頭。NID 127被保留給內部回送函式,作為本機迴圈測試使用。
    例如,使用命令ping 127.0.0.1測試TCP/IP協議棧是否正確安裝。在路由器中,同樣支援迴圈測試地址的使用。1 查ip
  • Windows - ipconfig
  • Linux上- ifconfig

還有--- ip addr

ifconfig & ip addr的區別

net-tools起源於BSD,自2001年起,Linux社群已經對其停止維護,而iproute2旨在取代net-tools,並提供了一些新功能。一些Linux發行版已經停止支援net-tools,只支援iproute2。

net-tools通過procfs(/proc)和ioctl系統呼叫去訪問和改變核心網路配置,而iproute2則通過netlink套接字介面與核心通訊。

net-tools中工具的名字比較雜亂,而iproute2則相對整齊和直觀,基本是ip命令加後面的子命令。

雖然取代意圖很明顯,但是這麼多年過去了,net-tool依然還在被廣泛使用,最好還是兩套命令都掌握吧。

想象你登入進入一個非常小的Linux系統,發現既沒有_ifconfig_命令,也沒有_ip addr_命令,

是不是感覺這個系統沒法用?

可以自行安裝net-tools和iproute2這兩個工具

  • 執行ip addr。不出意外,應該會輸出下面的內容

該命令顯示這臺機器上所有的網絡卡

大部分的網絡卡都有一個IP地址

IP地址是一個網絡卡在網路世界的通訊地址,相當於我們現實世界的門牌號碼

既然是門牌號,不能大家都一樣,不然就會衝突,快遞就找不到地方了

所以,有時候咱們的電腦彈出網路地址衝突,出現上不去網的情況,多半是IP地址衝突

如上輸出的結果,192.168.10.208就是一個IP地址

地址被點分隔為四個部分,每個部分8bit,總共32位

這樣產生的IP地址的數量很快就不夠用了

於是就有了IPv6,也就是上面輸出結果裡面inet6 fe80::...

這個有128位,現在看來是夠夠的

本來32位的IP地址就不夠,還被分成了5類。現在想想,當時分配地址的時候,真是太奢侈了

在網路地址中,至少在當時設計的時候,對於A、B、 C類主要分兩部分

  • 前面一部分是網路號
  • 後面一部分是主機號

這很好理解,大家都是六單元1001號

我是小區A的六單元1001號

而你是小區B的六單元1001號。

  • 下面這個表格,詳細地展示了A、B、C三類地址所能包含的主機的數量

    這裡面有個尷尬的事情,就是C類地址能包含的最大主機數量實在太少了,只有254個
    當時設計的時候恐怕沒想到,現在估計一個網咖都不夠用吧
    而B類地址能包含的最大主機數量又太多了。6萬多臺機器放在一個網路下面,一般的企業基本達不到這個規模,閒著的地址就是浪費。

2 無型別域間選路(CIDR)

這打破了原來設計的幾類地址的做法,將32位的IP地址一分為二

  • 前面是網路號
  • 後面是主機號

10.100.122.2/24,這個IP地址中有一個斜槓,斜槓後面有個數字24

這種地址表示形式,就是CIDR

後面24的意32位中前24是網路號,後8位是主機號

伴隨著CIDR存在的

  • 一個是廣播地址
    10.100.122.255 如果傳送這個地址,所有10.100.122網路裡面的機器都可以收到
  • 另一個是子網掩碼
    255.255.255.0

將子網掩碼和IP地址進行AND計算,就可得到網路號

  • 前面三個255,轉成二進位制都是1
    1和任何數值取AND,都是原來數值,因而前三個數不變,為10.100.122
  • 後面一個0,轉換成二進位制是0
    0和任何數值取AND,都是0,因而最後一個數變為0,合起來就是10.100.122.0

3 公/私有IP地址

日常工作,幾乎不用劃分A類、B類或者C類,很多人就忘記了這個分類,只記得CIDR

但是有一點還是要注意的,就是公有IP地址和私有IP地址

上面的表格。表格最右列是私有IP地址段

平時看到的資料中心裡,辦公室/家/學校的IP地址,一般都是私有IP地址段

因為這些地址允許組織內部的IT人員自己管理、分配,而且可重複

因此,你學校的某個私有IP地址段和我學校的可以是一樣的。

這就像每個小區有自己的樓編號和門牌號,你們小區可以叫6棟,我們小區也叫6棟,沒有任何問題
但是一旦出了小區,就需要使用公有IP地址。就像人民路888號,是國家統一分配的,不能兩個小區都叫人民路888號。

公有IP地址有個組織統一分配,你需要去買

如果你搭建一個網站,給你學校的人使用,讓你們學校的IT人員給你一個IP地址就行

但是假如你要做一個類似網易163這樣的網站,就需要有公有IP地址,這樣全世界的人才能訪問。

表格中的192.168.0.x是最常用的私有IP地址

你家裡有Wi-Fi,對應就會有一個IP地址。一般你家裡地上網裝置不會超過256個,所以/24基本就夠了

有時候我們也能見到/16的CIDR,這兩種是最常見的,也是最容易理解的。

不需要將十進位制轉換為二進位制32位,就能明顯看出192.168.0是網路號,後面是主機號

而整個網路裡面的第一個地址192.168.0.1,往往就是你這個私有網路的出口地址

例如,你家裡的電腦連線Wi-Fi,Wi-Fi路由器的地址就是192.168.0.1

而192.168.0.255就是廣播地址。一旦傳送這個地址,整個192.168.0網路裡面的所有機器都能收到。

但是也不總都是這樣的情況。因此,其他情況往往就會很難理解,還容易出錯。

4 一個容易“犯錯”的CIDR

我們來看16.158.165.91/22這個CIDR

求一下這個網路的第一個地址、子網掩碼和廣播地址

你要是上來就寫16.158.165.1,那就大錯特錯!!!

/22不是8的整數倍,不好辦,只能先變成二進位制來看

  • 16.158的部分不會動,它佔了前16位
  • 中間的165,變為二進位制為‭10100101‬。除了前面的16位,還剩6位。所以,這8位中前6位是網路號,16.158.<101001>,而<01>.91是機器號。

第一個地址是16.158.<101001><00>.1,即16.158.164.1

子網掩碼是255.255.<111111><00>.0,即255.255.252.0

廣播地址為16.158.<101001><11>.255,即16.158.167.255。

D類是組播地址

使用這一類地址,屬於某個組的機器都能收到

這有點類似在公司裡面大家都加入了一個郵件組。傳送郵件,加入這個組的都能收到

在IP地址的後面有個scope

  • 對於eth0這張網絡卡來講,是global,說明這張網絡卡是可以對外的,可以接收來自各個地方的包
  • 對於lo來講,是host,說明僅可以供本機相互通訊。
    lo全稱是loopback,又稱環回介面,往往會被分配到127.0.0.1這個地址
    這個地址用於本機通訊,經過核心處理後直接返回,不會在任何網路中出現。

5 MAC地址

在IP地址的上一行是link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff

這個被稱為MAC地址

是一個網絡卡的實體地址,用十六進位制,6個byte表示

MAC地址號稱全域性唯一,不會有兩個網絡卡有相同的MAC地址,而且網絡卡自生產出來,就帶著這個地址

很多人看到這裡就會想,既然這樣,整個網際網路的通訊,全部用MAC地址好了,只要知道了對方的MAC地址,就可以把資訊傳過去。

這樣當然是不行的

一個網路包要從一個地方傳到另一個地方,除了要有確定的地址,還需要有定位功能

而有門牌號碼屬性的IP地址,才是有遠端定位功能

例如,你去XX市XX路XX號X樓X層找XX,你在路上問路,可能被問的人不知道X樓是哪個,但是可以給你指網商路怎麼去
但是如果你問一個人,你知道這個身份證號的人在哪裡嗎?可想而知,沒有人知道。

MAC地址更像是身份證,是一個唯一的標識

它的唯一性設計是為了組網的時候,不同的網絡卡放在一個網路裡面的時候,可以不用擔心衝突

從硬體角度,保證不同的網絡卡有不同的標識。

MAC地址是有一定定位功能的,只不過範圍非常有限

你可以根據IP地址,找到XX市XX路XX號X樓X層,但是依然找不到我,你就可以靠吼了,大聲喊身份證XXXX的是哪位?我聽到了,我就會站起來說,是我啊
但是如果你在上海,到處喊身份證XXXX的是哪位,我不在現場,當然不會回答,因為我在杭州不在上海。

所以,MAC地址的通訊範圍比較小,侷限在一個子網裡面

例如,從192.168.0.2/24訪問192.168.0.3/24是可以用MAC地址的

一旦跨子網,即從192.168.0.2/24到192.168.1.2/24,MAC地址就不行了,需要IP地址起作用了

6 網路裝置的狀態標識

<BROADCAST,MULTICAST,UP,LOWER_UP> 叫net_device flags,網路裝置的狀態標識

  • UP
    網絡卡處於啟動的狀態
  • BROADCAST
    網絡卡有廣播地址,可以傳送廣播包
  • MULTICAST
    網絡卡可以傳送多播包
  • LOWER_UP
    L1是啟動的,也即網線插著呢
  • MTU1500
    最大傳輸單元MTU為1500,這是乙太網的預設值。

網路包是層層封裝的

MTU是二層MAC層的概念。MAC層有MAC的頭,乙太網規定連MAC頭帶正文合起來,不允許超過1500個位元組。正文裡面有IP的頭、TCP的頭、HTTP的頭。如果放不下,就需要分片來傳輸。

  • qdisc pfifo_fast (queueing discipline,排隊規則)
    核心如果需要通過某個網路介面傳送資料包,它都需要按照為這個介面配置的qdisc(排隊規則)把資料包加入佇列。

最簡單的qdisc是pfifo,它不對進入的資料包做任何的處理,資料包採用先入先出的方式通過佇列

pfifo_fast稍微複雜一些,它的佇列包括三個波段(band)。在每個波段裡面,使用先進先出規則。

三個波段(band)的優先順序也不相同。band 0的優先順序最高,band 2的最低。如果band 0裡面有資料包,系統就不會處理band 1裡面的資料包,band 1和band 2之間也是一樣。

資料包是按照服務型別(Type of Service,TOS) 被分配到三個波段(band)裡面的

TOS是IP頭裡面的一個欄位,代表了當前的包是高優先順序的,還是低優先順序的。

佇列是個好東西,後面我們講雲端計算中的網路的時候,會有很多使用者共享一個網路出口的情況,這個時候如何排隊,每個佇列有多粗,佇列處理速度應該怎麼提升,我都會詳細為你講解。

7 總結

  • IP是地址,有定位功能;MAC是身份證,無定位功能
  • CIDR可以用來判斷是不是本地人
  • IP分公有的IP和私有的IP

參考

  • 趣談網路協議