计算机网络是如何通信的【一】
背景:決定梳理一下網絡相關的知識,大部分是網上找來的,做個記錄
首先我們從兩臺電腦之間的相互通信開始:只需要給兩臺電腦連上一根線就好了,通過網絡通信
那么如果加入一個小C呢,那么我要加兩根線,那么再不斷加人呢?豈不是一團亂麻?小a怎么知道小c給他發了信息呢?
這時候小B出了一個主意:每臺設備會有一張網卡,網卡會帶著mac地址,這個就是該設備的標識。咱們再找一臺計算機,給他多設計幾個網口,我們每個人都連到這臺計算機的網口上,不也實現咱們哥幾個之間的互連了嗎。
說干就干,于是他們設計出了一款微型計算機,他本身具備多個網口,專門實現多臺計算機的互聯作用,這個微型計算機就是集線器(HUB)。顧名思義,集線器起到了一個將網線集結起來的作用,實現最初級的網絡互通。集線器是通過網線直接傳送數據的,我們說他工作在物理層
有了集線器后,越來越多的小伙伴加入到游戲中,小D、小E等人都慕名而來。然而集線器有一個問題,由于和每臺設備相連,他不能分辨出具體信息是發送給誰的,只能廣泛的廣播出去。
例如小A本來想問小C:你吃了嗎?結果小B,小D和小E等所有連接在集線器上的用戶都收到了這一信息,且由于處于同一網絡,小A說話時其他人不能發言,否則信息間會產生碰撞,引發錯誤,我們叫做各設備處于同一沖突域內。
這樣的設備用戶體驗極差,于是小伙伴們一起討論改進措施。這時聰明的小D發話了:我們給這臺設備加入一個指令,讓他可以根據網口名稱自動尋址傳輸數據。
比如我把小A的網口命名為macA,將小C的命名為macC,這時如果小A想要將數據傳給小C,則設備會根據網口名稱macA和macC自動將資料從A的電腦傳送到C的電腦中,而不讓小B、小D和小E收到。也就是說,這臺設備解決了沖突的問題,實現了任意兩臺電腦間的互聯,大大地提升了網絡間的傳輸速度,我們把它叫做交換機。由于交換機是根據網口地址傳送信息,比網線直接傳送多了一個步驟,我們也說交換機工作在數據鏈路層
這回小伙伴們高興了,他們愉快地玩耍起來。漸漸地,他們在當地有了名氣,吸引了越來越多的小伙伴加入到他們的隊伍中。直到有一天,一個外村的小伙突然找上門來,希望能和他們一起互聯,實現跨村間的網絡對戰。
小A說可以呀,于是他們找了一根超長的網線將兩個村落的交換機連在了一起。結果發現一件奇怪的事:兩個村落間竟然不能相互通信。怎么著,原來那邊的電腦和他們用的不是一套操作系統,這導致信息間的傳送形式的不匹配。在這期間,還有其他村落的人也來找過小A,可是小A發現,每個村子之間用的操作系統都不一樣。
這可咋辦吶?難道以后只能各自村子玩各自的了嗎?為了解決這一問題,各村的小伙伴們坐在一起組織了一場會議,最終得出了一套解決方案:采用同樣的信息傳送形式(像不像秦始皇統一度量衡)。
那如何實現呢?小伙伴們規定,不同的村子間先在各自的操作系統上加上一套相同的協議。不同村落通信時,信息經協議加工成統一形式,再經由一個特殊的設備傳送出去。這個設備就叫做路由器。路由器通過IP地址尋址,我們說它工作在計算機的網絡層。
這樣,經由如此的一系列改裝,小A終于帶領村民們實現了整個鄉鎮的通信。隨著越來越多的城里人也加入小A的協議,小A帶領村民逐步實現了全市、全國乃至全世界的通信。這一套協議便是TCP/IP協議簇,互聯網也便這樣形成了。
然而,即便如今全網絡已遍布了全世界,在小A和村里的小伙伴對戰帝國時代的時候,也仍然用著交換機。只有和外面更大的世界交流的時候才用到路由器。
總結:交換機適合局域網內互聯,路由器實現全網段互聯。
根據 OSI模型的網絡體系劃分,自底向上,路由器?工作在第三層(網絡層),而我們常說的交換機?工作在第二層(鏈路層)(目前有更加高級的三層交換機,四層交換機,甚至還有七層交換機)
它們的主要工作如下:
路由器:尋址,轉發(依靠 IP 地址)
交換機:過濾,轉發(依靠 MAC 地址)
我們可以看出這兩者的主要工作就是轉發數據,但是不同之處是,依靠的地址不同,這是一個根本區別!
路由器內有一份路由表,里面有它的尋址信息(就像是一張地圖),它收到網絡層的數據報后,會根據路由表和選路算法將數據報轉發到下一站(可能是路由器、交換機、目的主機)
交換機內有一張MAC表,里面存放著和它相連的所有設備的MAC地址,它會根據收到的數據幀的首部信息內的目的MAC地址在自己的表中查找,如果有就轉發,如果沒有就放棄
我們來看一個網絡拓撲圖例子:
通過拓撲圖我們應該知道:
每一個路由器與其之下連接的設備,其實構成一個局域網
交換機工作在路由器之下,就是也就是交換機工作在局域網內
交換機用于局域網內網的數據轉發
路由器用于連接局域網和外網
舉個例子:
我們每個人相當于主機,路由器相當于快遞員,宿管大爺相當于交換機,學校是一個局域網
快遞員根據學校地址(IP)把包裹送到學校,再根據公寓號(子網IP)把快遞交給這個公寓的宿管大爺,宿管大爺根據你的名字(MAC)交給你
它們兩個可不可以少一個?
交換機在局域網內工作,它根據 MAC 地址轉發數據,如果沒有了路由器在網絡層尋址,那么我們的數據就不能發送到其他網絡終端上去了
路由器內集成了交換機的功能,主機與路由器相連也可以實現數據轉發,但是不足之處是:
可擴展的接口不如交換機多
交換機通常由硬件加速轉發,路由器主要靠軟件尋址,速度慢
實際網絡數據轉發過程
此處參考:微信公眾號:碼農翻身,作者:劉欣
通過一個實際網絡數據轉發的過程,我們可以更好的理解路由器與交換機的區別所在
假設你使用電腦訪問www.baidu.com
你的電腦先在應用層打包一個 HTTP報文(超文本傳輸協議,簡單的請求響應協議,指定了客戶端能發送什么消息給服務端以及得到什么響應),然后在傳輸層在打包成 TCP報文(可靠數據傳輸),然后再根據 DNS 查到的 IP 在網絡層打包成 IP數據報,然后在通過鏈路層打包成以太網數據幀,發送給你的交換機:
你的交換機收到后,重新包裝數據幀,再發送給你的路由器:
?
你的路由器利用 NAT(Network Address Translation),將你的主機IP(局域網IP)轉換為外網IP,還會修改端口號,對外完全隱藏你的主機,再根據路由表選擇一條合適的路徑進行轉發:
在接下來的過程中,每個節點都只改變 MAC 地址,然后在網絡中一路向著目的地發送。
這里可能還有個問題,我輸入的時候是域名,經過DNS解析后也是IP,怎么就找到了對應服務器的網卡的,畢竟IP是個虛擬概念,最終還是要找到mac地址,才能實現真正的通信。
其實最開始a與b通信,確實只知道b的ip地址,但是這時A會發一個ARP廣播:我的IP是xxx,mac是XXX想知道IP為B的mac是多少 這個廣播會被本局域網內所有主機收到 但是只有B會相應 并且向A回復一個ARP響應。(通過ARP協議就A就知道了目標端的mac地址)。
如果不在一個局域網呢?(也就是不在一個網段):這時候就出現了跨三層交換機
所以當 A 向 B 發送數據時, A 并不會直接把數據給 B ,而是交給自己的網關,所以 A 首先會 ARP 廣播請求 網關 的 MAC 地址 A 得到網關的 MAC 地址后,以它為數據幀的目標 MAC 地址進行封裝數據,并發送出去。Router1 收到該幀后,檢查該幀的目標 IP ,并到自己的路由表查找如何到達該網段 發現能夠到,并且下一跳地址是 routerB 的 s0 端口,于是將數據重新封裝,將源地址改為 s0 端口 MAC 地址,目標 MAC 地址改為 router2 的 s0 端口 MAC 址址,并發送給 router2。如此下去,最后一個路由(routerN )收到該幀,發現目標 IP 就在自己的直連網段,于是查看 ARP 緩存,如果找到該 IP 的 MAC 地址,則以該 MAC 地址封裝數據發送出去,如果在 ARP 緩存沒找到,則發出 ARP 廣播,請求該 IP 的 MAC 地址,得到對應的 MAC 地址后,再發送給主機 B
在以上數據傳遞過程中,我們發現,數據幀的源 IP 和目標 IP 始終是不變的,而經過每個路由進行重新封裝數據時 MAC 地址則在不斷的變化,總是以自己的地址作為源 MAC 地址,下一跳的地址作為目標 MAC 地址
關于NAT:
NAT是一種網絡隱蔽技術,它通過建立IP地址映射來隱藏內部的網絡
它的主要功能有:
提高內部網絡的安全性
共享網絡地址,減少地址消耗
NAT主要有三種實現方式:
靜態NAT(Basic NAT):最基本的網絡轉換實現,只轉換IP地址,建立IP地址的一對一映射,不支持端口轉換
網絡地址端口轉換(NAPT):這種方式支持端口的映射,并允許多臺主機共享一個公網IP地址
端口多路復用(Port address Translation,PAT):是指改變外出數據包的源端口并進行端口轉換,即端口地址轉換.采用端口多路復用方式。
下面這個大圖詳細描述了各層次協議:
?
參考文獻:IP尋址詳細過程詳解
集線器、交換機與路由器有什么區別?_Java學習-CSDN博客_集線器,交換機,路由器三者的區別是什么
路由器與交換機的區別與聯系_WhataNerd的博客-CSDN博客_路由器與交換機的主要區別
總結
以上是生活随笔為你收集整理的计算机网络是如何通信的【一】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: stream流【java8 二】
- 下一篇: 计算机网络是如何通信的【二】