計算機網絡-IP篇


IP

基本認識

IP 在 TCP/IP 參考模型中處於第三層,也就是⽹絡層。

⽹絡層的主要作⽤是:實現主機與主機之間的通信,也叫點對點(end to end)通信。

IP的作用就是在復雜的網絡環境中將數據包發送給最終的目的主機。

MAC 的作⽤則是實現「直連」的兩個設備之間通信,⽽ IP 則負責在「沒有直連」的兩個⽹絡之間進⾏通信輸。

源IP地址和⽬標IP地址在傳輸過程中是不會變化的,只有源 MAC 地址和⽬標MAC ⼀直在變化。

IP地址

IP 地址(IPv4 地址)由 32 位正整數來表示,IP 地址在計算機是以⼆進制的⽅式處理的。

⽽⼈類為了⽅便記憶采⽤了點分⼗進制的標記⽅式,也就是將 32 位 IP 地址以每 8 位為組,共分為 4 組,以「 . 」隔開,再將每組轉換成⼗進制。

實際上,IP 地址並不是根據主機台數來配置的,⽽是以⽹卡。像服務器、路由器等設備都是有 2 個以上的⽹卡,也就是它們會有 2 個以上的 IP 地址。

IP 地址的分類

有兩個 IP 是特殊的,分別是主機號全為 1 和 全為 0 地址。

  • 主機號全為 1 指定某個⽹絡下的所有主機,⽤於⼴播嗎,⼴播地址⽤於在同⼀個鏈路中相互連接的主機之間發送數據包。

    (在本⽹絡內⼴播的叫做本地⼴播。在不同⽹絡之間的⼴播叫做直接⼴播。)

  • 主機號全為 0 指定某個⽹絡

多播⽤於將包發送給特定組內的所有主機。

IP 分類的優點&缺點

分類地址的優點就是簡單明了、選路(基於⽹絡地址)簡單。

  • 同⼀⽹絡下沒有地址層次,缺少地址的靈活性。

  • 不能很好的與現實⽹絡匹配。

這兩個缺點,都可以在 CIDR ⽆分類地址解決。

這種⽅式不再有分類地址的概念,32 ⽐特的 IP 地址被划分為兩部分,前⾯是⽹絡號,后⾯是主機號

形式 a.b.c.d/x ,其中 /x 表示前 x 位屬於⽹絡號, x 的范圍是 0 ~ 32 ,這就使得 IP 地址更加具有靈活
性。

還有另⼀種划分⽹絡號與主機號形式,那就是⼦⽹掩碼,掩碼的意思就是掩蓋掉主機號,剩余的就是⽹絡號。

將⼦⽹掩碼和 IP 地址按位計算 AND,就可得到⽹絡號。

為什么要分離⽹絡號和主機號?

因為兩台計算機要通訊,⾸先要判斷是否處於同⼀個⼴播域內,即⽹絡地址是否相同。

如果⽹絡地址相同,表明接受⽅在本⽹絡上,那么可以把數據包直接發送到⽬標主機。

路由器尋址⼯作中,也就是通過這樣的⽅式來找到對應的⽹絡號的,進⽽把數據包轉發給對應的⽹絡內。

怎么進⾏⼦⽹划分?

在上⾯我們知道可以通過⼦⽹掩碼划分出⽹絡號和主機號,那實際上⼦⽹掩碼還有⼀個作⽤,那就是划分⼦⽹。

⼦⽹划分實際上是將主機地址分為兩個部分:⼦⽹⽹絡地址和⼦⽹主機地址

  • 未做⼦⽹划分的 ip 地址:⽹絡地址+主機地址
  • 做⼦⽹划分后的 ip 地址:⽹絡地址+(⼦⽹⽹絡地址+⼦⽹主機地址)

公有 IP 地址與私有 IP 地址

公有 IP 地址由誰管理呢?

IANA 是 ICANN 的其中⼀個機構,它負責分配互聯⽹ IP 地址,是按州的⽅式層層分配。

IP 地址與路由控制

IP地址的⽹絡地址這⼀部分是⽤於進⾏路由控制。

在發送 IP 包時,⾸先要確定 IP 包⾸部中的⽬標地址,再從路由控制表中找到與該地址具有相同⽹絡地址的錄,

根據該記錄將 IP 包轉發給相應的下⼀個路由器。

如果路由控制表中存在多條相同⽹絡地址的記錄,就選擇相同位數最多的⽹絡地址,也就是最⻓匹配。

環回地址是不會流向⽹絡

環回地址是在同⼀台計算機上的程序之間進⾏⽹絡通信時所使⽤的⼀個默認地址。

計算機使⽤⼀個特殊的 IP 地址 127.0.0.1 作為環回地址。

與該地址具有相同意義的是⼀個叫做 localhost 的主機名。使⽤這個 IP 或主機名時,數據包不會流向⽹絡。

IP 分⽚與重組

每種數據鏈路的最⼤傳輸單元 MTU 都是不相同的,

如 FDDI 數據鏈路 MTU 4352、以太⽹的 MTU 是 1500 字節等。

其中,我們最常⻅數據鏈路是以太⽹,它的 MTU 是 1500 字節。

那么當 IP 數據包⼤⼩⼤於 MTU 時, IP 數據包就會被分⽚。

經過分⽚之后的 IP 數據報在被重組的時候,只能由⽬標主機進⾏,路由器是不會進⾏重組的。

在分⽚傳輸中,⼀旦某個分⽚丟失,則會造成整個 IP 數據報作廢,

所以 TCP 引⼊了 MSS 也就是在 TCP 層進⾏分⽚不由 IP 層分⽚,

那么對於 UDP 我們盡量不要發送⼀個⼤於 MTU 的數據報⽂。

IPv6 基本認識

IPv6 的地址是 128 位的,這可分配的地址數量是⼤的驚⼈,

說個段⼦ IPv6 可以保證地球上的每粒沙⼦都能被分配到⼀個 IP 地址。

IPv6 的亮點

  • IPv6 可⾃動配置,即使沒有 DHCP 服務器也可以實現⾃動分配IP地址,真是便捷到即插即⽤啊。

  • IPv6 包頭包⾸部⻓度采⽤固定的值 40 字節,

    去掉了包頭校驗和,簡化了⾸部結構,減輕了路由器負荷,⼤⼤提⾼了傳輸的性能。

  • IPv6 有應對偽造 IP 地址的⽹絡安全功能以及防⽌線路竊聽的功能,⼤⼤提升了安全性。

IPv6 地址的結構

  • 在同⼀鏈路單播通信,不經過路由器,可以使⽤鏈路本地單播地址,IPv4 沒有此類型
  • 在內⽹⾥單播通信,可以使⽤唯⼀本地地址,相當於 IPv4 的私有 IP
  • 在互聯⽹通信,可以使⽤全局單播地址,相當於 IPv4 的公有 IP

IPv4 ⾸部與 IPv6 ⾸部

  • 取消了⾸部校驗和字段。 因為在數據鏈路層和傳輸層都會校驗,因此 IPv6 直接取消了 IP 的校驗。

  • 取消了分⽚/重新組裝相關字段。 分⽚與重組是耗時的過程,IPv6 不允許在中間路由器進⾏分⽚與重組,

    這種操作只能在源與⽬標主機,這將⼤⼤提⾼了路由器轉發的速度。

  • 取消選項字段。 選項字段不再是標准 IP ⾸部的⼀部分了,但它並沒有消失,

    ⽽是可能出現在 IPv6 ⾸部中的「下⼀個⾸部」指出的位置上。

    刪除該選項字段使的 IPv6 的⾸部成為固定⻓度的 40 字節。

IP協議

  • DNS 域名解析
  • ARP 與 RARP 協議
  • DHCP 動態獲取 IP 地址
  • NAT ⽹絡地址轉換
  • ICMP 互聯⽹控制報⽂協議
  • IGMP 因特⽹組管理協

DNS

DNS 中的域名都是⽤句點來分隔的,⽐如 www.server.com ,這⾥的句點代表了不同層次之間的界限。

在域名中,越靠右的位置表示其層級越⾼。

詳細看:https://www.cnblogs.com/zwtblog/p/15267809.html#dns-域名解析

ARP

地址解析協議,即ARP(Address Resolution Protocol)

詳細看 :https://www.cnblogs.com/zwtblog/p/15267809.html#如何獲取對⽅的-mac-地址呢?

RARP 協議

ARP 協議是已知 IP 地址求 MAC 地址,那 RARP 協議正好相反,它是已知 MAC 地址求 IP 地址

通常這需要架設⼀台 RARP 服務器,在這個服務器上注冊設備的 MAC 地址及其 IP 地址。

然后再將這個設備接⼊到⽹絡:

DHCP

DHCP(Dynamic Host Configuration Protocol,動態主機配置協議)

我們的電腦通常都是通過 DHCP 動態獲取 IP 地址,⼤⼤省去了配 IP 信息繁瑣的過程。

DHCP 客戶端進程監聽的是 68 端⼝號,DHCP 服務端進程監聽的是 67 端⼝號。


DHCP 交互中,全程都是使⽤ UDP ⼴播通信。

如果 DHCP 服務器和客戶端不是在同⼀個局域⽹內,路由器⼜不會轉發⼴播包

DHCP 中繼代理

有了 DHCP 中繼代理以后,對不同⽹段的 IP 地址分配也可以由⼀個 DHCP 服務器統⼀進⾏管理。

NAT

IPv4 的地址是⾮常緊缺的,在前⾯我們也提到可以通過⽆分類地址來減緩 IPv4 地址耗盡的速度,

但是互聯⽹的⽤戶增速是⾮常驚⼈的,所以 IPv4 地址依然有被耗盡的危險。

於是,提出了⼀種⽹絡地址轉換 NAT 的⽅法,再次緩解了 IPv4 地址耗盡的問題。

簡單的來說 NAT 就是同個公司、家庭、教室內的主機對外部通信時,把私有 IP 地址轉換成公有 IP 地址。

普通的 NAT 轉換沒什么意義。

由於絕⼤多數的⽹絡應⽤都是使⽤傳輸層協議 TCP 或 UDP 來傳輸數據的。

因此,可以把 IP 地址 + 端⼝號⼀起進⾏轉換。

這樣,就⽤⼀個全球 IP 地址就可以了,這種轉換技術就叫⽹絡地址與端⼝轉換 NAPT。

兩個私有 IP 地址都轉換 IP 地址為公有地址 120.229.175.121,但是以不同的端⼝號作為區分。

⽣成⼀個 NAPT 路由器的轉換表,就可以正確地轉換地址跟端⼝的組合,

令客戶端 A、B 能同時與服務器之間進⾏通信。這種轉換表在 NAT 路由器上⾃動⽣成。

例如,在 TCP 的情況下,

建⽴ TCP 連接⾸次握⼿時的 SYN 包⼀經發出,就會⽣成這個表。

⽽后⼜隨着收到關閉連接時發出 FIN 包的確認應答從表中被刪除。

缺點

由於 NAT/NAPT 都依賴於⾃⼰的轉換表,因此會有以下的問題:

  • 外部⽆法主動與 NAT 內部服務器建⽴連接,因為 NAPT 轉換表沒有轉換記錄。
  • 轉換表的⽣成與轉換操作都會產⽣性能開銷。
  • 通信過程中,如果 NAT 路由器重啟了,所有的 TCP 連接都將被重置。

如何解決 NAT 潛在的問題

第⼀種就是改⽤ IPv6
IPv6 可⽤范圍⾮常⼤,以⾄於每台設備都可以配置⼀個公有 IP 地址,就不搞那么多花⾥胡哨的地址轉換了。

第⼆種 NAT 穿透技術

客戶端主動從 NAT 設備獲取公有 IP 地址,然后⾃⼰建⽴端⼝映射條⽬,然后⽤這個條⽬對外通信,就不需要 NAT 設備來進⾏轉換了。

ICMP

ICMP 全稱是 Internet Control Message Protocol,也就是互聯⽹控制報⽂協議。

ICMP 主要的功能包括:確認 IP 包是否成功送達⽬標地址、報告發送過程中 IP 包被廢棄的原因和改善網絡設置等。

ICMP 類型

  • ⼀類是⽤於診斷的查詢消息,也就是「查詢報⽂類型」
  • 另⼀類是通知出錯原因的錯誤消息,也就是「差錯報⽂類型」

IGMP

IGMP協議(Internet Group Management Protocol)

組播地址,也就是 D 類地址,既然是組播,那就說明是只有⼀組的主機能收到數據包,

不在⼀組的主機不能收到數組包,怎么管理是否是在⼀組呢?那么,就需要 IGMP 協議了。

IGMP 是因特⽹組管理協議,⼯作在主機(組播成員)和最后⼀跳路由之間

IGMP ⼯作機制

IGMP 分為了三個版本分別是,IGMPv1、IGMPv2、IGMPv3。

IGMPv2 作為例⼦:說說常規查詢與響應和離開組播組這兩個⼯作機制。

PING

IP協議的助⼿-ICMP 協議

ping-查詢報⽂類型的使⽤

最簡單的,同⼀個局域⽹⾥⾯的情況

traceroute-差錯報⽂類型的使⽤

traceroute 作⽤一

traceroute 的第⼀個作⽤就是故意設置特殊的 TTL,來追蹤去往⽬的地時沿途經過的路由器。

traceroute 的參數指向某個⽬的 IP 地址:traceroute 192.168.1.100

如何⼯作

它的原理就是利⽤ IP 包的⽣存期限 從 1 開始按照順序遞增的同時發送 UDP 包,強制接收 ICMP 超時消息的⼀種⽅法。

⽐如,將 TTL 設置 為 1 ,則遇到第⼀個路由器,就犧牲了,接着返回 ICMP 差錯報⽂⽹絡包,類型是時間超時。

接下來將 TTL 設置為 2 ,第⼀個路由器過了,遇到第⼆個路由器也犧牲了,也同時返回了 ICMP 差錯報⽂數據包,如此往復,直到到達⽬的主機。

這樣的過程,traceroute 就可以拿到了所有的路由器 IP。

當然有的路由器根本就不會返回這個 ICMP,所以對於有的公⽹地址,是看不到中間經過的路由的。

送⽅如何知道發出的 UDP 包是否到達了⽬的主機呢?

traceroute 在發送 UDP 包時,會填⼊⼀個不可能的端⼝號值作為 UDP ⽬標端⼝號(⼤於 3000 )。

當⽬的主機,收到 UDP 包后,會返回 ICMP 差錯報⽂消息,但這個差錯報⽂消息的類型是「端⼝不可達」。

所以,當差錯報⽂類型是端⼝不可達時,說明發送⽅發出的 UDP 包到達了⽬的主機。

traceroute 作⽤⼆

traceroute 還有⼀個作⽤是故意設置不分⽚,從⽽確定路徑的 MTU。

這樣做的⽬的是為了路徑MTU發現。

因為有的時候我們並不知道路由器的 MTU ⼤⼩,以太⽹的數據鏈路上的 MTU 通常是 1500 字節,但是⾮以外⽹的 MTU 值就不⼀樣了,所以我們要知道 MTU 的⼤⼩,從⽽控制發送的包⼤⼩。

參考:圖解網絡

我這里只是一個自己的學習筆記,大家有興趣一定去看原文!!! 謝謝大家的閱讀!!

大家有興趣一定去看原文,這只是我自己的一個筆記總結!!
大家有興趣一定去看原文,這只是我自己的一個筆記總結!!
大家有興趣一定去看原文,這只是我自己的一個筆記總結!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM