封包如何在網路上傳遞

瞭解封包如何在網路上傳遞是很吸引人的,畢竟,我們的生活,已經離不開網路,接下來的介紹會從三個主要的表格開始:

Routing Table: 比對 Destination IP,決定接下來的 Router 的 IP Address。

ARP Table: 比對 IP Address,決定其對應的 MAC Address。

MAC Address Table: 比對 MAC Address ,決定該 MAC Address 主機位於哪個的 port。 (Switch 才有的功能)




封包的傳遞分成三個階段 Host 1 送到 Router 1; Router 1 送到 Router 2; Router 2 送到 Host 4。

Source/Destination MAC Address 在三個階段都是不同的,會根據 Source 及 Destination 端而改變,但 Source/Destination IP Address 在三個階段都不會變

在每個階段中,都會依賴 Routing Table,來找尋 Destination IP Address 的 Router IP Address,再以找到的 Router IP Address 從 ARP Table 找到其 MAC Address,以此 MAC Address 來取代 Destination MAC Address,並以自己的 MAC Address 來取代 Source MAC Address。

而 MAC Address Table 則是 Switch 在用的,用比對 Destination MAC Address 是在哪個 port 上,比對到後,就把封包往那個 port 送即可。


附帶一提,在這邊的討論中,為了讓情況簡單化,所以忽略可能有使用 NAT (Network Address Port Translation) 的情況。



Routing Table

Routing Table 是用來幫助搜尋封包路徑 (route),所以它的內容為 IP Address 與對應的 Route,也就是在傳送封包時,已知終點站的 IP Address,就可以以該 IP Address 為依據來查詢 Routing Table,如果有比對到該 IP Address 的資料,且該 IP Address 與自己屬於同一個區域網路,則會得到與該區域網路連接的 Interface,直接利用該 Interface 傳遞該封包到終點站即可,如果該 IP Address 與自己屬於不同區域網路,就會得到下一站的 IP Address,就是就是下一個 Router,又如果沒有比對到終點站的 IP Address 的資料,則丟棄該封包。

要注意的是,Host 和 Router 雖然都有 Routing Table,但是內容卻不完全相同。

在 Host 端的 Routing Table 只有擁有與自己直接連接的區域網路的路徑資料,加上 Default Gateway 的設定,也就是說,如果封包終點站的 IP Address 在自己的區域網路之內,則 Host 可以直接傳送封包過去,但是如果不在,就把封包往 Default Gateway 傳遞,由 Default Gateway 決定下一站,通常 Default Gateway 就是一台 Router。

在 Router 的 Routing Table 除了擁有與自己直接連接的區域網路的路徑資料外,還會與其它的 Router 交換 Routing Table 的資訊,也就是說,它會包含全部網路的路徑資訊,所以可以幫助將封包從任何一個端點,傳遞到任何網路上的另一個端點。

Routing Table 範例:




ARP Table

ARP Table 通來是用來尋找 IP Address 與 MAC Address 之間的配對,所以 ARP Table 的內容為 IP Address 與對應的 MAC Address,也就是說,在傳送封包時,已知下一站的 IP Address,就可以以該 IP Address 為依據來查詢 ARP Table,如果有比對到該 IP Address 的資料,就可以得到 MAC Address。

如果 ARP Table 中查詢不到該 IP Address,則該 Host 就會發出廣播封包 ARP Request 來詢問區域網路上的所有 Host ,當該 IP Address 的 Host 收到 ARP Request,會先將 ARP Request 中的 Host 端 IP Address 與 MAC Address 更新到自己的 ARP Table,接著再發送 Unicast 封包 ARP Reply (也稱為 ARP Response),回覆自己的 MAC Address 給發送端,此時 ARP Table 已有發送端的資料,所以可以利用 ARP Table 順利得到發送端的 MAC Address;接著發送端收到 ARP Reply 之後,會將 IP Address 與 MAC Address 更新到 ARP Table。

ARP Table 範例:


ARP Request/Reply 封包格式:


值得一提的是,ARP Table 的內容,只有在收到 ARP 封包時才會更新。



MAC Address Table

MAC Address Table 是用來幫助 Switch 尋找 Switch Port,所以 MAC Address Table 的內容為 MAC Address 與對應的 Switch Port,也由此可以知道 MAC Address Table 是 Switch 所專有的表格,也就是在轉送封包時,會以該封包的 Destination MAC Address 為依據查詢 MAC Address Table,如果有比對到該 MAC Address 的資料,就可以決定要把該封包從哪個 Switch Port 送出去。

Switch 在收到封包時,會先更新自己的 MAC Address Table,也就是會將該封包的 Source MAC Address 與收到該封包的 Switch Port 儲存到 MAC Address Table,接著在 MAC Address Table 查詢該封包的 Destination MAC Address,如果查詢不到該 MAC Address,則為了完成轉送的任務,該 Switch 會把該封包轉送到所有的 Switch Port,除了收到該封包的 Switch Port 之外,這種傳送方式稱為 Flooding,接著,如果該 Destination MAC Address 的 Host 主動透過 Switch 傳送封包,則 Switch 就會把其 Source MAC Address 與收到該封包的 Switch Port 儲存到 MAC Address Table。

但是如果該 Destination MAC Address 的 Host 一直不主動透過 Switch 傳送封包,則該 Switch 就永遠無法將該 Host 的資料更新到 MAC Address Table 中,進而導致永遠只能用 Flooding 的方式來將封包傳送到該 Host 。

MAC Address Table 範例:



到此,三個表格介紹完成,接下來,只要再繼續瞭解這三個表格分別在什麼情況中使用,就對封包的傳遞有更深一步的瞭解了。
一般來說, Host 之間透過網路溝通的情況為:


以下將分別說明在 Host 、Switch、Router 如何完成收送封包的任務。

 



Host 如何收送封包

Host 收到封包時,會比對 Destination MAC Address,如果與自己的 MAC Address 完全相同,才會繼續處理,否則直接丟棄該封包,例外的情況是當封包的 MAC Address 為 Broadcast 格式,則收到該封包的 Host 都應該要接收、處理此封包,或是封包為 Multicast 格式,則有監聽該 Multicast Address 的 Host 都應該要接收該封包。

Host 傳送封包時,在 L3 Header 會把自己的 IP Address 填入 Source IP Address 欄位,將封包接收者的 IP Address 填入 Destination IP Address 欄位,接著在 L2 Header 會把自己的 MAC Address 填入 Source MAC Address 欄位,接著要判斷要如何填 Destination MAC Address 欄位。

判斷的方式是利用接收者的 IP Address 在 Routing Table 找尋適合的路徑,如果該 IP Address 就是與自己直接連接的區域網路上,則在 L2 Header 的 Destination MAC Address 欄位直接填入接收者 IP Address 所對應的 MAC Address 即可;如果該 IP Address 不在與自己直接連接的區域網路上,則在 L2 Header 的 Destination MAC Address 欄位填入 Default Gateway IP Address 所對應的 MAC Address。

至於如何把 IP Address 轉換成對應的 MAC Address,首先會搜尋 ARP Table,如果搜尋不到,則發送 ARP Request 尋問。



Switch 如何收送封包

Switch 收到封包時,會以封包的 Source MAC Address 與收到該封包的 Switch Port 為依據來更新 MAC Address Table。

Switch 傳送封包時,會以封包的 MAC Address Table 查詢 Destination MAC Address,如果有找到,則將封包往該 Switch Port 傳送即可,如果沒有,就需要以 Flooding 的方式來傳送該封包。




Router 如何收送封包

Router 收到封包時,會比對 Destination MAC Address,如果與自己的 MAC Address 完全相同,才會繼續處理,否則直接丟棄該封包。

Router 傳送封包時,會重新填寫的 L2 Header,把自己的 MAC Address 填入 Source MAC Address 欄位,接著要判斷要如何填 Destination MAC Address 欄位。

與 Host 的行為相同,判斷的方式也是利用接收者的 IP Address 在 Routing Table 找尋適合的路徑,如果該 IP Address 就是與自己直接連接的區域網路上,則將接收者 IP Address 所對應的 MAC Address 直接填入即可;如果該 IP Address 不在與自己直接連接的區域網路上,則在 L2 Header 的 Destination MAC Address 欄位填入下一個 Router 的 IP Address 所對應的 MAC Address。

至於如何把 IP Address 轉換成對應的 MAC Address 的作法都一樣,會先搜尋 ARP Table,如果搜尋不到,就發送 ARP Request 尋問。



總結

到此,網路上 host 之間的傳遞已經說明完畢,總結歸納如下:

封包的傳遞分成三個階段 Host 1 送到 Router 1; Router 1 送到 Router 2; Router 2 送到 Host 4。

Source/Destination MAC Address 在三個階段都是不同的,會根據 Source 及 Destination 端而改變,但 Source/Destination IP Address 在三個階段都不會變

在每個階段中,都會依賴 Routing Table,來找尋 Destination IP Address 的 Router IP Address,再以找到的 Router IP Address 從 ARP Table 找到其 MAC Address,以此 MAC Address 來取代 Destination MAC Address,並以自己的 MAC Address 來取代 Source MAC Address。

而 MAC Address Table 則是 Switch 在用的,用比對 Destination MAC Address 是在哪個 port 上,比對到後,就把封包往那個 port 送即可。
 


很推薦這篇文章:Practical Networking: Packet Traveling,如果對英文不排斥,建議可以花時間看。



Practical Networking: Packet Traveling

文字內容 或 影像內容 部份參考、引用自網路,如有侵權,請告知,謝謝。

 

arrow
arrow
    全站熱搜

    silverwind1982 發表在 痞客邦 留言(0) 人氣()