[點(diǎn)晴永久免費(fèi)OA]你真的會(huì)查看 IP 地址嗎?
ifconfig 和 ip addr 區(qū)別是…… 先來聊聊基礎(chǔ)的,你知道 ifconfig 和 ip addr 這倆的區(qū)別嗎?其實(shí)這是一個(gè)有關(guān) net-tools 和 iproute2 的“歷史”故事。 想象一下,你登錄進(jìn)入一個(gè)被裁剪過的非常小的 Linux 系統(tǒng)中,發(fā)現(xiàn)既沒有 ifconfig 命令,也沒有 ipaddr 命令,你是不是感覺這個(gè)系統(tǒng)壓根兒沒法用? 這個(gè)時(shí)候,你可以自行安裝 當(dāng)然,大多數(shù)時(shí)候這兩個(gè)命令是系統(tǒng)自帶的。 安裝好后,你來運(yùn)行一下 root@test:~# ip addr 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether fa:16:3e:c7:79:75 brd ff:ff:ff:ff:ff:ff inet 10.100.122.2/24 brd 10.100.122.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::f816:3eff:fec7:7975/64 scope link valid_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í)世界的門牌號(hào)碼。 既然是門牌號(hào)碼,不能大家都一樣,不然就會(huì)起沖突。 比方說,假如大家都叫六單元 1001 號(hào),那快遞就找不到地方了。 所以,有時(shí)候咱們的電腦彈出網(wǎng)絡(luò)地址沖突,出現(xiàn)上不去網(wǎng)的情況,多半是 IP 地址沖突了。 如上輸出的結(jié)果, 這個(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ī)??! 因?yàn)椴粔蛴茫谑蔷陀辛?IPv6,也就是上面輸出結(jié)果里面 inet6 這個(gè)有 128 位,現(xiàn)在看來是夠了,但是未來的事情誰知道呢? 本來 32 位的 IP 地址就不夠,還被分成了 5 類。 現(xiàn)在想想,當(dāng)時(shí)分配地址的時(shí)候,真是太奢侈了。 在網(wǎng)絡(luò)地址中,至少在當(dāng)時(shí)設(shè)計(jì)的時(shí)候,對(duì)于 這很好理解,大家都是六單元 1001 號(hào),我是小區(qū) A 的六單元 1001 號(hào),而你是小區(qū)B 的六單元 1001 號(hào)。 下面這個(gè)表格,詳細(xì)地展示了 A、B、C 三類地址所能包含的主機(jī)的數(shù)量。 在后文中,我也會(huì)多次借助這個(gè)表格來講解。 這里面有個(gè)尷尬的事情,就是 C 類地址能包含的最大主機(jī)數(shù)量實(shí)在太少了,只有 254 個(gè)。 當(dāng)時(shí)設(shè)計(jì)的時(shí)候恐怕沒想到,現(xiàn)在估計(jì)一個(gè)網(wǎng)吧都不夠用吧。 而 B 類地址能包含的最大主機(jī)數(shù)量又太多了。 6 萬多臺(tái)機(jī)器放在一個(gè)網(wǎng)絡(luò)下面,一般的企業(yè)基本達(dá)不到這個(gè)規(guī)模,閑著的地址就是浪費(fèi)。 無類型域間選路(CIDR) 于是有了一個(gè)折中的方式叫作「無類型域間選路」,簡(jiǎn)稱「CIDR」。 這種方式打破了原來設(shè)計(jì)的幾類地址的做法,將 32 位的 IP 地址一分為二,前面是網(wǎng)絡(luò)號(hào),后面是主機(jī)號(hào)。 從哪里分呢? 你如果注意觀察的話可以看到, 這種地址表示形式,就是 CIDR。后面 24 的意思是,32 位中,前 24 位是網(wǎng)絡(luò)號(hào),后 8 位是主機(jī)號(hào)。 伴隨著 CIDR 存在的,一個(gè)是「廣播地址」, 如果發(fā)送這個(gè)地址,所有 另一個(gè)是子網(wǎng)掩碼, 前面三個(gè) 255,轉(zhuǎn)成二進(jìn)制都是 1。 1 和任何數(shù)值取 AND,都是原來數(shù)值,因而前三個(gè)數(shù)不變,為 后面一個(gè) 0,轉(zhuǎn)換成二進(jìn)制是 0,0 和任何數(shù)值取AND,都是 0,因而最后一個(gè)數(shù)變?yōu)?0,合起來就是 這就是網(wǎng)絡(luò)號(hào)。 將子網(wǎng)掩碼和 IP地址按位計(jì)算 AND,就可得到網(wǎng)絡(luò)號(hào)。 公有 IP 地址和私有 IP 地址 在日常的工作中,幾乎不用劃分 A 類、B 類或者 C 類,所以時(shí)間長(zhǎng)了,很多人就忘記了這個(gè)分類,而只記得 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)和門牌號(hào),你們小區(qū)可以叫 6 棟,我們小區(qū)也叫 6 棟,沒有任何問題。 但是一旦出了小區(qū),就需要使用公有 IP 地址。就像人民路 888 號(hào),是國(guó)家統(tǒng)一分配的,不能兩個(gè)小區(qū) 都叫人民路 888 號(hào)。 「公有 IP 地址有個(gè)組織統(tǒng)一分配」,你需要去買。 如果你搭建一個(gè)網(wǎng)站,給你學(xué)校的人使用,讓你們學(xué)校的IT 人員給你一個(gè) IP 地址就行。 但是假如你要做一個(gè)類似網(wǎng)易 163 這樣的網(wǎng)站,就需要有公有 IP 地址,這樣全世界的人才能訪問。 表格中的 192.168.0.x 是最常用的私有 IP 地址。 你家里有 Wi-Fi,對(duì)應(yīng)就會(huì)有一個(gè) IP 地址。一般你家里地上網(wǎng)設(shè)備不會(huì)超過 256 個(gè),所以 /24 基本就夠了。 有時(shí)候你也能見到 /16 的 CIDR,這兩種是最常見的,也是最容易理解的。 不需要將十進(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ò)。 01 舉例:一個(gè)容易“犯錯(cuò)”的 CIDR 你來看 求一下這個(gè)網(wǎng)絡(luò)的第一個(gè)地址、子網(wǎng)掩碼和廣播地址。 要是上來就寫 /22 不是 8 的整數(shù)倍,不好辦,只能先變成二進(jìn)制來看。16.158 的部分不會(huì)動(dòng),它占了前 16 位。 中間的 165,變?yōu)槎M(jìn)制為 除了前面的 16 位,還剩 6 位。 所以,這 8 位中前 6 位是網(wǎng)絡(luò)號(hào), 第一個(gè)地址是 子網(wǎng)掩碼是 廣播地址為 這五類地址中,還有一類 「D 類是組播地址」。 使用這一類地址,屬于某個(gè)組的機(jī)器都能收到。這有點(diǎn)類似在公司里面大家都加入了一個(gè)郵件組。 發(fā)送郵件,加入這個(gè)組的都能收到。組播地址在后面講述 VXLAN協(xié)議的時(shí)候會(huì)提到。 講了這么多,才講了上面的輸出結(jié)果中很小的一部分,是不是覺得原來并沒有真的理解 ip addr 呢? 接著來分析。 在 IP 地址的后面有個(gè) 「scope」,對(duì)于 eth0 這張網(wǎng)卡來講,是 global,說明這張網(wǎng)卡是可以對(duì)外的,可以接收來自各個(gè)地方的包。 對(duì)于 lo 來講,是 host,說明這張網(wǎng)卡僅僅可以供本機(jī)相互通信。 lo 全稱是「loopback」,又稱環(huán)回接口,往往會(huì)被分配到 這個(gè)地址用于本機(jī)通信,經(jīng)過內(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è)被稱為「MAC 地址」; 是一個(gè)網(wǎng)卡的「物理地址」,用「十六進(jìn)制」,6 個(gè) byte 表示。 MAC 地址是一個(gè)很容易讓人“誤解”的地址。 因?yàn)?MAC 地址號(hào)稱全局唯一,不會(huì)有兩個(gè)網(wǎng)卡有相同的 MAC 地址,而且網(wǎng)卡自生產(chǎn)出來,就帶著這個(gè)地址。 很多人看到這里就會(huì)想,既然這樣,整個(gè)互聯(lián)網(wǎng)的通信,全部用 MAC 地址好了,只要知道了對(duì)方的 MAC 地址,就可以把信息傳過去。 這樣當(dāng)然是不行的。 一個(gè)網(wǎng)絡(luò)包要從一個(gè)地方傳到另一個(gè)地方,除了要有確定的地址,還需要有定位功能。 而有門牌號(hào)碼屬性的 IP 地址,才是有遠(yuǎn)程定位功能的。 例如,你去杭州市網(wǎng)商路 599 號(hào) B 樓 6 層找劉超,你在路上問路,可能被問的人不知道 B 樓是哪個(gè),但是可以給你指網(wǎng)商路怎么去。 但是如果你問一個(gè)人,你知道這個(gè)身份證號(hào)的人在哪里嗎?可想而知,沒有人知道。 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 地址是有一定定位功能的,只不過范圍非常有限。 你可以根據(jù) IP 地址,找到杭州市網(wǎng)商路 599 號(hào)B 樓 6 層,但是依然找不到我,你就可以靠吼了,大聲喊身份證 XXXX 的是哪位? 我聽到了,我就會(huì)站起來說,是我啊。 但是如果你在上海,到處喊身份證 XXXX 的是哪位,我不在現(xiàn)場(chǎng),當(dāng)然不會(huì)回答,因?yàn)槲以诤贾莶辉谏虾!?/span> 所以,MAC 地址的通信范圍比較小,局限在一個(gè)子網(wǎng)里面。 例如,從 一旦跨子網(wǎng),即從 網(wǎng)絡(luò)設(shè)備的狀態(tài)標(biāo)識(shí) 解析完了 MAC 地址,你再來看 是干什么的? 這個(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)值。 你知道的,網(wǎng)絡(luò)包是層層封裝的。 「MTU 是二層 MAC 層的概念」。 MAC 層有 MAC 的頭,以太網(wǎng)規(guī)定連 MAC 頭帶正文合起來,不允許超過 1500 個(gè)字節(jié)。 正文里面有 IP 的頭、TCP 的頭、HTTP 的頭。如果放不下,就需要分片來傳輸。
qdisc 全稱是queueing discipline,中文叫排隊(duì)規(guī)則。 內(nèi)核如果需要通過某個(gè)網(wǎng)絡(luò)接口發(fā)送數(shù)據(jù)包,它都需要按照為這個(gè)接口配置的 qdisc(排隊(duì)規(guī)則)把數(shù)據(jù)包加入隊(duì)列。 最簡(jiǎn)單的 qdisc 是 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ù)類型」(Type of Service,TOS)被分配多三個(gè)波段(band)里面的。 TOS 是 IP 頭里面的一個(gè)字段,代表了當(dāng)前的包是高優(yōu)先級(jí)的,還是低優(yōu)先級(jí)的。 ---END--- 該文章在 2023/9/11 9:25:03 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |