天天看點

重學計算機網絡(二) - 曾記否,查IP位址2 無類型域間選路(CIDR)3 公/私有IP位址4 一個容易“犯錯”的CIDR5 MAC位址6 網絡裝置的狀态辨別7 總結參考

先獻上幾個梗

  • 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

參考

  • 趣談網絡協定

繼續閱讀