先獻上幾個梗
-
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
參考
- 趣談網絡協定