我認為,IP地址和MAC地址可以類比生活中寄快遞的過程。
在整個網路中資料被封裝成資料包文進行傳送,就像我們生活中寄快遞時將物品放進包裹中。而資料在路由器之間的跳轉也可以看作是不同地區快遞小哥對物流的交接。
ip地址等價於快遞包裹上的收件人地址。
快遞員通過收件人地址將包裹在出發地到目的地之間連出一條線,然後通過不同地區之間的物流中轉最後將包裹送到收件人的手中。
從上圖的粗箭頭所描述的路徑便可達到目的地址,陝西省-西安市-xx縣-xx街道-…。
同理,ip地址也具備此功能,通過IP地址的網路位可以確定某個主機所在網路的位置,從而明確一條資料傳送的路徑。例如目的地址為192.168.10.110/26,則該地址所在的網路為192.168.10.64
用之前圖示地址的定址方式,我們可以模擬這一過程
那麼,還是那個問題,為什麼還要MAC地址呢?
MAC地址等價於快遞包裹上的收件人姓名。
MAC地址更多是用於確認對方資訊而存在的。就如同快遞跨越幾個城市來到你面前,快遞員需要和你確認以下收件人是否正確,才會把包裹交給你一樣。
這裡我們模擬一個場景,比如在學校裡同一個班級的學生大家互相都認識,互相交流就不需要藉助學號(這裡抽象成ip地址),直接喊名字即可。「喂,那個誰,把你作業讓我抄一下」。
這個過程可對應網路中同一個交換機或集線器連線的區域網通訊。在區域網中通訊需要通過MAC地址進行通訊。將資料封裝成幀時會插入源mac地址和目的mac地址(如果不知到對方mac地址會傳送arp廣播報文獲取對方mac地址)。乙太網幀結構:
(———圖來自網路,侵刪)
而後,幀結構再次新增IP頭部資訊。
雖然這裡有ip地址,但是它在區域網中不起作用,因為arp是用於網路中定址的,而在區域網中所有主機互相可見。(除此之外,區域網中ip地址最多是在arp廣播時,作為收到包的主機解包時判定的依據,判定自己是否為目的主機,從而選擇是否迴應arp應答)。
而IP地址的使用條件,是在跨網路之後。兩個網路之間想要進行通訊需要通過一個媒介,因為在網路內部的主機定位不到網路外的某個主機,即使他們只隔了一個網段也是一樣。而跨網段的媒介就是路由器,只要把ip地址告訴它,他就能找到對方所在的網路。
這就像是我是2020屆電腦科學專業1班學生xx(學號202015162,15代指專業電腦科學專業,62代指「我」在本班的學號),我現在想找2022屆學弟yy(學號2022…)。我們之間不認識,但是我可以找一箇中間人,幫我送信。
這個中間人是區域網閘道器,是路由器。他們的功能是,轉述我的訊息,並且按照目的ip地址將它發給下一個「中間人」,最後送到「yy」手中。
以下內容有借鑑到文章:閃客sun(低並行程式設計):如果讓你來設計網路
首先我們需要明確的是,MAC地址的誕生早於IP地址。在計算機設計之初,裝置之間使用MAC地址互相確認身份,因為當時的網路拓撲並不大,我們完全可以讓兩臺計算機之間兩兩互相傳送資料。如果有5個主機需要互通的話,那麼它的拓撲結構可能是這樣:
如果是這樣的話,我們其實無需MAC地址,因為每個網路卡明確對應一臺主機。而實際是,一臺計算機要設定這麼多網路卡的需要耗費更多的money,你也不想買一臺計算機後還需要額外再買十幾個網路卡把。
因此我們可以採用集線器的方式將所有計算機通過網線聚集在一起會更加方便。
每臺主機傳送資料前需要攜帶自己和對方的目的MAC地址,因為hub集線器只是將所有資料從其他介面傳送出去,它將資料的是否接收留給了主機自己判斷。
集線器只是無腦的做資料傳送,因此我們認為它是資料鏈路層的裝置。
集線器太笨了,它將每一通訊都發給所有主機,在各主機之間交流頻繁時會造成網路的擁堵乃至癱瘓,因此我們進行了升級,使用交換機裝置。
交換機內部維護一張 MAC 地址表,記錄MAC地址與交換機各埠之間的關係,這樣就無需將所有資料傳送的區域網中。通過思科的Cisco packet tracer模擬軟體可以看到交換機的MAC地址表。
這樣,當pc0(192.168.1)ping pc3(192.168.4)時,交換機查自己的mac表,發現自己的乙太網fa0/4介面的出口對應的就是目的主機mac地址,則交換機將自己該資料包文轉發從fa0/4介面轉發出去。同時pc3收到了來自pc0的資料包文。
交換機相對集線器,擁有決定資料從交換機的哪個埠轉發出去的功能,因此我們認為交換機在資料鏈路層(決定資料轉發至哪一條鏈路上)。
以上集線器和交換機都是區域網的通行,無需IP地址參與。而隨著網路的擴大,區域網規則已經不再適合了。
許多個類似上述的區域網組成一個大的網際網路。它們彼此相連互相通訊。
如果在學校網路內部向存取某個研究機構共用的資料,這就是跨網路存取了。此時IP地址才派上用場。ip地址給出一段段具備層級關係的數位地址,它就像思維導圖一樣可以通過給定地址高效的找出我們想要的那一項。
當有網路連線上網際網路時,給它分配一個ip地址,這樣就能通過這些ip地址確定對方網路(或裝置)在網際網路絡中的位置,從而進行存取。
連線在網際網路上的具有ip的可以是一個單個的裝置,比如某個伺服器、某個網路攝像頭等,也可以是某個區域網,如學校的校園網,公司內部網路等(區域網與公網通訊使用NAT、PAT等方式,或內網穿透等技術)。
為了實現在網路中,跨網段的存取,因此誕生出新的裝置叫路由器。它可以根據內建的路由條目決定將封包轉發到哪個網路中,最終可以到達目的網路。
需要注意的是,路由器是多個網路的中間人,它有很多埠分別處於不同的網路中(路由器的每一個埠,都有獨立的 MAC 地址和IP地址),這樣它就可以把「來自A網路的資訊轉發至B網路,因為路由器的介面同時連線這這幾個網路」。
路由器可以讓資料在網路中跨網路的通訊,因此我們認為路由器是網路層的裝置。
終於,我們理清楚了整個IP與MAC的關係。總結一下: