1. 程式人生 > 其它 >網路基礎知識學習(一)

網路基礎知識學習(一)

網路基礎知識學習(一)

ISO/OSI 7層參考模型:

網路包的格式很複雜,程式也很複雜。複雜的程式都要分層。

IP

IP查詢:

  • Windows:ipconfig
  • Linux:ifconfigip addr

輸入ip addr的輸出結果:

IP 地址是一個網絡卡在網路世界的通訊地址,例如上圖的:192.168.30.128,地址被點分隔為四個部分,每個部分8個bit所以 IP地址總共是32位,這就是我們常見的IPv4。但後來電腦越來越多,IP不夠用了後就有了IPv6,例如:fe80::20c:29ff:fea8:1506,這個有128位。

32位的IPv4被分成了5類:

可以將網路號看成是小區,主機號看成是門牌號來理解。
A、B、C三類地址所包含的主機的數量:

類別 IPd地址範圍 最大主機數 私有IP地址範圍
A 0.0.0.0-127.255.255.255 16777216(2^24-2) 10.0.0.0-10.255.255.255
B 128.0.0.0-191.255.255.255 65534(2^16-2) 172.16.0.0-172.31.255.255
C 192.0.0.0-223.255.255.255 254(2^8-2) 192.168.0.0-192.168.255.255

平時我們看到的資料中心裡,辦公室、家裡或學校的 IP 地址,一般都是私有 IP 地址段。因為這些地址允許組織內部的 IT 人員自己管理、自己分配,而且可以重複。因此,你學校的某個私有 IP 地址段和我學校的可以是一樣的。這就像每個小區有自己的樓編號和門牌號,你們小區可以叫 6 棟,我們小區也叫 6 棟,沒有任何問題。但是一旦出了小區,就需要使用公有 IP 地址。就像人民路 888 號,是國家統一分配的,不能兩個小區都叫人民路 888 號。

公有 IP 地址有個組織統一分配,你需要去買。如果你搭建一個網站,給你學校的人使用,讓你們學校的IT 人員給你一個 IP 地址就行。但是假如你要做一個類似網易 163 這樣的網站,就需要有公有 IP 地址,這樣全世界的人才能訪問。

C 類地址能包含的最大主機數量實在太少了,只有 254 個,而 B 類地址能包含的最大主機數量又太多了,6 萬多個。於是有了一個折中的方式叫作無型別域間選路,簡稱 CIDR。

無型別域間選路(CIDR)

這種方式打破了原來設計的幾類地址的做法,將32位的IP地址一分為二,前面是網路號,後面是主機號。例如10.111.111.2/24,斜槓後面有個數字24這種地址表示形式,就是CIDR。後面24的意思是32位中,前24位是網路號,後8位是主機號。
伴隨著 CIDR 存在的,一個是廣播地址,10.111.111.255(主機號最大的地址)。如果傳送這個地址,所有 10.111.111網路裡面的機器都可以收到。另一個是子網掩碼,255.255.255.0(網路號位全是1,其餘都是0)。
將子網掩碼和 IP 地址進行 AND 計算。前面三個 255,轉成二進位制都是 1。1 和任何數值取 AND,都是原來數值,因而前三個數不變,為 10.111.111。後面一個 0,轉換成二進位制是 0,0 和任何數值取AND,都是 0,因而最後一個數變為 0,合起來就是 10.111.111.0。這就是網路號。將子網掩碼和 IP 地址按位計算 AND,就可得到網路號。

表格中的 192.168.0.x 是最常用的私有 IP 地址。你家裡有 Wi-Fi,對應就會有一個 IP 地址。一般你家裡地上網裝置不會超過 256 個,所以 /24 基本就夠了。有時候我們也能見到 /16 的 CIDR,這兩種是最常見的,也是最容易理解的。

不需要將十進位制轉換為二進位制 32 位,就能明顯看出 192.168.0 是網路號,後面是主機號。而整個網路裡面的第一個地址 192.168.0.1,往往就是你這個私有網路的出口地址。例如,你家裡的電腦連線 WiFi,Wi-Fi 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是廣播地址。一旦傳送這個地址,整個192.168.0 網路裡面的所有機器都能收到。

如果網路號不是8的倍數,比如16.158.165.91/22,求這個網路的第一個地址、子網掩碼和廣播地址。很難一眼看出來,就需要將ip的換算成二進位制,再換算成10機制來計算了。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。

ip addr輸出結果中的IP地址的後面有個scope,對於ens33這張網絡卡來講,是 global,說明這張網絡卡是可以對外的,可以接收來自各個地方的包。對於 lo 來講,是 host,說明這張網絡卡僅僅可以供本機相互通訊。lo 全稱是 loopback,又稱環回介面,往往會被分配到 127.0.0.1 這個地址。這個地址用於本機通訊,經過核心處理後直接返回,不會在任何網路中出現。

MAC地址

MAC 地址,是一個網絡卡的實體地址,用十六進位制,6 個 byte 表示。例如:ip addr輸出結果中,IP地址的上一行是link/ether 00:0c:29:a8:15:06 brd ff:ff:ff:ff:ff:ff,這個就是MAC地址資訊,00:0c:29:a8:15:06就是MAC地址。每個物理網絡卡都有一個唯一的MAC地址。

既然MAC地址是唯一的,那全部都用MAC地址就好了,知道對方MAC地址就可以把資訊傳遞給對方,為什麼還要有IP?

舉一個例子:你知道你想要找的人的身份證( MAC ),你知道去哪裡找他嗎?如果你知道這人就在同一個辦公室裡面,你可以哈對方的名字,他聽到就會迴應你。但是如果要找到的人在一個城市裡面,應該就不行了吧,你還得知道對方現在的聯絡地址( ip地址 ),才可以找到對方。

所以,MAC 地址的通訊範圍比較小,侷限在一個子網裡面。例如,從 192.168.0.2/24 訪問192.168.0.3/24 是可以用 MAC 地址的。一旦跨子網,即從 192.168.0.2/24 到 192.168.1.2/24,MAC地址就不行了,需要 IP 地址起作用了。

MAC 地址更像是身份證,是一個唯一的標識。它的唯一性設計是為了組網的時候,不同的網絡卡放在一個網路裡面的時候,可以不用擔心衝突。從硬體角度,保證不同的網絡卡有不同的標識。

網路裝置的狀態標識

ip addr第一行輸出結果:ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
其中<BROADCAST,MULTICAST,UP,LOWER_UP>叫做網路裝置的狀態標識(net_device_flags).

  • BROADCAST:表示網絡卡有廣播地址
  • MULTICAST:表示網絡卡可以傳送多播包
  • UP:表示網絡卡處於啟動的狀態
  • LOWER_UP:網絡卡連線正常,就是網絡卡已經上電

mtu 1500:最大傳輸單元 MTU 為 1500,這是乙太網的預設值。
MTU 是二層 MAC 層的概念。MAC 層有 MAC 的頭,乙太網規定正文部分不允許超過 1500 個位元組。正文裡面有 IP 的頭、TCP 的頭、HTTP 的頭。如果放不下,就需要分片來傳輸。

qdisc:全稱是 queueing discipline,中文叫排隊規則。核心如果需要通過某個網路介面傳送資料包,它都需要按照為這個介面配置的 qdisc(排隊規則)把資料包加入佇列。

總結

  1. IP是地址,有定位功能,分公有IP和私有IP。
  2. CIDR可以用來判斷IP是不是同一個區域網。
  3. MAC是身份證,無定位功能,但可以有區域性小範圍通訊。

參考資料

本文來自部落格園,作者:qgdtq,轉載請註明原文連結:https://www.cnblogs.com/qgdtq/p/15350333.html