# 802.11 - DCF (Fragmentation) [TOC] ## 課程影片 ### 第 3K 講IEEE 802.11 無線區域網路 (Wireless LAN) L03 11 {%youtube iTo4gn49nkk %} ## Fragmentation 簡介 如果傳輸的資料無法包含在單一封包裡面,就需要切分成多個封包傳輸。這種 ==「把單一資料切分成多個部分,並各自以封包傳輸」的動作,就稱為 *fragmentation*==。而每一個裝有資料片段的封包,就稱為一個 *fragment*。 在發生這種狀況時,並不會每傳送一個 *fragment* 之前都做一次 *RTS/CTS*,而是: 1. 讓上一個 *fragment* 兼具 *RTS* 的功能:而 `duration` 則是藉由設定該 *fragment* 的 `duration` 欄位做到。 2. 上一個 *ACK* 兼具 *CTS* 封包的功能:而原理一樣是藉由設定這個 *ACK* 封包的 `duration` 欄位。 而最後一個 *fragment* 與 *ACK* 的 `duration` 欄位就會是 `0`。 ## 例子:RTS/CTS 交握 + 3 個 Fragment 在這個例子中,資料被分為 3 個 *fragment*。在傳輸之前,首先進行 *CTS/RTS* 交握,接著逐一傳輸 *fragment*:  而傳輸的步驟,大致可以區分為以下四個部分: ### Step 0:RTS/CTS 交握 這一步就是前面講到的 *RTS/CTS* 機制: 1. `src` 發送一個 *RTS*,裡面的 `duration` 欄位告訴 `dst` 他需要傳送多少時間。 2. 所有聽到這個 *RTS* 的節點,將這個 *RTS* 的 `duration` 紀錄在自己的 NAV 中。 3. `dst` 在等待 *SIFS* 時間後,廣播一個 *CTS*。當中的 `duration` 欄位表示自己需要多少時間傳輸。 4. 除了 `src` 以外的所有節點聽到這個 *CTS* 之後,將這個 *CTS* 中的 `duration` 紀錄在自己的 NAV 中。  ### Step 1:第一個 Fragment 1. 交握完畢之後,傳送第一個封包。與前面的傳輸不一樣的是:這個 *fragment* 的封包當中的 `duration` 欄位記錄著「下一次傳輸需要多久的時間」,所以其實兼具下一次傳輸的 *RTS*。 2. 所有聽到這個 *fragment* 的節點,自動把這段時間加到 NAV 中。 3. 收到 *fragment* 的 `dst` 在等待一段 *SIFS* 之後,廣播 *ACK*。這個 *ACK* 同時作為下一個封包的 *CTS*,當中的 `duration` 欄位也會被填寫。 4. 所有聽到這個 *ACK* 的節點,一樣將這個 *ACK* 的 `duration` 加到自己的 NAV 上。  ### Step 2:第二個 Fragment 接下來的過程與第一個 *fragment* 發師的事情一樣:*fragment* 兼具下一個封包的 *RTS*,而 *ACK* 則同時作為下一個 *fragment* 的 *CTS*:  ### Step 3:最後的 Fragment 最後一個 *fragment* 中,發生的事情類似。只是這個 *fragment* 的 `duration` 欄位,以及 *ACK* 的 `duration` 欄位通通都是 `0`。這樣一來在這個封包結束時,其他節點的 NAV 就會在這個 *fragment* 結束之後變成 0。因此這兩個節點在其他節點眼中就會是閒置的: 
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up