上一篇文章分析了互聯網的總體構思,從下至上,每一層協議的設計思想。
這是從設計者的角度看問題,今天我想切換到用戶的角度,看看用戶是如何從上至下,與這些協議互動的。
先對前面的內容,做一個小結。
我們已經知道,網絡通信就是交換數據包。電腦A向電腦B發送一個數據包,后者收到了,回復一個數據包,從而實現兩臺電腦之間的通信。數據包的結構,基本上是下面這樣:

發送這個包,需要知道兩個地址:
> * 對方的MAC地址
>
> * 對方的IP地址
有了這兩個地址,數據包才能準確送到接收者手中。但是,前面說過,MAC地址有局限性,如果兩臺電腦不在同一個子網絡,就無法知道對方的MAC地址,必須通過網關(gateway)轉發。

上圖中,1號電腦要向4號電腦發送一個數據包。它先判斷4號電腦是否在同一個子網絡,結果發現不是(后文介紹判斷方法),于是就把這個數據包發到網關A。網關A通過路由協議,發現4號電腦位于子網絡B,又把數據包發給網關B,網關B再轉發到4號電腦。
1號電腦把數據包發到網關A,必須知道網關A的MAC地址。所以,數據包的目標地址,實際上分成兩種情況:
| 場景 | 數據包地址 |
|--|---|
| 同一個子網絡 | 對方的MAC地址,對方的IP地址 |
| 非同一個子網絡 | 網關的MAC地址,對方的IP地址 |
發送數據包之前,電腦必須判斷對方是否在同一個子網絡,然后選擇相應的MAC地址。接下來,我們就來看,實際使用中,這個過程是怎么完成的。