2008年10月6日 星期一

802.11 訊框封裝細節


用戶端是source、左邊基地台是傳送端(送資料到無線網路)、右邊基地台是接收端(有無線網路接收資料)、伺服器是destination

802.11的訊框主要分成三種:
1. 資料訊框 (data frame):負責在工作站之間搬運資料
2. 控制訊框 (control frame):通常與資料訊框搭配使用,負責區域的淨空 (area cleaning)、頻道的取得 (channel acquisition)以及載波偵測的維護 (carrier-sensing maintenance),並於收到資料時予以正面的回應 (positive acknowledgment of received data)。它們可用來監督無線網路媒介的存取,提供MAC層次的可靠度。
3. 管理訊框 (management frame):負責監督,主要用來加入或退出無線網路。

任何訊號發送前均會有SIFS (短訊框間隔)

資料訊框有兩種分類方式
1. 依競爭服務 (contention-based service)及免競爭服務 (contention-free service)
2. 另一種分類方法為攜帶資料與提供管理功能的訊框

Duration (持續時間) :欄位用來記錄網路配置向量 (Network Allocation Vector,簡稱NAV) 的值
1. 免競爭期間所傳遞的任何訊框,必須將Duration欄位設定為32768
2. 目的地為廣播或群播位址的訊框,其持續時間為0,此類訊框接收端不會加以回應
3. 若More Fragment為0,則表示後面無分割資料,則Duration欄位為一個短訊框間隔及片段回應所需的時間
4. 若Frame Control欄位的More Fragment為1,則Duration為兩個回應加3個短訊框間隔及下一個訊框片段所需要的時間

定址與DS位元:
工作站會回應來自同一個基本服務組合 (Basic Service Set,BSS )的廣播或群播訊息;至於來自其它不同BSS者,則加以忽略。

BSSID:
每一個BSS都會被賦予一個BSSID。在Infrastructure BSS中,BSSID就是建立該BSS之基地台無線介面的MAC位址。而IBSS則必須建立BSSID (隨機產生),方能產生網路。
有一個BSSID會被保留不用,就是所有位元均為1的BSSID,又稱為廣播型BSSID,因其不會被MAC中任何BSSID filter所過濾。probe訊框要能夠偵測現存的網路,因此不能被BSSID filter過濾。

資料訊框的類型
1. Data
2. Null:行動式工作站會利用Null訊框來通知基地台省電狀態的改變。當工作站進入休眠狀態,基地台必須開始為之暫存訊框。另外,基地台不可能進入省電模式,因此不會傳送Null訊框。

控制訊框
RTS (要求傳送)
媒介存取權祇能保留給單點傳播 (unicast) 訊框使用,而廣播 (broadcast) 與群播 (multicast)訊框祇須傳送便是。

CTS (開始傳送)
CTS訊框有兩種目的,起初,CTS訊框僅用於回應RTS訊框,後來CTS訊框被802.11g防護機制用來避免干擾較舊的工作站。

ACK (回應)
ACK訊框就是MAC以及任何資料傳輸(包括一般傳輸、RTS/CTS交換之前的訊框、訊框片段)所需要的正面回應 (positive acknowledgment)

PS-Poll (省電模式-輸詢)
當任一部行動式工作站從省電模式中甦醒,便會傳送一個PS-Poll訊框給基地台,以取得任何暫存訊框。
所有收到PS-Poll訊框的工作站,都會以訊框間隔加上傳送ACK訊號所需要的時間來更新NAV。

管理訊框

訊框的組成十分彈性分為兩種欄位
1. 固定式欄位
2. 資訊元素 (是指非固定式的欄位)

固定式欄位的有:
Beacon interval:每隔一段時間就會發出Beacon(信標)訊號,用以宣布802.11網路的存在。Beacon訊框中除了包含BSS參數的資訊,也包含基地台暫存訊框的資訊,因此行動式工作站必須仔細聆聽Beacon訊號。

Capability information:
傳送Beacon訊號的時候,它被用來昭告各方,該網路具備何種性能。工作站會使用這些公告資料來判斷自已是否支援該BSS所有功能,未能實作公告的所有功能的工作站就無法加入該BSS。

Current AP Address:
這欄位的用途是便於連線 (association) 與重新連線 (re-association)的進行。工作站會藉此傳送上一次所連線之基地台的位址。當工作站打算與不同的基地台建立連線時,此欄位可以用來轉換連線,以及取回所有暫存的訊框。

Listen interval欄位:
當工作站處於休眠狀態,基地台必須為之暫存訊框。休眠中的工作站會定期起來聽往來的訊息,而listen interval就是以Beacon interval為單位所算出來的休眠時間。

Association ID:
當工作站與基地台連線時,就會被賦予一個連線識別碼,用以協助控制與管理功能。

Time stamp:
可用來同步BSS中的工作站,BSS的主計時器會定期傳送目前已作用的微秒數。

Reason Code:
當對方不適合加入網路時,工作站會送出Disassociation (解除連線)或Deauthentication (解除身份認證) 訊框作為回應。

Status Code:
為0表示某項作業成功,非0表示失敗。

「管理訊框」的資料元素
資訊元素(information element)是管理訊框的組成元件,其長度不定。
Service Set Identity (SSID)
共同組成延伸式服務區域 (extended service area) 所有基本服務區域 (basic service area) 都會使用相同的SSID。

broadcast SSID祇會於 Probe Request訊框,工作站可以藉此找出該區域中所有的802.11網路

Supported Rates:
當行動式工作站試圖加入網路,會先檢視該網路所使用的資料速率。有些速率是強制性的,每部工作站都必須支緩,有些則是選擇性的。

Traffic Indication Map (TIM) 資訊元素:
基地台會為處於休眠的工作站暫存訊框。每一段時間基地台會嘗試傳送這一些暫存訊框給休眠中的工作站。TIM的內容是virtual bitmap,這是由2008個位元所組成的邏輯結構。每一個位元分別映到一個連線識別碼 (Association ID) 當某個識別碼有資料暫存時,相應的位元就會設為1,否則為0

Request 資訊元素:
在Probe Request訊框中,Request資訊元素用來向網路查詢特定的資訊元素。

IBSS DFS 資訊元素:
在中控型 (Infrastructure) 網路裡,是由基地台負責動態選項,至於獨立型 (Independent) 網路,則必須指定由誰進行動態選項 (dynamic frequency selection,簡稱DFS) 演算法。

管理訊框
Beacon (信標) 訊框:
Beacon訊框是相當重要的維護機制,主要用來宣告某個網路的存在。定期傳送的信標,可讓行動式工作站得知該網路的存在。存中控型網路裡,基地台必須負責傳送Beacon
Probe Request訊框:
Probe Request包含兩個欄位:SSID以及Supported Rate。收到Probe Request訊框的工作站會據此判斷對方能否加入網路。

Probe Response訊框:
如果Probe Request訊框所探查的網路與之相容,則該網路會以Probe Request訊框回應。送出最後一個Beacon訊框的工作站,必須負責回應所收到的探查訊息。存中控型網路裡負責回應是基地台,存IBSS當中,工作站會彼此輪流傳送Beacon訊息。

IBSS的資料待傳指示通知訊息 (ATIM) 訊框:
IBSS中沒有基地台,因此無法仰賴基地台暫存訊框。IBSS中的工作站如果處於休眠狀態的接收者暫存訊框,就會存遞送期間送出一個ATIM訊框,通知對方有訊息待傳。

Disassociation與Deauthentication訊框
Disassociation訊框來終結一段連線關係,而Deauthentication (解除認證) 訊框則用來終結一段認證關係。

Association Request:
一旦行動式工作站找到相容網路並且通過身份認證,便會發送Association Request (連線要求) ,試圖加入網路。在接授連線前基地台會驗証Capability Information、SSID及 (Extended) Supported Rated等欄位是否合乎網路參數,另外,基地台也會記錄工作站使用的Listen Interval

Reassocation Request:
位於相同延伸服務區域,但在不同基本服務區域之間遊走的行動式工作站,若要再次使用傳輸系統必須重新連線。

Association Response與Reassociation Response:
當行動式工作站試圖連線基地台時,基地台會回覆一個Association Request (連線回應) 或 Reassociation Response (重新連線回應)

訊框傳送以及連線與身份認證狀態:

2008年10月5日 星期日

Software quality factors:軟體品質因子

McCall's factor model
提出十一個軟體品質的因素

分成三大項,每一項分成多個小項
Product operation factors:
Correctness
輸出是精確的、輸出的資訊完整的、資訊具有時效性、資訊具有可用性、coding的standard和文件的standard
Reliability
處理錯誤使得系統可以提供服務、定出可以容忍的錯誤率
Efficiency
要完成所有功能所需要硬體、在硬體上可以發揮最大的效能、所需的硬體的花費
Integrity
系統的安全性、不能讓user拿到不該拿的資料、確定使用者有哪一些權利(write、read...)
Usability
當訓練新的使用者時,所需要花費的時間

Product revision factors:
Maintainability
由user與工程師去尋找bug和解決bug的努力
是否有模組架構與撰寫程式標準和撰寫文件
Flexibility
系統最好可以適用在多數類似的使用者身上
Testability
提供一些結果與記錄檔
在開始系統之前,提供一些記錄檔與報告
自動提供錯誤的訊息記錄
Product transition factors:
Portability
系統可以在不同的作業環境與硬體上執行
Reusability
設計新的系統可以使用多少舊系統的元件
可以節省資源,較短的時間,並且提供較高的模組品質
Interoperability
建立接口,可以跟讓不同的系統溝通
明確指出輸出的標準結構

2008年10月4日 星期六

What is software quality?

軟體的特性:
1. 複雜性
2. 不可見的

軟體的三種錯誤
1. error:程式的語法錯誤或是與客戶之間的需求的邏輯錯誤。有並不是所有的error都會變成fault,有一些時候這一些誤錯的程式碼並不會影響到到程式的功能性。
2. fault:程式錯誤,但尚未被觸發或是永遠不會達成的條件。換句話說,fault就是沒有被觸發的failure(像是有一些功能使用者完全不會用到)。
3. failure:導致出來的結果錯誤或中斷軟體運作



9種導至軟體出現的錯誤
1. Faulty requirements definition
2. Client-developer communication failures
3. Deliberate deviations from software requirements
4. Logical design errors
5. Coding error
6. Non-compliance with documentation and coding instructions
7. Shortcomings of testing process
8. User interface and procedure errors
9. Documentation errors

工作~

雖然離畢業還有很長的一段路,不過,最好還是早一點了解市場的需求吧~

最近還是有空找一下有台南有什麼工作職缺~
當然是離家近比較好囉~
反正,有空就找找看吧~

(宏達電)宏達國際電子股份有限公司
在台南有分公司,好像不錯喔~
台南市中西區

台灣積體電路製造股份有限公司(台積電)
台南縣善化鎮(台南科技工業區)

奇美精密科技股份有限公司
木柵港東路21號

南茂科技股份有限公司
台南縣新市鄉(南部科學園區)

failed to write cache

通常在安裝ubuntu之後,
更新完套件後,
會出現在更新openoffice時,會出現一堆failed to write cache的錯誤~

原來是有一些檔案不存在,因此我們必需要新增這一些檔案~
建立以下的檔案
patch.sh

#!/bin/bash
#
# 修正 Ubuntu 7.04 fc-cache failed to write cache 錯誤
#

sudo touch /usr/share/fonts
sudo touch /usr/share/fonts/X11
sudo touch /usr/share/fonts/X11/100dpi
sudo touch /usr/share/fonts/X11/75dpi
sudo touch /usr/share/fonts/X11/Type1
sudo touch /usr/share/fonts/X11/encodings
sudo touch /usr/share/fonts/X11/encodings/large
sudo touch /usr/share/fonts/X11/misc
sudo touch /usr/share/fonts/X11/util
sudo touch /usr/share/fonts/truetype
sudo touch /usr/share/fonts/truetype/arphic
sudo touch /usr/share/fonts/truetype/baekmuk
sudo touch /usr/share/fonts/truetype/freefont
sudo touch /usr/share/fonts/truetype/kochi
sudo touch /usr/share/fonts/truetype/openoffice
sudo touch /usr/share/fonts/truetype/thai
sudo touch /usr/share/fonts/truetype/ttf-arabeyes
sudo touch /usr/share/fonts/truetype/ttf-bengali-fonts
sudo touch /usr/share/fonts/truetype/ttf-bitstream-vera
sudo touch /usr/share/fonts/truetype/ttf-dejavu
sudo touch /usr/share/fonts/truetype/ttf-devanagari-fonts
sudo touch /usr/share/fonts/truetype/ttf-gentium
sudo touch /usr/share/fonts/truetype/ttf-gujarati-fonts
sudo touch /usr/share/fonts/truetype/ttf-kannada-fonts
sudo touch /usr/share/fonts/truetype/ttf-lao
sudo touch /usr/share/fonts/truetype/ttf-malayalam-fonts
sudo touch /usr/share/fonts/truetype/ttf-mgopen
sudo touch /usr/share/fonts/truetype/ttf-oriya-fonts
sudo touch /usr/share/fonts/truetype/ttf-punjabi-fonts
sudo touch /usr/share/fonts/truetype/ttf-tamil-fonts
sudo touch /usr/share/fonts/truetype/ttf-telugu-fonts
sudo touch /usr/share/fonts/type1
sudo touch /usr/share/fonts/type1/gsfonts
sudo touch /usr/share/X11/fonts
sudo touch /usr/share/X11/fonts/100dpi
sudo touch /usr/share/X11/fonts/75dpi
sudo touch /usr/share/X11/fonts/Type1
sudo touch /usr/share/X11/fonts/encodings
sudo touch /usr/share/X11/fonts/encodings/large
sudo touch /usr/share/X11/fonts/misc
sudo touch /usr/share/X11/fonts/util
sudo touch /usr/local/share/fonts
sudo touch /var/lib/defoma/fontconfig.d
sudo touch /var/lib/defoma/fontconfig.d/A
sudo touch /var/lib/defoma/fontconfig.d/B
sudo touch /var/lib/defoma/fontconfig.d/C
sudo touch /var/lib/defoma/fontconfig.d/D
sudo touch /var/lib/defoma/fontconfig.d/E
sudo touch /var/lib/defoma/fontconfig.d/F
sudo touch /var/lib/defoma/fontconfig.d/G
sudo touch /var/lib/defoma/fontconfig.d/H
sudo touch /var/lib/defoma/fontconfig.d/J
sudo touch /var/lib/defoma/fontconfig.d/K
sudo touch /var/lib/defoma/fontconfig.d/L
sudo touch /var/lib/defoma/fontconfig.d/M
sudo touch /var/lib/defoma/fontconfig.d/N
sudo touch /var/lib/defoma/fontconfig.d/O
sudo touch /var/lib/defoma/fontconfig.d/P
sudo touch /var/lib/defoma/fontconfig.d/R
sudo touch /var/lib/defoma/fontconfig.d/S
sudo touch /var/lib/defoma/fontconfig.d/T
sudo touch /var/lib/defoma/fontconfig.d/U
sudo touch /var/lib/defoma/fontconfig.d/V
sudo touch /var/lib/defoma/fontconfig.d/a
sudo touch /var/lib/defoma/fontconfig.d/j
sudo touch /var/lib/defoma/fontconfig.d/m
sudo touch /var/lib/defoma/fontconfig.d/u


並且執行以下的指令

[user@host ~]$ chmod +x patch.sh
[user@host ~]$ sudo ./patch.sh
[user@host ~]$ sudo fc-cache -f -v

就可以完成啦,再重新upgrade就可以啦~

還有另一個方法

[user@host ~]$ sudo fc-cache -fv 2>&1 | grep failed | cut -f1 -d":" | xargs -i sudo touch {} && sudo fc-cache -fv

參考資料:阿駕零零壹 © 學習筆記

[Live-MAN] 前置處理指令

對於一個 C 程式 編譯之前,
C 編譯器會先處理 C 程式 中含有 #define、#undef、#if、#ifdef、#ifndef、#endif、#elif、#else 及 #include 敘述,
將之置換成一新 C 程式,
再將之編譯 成一 assembly 程式,
再轉成 machine code(或 object code)。
再經由 linker 變成一執行檔。

C/C++包含一些前置處理的指令
均是以#為開頭的指令
以下均是前置處理的指令
#include
把某個檔案整個放入目前的位置。
例:

#include <stdio.h>

就是把stdio.h整個放到這一個指令的位置

#define
把變數定義成某一個常數

#define MAX 5

在compiler的時候就是把MAX直接由5取代

#undef
解除變數的定義

#undef MAX


#if

#if !define(FILE1)
#define FILE1 "file1.h"
#include FILE1
#endif

以上是避免檔案重複include同一個檔案

#if defined (XXX) || defined (YYY)
...
#endif

當有定義XXX或是有定義YYY時,會把...的部分的程式碼加入編譯

#ifndef

#ifndef MAX

判斷MAX是否有被定義過,若沒有則執行此行以下的指令
#ifdef

#ifdef MAX

判斷MAX是否有被定義過,若有則執行以下的指令
#endif
表示#ifndef或#ifdef或#if的結尾

#else
與if相關的前置處理指令配合使用~
#ifdef MAX
...
#else
...
#endif


#if MAX = 2
...
#elif MAX = 3
...
#else
...
#endif


[2009.12.06 補充]
#error

#pragma
[Live-MAN] #pragma 預處理指令

參考資料:
C前置處理
Live-MAN - #pragma 預處理指令
C# 前置處理器指示詞
前置處理器
前處理指令

2008年10月1日 星期三

802.11 MAC

802.11的規格的關鍵在於MAC。MAC位於各式實體層之上,控制資料的傳輸。它負責核心的訊框封裝作業,以及與有線骨幹網路之間的互動。不同的實體層可能提供不同的傳輸速度,不過實體層之間必須彼此互通。

碰撞(collision)會浪費寶貴的傳輸資源,因此802.11轉而使用碰撞避免(CSMA/CA),而非使用Ethernet所採行的碰撞偵測(CSMA/CD)

802.11採用正面回應(positive acknowledgement)機制。所有傳送出去的frame必須得到回應,只要有任何一個環節失敗,該訊框即視為已經漏失。



隱藏節點的問題:

在無線網路中,隱藏節點所導致的碰撞問題相當難以偵測,因為無線收發器通常只有半雙工(half-duplex);亦即無法同時收送資料。為了防止碰撞產生,802.11允許工作站使用Reguest to Send(要求傳送,RTS)及Clear to Send(開始傳送,CTS)訊號來淨空傳送區域。
而RTS訊框、CTS訊框,資料訊框及最後回應訊框視為不可分割的作業。

一旦收到RTS,接收端會以CTS訊框回應。與RTS訊框一樣,CTS訊框會令附近的工作站保待持沉默,等到RTS/CTS完成交換程序,傳送端可以傳送待傳的訊框,無須擔心來自其它隱藏節點的干擾。



另外,使用者可以透過調整RTS門檻值(threshold)來控制RTS/CTS程序。只要大於此門檻值,就會進行RTS/CTS交換程序。小於此門檻值則會直接傳送訊框。



MAC存取模式與時機:
無線媒介的存取,是由協調功能(coordination function)所控管。
DCF(distributed coordination function):就是透過CSMA/CA判斷傳送前是否淨空。
PCF(point coordination function):只有中控型網路才會使用PCF。
HCF(hybrid coordination function):HCF允許工作站維護多組服務佇列。

載波偵測功能與網路配置向量:
802.11具備兩種載波偵測功能
1. Physical carrier-sensing:實體載波偵測由實體層所提供
2. Virtual carrier-sensing:虛擬載波由網路配置向量(Network Allocation Vector,簡稱NAV)所提供。802.11的訊框通常包含一個duration欄位,用來預訂一段媒介使用時間。NAV本身就是一個timer,當NAV為0表示媒介屬於閒置狀態,若不為0表示為忙碌狀態。

所有收到RTS訊框的工作站均會暫緩存取媒介,直到NAV消逝,然而不見得網路每一個工作站均會收到RTS訊框,因此,接收端會以CTS訊框加以回應,其中,亦包含NAV,不過為時較短。

802.11 MAC內建避免碰撞的功能,所以工作站會延遲媒介的存取,直到媒介再度閒置。當媒體閒置下來,高度優先的資料所等待的時間較短。

DCF允許多部獨立的工作站彼此互動,無須透過中央控管,因此可以運用於IBSS網路或中控型網路。

lifetime:傳送第一個訊框之後,life counter隨即啟動,一旦超過其時間,該訊框會被去掉。

速度較高的實體層會使用較短的時槽。工作站會隨機挑選某個槽,等待該時槽來以便存取媒介。所有slot的機會均相等。而數字越小的越先傳送。

和所有的802.11鍵路層(link layer)一樣,802.11可以傳送不同網路協定(network-layer protocol)和Ethernet不同的是802.11是以802.2的邏輯鍵路控制(logical-link control,簡稱LLC)封裝來攜帶上層協定。

競爭式資料服務:
802.11定義了兩組截然不同的基本交換程序。
DCF:用於競爭式服務(contention-based service)
PCF:用於免競爭服務(contention-free service)

群播(multi-cast)與廣播(broadcast)無法加以分割,也無須得到回應。整個基本交換過程祇牽涉到一個訊框,根據競爭式存取控制(contention-based access control)規則加以傳遞。傳送結束後,所有工作站必須等待一段DIFS時間,然後,在競爭期間(contention window)倒數隨機產生的延遲時間。因為只使用到一個訊框,所以NAV為0

單點傳播(unicast)必須得到回應以確保可靠性。

單一訊框(最後一個片段)及其正面回應:
此訊框會利用NAV為本身、回應及SIFS預訂媒介使用權。設定較長的NAV是為了替整個交換程序鎖住虛擬載波,以保証接收端可以回應。因此,交換程序是以ACK做為結束,ACK中的NAV被設為0

RTS/CTS:
為了保証媒介使用權及資料傳輸不被中斷,工作站可以RTS/CTS的交換方式。RTS訊框並未攜帶任何資料。RTS中的NAV可讓CTS完成作業,而CTS則可用來為資料訊框保留媒介使用權。

省電程序:
在RF系統中,放大器是最秏電的元件,由它負責將所送出的訊號放大,以及將所有的訊號放大至可以處理的準位。802.11工作站可以關閉無線電波收發器,並且定期進入休眠狀態,以維持最長的電池使用時間,在這一段時間,基地台會被每部處於休眠狀態的工作站暫存訊框。由省電狀態甦醒的工作站可以使用PS-Poll訊框取得這些暫存訊框。
1. 立即回應:基地台可以對PS-Poll(省電模式-輪詢)訊框立即做出回應。經過一段SIFS(短訊框間隔)時間,基地台即可傳送訊框。PS-Poll訊框的Duration/ID欄位中包含Association ID(連線識別碼),因此基地台可以判斷有哪一些訊框是為了該工作站產生的。
2. 延遲回應:基地台可以先回覆一個簡單回應,但並未立即採取實際的發送行動。使用延遲回應的優點之一,在於基地台方面的軟體較易實作,因為回應訊息可以透過晶片組韌體立即傳送,至於資料則可以予以暫存,然後依正常程序傳送。

多種速率支援:
能夠以不同速度作業的網路技術必須具備一種機制,可以協調出一種收發彼此均可以接受的資料率。

工作站通則:
1. 每部工作站均保有一份作業速度清單,其中記錄工作站與所連線BSS均支援的所有速率。
2. 每一個BSS必須負責維護一組(基本速率),亦即打算加入此BSS的工作站所必需支援的速率清單。任何傳送至群組接收位址的訊框必須以基本速率傳送,確保所有的工作站均可以正確解讀
3. 用來啟始訊框的控制訊框,如RTS與CTS的工作站,能夠以相同速率作業。

選速與降速
1. 訊號品質可以直接就訊噪比(signal-to-noise ratio)加以量測或間接觀察有多少訊框需要重傳。
2. 當訊號品質(signal quality)變差,晶片就會降速因應。

訊框的處理與橋接
1. 無線媒介至有線媒介(802.11至Ethernet)
2. 有線媒介至無線媒介(Ethernet至802.11)