不同網段通信的過程
不同網段就分兩種了,同一個局域網下面,不同網段之間的通信,或者是從局域網去往互聯網的通信,那麼這個過程又是怎麼樣的呢?
還記得第二篇這個内容嗎,訪問者把數據交給網關,當時候是沒有講解這個裡面的細節部分,這裡就來填坑,之前介紹的時候省略掉了ARP的過程,那這裡就用模拟器來還原下,由于現在還沒學習過路由交換的知識點,這裡簡化下環境。
看到這個圖是不是比較迷糊,由于我們還沒學習路由的知識點,這次【出口路由器】與【互聯網】這2個設備,我會提前打通,然後這個拓撲我也會發出來,先不用管中間怎麼實現的,這個在後續是我們學習的重點,這裡呢,我們把重點放在訪問者在訪問WEB服務器的時候,整個過程,這個對于後續學習路由技術很有幫助的。
(1)準備工作
檢查下訪問者以及WEB服務器的地址是否已經完成。
這裡說明下,我們關注的主要是訪問者與服務器,但是服務器的提供的服務,每次重新打開模拟器是需要重新選擇啟動的,這個要注意下,然後檢查下IP地址是否正确,出口路由器與互聯網,暫時不去關心,并且在實際企業網部署中,運營商的網絡由運營商自己維護,我們也管不着,運營商那邊接通互聯網,給予對應的對接信息,他們也不管你内網怎麼去搭建跟規劃的。(有的朋友可能在某些書籍或者實驗裡面發現運營商的網絡也在其中,可能就迷糊了,但是實際中,運營商那邊是不需要去管的,實驗環境隻是去模拟出來這樣的效果,所以必須配置)
(2)訪問者訪問WEB服務器,來看看IP規則規則
訪問者(192.168.255.1/24)訪問1.1.1.1的WEB服務,這個時候訪問者通過掩碼來計算兩邊是否同一個網絡号,在同一個網段還是不同網段。
(3)不在一個網段,怎麼辦呢?
訪問者通過計算發現網絡号不相同,不再一個網段,這個時候它就不知道該怎麼把這個數據包發出去了,所以這裡就需要介紹另外一個功能:默認網關
可能聰明的你發現了,當終端設備發現目标不再同一個網段的時候,它就把數據包交給網關進行處理,讓網關把這個數據包發往目的地。想想平時上網,不管是電腦還是手機,在網卡屬性裡面都有IP、掩碼、網關的參數,隻要獲取的正常就能夠訪問互聯網,訪問互聯網的關鍵就是這個網關,終端設備把去往互聯網的流量交給網關進行處理。可能有的朋友還不太理解,這個不要緊,随着學習的深入,這個會經常接觸到,并且越發的理解網關的作用,這裡記住,不同網段互通,必須依靠網關進行處理。
(4)網關在哪呢?
又回到了這一個問題,網關的IP知道了,通過讀取網卡參數,那網關具體是鍊路中的哪台設備呢?
上面這個環境隻是簡化的,可能192.168.255.0/24網段裡面有許多的終端存在,訪問者就無法确定哪台是網關設備了,所以回到分層的概念,在鍊路層以太網中,就用MAC地址來定位到具體的設備上,訪問者隻要知道了出口設備(192.168.255.254的MAC地址是多少,那自然就可以找到它了),可是訪問者并不知道出口網關的MAC是多少,這就用剛講的ARP協議,通過ARP廣播請求,在該鍊路中發出去,出口路由器自然會收到然後通過ARP響應回複,這裡我們來抓包看下。
抓取路由器的G0/0/0
打開訪問者,客戶端信息裡面有一個HTTP Client的選型,輸入服務器的地址1.1.1.1,點擊獲取
網頁已經打開成功了,這裡我們不關心結果,來看看通信的過程。
通過抓包可以發現,訪問者(192.168.255.1)發送了ARP的請求包,詢問192.168.255.254的MAC是多少,然後網關設備(192.168.255.254)回應了自己的MAC地址。訪問者就把這個MAC地址存放在自己的ARP緩存裡面(由于模拟器的問題,這個客戶端是看不到ARP表項的)
(5)出口設備的處理方式
訪問者在知道了網關的MAC地址以後,就可以定位到具體的設備,開始進行數據封裝,然後發送給出口路由器。(從數據包封裝的角度來看,如果二層的目的MAC不知道,是不是也無法完成封裝)
出口路由器收到以後,會進行解封裝,讀取以太網頭部,通過目标MAC發現找的是自己,找自己的那就繼續解封裝,并且通過Type中包含的字段知道上層是IP,讀取IP頭部後,發現目的IP找的不是自己,那這個時候就分設備了,如果處理的設備是普通的PC、手機,這種是沒有路由功能的,則會丢棄,但是如果是三層的網絡設備,具有路由功能的,它會執行操作,查詢
路由表,找到去往這個目的IP的應該交給誰處理。比如這裡目的地址是1.1.1.1,路由器會查詢自己路由表中是否有關于去往1.1.1.1的信息,知道則轉發,不知道則丢棄。
出口路由器查找路由表,發現有1.1.1.1的路由,交給2.2.2.2處理,也就是互聯網。
(6)怎麼找到互聯網的設備呢?
出口路由器通過查詢路由表導緻交給互聯網處理,但是并不知道2.2.2.2的設備是哪台,通常運營商的線路牽到企業走的是光纖線路,二層也是用的以太網協議,在以太網中,不用說大家都知道了,知道對方的MAC地址就能找到對方了,所以出口路由器也會發送ARP請求報詢問2.2.2.2的MAC是多少,互聯網路由器收到以後進行單播回應。
出口路由器知道了2.2.2.2的MAC地址,通過封裝把數據包重新打包(封裝的二層源MAC是出口路由器G0/0/1接口的MAC,目标MAC是互聯網G0/0/0接口的MAC)通過路由表條目信息發送給2.2.2.2(互聯網設備)
(7)怎麼找到互聯網的設備呢?
互聯網設備收到以後同樣進行解封裝,首先看MAC地址是找的自己,上層協議是IP,讀取IP頭部後,發現IP找到不是自己,同樣的自己擁有路由功能,查詢路由表,看這個數據包自己能否進行轉發出去。
互聯網設備通過查詢路由表發現1.1.1.1就在它的身後直連網絡,于是互聯網設備也會發送ARP報文請求來詢問1.1.1.1的MAC是多少,然後WEB服務器收到後進行回應。
(8)WEB服務器收到數據後的處理
互聯網設備處理完成後,開始進行封重新把數據打包發送給WEB服務器,WEB服務器收到以後,同樣先查看以太網頭部發現是自己,通過type知道上層協議是IP,讀取IP頭部後發現目的IP也是自己,繼續上層解封裝,直到讀取到對應的數據。
(9)WEB服務器回包過程精簡(跟來的時候相同)
不同網段通信過程重點回顧
(1)當發起者通過自己的掩碼計算出目的IP與自己不再同一個網段的時候,這個數據包會交給默認網關地址處理,如果沒有默認網關地址則這個數據包會發送不出去,被丢棄。
(2)找到默認網關的目的MAC地址需要通過ARP協議來完成,否則不知道對方的MAC是多少,無法找到對方,也完成不了以太網頭部的封裝。(這個一定要切記,可能後續遇到故障,就是因為不知道對方的MAC地址是多少,通信不正常)
(3)網關路由器收到這個數據包的時候,它會看以太網的目的MAC是不是找的自己,如果是繼續讀取上層,IP目的地址找到不是自己,就通過查詢路由表,查看是否有對應的信息條目,有的話則轉發,沒有則丢棄(路由表轉發功能隻有三層的網絡設備才具有這樣的處理功能,普通的PC、手機是不具備的,這個也是我們後面學習的重點)
(4)網關設備通過路由表找到下一台轉發設備的信息,如果二層跑的是以太網,同樣需要知道對方的MAC地址信息進行封裝與鍊路定位,使用的方法也是ARP協議進行查找,然後把數據包重新封裝三層、二層轉發給下一台設備--互聯網。
(5)互聯網設備收到以後執行跟網關設備同樣的操作,通過查詢路由表知道目的地址在哪,這裡目的地址為身後直連網絡,所以互聯網設備直接通過ARP協議查詢到目的的MAC地址多少,然後重新封裝數據包,交給服務器。
(6)服務器以後,通過層層解封裝,最終讀取到了應用層的數據。(解封裝的過程要注意,讀取到目的MAC為自己,就繼續讀取上一層,讀取到IP目的地址為自己,繼續讀取上層,所以一個設備收到數據包是否繼續解封裝讀取上層内容,取決于對應層裡面的标識是否是自己)
(7)回包的過程跟來的過程一樣,同樣是服務器層層封裝數據包後交給默認網關----中間三層設備解封裝到IP頭部信息查找路由表查找目的地,然後重新封裝,繼續轉發,這樣到達目的地,訪問者收到後層層解封裝,最終把讀取的網頁數據,呈現在浏覽器裡面。
(8)有一個很關鍵的細節地方,不知道大家有沒有發現,IP頭部雖然在中間路由器解封裝進行讀取對應的目的IP參數來查詢路由表,但是在重新封裝的時候源目IP信息是保持不變的,因為這個目的IP是到達對方的關鍵,不能被修改。同樣以太網頭部也被解封裝進行讀取了,讀取的原因是通過目的MAC來判斷是否找的是自己,但是你會發現,在重新封裝的時候,源目MAC地址是發生了變化的,因為不同鍊路之間的信息是不一樣的,訪問者到出口路由器,以太網頭部的源是訪問者,目标MAC是出口路由器,是為了在這個鍊路中找到出口路由器的鍊路位置,出了這個鍊路範圍這個信息就沒用了,到了出口路由器到互聯網這段鍊路上,會發現出口路由器會把源MAC變成自己(1号接口的MAC),目的MAC為互聯網(2.2.2.2)的,如果還保持着之前的訪問者到出口路由器的話,從數據包解封裝讀取的過程,互聯網發現這個MAC不是找自己的,那不就給丢掉了,同樣WEB服務器收到了也不直接丢棄,更不會去看IP頭部信息了,所以整體的通信過程中,源目IP地址保持不變,源目MAC每經過一個三層設備,是會變成該鍊路上對應設備的MAC地址信息,隻有這個信息才能夠在這個鍊路上找到正确的目标設備,以及對方收到後才能能夠正常解封裝處理上層的内容進行下一步的操作。
上面那段話可能有點難理解,來舉一個生活中的例子
博主8月份準備去四川涼山旅遊(媳婦的閨蜜在那,喊了她幾次了,這次正好閨女也放假,一起去),通過APP查詢,沒有直通的車,都需要中轉,需要先做高鐵到始發站、火車、班車才能抵達目的地,這些需要的車票都通過APP已經訂好,做好了行程表規劃。
把高鐵票、火車票、班車票,每張票隻能夠在限定的區域内移動,這個區域是不是就跟數據鍊路層一樣,區域内的出發點相當于源MAC,目标地址相當于MAC地址。
整個旅遊的行程表是不是就相當于網絡層一樣,充當定位的功能,起始點相當于源IP,終端相當于目的IP地址。如果整個行程中,隻有行程表而沒有對應的車票,無法通過這些交通工具抵達目的地,同樣,如果隻有車票沒有行程表,那也抵達不了目的地,因為不知道目标怎麼走,需要做什麼車,中間怎麼換乘。
所以,最終兩者配合,既有某個區域的車票又有整個旅遊的行程表,才能抵達最終目的地,同樣在計算機網絡通信中也是一樣,通過數據鍊路層與網絡層的對應分層配合實現了最終目的地的通信互訪。
整個旅途中不斷變化的是交通工具,但是整個旅途的出發點與目标終點保持不變,這就對應了上面提到的,源目IP地址在傳輸過程中不會變化,隻有源目MAC每經過一個鍊路區域就發生變化。另外同一個鍊路區域内的轉發就依靠的是二層設備(通過MAC地址表進行查詢,然後交給對應接口下的終端),不同區域内的數據轉發依靠三層設備(通過路由表查詢,交給下一個轉發設備或者最終目的地處理)。
結合抓包驗證理論
分别抓取這三個接口的包,來看看以太網的包,是不是如上面說的發生了變化。(服務器的沒法抓)
這裡簡單點,就Ping一下好了,次數1,如果覺得開三個抓包,分不清楚哪個是哪個的話,可以分别抓,開一個窗口ping 一次。
三個鍊路區域的源目MAC都是變化的,源目IP一直沒變。
Windows命令行學習在實際中不能隻會配置網絡設備,對于常見的Windows命令使用也得掌握,這樣對于我們排錯或者查看來說是方便很多的。
(1)進入CMD,通過win鍵 R組合調用出來運行,然後輸入cmd回車
(2)查看IP、子網掩碼、網關等信息
通過輸入ipconfig可以查看對應網卡上面的IP地址、掩碼、網關等信息,但是看不到MAC地址
輸入ipconfig /all可以看到Windows上所有主機的更加詳細的信息,包括網關等參數。
(3)查看ARP緩存表
可以通過arp -a來查看當前主機的ARP緩存,驗證是否正确,通常排錯的時候會使用,如果發現錯誤,可以通過arp -d來清空ARP緩存,也可以使用arp -s來靜态綁定(通常會綁定網關),删除某個靜态綁定也是通過arp -d後面跟明細。
(4)其他小經驗分享
有一個小經驗,像Windows系統都帶有幫助介紹的,通過ipconfig / 直接回車,Windows識别不出來完整的命令,會把所有的格式跟命令都介紹出來。
小提問
假設一個網絡中,本身已經有一台電腦或者設備使用了192.168.1.1的地址,但是由于使用人員不懂計算機網絡知識,他也把自己的電腦設置成了192.168.1.1,會驚奇的發現,Windows系統會出現IP地址沖突提示,那麼這台主機它是怎麼知道地址沖突了的呢?
“承上啟下”
至此IP地址、子網掩碼、網關、同網段以及不同網段的通信的作用與過程,也把第二篇的鍊路層與網絡層的細節都填補上了,這些内容一次肯定是不能全部吸收的,建議學完後面的知識點後在把前面這些知識點過一次,會有更深入的理解(也可以配合視頻一起看,效果更佳),下一篇我們來填補下這次用到一個協議,ICMP,看看它有什麼的作用。
作者:一天,公衆号:網絡之路博客(ID:NetworkBlog)。讓你的網絡之路不在孤單,一起學習,一起成長。,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!