2014年8月20日 星期三

Band Steering

當2.4GHz 與 5GHz 的網路同時存在時,自動使支援 5GHz 的用戶端連線至 5GHz 的網路以提升效能。






IEEE 802.11s

*  http://wireless.kernel.org/en/developers/Documentation/ieee80211/802.11s

*  https://github.com/cozybit/open80211s/wiki

* http://www.ieee802.org/802_tutorials/06-November/802.11s_Tutorial_r5.pdf

2014年6月26日 星期四

DVI type

1.DVI介面定義
  DVI1999年由Silicon ImageIntel(英代爾)、Compaq(康柏)、IBMHP(惠普)、NECFUJItsu(富士通)等公司共同組成DDWGDigital Display Working Group,數位顯示工作組)推出的介面標準。它是以Silicon Image公司的PanalLink介面技術為基礎,基於TMDS電子協定作為基本電氣連接。TMDS是一種微分信號機制,可以將象素資料編碼,並通過串列連接傳遞。顯卡產生的數位信號由發送器按照TMDS協定編碼後通過TMDS通道發送給接收器,經過解碼送給數位顯示設備。一個DVI顯示系統包括一個傳送器和一個接收器。傳送器是信號的來源,可以內建在顯卡晶片中,也可以以附加晶片的形式出現在顯卡PCB上;而接收器則是顯示器上的一塊電路,它可以接受數位信號,將其解碼並傳遞到數位顯示電路中,通過這兩者,顯卡發出的信號成為顯示器上的圖像。
  TMDS運用先進的編碼演算法把8bit資料(RGB中的每路基色信號)通過最小轉換編碼為10bit資料(包含行場同步資訊、時鐘資訊、資料DE、糾錯等),經過DC平衡後,採用差分信號傳輸資料,它和LVDSTTL相比有較好的電磁相容性能,可以用低成本的專用電纜實現長距離、高質量的數位信號傳輸。TMDS技術的連接傳輸結構如圖1所示。
TMDS技術的連接傳輸結構
2.DVI介面帶來的好處
  DVI數位介面比標準VGA(D-SUB)介面要好,數位介面保證了全部內容採用數位格式傳輸,保證了主機到顯示器的傳輸過程中資料的完整性(無干擾信號引入),可以得到更清晰的影像。而傳統的VGA介面(D-SUB)是先將數位信號轉為類比信號,再將類比信號傳入數位顯示器,最後通過數位顯示器內部再次轉為數位信號。
  DVI數位介面的主要目的是讓顯示卡的畫面訊號透過數位的方式傳送到電腦螢幕。因為以前的CRT螢幕所使用的是類比訊號,所以傳統的D-sub 15pin的電腦螢幕接頭走的是類比訊號(複合信號) 將顯示卡內的數位畫面訊號轉換成類比訊號送到電腦螢幕去。對於沒有配備DVI介面的液晶顯示器來說,它的原理是和之前的CRT顯示器是一樣的。
  由於數字顯示器 (液晶投影機、等離子電視、LCD TV等數位顯示產品採用的是純數位的設備,那麼直接通過數位介面輸入數位信號當然會更好,而通過D-sub 15pin就顯得 較差了先將數位信號轉為類比信號,再將類比信號傳入數位顯示器,最後通過數位顯示器內部再次轉為數位信號)
  數位信號帶來的畫面質量要比類比信號的畫面質量要高。購買液晶顯示器時能配備DVI則最好。
  但是從編輯實際的使用效果來看,在低解析度畫面(1280×1024)下,肉眼是很難察覺兩者的區別的,只有在UXGA/WXGA級別解析度上,兩者在信號傳輸上的差別則可以察覺出來。但是,從實際使用出發,編輯推薦使用DVI數位信號,因為類比信號最終還是還轉換成為數位信號,而轉換的過程則意味著信號質量的下降,只是下降程度或有不同而已。
  3.DVI介面的種類
  DVI接頭有三種,分別是DVI-DigitalDVI-D)、DVI-AnalogDVI-A)跟DVI-Integrated DVI-I),DVI-DigitalDVI-D)只有支援數位顯示的設備 DVI-AnalogDVI-A)只有支援類比顯示的設備,DVI-Integrated DVI-I)則是支援數位顯示跟類比顯示。之所有會有這樣的搭配,因為DVI雖然是為了數位顯示設備所訂定的標準,但是因為透過數位的傳送不會降低畫面的效果,再加上為了考慮能夠轉換成模擬訊號,所以才會有DVI-DDVI-ADVI-I這三種接頭,其中DVI-I可以相容DVI-D裝置(包括連接線),但是DVI-D接頭卻不能夠使用DVI-I連接線,所以大家會看到數位顯示設備是DVI-D的接頭,連接線是DVI-I的接頭,顯示卡是DVI-I的接頭。且DVI-I也可轉接成為D-sub 15pin

DVI-D

DVI-A

DVI-I
由於DVI-A只能只有類比信號的設備,所以對於我們電腦用戶來說一般都很少見到,我們一般接觸的DVI介面都為DVI-I或者DVI-D介面。
例如這台顯示器的介面就是DVI-I介面,它能同時相容使用DVI-IDVI-D的連接線
YES
YES
而這台顯示器提供的為DVI-D介面,它只能使用DVI-D連接線,不能使用DVI-I連接線
YES
NO
  我們生活當中大部分雙DVI介面的顯卡的DVI介面都是DVI-I介面,因為它能相容類比信號,在使用DVIVGA接頭之後亦能在CRT顯示器上傳輸信號。
DVI介面顯卡
4.深入,DVI介面仍大有文章
  我們生活當中的DVI連接線仍可分為單通道DVI連接線和雙通道DVI連接線。與雙通道DVI對應的就是單通道DVI,也就是我們最常見的DVI介面,這種介面的帶寬為165MHz,可最大提供1920×1200的解析度輸出。而雙通道DVI的帶寬是單通道的2倍,30"寬屏液晶必須使用雙通道DVI介面才可傳輸信號。
     區分單通道與雙通道也十分簡單,只需要數一下介面的針腳數即可。單通道DVI-D的針數為18+1針,DVI-I18+5針,雙通道DVI-D的針數為24+1針,DVI-I24+5針。
右為普通DVI-D介面(單通道)
左為為DVI-D介面(雙通道)
右為普通DVI-D介面(單通道)
左為為DVI-D介面(雙通道)

2014年6月13日 星期五

tmux cheat sheet

Windows 7 開啟 Soft AP當Wifi無線基地台使用

1. 打開命令輸入視窗,輸入「cmd」之後,同時按下鍵盤上的Ctrl+Shift+Enter,這是為了以管理員模式開啟終端機視窗,Windows環境下的正確名稱是命令提示字元。
2. 這時候終端機視窗就會打開了,請輸入
「netsh wlan set hostednetwork mode=allow ssid=你要的名稱 key=密碼」

3. 如果出現了上圖的成功訊息,那麼再輸入
「netsh wlan start hostednetwork」
5. 如果上一步執行後出現的訊息是「已啟動主控網路」,那麼請回到桌面,按一下右下方的網路狀態圖示,並點擊「開啟網路和共用中心」
6. 這時候,你應該會在「檢視作用中的網路」頁框裡,看到剛才建立的無線網路名稱。點擊一下右邊的「無線網路連線」。

7. 按下「內容」。

8. 在「共用」頁框裡,把「允許其它網路使用者透過這台電腦的網際網路連線來連線」打勾,然後再把下方的「允許其它網路使用者來控制或停用網際網路連線」取消勾選,接著按下確定。

2014年6月9日 星期一

WIN7自動升級SP1後, 出現嚴重錯誤訊息「C0190003」無法開機,解決方法!



Windows 7 Auto upgrade 在執行後, 居然無法開機 出現嚴重錯誤訊息C0190003



重開也無法正常進入作業系統

目前有效的解決辦法之一 

重新開機,選擇光碟開機,以win7安裝光碟進入後選擇「修復系統」,
然後進入「提示命令列」然後輸入以下指令,

dism /image:c:\ /cleanup-image /revertpendingactions

按下enter進行還原修復


2014年5月1日 星期四

一個完整的802.1X認證

首先是802.11的連接,如圖:
前2個flow是相互發現的一個過程。之後,先做auth,再做association。
在WPA/RSN中,802.11的auth用的都是open的方式。這是第一個階段,也就是802.11的認證。
當association完成後,接下來做EAP 802.1X認證,這是WPA/RSN的認證。
802.1X認證完成後,Supplicant和Authenticator得到PMK,可以做4次握手,生成PTK。如果是PSK認證,則沒有這一步,Authenticator和Supplicant可以自己生成PMK用以4次握手。
4次握手的過程如下:
上圖是針對WP2,也就是RSN的,這種情況下,GTK在3/4時生成。
在WPA1中,4次握手僅僅是產生PTK。GTK是通過4次握手後的一個2次握手完成的,如下圖:
至此,完整的802.1X認證完成。unicast packet可以用PTK加密/校驗,broadcast packet用GTK加密/校驗。

HOWTO:
http://tldp.org/HOWTO/html_single/8021X-HOWTO/

CISCO 6941 7941G 7942G upgrade firmware from SCCP to SIP and configure


        最近拿到了幾隻CISCO IP PHONE來玩玩,規格相當不錯 且支援PoE供電相當方便.但是如果要在一般的SIP sever上運作 (我採用Asterisk+FreePBX).則需要把預設的SCCP改刷成SIP的firmware.

這三支電話改刷firmware的方式都一樣,最簡易的方式是透過CISCO本身的 Cisco Unified Communications Manager:CUCM軟體,但是此軟體不易取得且有版權的.因此改用土法煉鋼的TFTP方式來更新firmware

大概的流程如下:

1.下載其IP PHONE對應的SIP firmware
   * 6941
   * 7941G
   * 7942G

2.架設tftp server (建議使用tftpd v3.23 ,同時把其他interface先都關閉)

3.開啟tftpd中的DHCP server功能,並做下列設定
   -IP pool starting address : 192.168.1.2
   -Size of pool : 250
   -Default router : 192.168.1.1
   -Mask : 255.255.255.0
   -Additional option:  150 , 值: 0x0101A8C0  (代表tftp server ip:192.168.1.1)



4.建立檔案 XML.Default.cnf.xml ,內容為對應的firmware名稱
   SIP42.8-5-3S

5.建立SIP的xml設定檔,檔名格式為  SEP.cnf.xml
    範例下載SEP24B657B1DED4.cnf.xml
    timezone: Taipei Standard Time

6.完成後按住IP PHONE "#"鍵 後接上電源,等到上方橘燈警示燈亮起時依序輸入"123456789*0#",即可進入tftp刷機模式.





Menu中:
setup unlock: **#
soft reset: **#**



CISCO 6941
CISCO 7941G
CISCO 7942G


另外完成搭配LINKSYS SP9000 + SPA400 +PAPT2 的架構圖




2014年4月8日 星期二

Gratuitous ARP

很多人看到這個名詞大都無法了解它跟一般的ARP有何不同,最簡單的說明就是這個Gratuitous(無償的;免費的) ARP在Layer3 IP Header中SA(來源IP位址)&DA(目的IP位址)欄位的內容都是自己的IP;而一般的ARP在Layer3 Header中SA欄位是自己的IP位址,DA欄位則是255.255.255.255(廣播)。在Layer2 Header中的MAC兩者則是相同的,SA欄位是自己的MAC,DA欄位是FFFF-FFFF-FFFF(廣播)。在同網段上的設備收到ARP Request之後就會把Layer2, Layer3 Header解封裝(De-Encapsulation)之後查看ARP Request資訊中查詢的目的地IP位址來決定是否進行ARP Reply。


Gratuitous ARP最主要的目的可分為兩大類.

1.用來偵測是否有重複的地址
2.當系統重新啟動時或是網路卡重置時,可以透過Gratuitous ARP通知同網段中的其他設備新的IP與MAC的對應關係


以下是原文相關說明,僅供參考:
Gratuitous ARP could mean both gratuitous ARP request or gratuitous ARP reply. Gratuitous in this case means a request/reply that is not normally needed according to the ARP specification (RFC 826) but could be used in some cases. A gratuitous ARP request is an AddressResolutionProtocol request packet where the source and destination IP are both set to the IP of the machine issuing the packet and the destination MAC is the broadcast address ff:ff:ff:ff:ff:ff. Ordinarily, no reply packet will occur. A gratuitous ARP reply is a reply to which no request has been made.

Gratuitous ARPs are useful for four reasons:

1. They can help detect IP conflicts. When a machine receives an ARP request containing a source IP that matches its own, then it knows there is an IP conflict.

2. They assist in the updating of other machines' ARP tables. Clustering solutions utilize this when they move an IP from one NIC to another, or from one machine to another. Other machines maintain an ARP table that contains the MAC associated with an IP. When the cluster needs to move the IP to a different NIC, be it on the same machine or a different one, it reconfigures the NICs appropriately then broadcasts a gratuitous ARP reply to inform the neighboring machines about the change in MAC for the IP. Machines receiving the ARP packet then update their ARP tables with the new MAC.

3. They inform switches of the MAC address of the machine on a given switch port, so that the switch knows that it should transmit packets sent to that MAC address on that switch port.

4. Every time an IP interface or link goes up, the driver for that interface will typically send a gratuitous ARP to preload the ARP tables of all other local hosts. Thus, a gratuitous ARP will tell us that that host just has had a link up event, such as a link bounce, a machine just being rebooted or the user/sysadmin on that host just configuring the interface up. If we see multiple gratuitous ARPs from the same host frequently, it can be an indication of bad Ethernet hardware/cabling resulting in frequent link bounces.

Examples 

The networking stack in many operating systems will issue a gratuitous ARP if the IP or MAC address of a network interface changes, to inform other machines on the network of the change so they can report IP address conflicts, to let other machines update their ARP tables, and to inform switches of the MAC address of the machine.

The networking stack in many operating systems will also issue a gratuitous ARP on an interface every time the link to that interface has been brought to the up state. The gratuitous ARP then is used to preload the ARP table on all local hosts of the possibly new mapping between MAC and IP address (for failover clusters that do not take over the MAC address) or to let the switch relearn behind which port a certain MAC address resides (for failover clusters where you do pull the MAC address over as well or when you simply just move the network cable from one port to another on a normal nonclustered host)

The High-Availability Linux Project utilizes a command-line tool called send_arp to perform the gratuitous ARP needed in their failover process. A typical clustering scenario might play out like the following:

Two nodes in a cluster are configured to share a common IP address 192.168.1.1. Node A has a hardware address of 01:01:01:01:01:01 and node B has a hardware address of 02:02:02:02:02:02.

Assume that node A currently has IP address 192.168.1.1 already configured on its NIC. At this point, neighboring devices know to contact 192.168.1.1 using the MAC 01:01:01:01:01:01.

Using the heartbeat protocol, node B determines that node A has died.

Node B configures a secondary IP on an interface with ifconfig eth0:1 192.168.1.1.

Node B issues a gratuitous ARP with send_arp eth0 192.168.1.1 02:02:02:02:02:02 192.168.1.255. All devices receiving this ARP update their table to point to 02:02:02:02:02:02 for the IP address 192.168.1.1.

Example Traffic

Ethernet II, Src: 02:02:02:02:02:02, Dst: ff:ff:ff:ff:ff:ff
Destination: ff:ff:ff:ff:ff:ff (Broadcast)
Source: 02:02:02:02:02:02 (02:02:02:02:02:02)
Type: ARP (0x0806)
Trailer: 000000000000000000000000000000000000
Address Resolution Protocol (request/gratuitous ARP)
Hardware type: Ethernet (0x0001)
Protocol type: IP (0x0800)
Hardware size: 6
Protocol size: 4
Opcode: request (0x0001)
Sender MAC address: 02:02:02:02:02:02 (02:02:02:02:02:02)
Sender IP address: 192.168.1.1 (192.168.1.1)
Target MAC address: ff:ff:ff:ff:ff:ff (Broadcast)
Target IP address: 192.168.1.1 (192.168.1.1)
0000 ff ff ff ff ff ff 02 02 02 02 02 02 08 06 00 01 ................
0010 08 00 06 04 00 01 02 02 02 02 02 02 c0 a8 01 01 ................
0020 ff ff ff ff ff ff c0 a8 01 01 00 00 00 00 00 00 ................
0030 00 00 00 00 00 00 00 00 00 00 00 00 ............

2014年4月1日 星期二

穿越防火牆技術

From http://www.cs.nccu.edu.tw/~lien/Writing/NGN/firewall.htm

VoIP 剛推出之初期,受到各種因素之干擾,以致非常難用,需要經過繁複的設定才能使用。 最常見到的是某一邊的使用者的電腦設定有問題導致單邊沒有聲音,因此收話發話兩端都必須是 電腦高手才能順利進行雙方通話。另外一個很大的限制是,收話發話兩端都必須填入所用電腦的 IP地址, 才能讓兩方相連。對於在家中利用撥接或ADSL設備上網或在防火牆後面的使用者而言, 這是一項難以達成的任務,無論使用者或電腦本身都難以輕易獲知其對外的IP位址。 這種現象一直等到Skype 推出之後才獲得大幅改善,大大提高了 VoIP的可用度,使得一般的電腦使用者也可以很輕易的使用VoIP。即使使用者是在防火牆 之後,VoIP 也可以順利運作,這是歸功於「VoIP穿越NAT 防火牆」技術。

NAT 及防火牆之來源

NAT 是一種將內部IP 與外部IP互相轉換之技術。其起源是因為 IPv4 位址 稀少,而很多企業或網路公司在擁有少數IP 地址而公司內部確有太多電腦時 而採用共用IP 的解決方法,讓一個IP 地址給多個電腦使用。如今最常見的 IP 分享器或無線區域網路Access Point 都有NAT 的功能。使用者利用 ADSL上網 後,拿到一個 IP 地址,而IP 分享器或WLAN AP 則將一組專供內部使用的私有IP , 通常是192.168.0.x,分配給所有內部電腦,內部每部電腦擁有一個192.168.0.x的IP 位址, 但WLAN AP 對外卻只有一個由網路公司賦予的IP 位址。 通常NAT 是將每一部電腦所用的 (IP, port number), 本文稱為內部位址,對應到 (共用IP, port number),本文稱為外部位址, 而 NAT 負責將進出封包的表頭進行轉換使得內部電腦可以 透通的與外部網路連線溝通。
企業使用防火牆對網路進行控管是很自然的事,通常有三項主要功能:
  • 存取控管 (Access Control)
  • 身份識別 (Authentication)
  • 安全稽核
常用的私有IP 位址是
  • 10.0.0.0/8
  • 172.16.0.0-172.31.0.0.
  • 192.168.0.0/24
NAT 與防火牆對於VoIP的連線造成很大的困擾, 逼得VoIP研究人員發展出一套很複雜的技術讓VoIP能 穿越防火牆,讓在防火牆後面的使用者能自由的使用VoIP。

防火牆/NAT的種類

防火牆通常整合在NAT 裡面,根據所用的防火牆技術,NAT 可以分成 幾類。主要的四類如表1 所示:
表 1 Cone NAT 種類
NAT TypeOperation
Full ConeAny external host can send a packet to the internal host, by sending a packet to the mapped external address.
Restricted Cone
(Address Restricted Cone)
An external host (with IP address X) can send a packet to the internal host only if the internal host had previously sent a packet to IP address X.
Once an internal address (iAddr:port1) is mapped to an external address (eAddr:port2), any packets from iAddr:port1 will be sent through eAddr:port2. Any external host can send packets to iAddr:port1 by sending packets to eAddr:port2
Port Restricted ConeA port restricted cone NAT is like a restricted cone NAT, but the restriction includes port numbers.
Symmetric NATEach request from the same internal IP address and port to a specific destination IP address and port is mapped to a unique external source IP address and port. If the same internal host sends a packet even with the same source address and port but to a different destination, a different mapping is used. Only an external host that receives a packet from an internal host can send a packet back.
表 2 Cone NAT 特性
NAT TypeAddress bindingPort bindingBindings per sessionUDP NATTCP NATSession direction
Full Coneno->1yesno<->
Restricted Cone
(Address Restricted Cone)
no->1yesno->
Port Restricted Coneno->1yesyes->
Symmetric NATnono0yesyes->

Full Cone NAT

Full Cone 只是單純的做位址轉換,並未對進出的封包設限。 其運作方式如圖1, 2 所示。
圖 1 Full Cone NAT
圖 2 Full Cone NAT 之運作

Restricted Cone NAT (Address Restricted Cone)

Restricted Cone NAT 對於封包進出稍加限制。從內部送出之封包的目的地 IP 位址會被記住。只有這些曾經收過這些封包的位址可以送封包進入 NAT。由其他位址送進來的封包,都會被檔下。換言之, 只有收過NAT 內部送來的封包的地址才能將封包送入 Restrict Cone NAT 內, 其運作如圖3, 4 所示。
圖 3 Restricted Cone NAT
圖 4 Restricted Cone NAT之運作

Port Restricted Cone NAT

Port Restricted Cone 對於封包進出比Restricted Cone 增加了一個限制, 從內部送出之封包的目的地的IP 位址及 Port Number 會被記住。 由外部送進來的封包,除了由那些接收過內部所送出 的封包的IP 位址及 Port Number 所送來的封包之外,都會被檔下。換言之, 只有收過NAT 內部送來的封包的地址及 Port Number 才能將封包送入 Restrict Cone NAT 內。 其運作如圖5, 6 所示。
圖 5 Port Restricted Cone NAT
圖 6 Port Restricted Cone NAT之運作

Symmetric NAT

圖 7 Symmetric NAT
Symmetric NAT 在四種Cone NAT中最為嚴謹。 前三種NAT在做位址轉換時,無論封包是送往何處, NAT內部同一內部位址 都對應到同一個外部位址,但在Symmetric NAT內則每一內部位址對不同的目的地, 都對應到不同的外部位址。 
Symmetric NAT只允許先由私有網域內的使用者發送封包到網際網路中的使用者 可以回傳封包,其運作如圖7, 8所示。 隨著網路安全的要求越來越高,使用此種NAT有越來越多的趨勢。
圖 8 Symmetric NAT

3 NAT 造成的問題

SIP是在當今的網際網路裡最常使用的VoIP通訊協議。 使用者端(CPE)所連接的Agent 稱為 User Agent (UA), 使用者端所需的軟體功能都建置在UA 中, 網路上並建置有各種伺服器,提供各式各樣的服務, 共同建構出一個運作順暢的電話網路。我們以SIP 為例說明NAT 防火牆 對VoIP通訊協定造成的問題。為方便說明起見,本文將以SIP作為範例說明 各種VoIP技術。前文所使用的「使用者電腦」,在SIP架構下,其實就是扮演 UA 的角色。
在SIP協議中,UA必須主動向registrars伺服器註冊,讓register伺服器掌握UA 動態。 要建立通話session時,發話端 UA 主動向 proxy servers 和受話的UA發出INVITE請求。 而這兩種自防火牆外所發出的請求會被防火牆所阻擋。 所以register 伺服器不能放在防火牆之內。但UA 就比較麻煩了,難免 會有相當數量的VoIP使用者是位於防火牆之內的,他們 可以不受干擾的主動發話向外連接。不過,他們卻很難接收他人的呼叫。 換言之,如果沒有適當的解決方案,位於防火牆之內的VoIP使用者,只能 對外發話,卻無法接受電話。

4 現有穿越防火牆/NAT技術介紹

現有幾個穿越防火牆/NAT技術如下:
  • UPnP(Universal Plug and Play)
  • STUN(Simple Traversal of UDP Through Netwoek Address Translators)-RFC 3489
  • TRUN(Traversal Using Relay NAT)
  • ALG(Application Layer Gatewqy)
  • ICE(Interactive Connectivity Establish)

Universal Plug and Play (UPnP,即插即用)

Universal Plug and Play(UPnP)是微軟公司提出的協定,其目的是要 簡化家庭或企業中智慧設備的連網過程. 使用TCP/IP協定透過網路自動彼此連接在一起, 而且連接過程中無需用戶的參與 和使用中央伺服器, UPnP設備可以自動探索網路並配置網路地址設定。 其穿越NAT的方式如下:
  1. VoIP應用程式先對是否位於一個具有UPnP能力的NAT設備進行檢測。
  2. 應用程式將獲得共用的Public IP地址及Port,為NAT做Signaling及media資訊流使用。
  3. VoIP使用端就可以將此資訊加入VoIP signaling建立通話。
  4. 此通話建立後,使用獲得的外部位址(Public IP地址及Port),做點對點的傳輸。
圖 9 是UPnP 穿越防火牆之運作之例。
它的問題是:NAT及VoIP Client (UA) 必須支援UPnP, 但UPnP尚未得到所有的UA及NAT的支援 (要獲得全部UA及NAT廠商之支援,絕非易事)。 尤其是NAT的問題,基於安全性的考慮,幾無NAT 願意支援 UPnP。
圖 9 UPnP 穿越防火牆之運作

STUN

STUN (Simple Traversal of UDP Through Network Address Translators - RFC 3489 ), 是最著名和最常被使用的VoIP穿越NAT防火牆的解決辦法。STUN 利用位於 Internet 上的伺服器幫助防火牆內的UA獲知他們被NAT 轉換過的外部位址, 並協助他人的VoIP呼叫穿透防火牆送達牆內的UA。
很多應用層的 VoIP程式必須仰賴 UA 主動提供自身的IP 位址及port number, 讓VoIP兩端的UA 彼此知道對方的IP 位址及port number, 才能互送封包, 建立雙向的通話。但是如果UA 是在NAT 後面, 在沒有外部的協助下,一個UA 無法看到 它自己被NAT 轉換過的外部位址,就無法提供此項資訊,讓 VoIP順利運作。
圖 10 UA 與STUN 溝通獲知外部位址
STUN 伺服器可作為中介者協助UA 看到自己被轉換過的外部位址,如圖10所示。 UA 送一個message 給STUN 伺服器,而STUN 伺服器可從封包中挖出來該 UA 的外部位址,並將此資訊回傳給UA。 此外,STUN 伺服器也可透過一系列的測試封包獲知NAT 的型態,並提供 相對應的穿越方法,圖11及12顯示STUN 伺服器探測NAT型態之架構與流程。 可惜的是,STUN無法穿透Symmetric NAT, 而偏偏這種NAT已經成為NAT市場上的主流。
以下是公眾STUN 伺服器的位址。
  • stun.fwdnet.net
  • stun.fwd.org (no DNS SRV record)
  • stun01.sipphone.com (no DNS SRV record)
  • stun.softjoys.com (no DNS SRV record)
  • stun.voipbuster.com (no DNS SRV record)
  • stun.voxgratia.org (no DNS SRV record)
  • stun.xten.com
  • stun1.noc.ams-ix.net (DNS SRV record on domain ams-ix.net not noc.ams-ix.net)
圖 11 STUN 伺服器探測NAT型態之架構
圖 12 STUN 伺服器探測NAT型態之流程

TURN

TURN 提供比 STUN更為強大的中介功能,足以穿透Symmetric NAT 防火牆。 一個VoIP session 中的兩個端點所送出的封包全部先送給TURN server,再由 TURN server 轉送給對方。其運作如圖13所示。 使用TURN 服務的UA在啟動時,須以 一個TURN client的身份發出一個"TURN allocate"請求給TURN Server。 TURN Server會記住這個請求所來自的IP位址和Port,並回覆一個public IP 位址和Port。然後TURN Server就在它分配的public port上等資料傳入。啟動 完成的TURN Client 就可將封包送到所分配的Public port 上,此舉相當於 讓UA 與 TURN Server 建立通訊渠道。 當TURN Server 收到封包時時, TURN Server會儲存封包來源的IP位址和port,然後轉送它所提出要到的位址 的請求給對方。 TURN Server之後就作為在兩個位址之間的轉接者。 從第一個位址收到的任何資料會 被提供給第二位址, 並且從第二位址收到的任何資料也會被提供給第一個。這種方式雖然 可以穿越防火牆,但喪失了 P2P通訊的特色,變成Client-Server 模式,使得負載集中於 TURN Server上, Server 更須承擔所有頻寬,以致 沒有任何VoIP業者敢於採用。因此,這個解決辦法應該是在萬不得已下 才能考慮使用的。
圖 13 TURN

ALG (Application Layer gateway)

Application Layer Gateways (ALGs)是一具有SIP能力(SIP-aware)的防火牆穿透技術。 這項技術必須汰換現有的NAT,因此在推廣上有嚴重的限制。 為了克服此項限制,Middlebox communication(MIDCOM) protocol被提出, MIDCOM允許應用程式,例如VoIP的UA和伺服器,控制NAT。 但基於安全理由,網管人員將不會接受用戶的應用程式控制他們的NAT。 因此在推廣上也是困難重重。
圖 14 ALG

ICE (Interactive Connectivity Establishment)

IETF提出Interactive Connectivity Establishment (ICE)技術,結合STUN和TURN, 2005年 微軟及Cisco宣佈將採用ICE。其詳細的運作方式請見圖15。
圖 15 ICE

Proprietary solution

目前極受歡迎的P2P VoIP,Skype,有一個重要的專利,VoIP 穿越NAT/Fs解決辦法。 筆者把它視為分散式的TURN。 連結Skype的 Client 彼此之間會互相合作,某些資源較充足的Client 會被選作為超級節點(SN),執行一些伺服器的功能,以分散伺服器的負載。 每個 Client 會保存一分隨時更新的SN目錄。在登入時, 它就努力與這些節點(SN)之 一打開一個TCP連接並且保持這個連接在開啟狀態,如此, SN 與Skype Client 間維持一個可穿透防火牆的通道。 每一個Client會藉由SN探測管制它們進出的NAT防火牆的存在和其類型。 Skype Client 使用TCP協定傳送控制信號。在最簡單的情況下, 當呼叫與被呼叫兩個 Client 都有公共的IP位址時, 呼叫者與被呼叫者之間會建立一個直接的TCP連接傳送控制信號。 然後多媒體的封包會直接使用UDP來傳送。 如果呼叫者或被呼叫者是在NAT防火牆後面,則無法直接傳送呼叫信號 和多媒體的封包,他們就以SN 作為中介者請SN 協助轉送封包。 如果因為防火牆作祟而無法利用UDP傳送語音封包時, Skype會改用TCP傳送。如果TCP也失敗,它會嘗試用TCP 傳送封包到常用的兩個port,HTTP(80)和HTTPS(443)。一般的防火牆不會 封殺這兩個 port,而Skype client在一開始就開啟著這兩個port以備使用。 如此,Skype 穿越防火牆的能力相當的高明,難怪如此風行。

參考文獻


  1. Solving the Firewall and NAT Traversal Issues for Multimedia over IP Service, http://www.newport-networks.com/
  2. SearchTekTarget.com
  3. Newport netowrks, NAT Traversal for Multimedia over IP
  4. NGN技術在企業網路的應用分析, 通信世界, 胡琳
  5. IETF RFC 3489
  6. Network Address Translation (NAT),Advanced Internet Services, Henning Schulzrinne

How to use simple speedtest in RaspberryPi CLI

  pi@ChunchaiRPI2:/tmp $  wget -O speedtest-cli https://raw.githubusercontent.com/sivel/speedtest-cli/master/speedtest.py --2023-06-26 10:4...