前一陣子作路由器的聯網,因爲利用了Openwrt操做系統,作起來雖然方便,可是不少原理細節都被忽略了。因此這裏再來老生常談一下wan口和lan口的區別,以及他們之間的工做原理。html
首先百度一下,基本知識:linux
熟悉網絡的朋友都知道WAN是英文Wide Area Network的首字母所寫,即表明廣域網;而LAN則是Local Area Network的所寫,即本地(或叫局域網)。那麼咱們不妨給路由器上的WAN口和LAN口取一箇中文名稱,分別是廣域網端口和本地網端口。從名稱中不難發現,WAN口主要用來鏈接外部網絡,如ADSL、LAN、光纖等各類接進線路;而LAN口用來鏈接內部網絡,主要與局域網中的交換機、集線器或PC相連。在家裏使用時,路由器WAN口使用的IP地址爲網絡運營商所提供的靜態或動態公網IP地址,而LAN口所使用的IP地址則是局域網中分配的內網IP地址。所以,每個路由器都會擁用一個私有IP地址,這樣既可以讓路由器充當局域網中的網關,也便於網管對路由器進行治理。寬帶路由器的路由功能就體如今wan口IP地址和lan口IP地址之間的數據路由上,一般咱們根據網絡運營商所提供的接入方式來設置WAN口的網絡參數,一般有靜態IP地址、動態IP地址或PPPOE等方式,它與網絡運營商的接入設備處於同一個外網。而將LAN口的IP地址則設置爲本地局域網內的IP地址,一般是咱們本身能夠在寬帶路由器上自行設定的IP地址,LAN口下所鏈接的計算機組成一個「本地網」,路由器的LAN口IP地址是這個網絡的網關。服務器
再詳細說說數據在同一個路由器上wan口和lan口數據是如何走的。其實這個過程就是NAT的一個過程。NAT技術的出發點事爲了解決IPv4地址不足的問題,提升現有IPv4地址利用率,但他們的實現機制不同。VLSM和CIDR也是這個目的,他們是經過調整子網掩碼長度。而NAT技術經過容許組織內部網絡使用非全局可路由IP地址的用經過地址轉換爲全局可路由的IP地址來訪問Internet,以下降對公網IP地址的需求。網絡
NAT就運行在位於內外網之間的路由設備上,在內外網用戶之間通訊時對數據包中的地址進行轉換。負載均衡
主要用於三種情形:(1)無足夠的公網IP地址可用時(2)重構網絡IP地址部署(3)實現簡單的TCP負載均衡。ide
咱們這裏用家庭網絡來作舉例,家庭內部網絡的機器都是接lan口,經過lan口向外部網絡發送數據包,首先發送一個請求到默認網關,其實就是cpu上的lan口,這裏咱們這麼理解,通常的路由器上的網關就是指cpu上的lan口,它通常經過交換芯片擴展出4個lan口,這些lan口就是平時使用的那幾個lan口。路由器在分析下面發送來的數據包後,檢查數據包中的內網IP地址時會檢查設備自己的NAT地址轉換表。在找到相應條目後,把源地址也就是原本的內網IP地址換成wan口的IP地址,目的地址不變,發送到外網上去。外部網絡接受到數據包後,會解析出數據包中的路由器wan口IP地址,將響應數據包返回到這個wan口IP地址,發送迴路由器。路由器將這個返回數據包中目的地址(wan口IP)NAT轉換爲內網IP,最終共完成整個數據包的發送和接受。spa
這裏其實有一個問題要深刻一下,這麼多lan口,你怎麼區別返回數據時NAT該怎麼轉換?操作系統
另外路由器是怎麼給這些lan口自動分配內網IP地址的?htm
先來回答第一個問題:blog
當一臺小型商務企業的內部網計算機用戶鏈接到 Internet 資源時,該用戶的 TCP/IP 協議產生一個 IP 數據包,該數據包包含如下值,這些值位於 IP 和 TCP 或 UDP 標頭中:(粗體內容表示受 NAT 影響的項目):
• 目標 IP 地址:Internet 資源 IP 地址
• 源 IP 地址:私有 IP 地址
• 目標端口:Internet 資源 TCP 或 UDP 端口
• 源端口: 源應用程序 TCP 或 UDP 端口
請求源主機或者其它路由器將此 IP 數據包發送給 NAT, 而後由 NAT 將向外發送的數據包的地址解析以下:
• 目標IP地址:Internet 資源 IP 地址
• 源IP 地址:ISP 分配的公用地址
• 目標端口:Internet 資源 TCP 或 UDP 端口
• 源端口:從新映射的源應用程序TCP 或 UDP 端口
NAT 將從新映射的 IP 數據包發送到 Internet 。響應計算機將向 NAT 返回一個響應。當 NAT 接收到此響應時,該數據包將包含如下地址信息:
• 目標IP 地址:ISP 分配的公用地址
• 源IP地址:Internet 資源 IP 地址
• 目標端口:從新映射的源應用程序 TCP 或 UDP 端口
• 源端口:Internet 資源的 TCP 或者 UDP 端口
當 NAT 完成映射和解析地址後,將向 Internet 客戶端發送數據包,此數據包包含如下地址信息:
• 目標 IP 地址:私有 IP 地址
• 源 IP 地址:Internet 資源 IP 地址
• 目標端口:源應用程序TCP 或者 UDP 端口
• 源端口:Internet 資源 TCP 或 UDP 端口
看完這段,個人理解是根據NAT表和端口號來對不一樣的lan和不一樣的服務作區別的。NAT表應該是臨時建立的,哪一個lan口發出請求,NAT表就增長一項,記錄私有(內網)IP,不一樣的服務使用端口號的映射來作區別。
那麼第二個問題就要涉及DHCP了。咱們再來了解下這個應用層服務。基礎知識能夠先百度。
DHCP是一個基於廣播的協議,它的操做能夠歸結爲四個階段,這些階段是IP租用請求、IP租用提供、IP租用選擇、IP租用確認。
從這4個名詞中咱們就知道DHCP的基本工做原理了,首先lan廣播找到DCHP服務器,那麼lan廣播的這一段就是DHCP客戶端。接着可能有不少DHCP服務器返回了OFFER報文進行IP地址預分配,而後DHCP客戶端選擇(通常是第一個收到的offer)進行確認REQUEST,DHCP服務器收到確認後,帶着預先準備好的ip發送ACK報文,完成整個過程。那麼這裏的服務器就是咱們的網關咯,也就是CPU,它是裝過dhcp服務的openwrt系統,可是openwrt系統的dhcp和linux不同,完了再慢慢研究吧。不過我想原理是差很少的。