重學計算機網路(二) - 曾記否,查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
參考
- 趣談網路協議