Router轉發封包的原理(NAT/NAPT)

上次開會,公司老闆說:為何一個Router測試的功能,你API做了那久還沒弄出來,都用「年」來算的了。因為老實說,我根本沒有開始啊啊啊~最近比較空閒一點,想說來弄一下,結果公司居然找不到一台正常的Router,幾乎都有問題的。於是就趁中午休息空檔,去黃色小屋買了一台基本的一個WAN,四個LAN的Router來玩。

Router測試其實也跟一般交換機測試沒兩樣,只是接的端口是WAN-LAN。而一般交換機等同是LAN-LAN端口測試,基本上Learning沒有特殊的,只要認MAC就好。而Router測試則不同,WAN和LAN處於兩個不同網關,第一步必須要想辦法讓他們彼此溝通。

以家裡種花電信的小烏龜來說,WAN端接上外頭連進來的網路線,透過PPPoE要到IP資訊,而家用設備則連接到LAN端,其實透過一些機制,才可以上網。這樣的機制,就是NAT(應該算NAPT)。家用設備要連上網路,找到外頭IP,且把資訊送回來,靠的就是Router的轉發。如果分析起來,不外乎這幾個動作而已:

  • 初始的設定:首先要知道一些Router IP資訊,以及要發包測試的兩個端口的資訊。


  • 兩個端口發ARP Request:目的是取得Router端的MAC資訊

  • LAN端口發UDP到WAN:這時Router會轉發,並且給予一個特定Port,WAN端就只會看到來自Router特殊Port的封包
  • WAN端口發DUT到LAN:其實是WAN發送到Router,根據獲取的Port,由於Router記起來Port對應表,所以就會將封包轉發給LAN Port。兩邊就可以通訊了。
我測試的Demo程式長這樣:
  1. 選擇Static IP or DHCP
  2. 執行取得對應的Port number的程序
  3. 看結果
  4. 把取得資訊當參數,由WAN端傳送設定的封包筆數到LAN,再由LAN去取counter值呈現

綠色部份是透過上面方法去取到的,LAN端還寫了DHCP Client,所以可以自動去跟Router要一個IP填上,這樣LAN端幾乎完全不用填。WAN端就沒寫DHCP Server,太麻煩,反正只要驗證可以透過這種方法通就好。Port number的部份基本上可以亂填。當我要到轉發的Port number之後,就代表成功了。應該可以直接用兩張網卡來代替我的裝置,進行測試。



1 意見:

Unknown 提到...

請問L2 網管交換器能做到嗎?

我需求PC能透過Router,進入Modem後台

而我目前硬體左法:router的WAN和LAN1互接,LAN2接Modem的LAN1
(Modem不硬撥和不開DHCP,因硬體效能差)交由Router全負責(硬撥/Wifi/DHCP)

但表面正常,但封包LOOP

設定上不熟~可以請教您如何設定,能避免LOOP? 感激

搜尋此網誌

總網頁瀏覽量

TK呱呱

Made with by TK