當(dāng)面試聽(tīng)到這個(gè)問(wèn)題的時(shí)候,面試者常常會(huì)覺(jué)得走錯(cuò)了房間 。我面試的是技術(shù)崗位?。?怎么問(wèn)這么簡(jiǎn)單的問(wèn)題?的確,即便沒(méi)有專(zhuān)業(yè)學(xué)過(guò)計(jì)算機(jī)的人,只要倒騰過(guò)電腦,重裝過(guò)系統(tǒng),大多也會(huì)知道這個(gè)問(wèn)題的答案:在 Windows 上是 ipconfig,在 Linux 上是 ifconfig 。
那你知道在 Linux 上還有什么其他命令可以查看 IP 地址嗎?答案是 ip addr 。如果回答不上來(lái)這個(gè)問(wèn)題,那你可能沒(méi)怎么用過(guò) Linux 。
那你知道 ifconfig 和 ip addr 的區(qū)別嗎?這是一個(gè)有關(guān) net-tools 和 iproute2 的“歷史”故事 。想象一下,你登錄進(jìn)入一個(gè)被裁剪過(guò)的非常小的 Linux 系統(tǒng)中,發(fā)現(xiàn)既沒(méi)有 ifconfig 命令,也沒(méi)有 ipaddr 命令 , 你是不是感覺(jué)這個(gè)系統(tǒng)壓根兒沒(méi)法用?這個(gè)時(shí)候,你可以自行安裝 net-tools 和 iproute2這兩個(gè)工具 。當(dāng)然,大多數(shù)時(shí)候這兩個(gè)命令是系統(tǒng)自帶的 。
安裝好后,我們來(lái)運(yùn)行一下 ip addr 。不出意外,應(yīng)該會(huì)輸出下面的內(nèi)容 。
root@test:~# ip addr1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group defaultlink/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope hostvalid_lft forever preferred_lft forever2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ffinet 10.100.122.2/24 brd 10.100.122.255 scope global eth0valid_lft forever preferred_lft foreverinet6 fe80::f816:3eff:fec7:7975/64 scope linkvalid_lft forever preferred_lft forever這個(gè)命令顯示了這臺(tái)機(jī)器上所有的網(wǎng)卡 。大部分的網(wǎng)卡都會(huì)有一個(gè) IP 地址,當(dāng)然,這不是必須的 。在后面的分享中,我們會(huì)遇到?jīng)]有 IP 地址的情況 。IP 地址是一個(gè)網(wǎng)卡在網(wǎng)絡(luò)世界的通訊地址,相當(dāng)于我們現(xiàn)實(shí)世界的門(mén)牌號(hào)碼 。既然是門(mén)牌號(hào)碼,不能大家都一樣,不然就會(huì)起沖突 。比方說(shuō),假如大家都叫六單元 1001 號(hào),那快遞就找不到地方了 。所以,有時(shí)候咱們的電腦彈出網(wǎng)絡(luò)地址沖突,出現(xiàn)上不去網(wǎng)的情況,多半是 IP 地址沖突了 。
如上輸出的結(jié)果,10.100.122.2 就是一個(gè) IP 地址 。這個(gè)地址被「點(diǎn)分隔為四個(gè)部分」,每個(gè)部分 「8 個(gè) bit」,所以 IP 地址總共是 「32 位」 。這樣產(chǎn)生的 IP 地址的數(shù)量很快就不夠用了 。因?yàn)楫?dāng)時(shí)設(shè)計(jì) IP 地址的時(shí)候,哪知道今天會(huì)有這么多的計(jì)算機(jī)?。∫蛭?還揮?nbsp;, 于是就有了 IPv6 , 也就是上面輸出結(jié)果里面 inet6 fe80::f816:3eff:fec7:7975/64 。這個(gè)有 128 位 , 現(xiàn)在看來(lái)是夠了,但是未來(lái)的事情誰(shuí)知道呢?
本來(lái) 32 位的 IP 地址就不夠,還被分成了 5 類(lèi) 。現(xiàn)在想想,當(dāng)時(shí)分配地址的時(shí)候,真是太奢侈了 。

文章插圖
在網(wǎng)絡(luò)地址中,至少在當(dāng)時(shí)設(shè)計(jì)的時(shí)候,對(duì)于 A、B、 C 類(lèi)主要分兩部分 , 前面一部分是網(wǎng)絡(luò)號(hào),后面一部分是主機(jī)號(hào) 。這很好理解,大家都是六單元 1001 號(hào),我是小區(qū) A 的六單元 1001 號(hào),而你是小區(qū)B 的六單元 1001 號(hào) 。
下面這個(gè)表格,詳細(xì)地展示了 A、B、C 三類(lèi)地址所能包含的主機(jī)的數(shù)量 。在后文中,我也會(huì)多次借助這個(gè)表格來(lái)講解 。

文章插圖
這里面有個(gè)尷尬的事情,就是 C 類(lèi)地址能包含的最大主機(jī)數(shù)量實(shí)在太少了 , 「只有 254 個(gè)」 。當(dāng)時(shí)設(shè)計(jì)的時(shí)候恐怕沒(méi)想到 , 現(xiàn)在估計(jì)一個(gè)網(wǎng)吧都不夠用吧 。而 B 類(lèi)地址能包含的最大主機(jī)數(shù)量又太多了 。6 萬(wàn)多臺(tái)機(jī)器放在一個(gè)網(wǎng)絡(luò)下面,一般的企業(yè)基本達(dá)不到這個(gè)規(guī)模,閑著的地址就是浪費(fèi) 。
無(wú)類(lèi)型域間選路(CIDR)于是有了一個(gè)折中的方式叫作「無(wú)類(lèi)型域間選路」,簡(jiǎn)稱(chēng)「CIDR」 。這種方式打破了原來(lái)設(shè)計(jì)的幾類(lèi)地址的做法,將 32 位的 IP 地址一分為二,「前面是網(wǎng)絡(luò)號(hào),后面是主機(jī)號(hào)」 。從哪里分呢?你如果注意觀察的話可以看到,10.100.122.2/24,這個(gè) IP 地址中有一個(gè)斜杠,斜杠后面有個(gè)數(shù)字 24 。這種地址表示形式,就是 CIDR 。后面 24 的意思是,32 位中,前 24 位是網(wǎng)絡(luò)號(hào),后 8 位是主機(jī)號(hào) 。
伴隨著 CIDR 存在的 , 一個(gè)是「廣播地址」,10.100.122.255 。如果發(fā)送這個(gè)地址,所有 10.100.122 網(wǎng)絡(luò)里面的機(jī)器都可以收到 。另一個(gè)是子網(wǎng)掩碼,255.255.255.0 。將子網(wǎng)掩碼和 IP 地址進(jìn)行 AND 計(jì)算 。前面三個(gè) 255,轉(zhuǎn)成二進(jìn)制都是 1 。1 和任何數(shù)值取 AND,都是原來(lái)數(shù)值 , 因而前三個(gè)數(shù)不變,為 10.100.122 。后面一個(gè) 0,轉(zhuǎn)換成二進(jìn)制是 0,0 和任何數(shù)值取AND , 都是 0,因而最后一個(gè)數(shù)變?yōu)?0,合起來(lái)就是 10.100.122.0 。這就是「網(wǎng)絡(luò)號(hào)」 。將子網(wǎng)掩碼和 IP地址「按位計(jì)算 AND」 , 就可得到網(wǎng)絡(luò)號(hào) 。
公有 IP 地址和私有 IP 地址在日常的工作中,幾乎不用劃分 A 類(lèi)、B 類(lèi)或者 C 類(lèi),所以時(shí)間長(zhǎng)了,很多人就忘記了這個(gè)分類(lèi),而只記得 CIDR 。但是有一點(diǎn)還是要注意的,就是公有 IP 地址和私有 IP 地址 。

文章插圖
我們繼續(xù)看上面的表格 。表格最右列是私有 IP 地址段 。平時(shí)我們看到的數(shù)據(jù)中心里,辦公室、家里或?qū)W校的 IP 地址,一般都是私有 IP 地址段 。因?yàn)檫@些地址允許組織內(nèi)部的 IT 人員自己管理、自己分配 , 而且可以重復(fù) 。因此 , 你學(xué)校的某個(gè)私有 IP 地址段和我學(xué)校的可以是一樣的 。這就像每個(gè)小區(qū)有自己的樓編號(hào)和門(mén)牌號(hào),你們小區(qū)可以叫 6 棟,我們小區(qū)也叫 6 棟,沒(méi)有任何問(wèn)題 。但是一旦出了小區(qū) , 就需要使用公有 IP 地址 。就像人民路 888 號(hào) , 是國(guó)家統(tǒng)一分配的 , 不能兩個(gè)小區(qū) 都叫人民路 888 號(hào) 。
「公有 IP 地址有個(gè)組織統(tǒng)一分配」,你需要去買(mǎi) 。如果你搭建一個(gè)網(wǎng)站,給你學(xué)校的人使用,讓你們學(xué)校的IT 人員給你一個(gè) IP 地址就行 。但是假如你要做一個(gè)類(lèi)似網(wǎng)易 163 這樣的網(wǎng)站,就需要有公有 IP 地址 , 這樣全世界的人才能訪問(wèn) 。
表格中的 192.168.0.x 是最常用的私有 IP 地址 。你家里有 Wi-Fi,對(duì)應(yīng)就會(huì)有一個(gè) IP 地址 。一般你家里地上網(wǎng)設(shè)備不會(huì)超過(guò) 256 個(gè),所以 /24 基本就夠了 。有時(shí)候我們也能見(jiàn)到 /16 的 CIDR,這兩種是最常見(jiàn)的,也是最容易理解的 。
不需要將十進(jìn)制轉(zhuǎn)換為二進(jìn)制 32 位,就能明顯看出 192.168.0 是網(wǎng)絡(luò)號(hào),后面是主機(jī)號(hào) 。而整個(gè)網(wǎng)絡(luò)里面的第一個(gè)地址 192.168.0.1,往往就是你這個(gè)私有網(wǎng)絡(luò)的出口地址 。例如,你家里的電腦連接 Wi-Fi , Wi-Fi 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是廣播地址 。一旦發(fā)送這個(gè)地址,整個(gè)192.168.0 網(wǎng)絡(luò)里面的所有機(jī)器都能收到 。但是也不總都是這樣的情況 。因此,其他情況往往就會(huì)很難理解 , 還容易出錯(cuò) 。
舉例:一個(gè)容易“犯錯(cuò)”的 CIDR我們來(lái)看 16.158.165.91/22 這個(gè) CIDR 。求一下這個(gè)網(wǎng)絡(luò)的第一個(gè)地址、子網(wǎng)掩碼和廣播地址 。
你要是上來(lái)就寫(xiě) 16.158.165.1,那就「大錯(cuò)特錯(cuò)」了 。
/22 不是 8 的整數(shù)倍,不好辦,只能先變成二進(jìn)制來(lái)看 。16.158 的部分不會(huì)動(dòng),它占了前 16 位 。中間的 165,變?yōu)槎M(jìn)制為 10100101。除了前面的 16 位 , 還剩 6 位 。所以,這 8 位中前 6 位是網(wǎng)絡(luò)號(hào),16.158.<101001>,而<01>.91 是機(jī)器號(hào) 。
第一個(gè)地址是 16.158.<101001><00>.1 , 即 16.158.164.1 。子網(wǎng)掩碼是 255.255.<111111><00>.0,即 255.255.252.0 。廣播地址為 16.158.<101001><11>.255,即 16.158.167.255 。
這五類(lèi)地址中,還有一類(lèi) 「D 類(lèi)是組播地址」 。使用這一類(lèi)地址 , 屬于某個(gè)組的機(jī)器都能收到 。這有點(diǎn)類(lèi)似在公司里面大家都加入了一個(gè)郵件組 。發(fā)送郵件,加入這個(gè)組的都能收到 。組播地址在后面講述 VXLAN協(xié)議的時(shí)候會(huì)提到 。
講了這么多 , 才講了上面的輸出結(jié)果中很小的一部分,是不是覺(jué)得原來(lái)并沒(méi)有真的理解 ip addr 呢?我們接著來(lái)分析 。
在 IP 地址的后面有個(gè) 「scope」,對(duì)于 eth0 這張網(wǎng)卡來(lái)講 , 是 global,說(shuō)明這張網(wǎng)卡是可以對(duì)外的,可以接收來(lái)自各個(gè)地方的包 。對(duì)于 lo 來(lái)講,是 host , 說(shuō)明這張網(wǎng)卡僅僅可以供本機(jī)相互通信 。
lo 全稱(chēng)是「loopback」,又稱(chēng)環(huán)回接口,往往會(huì)被分配到 127.0.0.1 這個(gè)地址 。這個(gè)地址用于本機(jī)通信,經(jīng)過(guò)內(nèi)核處理后直接返回,不會(huì)在任何網(wǎng)絡(luò)中出現(xiàn) 。
MAC 地址在 IP 地址的上一行是 link/ether 「fa:16:3e:c7:79:75」 brd ff:ff:ff:ff:ff:ff,這個(gè)被稱(chēng)為「MAC 地址」 , 是一個(gè)網(wǎng)卡的「物理地址」,用「十六進(jìn)制」,6 個(gè) byte 表示 。
MAC 地址是一個(gè)很容易讓人“誤解”的地址 。因?yàn)?MAC 地址號(hào)稱(chēng)全局唯一,不會(huì)有兩個(gè)網(wǎng)卡有相同的 MAC 地址,而且網(wǎng)卡自生產(chǎn)出來(lái),就帶著這個(gè)地址 。很多人看到這里就會(huì)想 , 既然這樣,整個(gè)互聯(lián)網(wǎng)的通信,全部用 MAC 地址好了,只要知道了對(duì)方的 MAC 地址 , 就可以把信息傳過(guò)去 。
這樣當(dāng)然是不行的 。一個(gè)網(wǎng)絡(luò)包要從一個(gè)地方傳到另一個(gè)地方,除了要有確定的地址,還需要有定位功能 。而有門(mén)牌號(hào)碼屬性的 IP 地址,才是有遠(yuǎn)程定位功能的 。
例如,你去杭州市網(wǎng)商路 599 號(hào) B 樓 6 層找劉超,你在路上問(wèn)路,可能被問(wèn)的人不知道 B 樓是哪個(gè) , 但是可以給你指網(wǎng)商路怎么去 。但是如果你問(wèn)一個(gè)人,你知道這個(gè)身份證號(hào)的人在哪里嗎?可想而知,沒(méi)有人知道 。
MAC 地址更像是「身份證」 , 是一個(gè)唯一的標(biāo)識(shí) 。它的唯一性設(shè)計(jì)是為了組網(wǎng)的時(shí)候,不同的網(wǎng)卡放在一個(gè)網(wǎng)絡(luò)里面的時(shí)候,可以不用擔(dān)心沖突 。從硬件角度 , 保證不同的網(wǎng)卡有不同的標(biāo)識(shí) 。
「MAC 地址是有一定定位功能的,只不過(guò)范圍非常有限」 。你可以根據(jù) IP 地址,找到杭州市網(wǎng)商路 599 號(hào)B 樓 6 層 , 但是依然找不到我,你就可以靠吼了,大聲喊身份證 XXXX 的是哪位?我聽(tīng)到了 , 我就會(huì)站起來(lái)說(shuō),是我啊 。但是如果你在上海,到處喊身份證 XXXX 的是哪位,我不在現(xiàn)?。?比徊換嶧卮? ,因?yàn)槲以诤贾莶辉谏虾?。
所以 , 「MAC 地址的通信范圍比較小,局限在一個(gè)子網(wǎng)里面」 。例如 , 從 192.168.0.2/24 訪問(wèn) 192.168.0.3/24 是可以用 MAC 地址的 。一旦跨子網(wǎng),即從 192.168.0.2/24 到 192.168.1.2/24,MAC地址就不行了,需要 IP 地址起作用了 。
網(wǎng)絡(luò)設(shè)備的狀態(tài)標(biāo)識(shí)解析完了 MAC 地址 , 我們?cè)賮?lái)看 < BROADCAST,MULTICAST,UP,LOWER_UP >是干什么的?這個(gè)叫作net_device flags , 網(wǎng)絡(luò)設(shè)備的狀態(tài)標(biāo)識(shí) 。
「UP」 表示網(wǎng)卡處于「啟動(dòng)」的狀態(tài);「BROADCAST」 表示這個(gè)網(wǎng)卡有「廣播地址」,可以發(fā)送廣播包;MULTICAST表示網(wǎng)卡可以發(fā)送多播包;LOWER_UP 表示 L1 是啟動(dòng)的,也即網(wǎng)線插著呢 。
「MTU1500」 是指什么意思呢?是哪一層的概念呢?「最大傳輸單元 MTU 為 1500」,這是以太網(wǎng)的默認(rèn)值 。上一節(jié),我們講過(guò)網(wǎng)絡(luò)包是層層封裝的 。「MTU 是二層 MAC 層的概念」 。MAC 層有 MAC 的頭,以太網(wǎng)規(guī)定連 MAC 頭帶正文合起來(lái),不允許超過(guò) 1500 個(gè)字節(jié) 。正文里面有 IP 的頭、TCP 的頭、HTTP 的頭 。如果放不下,就需要分片來(lái)傳輸 。
qdisc pfifo_fast 是什么意思呢?qdisc 全稱(chēng)是queueing discipline , 中文叫排隊(duì)規(guī)則 。內(nèi)核如果需要通過(guò)某個(gè)網(wǎng)絡(luò)接口發(fā)送數(shù)據(jù)包,它都需要按照為這個(gè)接口配置的 qdisc(排隊(duì)規(guī)則)把數(shù)據(jù)包加入隊(duì)列 。
最簡(jiǎn)單的 qdisc 是 pfifo,它不對(duì)進(jìn)入的數(shù)據(jù)包做任何的處理,數(shù)據(jù)包采用先入先出的方式通過(guò)隊(duì)列 。pfifo_fast 稍微復(fù)雜一些,它的隊(duì)列包括三個(gè)波段(band) 。在每個(gè)波段里面,使用先進(jìn)先出規(guī)則 。三個(gè)波段(band)的優(yōu)先級(jí)也不相同 。band 0 的優(yōu)先級(jí)最高,band 2 的最低 。如果 band 0 里面有數(shù)據(jù)包,系統(tǒng)就不會(huì)處理 band 1 里面的數(shù)據(jù)包,band 1 和 band 2 之間也是一樣 。數(shù)據(jù)包是按照「服務(wù)類(lèi)型」(Type of Service,TOS)被分配多三個(gè)波段(band)里面的 。TOS 是 IP 頭里面的一個(gè)字段,代表了當(dāng)前的包是高優(yōu)先級(jí)的,還是低優(yōu)先級(jí)的 。
隊(duì)列是個(gè)好東西,后面我們講云計(jì)算中的網(wǎng)絡(luò)的時(shí)候,會(huì)有很多用戶共享一個(gè)網(wǎng)絡(luò)出口的情況,這個(gè)時(shí)候如何排隊(duì),每個(gè)隊(duì)列有多粗,隊(duì)列處理速度應(yīng)該怎么提升,我都會(huì)詳細(xì)為你講解 。
小結(jié)【你知道怎么查看 IP 地址嗎?】怎么樣,看起來(lái)很簡(jiǎn)單的一個(gè)命令,里面學(xué)問(wèn)很大吧?通過(guò)這一節(jié),希望你能記住以下的知識(shí)點(diǎn),后面都能用得上:
IP 是地址,有「定位功能」;MAC 是身份證,無(wú)定位功能;CIDR 可以用來(lái)判斷是不是本地人;IP 分「公有」的 IP 和「私有」的 IP 。后面的章節(jié)中我會(huì)談到“出國(guó)門(mén)”,就與這個(gè)有關(guān) 。
- 常見(jiàn)的十種表面處理方法,你知道幾種?
- CAD新手如何設(shè)置圖層?怎么設(shè)置CAD中的圖層
- 怎么設(shè)置AP上網(wǎng)??jī)煞N方式概括得很全面
- 電腦開(kāi)機(jī)啟動(dòng)項(xiàng)應(yīng)該怎么設(shè)置合適?
- 無(wú)線路由器怎么設(shè)置 wifi
- 蘆薈爆盆太多了怎么辦 蘆薈怎么分枝移盆
- ?玻璃擦吸住了怎么打開(kāi)
- 新車(chē)?yán)锏募兹┰趺慈コ?新車(chē)?yán)镉屑兹┰趺慈コ兜?
- 新車(chē)?yán)镉挟愇对趺慈コ钫?新車(chē)?yán)镉挟愇对趺慈コ∶钫?
- 冰箱有異味該怎么辦 請(qǐng)問(wèn)冰箱有異味怎樣處理
