這要從 TCP/IP 協(xié)議說起,互聯(lián)網(wǎng)使用的是 TCP/IP 協(xié)議,其中 IP 協(xié)議又是最重要的協(xié)議之一。IP 協(xié)議是基于 IP 地址將數(shù)據(jù)包發(fā)送給目的主機,能夠讓互聯(lián)網(wǎng)上任何兩臺主機進(jìn)行通信。 IP 協(xié)議位于 OSI 參考模型的第三層,即網(wǎng)絡(luò)層。 網(wǎng)絡(luò)層的主要作用是實現(xiàn)終端節(jié)點之間的通信。這種終端節(jié)點之間的通信,也叫點對點通信。
數(shù)據(jù)如何傳輸?shù)侥康牡兀?/span>數(shù)據(jù)鏈路層實現(xiàn)兩個直連設(shè)備之間的數(shù)據(jù)傳輸,網(wǎng)絡(luò)層的 IP 協(xié)議實現(xiàn)沒有直連的兩個網(wǎng)絡(luò)之間的數(shù)據(jù)傳輸。 以旅行為例,小美要去一個很遠(yuǎn)的地方旅行,先計劃要乘坐的高鐵、地鐵、公交車,并且購買相應(yīng)車票,再制定一個詳細(xì)行程表,記錄乘車時間。 高鐵票、地鐵票只能在一個區(qū)間內(nèi)移動,就像網(wǎng)絡(luò)上的數(shù)據(jù)鏈路。出發(fā)點就像源 MAC 地址,目的地就像目的 MAC 地址,整個行程表的作用就相當(dāng)于網(wǎng)絡(luò)層,出發(fā)點就像源 IP 地址,目的地就像目的 IP 地址。 小美如果只有行程表,沒有車票,就無法乘坐交通工具到達(dá)目的地。相反,小美只有車票,不知道坐什么車,在哪里換乘,恐怕也到不了目的地。只有兩者兼?zhèn)?,既有某個區(qū)間的車票又有整個旅行的行程表,才能保證到達(dá)目的地。網(wǎng)絡(luò)中也需要數(shù)據(jù)鏈路層和網(wǎng)絡(luò)層協(xié)同工作,才能實現(xiàn)最終目的地址的通信。 IP 地址的基礎(chǔ)知識在 TCP/IP 通信中使用 IP 地址識別主機和路由器。IP 地址是邏輯地址,需要手工配置或自動獲取,為了保證正常通信,每個設(shè)備必須配置 IP 地址。 IP 地址的定義IP 地址由 32 位二進(jìn)制數(shù)組成。為了方便記錄,將 32 位的 IP 地址分為 4 組,每 8 位為一組,每組以“ . ”隔開,再將每組數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)。
通過 Windows 系統(tǒng)自帶的計算器,選擇程序員,可實現(xiàn)二進(jìn)制和十進(jìn)制的快速轉(zhuǎn)換。默認(rèn)十進(jìn)制(“ DEC ”)輸入,單擊“ BIN ”切換成二進(jìn)制輸入。同步顯示十六進(jìn)制、十進(jìn)制、八進(jìn)制和二進(jìn)制的數(shù)值。
將 IP 地址的32位二進(jìn)制進(jìn)行計算,得出約 43 億個 IP 地址。 使用 Windows 系統(tǒng)自帶計算機,選擇科學(xué)模式,可快速進(jìn)行次方計算。 實際上,網(wǎng)絡(luò)的發(fā)展超乎想象,互聯(lián)網(wǎng)上的設(shè)備遠(yuǎn)超 43 億, 2019 年 11 月 25 日全球的 IPv4 地址已經(jīng)徹底耗盡,但是直到現(xiàn)在大家仍然還在用 IPv4 ,并沒有因為地址沒了而無法上網(wǎng)。是因為除了 IPv6 之外,我們使用 NAT 技術(shù)緩解了地址不足的問題。這篇文章里的 IP 全是指的 IPv4 ,非 IPv6 。 IP 地址的組成IP 地址由網(wǎng)絡(luò)號(網(wǎng)段地址)和主機號(主機地址)兩部分組成。 網(wǎng)絡(luò)號是設(shè)備所在區(qū)域的一種標(biāo)識,網(wǎng)絡(luò)號相同的設(shè)備位于同一個網(wǎng)段內(nèi),網(wǎng)絡(luò)號不同的設(shè)備通過路由器實現(xiàn)通信。主機號是在同一個網(wǎng)段中不同設(shè)備的標(biāo)識,不允許同一個網(wǎng)段內(nèi)出現(xiàn)重復(fù)的主機號。 路由器是根據(jù)目的 IP 地址的網(wǎng)絡(luò)號進(jìn)行路由。 那么 IP 地址哪幾位是網(wǎng)絡(luò)號?哪幾位是主機號?早期是以分類地址區(qū)分,現(xiàn)在是以子網(wǎng)掩碼區(qū)分。 IP 地址的分類IP 地址分為四類,分別是 A 類、 B 類、 C 類、 D 類(還有一個保留的 E 類)。
A 類 IP 地址是首位以“ 0 ”開頭的地址。從第 1 位到第 8 位是它的網(wǎng)絡(luò)號,網(wǎng)絡(luò)號的范圍是 后 24 位是主機號,一個 A 類地址的主機地址數(shù)量就是 2 的 24 次方,即 16777216 個主機地址。
B 類 IP 地址是前兩位以“ 10 ”開頭的地址。從第 1 位到第 16 位是它的網(wǎng)絡(luò)號,網(wǎng)絡(luò)號的范圍是 后 16 位是主機號,一個 B 類地址的主機地址的數(shù)量就是 2 的 16 次方,即 65536 個主機地址。
C 類 IP 地址是前三位以“ 110 ”開頭的地址。從第 1 位到第 24 位是它的網(wǎng)絡(luò)號,網(wǎng)絡(luò)號的范圍是 后 8 位是主機號,一個 C 類地址的主機地址的數(shù)量就是 2 的 8 次方,即 256 個主機地址。
D 類 IP 地址是前四位以“ 1110 ”開頭的地址。從第 1 位到第 32 位是它的網(wǎng)絡(luò)號,網(wǎng)絡(luò)號的范圍是
當(dāng)主機號全為 0 時,表示的是網(wǎng)段地址,非主機地址。當(dāng)主機號全為 1 時是廣播地址,也不是主機地址。因此在分配 IP 地址過程中,需要排除這兩個地址。例如一個 C 類地址 廣播地址IP 地址中的主機號全部為 1 的就是廣播地址,它是向同一個網(wǎng)段中的所有主機發(fā)送數(shù)據(jù)包。例如一個 B 類主機地址 IP 組播組播用于將包發(fā)送給特定組內(nèi)的所有主機。 組播使用 D 類地址。因此 IP 地址前四位是“ 1110 ”開頭的,就是組播地址。剩下的 28 位就是組播的組編號。組播的地址范圍是 子網(wǎng)掩碼早期網(wǎng)絡(luò)地址采用固定網(wǎng)絡(luò)位長度的方式,使 IPv4 地址遭到大量浪費。如今網(wǎng)段地址的長度可變,同時也需要一種標(biāo)識來獲取網(wǎng)段地址,以便路由器對數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā),這種識別碼就是子網(wǎng)掩碼。 子網(wǎng)掩碼用 32 位的二進(jìn)制表示, IP 地址的網(wǎng)段地址部分設(shè)置為 1 , IP 地址的主機地址部分設(shè)置為 0 。換句話說, IP 地址有多少位網(wǎng)段地址,子網(wǎng)掩碼就有多少位取 1 ,其余都取 0 。為了方便記錄,每 8 位為一組,以“ . ”隔開,再轉(zhuǎn)換為十進(jìn)制數(shù)。 例如: 將子網(wǎng)掩碼和 IP 地址進(jìn)行與( AND )運算,可得到這個 IP 地址的網(wǎng)段地址。
IP 地址和子網(wǎng)掩碼的二進(jìn)制數(shù),逐位進(jìn)行計算。只有當(dāng) IP 地址和掩碼都是 1 時,運算結(jié)果為 1 。其余情況計算結(jié)果都為 0 。 Windows 系統(tǒng)自帶計算機也可以進(jìn)行二進(jìn)制與運算。 IP 地址的另一種表示方式是在每個 IP 地址后面追加網(wǎng)絡(luò)號的位數(shù)用“ / ”隔開。例如: CIDR 與 VLSM解決 IP 地址浪費問題,除了使用子網(wǎng)掩碼,還使用了 CIDR 和 VLSM 技術(shù)。 CIDR ,即無類域間路由,采用任意長度分割 IP 地址的網(wǎng)絡(luò)號和主機號。它有兩個作用:
VLSM ,即可變長子網(wǎng)掩碼,它可以對 A 、 B 、 C 類地址再進(jìn)行子網(wǎng)劃分,以達(dá)到充分利用 IP 地址的目的。 假如一家企業(yè)有 100 臺電腦,按以前的辦法,只能分配一個 C 類地址
CIDR 是主機號向網(wǎng)絡(luò)號借位,目的是把幾個網(wǎng)絡(luò)匯總成一個大的網(wǎng)絡(luò),增加子網(wǎng)主機數(shù)量; VLSM 是網(wǎng)絡(luò)號向主機號借位,目的是把一個標(biāo)準(zhǔn)的網(wǎng)絡(luò)劃分成幾個子網(wǎng),減少子網(wǎng)主機數(shù)量。 公網(wǎng)地址與私有地址IP 地址分為公網(wǎng)地址和私有地址。公網(wǎng)地址是在互聯(lián)網(wǎng)上使用的,私有地址是在局域網(wǎng)中使用的。 公網(wǎng)地址由 Internet NIC 負(fù)責(zé)分配,通過它直接訪問互聯(lián)網(wǎng)。 私有地址是一段保留的 IP 地址。只在局域網(wǎng)中使用,無法在互聯(lián)網(wǎng)上使用。但是私有地址可以通過 NAT 技術(shù),將私有地址轉(zhuǎn)換為公網(wǎng)地址接入互聯(lián)網(wǎng)。 公網(wǎng) IP 地址在互聯(lián)網(wǎng)范圍內(nèi)是唯一的,私有 IP 地址只要在同一個局域網(wǎng)內(nèi)唯一即可。在不同局域網(wǎng)內(nèi)出現(xiàn)相同的私有 IP 不會影響使用。 IP 路由IP 路由是設(shè)備根據(jù) IP 地址對數(shù)據(jù)進(jìn)行轉(zhuǎn)發(fā)的操作。當(dāng)一個數(shù)據(jù)包到達(dá)路由器時,路由器根據(jù)數(shù)據(jù)包的目的地址查詢路由表,根據(jù)查詢結(jié)果將數(shù)據(jù)包轉(zhuǎn)發(fā)出去,這個過程就是 IP 路由。
為了將數(shù)據(jù)包發(fā)給目的節(jié)點,所有節(jié)點都維護(hù)著一張路由表。路由表記錄 IP 數(shù)據(jù)在下一跳應(yīng)該發(fā)給哪個路由器。IP 包將根據(jù)這個路由表在各個數(shù)據(jù)鏈路上傳輸。 路由表的生成方式有兩種:一種是手動設(shè)置,也叫靜態(tài)路由。另一種是路由器之間通過交換信息自動刷新,也叫動態(tài)路由。
Hop ,中文叫“跳”。它是指網(wǎng)絡(luò)中的一個區(qū)間。IP 包就是在網(wǎng)絡(luò)中一跳一跳的轉(zhuǎn)發(fā),在每一個區(qū)間內(nèi)決定 IP 包下一跳的路徑。 一跳是指數(shù)據(jù)鏈路中廣播域的區(qū)間,也就是說不經(jīng)過路由器而能直接到達(dá)的相連主機或路由器網(wǎng)卡的一個區(qū)間。 IP 數(shù)據(jù)包就像包裹,而送貨車就像數(shù)據(jù)鏈路。包裹不可能自己移動,必須有送貨車承載轉(zhuǎn)運。而一輛送貨車只能將包裹送到某個區(qū)間范圍內(nèi)。每個不同區(qū)間的包裹將由對應(yīng)的送貨車承載、運輸。IP 的工作原理也是如此。 路由條目類型
默認(rèn)路由是指路由表中任何一個地址都能與之匹配的條目。所有數(shù)據(jù)包都可以使用默認(rèn)路由進(jìn)行數(shù)據(jù)轉(zhuǎn)發(fā)。默認(rèn)路由為 0.0.0.0/0 或 default 。
“ IP地址/32 ”被稱為主機路由,它是路由表中指向單個 IP 地址或主機名的路由條目。例如:192.168.153.15/32 就是一條主機路由,表示整個 IP 地址的所有位都將參與路由。
以 127 開頭的 IP 地址都是環(huán)回地址,其所在的回環(huán)接口可以理解為虛擬網(wǎng)卡。使用回環(huán)地址時,數(shù)據(jù)包會直接被主機的 IP 層獲取,而不經(jīng)過鏈路層,也不會流向網(wǎng)絡(luò)。一般用來檢查主機上運行的網(wǎng)絡(luò)服務(wù)是否正常。 路由匯總路由匯總主要是為了減少路由條目,把可以聚合的路由匯聚為一個大網(wǎng)絡(luò)。 路由表越大,查找路由表所需的內(nèi)存和 CPU 也就越多,時間也會越長,導(dǎo)致轉(zhuǎn)發(fā) IP 數(shù)據(jù)包的性能下降。如果想要搭建大規(guī)模、高性能的網(wǎng)絡(luò),就需要盡可能的路由表的大小。 IP 分片與重組數(shù)據(jù)鏈路不同, MTU 則不同每種數(shù)據(jù)鏈路的最大傳輸單元( MTU )不同,網(wǎng)絡(luò)層的 IP 是數(shù)據(jù)鏈路的上一層, IP 通過分片屏蔽數(shù)據(jù)鏈路的差異,實現(xiàn)不同數(shù)據(jù)鏈路互通。從 IP 的上一層看,它完全可以忽略各個數(shù)據(jù)鏈路上的 MTU ,只需要按照源 IP 地址發(fā)送的長度接收數(shù)據(jù)包。 IP 報文的分片與重組當(dāng)遇到 IP 數(shù)據(jù)包大于數(shù)據(jù)鏈路 MTU 時,往往無法直接發(fā)送出去,主機或路由器就會對 IP 數(shù)據(jù)包進(jìn)行分片處理。 經(jīng)過分片后的 IP 數(shù)據(jù),只會在目標(biāo)主機上進(jìn)行重組,中途經(jīng)過路由器時不會進(jìn)行重組。 路徑MTU發(fā)現(xiàn)分片機制有兩點不足:
為了解決這個問題,要使用路徑 MTU 發(fā)現(xiàn)( Path MTU Discovery )技術(shù)。路徑 MTU 是指從發(fā)送端主機到接收端主機之間不需要分片時最大 MTU 值。即路徑中存在的所有數(shù)據(jù)鏈路中最小的 MTU 。路徑 MTU 發(fā)現(xiàn)是從發(fā)送主機按照路徑 MTU 的值將數(shù)據(jù)報分片后進(jìn)行發(fā)送,避免在中途的路由器上進(jìn)行分片處理。 路徑 MTU 發(fā)現(xiàn)的工作原理如下:
上面的例子是 UDP ,如果是在 TCP 的情況下,根據(jù)路徑 MTU 的大小計算出最大段長度( MSS ),然后再根據(jù)這些信息進(jìn)行數(shù)據(jù)包的發(fā)送。因此,在 TCP 中如果使用路徑 MTU 發(fā)現(xiàn), IP 層則不會再分片。 路由器三層轉(zhuǎn)發(fā)原理路由器有多個端口,分別連接不同的數(shù)據(jù)鏈路。它通過識別目的 IP 地址的網(wǎng)絡(luò)號,再根據(jù)路由表進(jìn)行轉(zhuǎn)發(fā),路由表中有匹配的路由條目才會轉(zhuǎn)發(fā),無匹配的路由條目則直接丟棄。路由條目既可以手動設(shè)置靜態(tài)路由,也可以通過路由協(xié)議自動生成動態(tài)路由。
當(dāng)一臺路由器收到一個數(shù)據(jù)包時,會執(zhí)行如下步驟:
ARP只要確定了 IP 地址,就可以向這個目標(biāo)地址發(fā)送 IP 數(shù)據(jù)報文。但是在進(jìn)行實際通信時,還要知道每個 IP 地址所對應(yīng)的 MAC 地址。 地址解析協(xié)議,簡稱 ARP 協(xié)議。是根據(jù)目的設(shè)備的 IP 地址來查詢對應(yīng) MAC 地址的協(xié)議。 ARP 的工作原理當(dāng)主機 A 向同一個網(wǎng)段內(nèi)的主機 C 發(fā)送數(shù)據(jù),但是不知道主機 C 的 MAC 地址。
當(dāng)主機 A 向不同網(wǎng)段的主機 C 發(fā)送數(shù)據(jù),但是不知道主機 C 的 MAC 地址。
當(dāng)主機 C 向主機 A 發(fā)送回復(fù)報文時,同主機 A 向主機 C 發(fā)送數(shù)據(jù)的步驟一致。 ARP 代理如果 ARP 請求是從一個網(wǎng)絡(luò)的主機發(fā)往同一網(wǎng)段卻不在同一物理網(wǎng)絡(luò)上的另一臺主機,那么連接它們的具有代理 ARP 功能的設(shè)備就可以回答該請求,這個過程稱作代理 ARP 。 代理 ARP 功能屏蔽了分離的物理網(wǎng)絡(luò),讓用戶使用起來,跟在同一個物理網(wǎng)絡(luò)上一樣。 免費 ARP免費 ARP 是一種特殊的 ARP 請求,它并非通過 IP 找到對應(yīng)的 MAC 地址,而是當(dāng)主機啟動的時候,發(fā)送一個免費 ARP 請求,即請求自己的 IP 地址的 MAC 地址。 與普通 ARP 請求報文的區(qū)別在于報文中的目標(biāo) IP 地址。普通 ARP 報文中的目標(biāo) IP 地址是其它主機的 IP 地址;而免費 ARP 的請求報文中,目標(biāo) IP 地址是自己的 IP 地址。 免費 ARP 的作用:
ICMPIP 提供盡力而為的服務(wù),指為了把數(shù)據(jù)包發(fā)送到目的地址盡最大努力。它并不做對端目的主機是否收到數(shù)據(jù)包的驗證,無法保證服務(wù)質(zhì)量。 ICMP(互聯(lián)網(wǎng)控制消息協(xié)議)是提供這類功能的一種協(xié)議。ICMP 的主要功能包括,確認(rèn) IP 包是否成功送達(dá)目的地址,通知發(fā)送過程中 IP 包被丟棄的原因。 ICMP 報文像 TCP/UDP 一樣通過 IP 進(jìn)行傳輸,但是 ICMP 的功能不是傳輸層的補充,應(yīng)該把它當(dāng)做網(wǎng)絡(luò)層協(xié)議。 ICMP 頭部封裝字段如下圖。 通過類型字段和編碼字段的取值判斷這個 ICMP 消息的類型。常見的 ICMP 消息所對應(yīng)的類型和編碼值如下圖。 從功能上,ICMP 的消息分為兩類:一類是通知出錯原因的錯誤消息,另一類是用于診斷的查詢消息。 ping我們常用的 ping 工具就是通過 ICMP 消息測試網(wǎng)絡(luò)層連通性的。源主機發(fā)出 Echo request 消息,目的主機回應(yīng) Echo reply 消息,則兩臺主機間的網(wǎng)絡(luò)層通信正常。也可以通過 ping 命令來判斷目標(biāo)主機是否啟用。 附錄IPv4 頭部IP 提供最簡單的服務(wù):實現(xiàn)從源到目的的數(shù)據(jù)轉(zhuǎn)發(fā)。不會在傳輸數(shù)據(jù)前先與接收方建立連接,也不保證傳輸?shù)目煽啃?,它只提供盡力而為的服務(wù)。 IP 通信時傳輸?shù)氖?IP 報文, IP 報文由 IP 頭部和數(shù)據(jù)兩部分組成。IP 頭部包含控制報文轉(zhuǎn)發(fā)的必要信息。通過 IP 頭部的結(jié)構(gòu),可以對 IP 的功能有一個詳細(xì)的了解。
比特,英文名 bit ,也叫位。二進(jìn)制中最小單位,一個比特的值要么是 字節(jié),英文名 Byte 。一個字節(jié)由八個比特構(gòu)成。
參考資料: IP 基礎(chǔ)知識“全家桶”,45 張圖一套帶走 - 小林coding TCP/IP詳解 卷1:協(xié)議 - W·Richard Stevens 網(wǎng)絡(luò)基礎(chǔ) - 田果 圖解TCP/IP - 竹下隆史 end |
|