路由表的形成
路由**資料報封裝的過程
路由:就是從源主機到目的主機的**過程
路由器:能夠將資料報**到正確的目的地,並在**過程中選擇最佳路徑的裝置
1、主機1.1要傳送資料到4.1,因為是跨網通訊,所以必須通過閘道器(通過arp廣播找到e0埠口的mac位址),路由器收到資料報後,解封裝資料報,發現裡面的目標ip為4.1,查詢路由表
2、路由器a查詢路由表後,**資料到s0介面,
3、路由器a通過arp廣播找到b路由器s0口的mac位址後,將資料**過去 ,
4、資料報到達b路由器後,檢視目標ip位址並查詢路由表 ,b路由器查詢路由表發現4.0網段在e0介面,**資料到e0介面。
5、資料通過arp廣播找到主機4.1的mac位址,然後將資料報**過去,這樣主機4.1就成功接收到資料報了。
路由表是路由器維護的路由條目的集合,路由器根據路由表做路徑的選擇
路由表又分為直連網段和非直連網段
如圖所示,路由器a和路由器b就是直連網段,直連網段需要配置ip位址,埠up狀態,形成直連路由。(例如兩個路由器相連,一般配32位的ip位址,配的是同一網段,配完ip位址埠就是up狀態,直連網段就形成了)
非直連網段:需要靜態路由或動態路由,將網段新增到路由表中。
靜態路由是由管理員手工配置的,是單向的,準確性高;但是,它缺乏靈活性。它是指定了資料從哪條路走,
如圖,a向c傳送資料,a的網段是10.0.0.0,那麼,需要在路由器b配置ip為10.0.0.0、埠為s0的靜態路由,資料才能從a**到c。
當路由器在路由表中找不到目標網路的路由條目時,路由器請求**到預設路由介面
如圖所示,路由器b是末節路由,最初端的路由器不知道該往哪走,只知道末節路由的網段和埠,那麼,初端路由器只需要把資料報送到下乙個路由器即可。
預設路由是一種特殊的靜態路由。
host a向host b傳送資料,路由器對資料報的封裝過程如下圖所示:
(1) host a在網路層將來自上層的報文封裝成ip資料報,其首部包含了源位址和目的位址。源位址即本機ip位址192.168.1.2,目的位址為hostb的ip位址 192.168.2.2。host a 和 host b 位址不在同一網段,因此發往hostb的資料報需要經過閘道器路由器a**;
(2)host a 通過arp請求獲得預設閘道器路由器 a 的 eo 埠mac位址00-11- 12-21-22-22。在資料鏈路層host a將ip資料報封裝成乙太網資料幀,在乙太網幀首部的源mac位址為00-11-12-21-11-11,目的mac位址為閘道器 e0 埠的mac位址00-11-12-21-22-22;
(3)路由器人從 e0 埠接收到資料幀,把資料鏈路層的資料解封裝。路由器a查詢自己的路由表, 尋找到與目標ip位址192. 16.2.2相匹配的路由表項即 e1 埠,然後封裝資料,根據路由表的下一跳位址將資料報**到 e1 埠;
(4)在 ei 埠路由器 a 重新封裝乙太網幀,此時源mac位址為路由器a的 e1 埠mac位址00-11-12-21-33-33,目的mac位址為與之相連的路由器b的e1埠mac位址00-11-12-21-44-44。 路由器a傳送arp請求,路由器b做應答,實現單播;
(5)路由器b從e1介面接收到資料幀,同樣會把資料鏈路層的封裝去掉,對目的ip位址進行檢查,並與路由表進行匹配,然後根據路由表的下一跳資訊將資料報**到e0埠。路由器b發現目的網段與自己的e0埠直接相連,通過arp廣播, 路由器b獲得host b以太口的mac位址00-11-12-21-66-66。路由器b再將ip資料報封裝成乙太網幀,源mac位址為路由器b的e0介面的mac位址00-11-12-21-55-55,目的mac位址為host b的mac位址00-11-12-21-66-66。封裝完畢,將乙太網幀從e0介面發往hostb。
ajax的工作原理以及非同步請求的封裝介紹
ajax原理 客戶端通過瀏覽器的內建物件xmlhttprequest來傳送非同步請求,當伺服器返回響應時,會呼叫先前註冊的 函式,在 函式中程式設計客棧可以使用j ascript操作dom來更新頁面,非同步請求不會阻塞客戶端程式設計客棧的操作,達到頁面無法重新整理就可以更新資料的效果。非同步請求的封...
Ajax和Jsonp的工作原理,以及區別
ajax工作原理是 相當於在使用者和伺服器之間加了 個中間層 ajax引擎 使使用者操作與伺服器響應非同步化。對於使用者請求ajax引擎會做一些資料驗證和資料處理,不是所有請求都提交給伺服器,當需要從伺服器讀取新資料時由ajax引擎代為向伺服器提交請求。ajax最大優點就是不重新整理整個頁面的前提下...
編譯器的工作過程和原理
原始碼要執行,必須先轉成二進位制的機器碼。這是編譯器的任務。比如,下面這段原始碼 假定檔名叫做test.c include intmain void 要先用編譯器處理一下,才能執行。gcc test.c a.out hello,world 對於複雜的專案,編譯過程還必須分成三步。configure ...