乙個路由器最少有兩張網絡卡,一張網絡卡對外即公網網絡卡,是運營商在出廠的時候賦予的.
另一張網絡卡對內, 即內網網絡卡
路由器的路由表中最少也有兩條規則
1>第一條規則匹配的 是 預設閘道器 (後面會有解釋) —公網網絡卡
2>第二條規則匹配的 是 區域網 —內網網絡卡
每當我們的pc連線wifi的時候,路由器就會給這台pc乙個ip位址. 因為路由器上面跑這乙個服務, dhcp server 程式. 對應的是,pc上肯定也會跑著 dhcp client .
如圖:檢視dhcp client
當我們的dhcp client拿到 ip 位址之後就會把它設定在對應的網絡卡上面.
思考這樣乙個問題, 我們的pc沒有公網的ip, 但是為什麼連線上 wifi 就能和公網互通了呢? 立馬想出的答案肯定是路由器搞的鬼
但是裡面的具體操作是什麼呢 ?
發包
我們首先檢視pc路由表. 如圖
簡要說明一下:
destination: 目的位址
gateway: 閘道器
genmask: 掩碼
flags: 標誌位, 其中 g 代表閘道器 -即 gateway 不為空
iface: 網絡卡
其中 iface 這個網絡卡和 gateway 這個是直連的,屬於同乙個lan
乙個資料報傳送的時候,會檢視路由表
首先 目的位址 和 genmask 進行與操作,然後和destination 進行匹配.
14.215.177.38 與 0.0.0.0 = 0.0.0.0
匹配第一條
然後需要知道目標位址(路由器)的mac位址.
此時通過arp 協議得到路由器的mac位址. 就可以傳送資料報了
資料報 (mac 位址就不詳細寫了)
src ip
192.168.30.214
dst ip
14.215.177.38
src mac
pc mac
dst mac
路由器 mac
路由器的角度:
我(路由器)收到了乙個資料報, 首先檢視mac位址和我的mac位址是否一致, 不一致則丟棄 .
發現一致後,開始解包. 發現 ip 位址不是我的ip位址. 我就把資料報發給預設的閘道器.
預設閘道器: 公網的ip位址,這個位址是運營商給的.
路由器在把資料報傳送到公網前會進行源位址改寫 即 snat 源位址對映
同時 dst mac位址會變成 運營商的網路節點的mac位址
此時的資料報
src ip
路由器 ip
dst ip
14.215.177.38
src mac
pc mac
dst mac
運營商的網路節點 mac
回包src ip
14.215.177.38
dst ip
路由器ip
src mac
pc mac
dst mac
路由器 mac
路由器接收到資料報後,它會還原目標位址 .因為在第一次改寫的時候會有做乙個記錄, 當返回的包到來是會在返回為源目標只
src ip
14.215.177.38
dst ip
路由器ip
src mac
pc mac
dst mac
192.168.30.214
還原後發現這個資料報不是給它的, 它在此找到路由表 匹配到了 對內網絡卡的這條規則 - - 區域網
然後它會發給區域網中的pc. 此時回包也搞通了.
以上就說明了乙個資料報從pc發往公網並且公網返回乙個資料報到pc 的過程.
怎樣用Sniffer監聽閘道器資料報
偵聽的物件可以是乙個或多個交換機埠,或者整個vlan。如果要偵聽的埠 源埠 或vlan和連線監控工作站的埠 目標埠 在同一臺交換機上,我們只需配置span 如果不在同一臺交換機上,需要配置rspan remote span 不同的交換機對span有不同的限制,如2900xl交換機中源埠和目標埠必須在...
tcpreplay是如何回放資料報的
tcpreplay我們通常用於回放資料報,那麼tcpreplay究竟是會怎樣回放呢?是根據什麼內容來發包的。首先tcpreplay有各種的引數供我們選擇和設定,具體的參看我的另一篇帖子即可。這裡我主要交代,tcpreplay是如何根據資料報的內容來確定發往 那麼所謂回訪資料報的意思就是,將這個資料報...
Arduino 通過串列埠給上位機發資料報研究
填入報文 上位機解析 目前有個需求是要用arduino從暫存器讀感測器資料,然後把資料傳送給unity開發的上位機,在傳送資料時,通過協議確定資料報的格式。這裡構建乙個7位陣列 byte sendarray 7 012 3456 報頭報文1 報文2報文3 報文4報文5 報尾報頭 報文1 為資料型別 ...