顯示具有 研發筆記-研發心得記錄 標籤的文章。 顯示所有文章
顯示具有 研發筆記-研發心得記錄 標籤的文章。 顯示所有文章

2008年6月14日 星期六

研發筆記-Linux IPSEC VPN NAT Passthrough

又是一個關於VPN的問題....
IPSEC VPN NAT Passthrough. 現在有NAT功能的Router都會具備的功能,這個功能簡單來說,就是Router下面的VPN client透過Router的NAT Passthrough連到外部Internet的VPN Server.

這裡我們遇到的問題是,客戶說我們的機器下面串了多台PC當VPN client,連到外部Internet的SVN Server,經過一段時間後,連線還是存在,但是卻無法ping通。

首先要解釋何謂NAT Passthrough.相對NAT Passthrough的功能叫做NAT-Traversal.
當一個VPN Client具有NAT-Traversal的功能的話,連線建立後,它出去的封包是有帶Port number的,所以NAT不會認錯,因為有IP跟Port就可以對應到下面的VPN Client,封包是可以送達的.

但是當VPN Client只有NAT Passthrough的功能的話,由於出去的封包沒有帶port,因此只能另外想辦法解決,LINUX團隊寫了一個Patch Kernel的程式,可以實現NAT Passthrough的功能,靠的就是用Client跟Server的SPI做pair來mapping IP Address.

但我們遇到的問題是,只有一個Client是正常的,而多個Client連線一段時間後就不正常了,原因是這個Patch只有針對一個Client而修正,據說是Linux團隊不建議使用IPSEC的原因,當然我們偉大的RD部門,最後還是修改了這個問題啦~~

2008年5月24日 星期六

研發筆記-PPTP L2TP

PPTP,L2TP 這兩支程式,可以算是撥接程式,主要用途是在兩個私有網域可以互相通訊。
最簡單的例子是,一個業務員或是工程師在外出差,想要連回公司內部存取資料時,只要再公司內部有啟動一個PPTP或L2TP的server,工程師就可以透過PPTP或L2TP的撥接軟體建立Tunnel,透過這個Tunnel存取公司的資料.
透過以下的圖,將更容易了解:


2008年3月25日 星期二

研發筆記-NAT四種類型

NAT有四種類型,Full Cone NAT,Restricted Cone NAT,Port Restricted Cone NAT,Symmetric NAT.
網路上有一份<PDF>,看了就大致了解這四種NAT的行為運作,這裡稍微解釋一下:

NAT程式定義:

Full Cone NAT
只要內部LAN IP曾經往外部WAN IP打過封包,便會在NAT的Mapping Table留下一筆IP跟Port的mapping,此後,任何透過這組NAT的Mapping的WAN端Connection都將被接受。

Restricted Cone NAT
如同Full Cone NAT一般,只要內部LAN IP曾經往外部WAN IP打過封包,便會在NAT的Mapping Table留下一筆IP跟Port的mapping,此後,任何透過這組NAT的Mapping的WAN端Connection,只要這個Connection的IP等於當初LAN IP往外打的WAN端機器的IP。

Port Restricted Cone NAT
如同Restricted Cone NAT一樣,但當外部機器要透過這組NAT的IP跟Port的組合想要建立Connection時,這個Connection的IP跟Port也必須是當初LAN IP往外打的WAN端機器的IP跟Port,也就是比Restricted Cone NAT多比較了Port number。

Symmetric NAT
跟Port Restricted Cone NAT極為類似,每一個LAN機器曾經往外打過封包的話,便會留下IP跟Port的Mapping,但同一個LAN下的機器的打往外部的WAN機器的Destination不同的話(包含不同機器,甚至同一台機器不同程式),則會留下不同的IP跟Port的NAT Mapping,此種NAT是檢查最嚴格的NAT。


2008年2月27日 星期三

研發筆記-利用state machine撰寫GUI

事件:
最近要開始進行Photo Frame的計畫,而我要負責GUI的設計,基本上市面上的Photo Frame已經有很多的產品,所以我們的方向是找一家晶片商,利用他們已經做好的平台,新增我們的功能。

State Machine介紹:
State Machine中譯為狀態機,所謂的狀態機就是:每一個狀態都會有一組相對應的動作集合,相對應的動作就有相對應的結果,而GUI特別適合用來做狀態機,我們可以把每一頁GUI當作是一個狀態機,每一頁GUI裡面會有個別自訂的IR key and Function(遙控器的按鍵跟按鍵所對應的功能)。

GUI state machine實做簡述:
1.狀態機的宣告
-GUI最重要的就是畫面,所以每一個state machine宣告一個Frame的structe自己來用
-宣告IR Key and Function的個數
-宣告state machine的Init,Display,Close Function
2.IR Key and Function的宣告
-利用function list來對應Key and Funtion
3.如何使用state machine
-啟動Program的時候,利用for-loop為每一個state machine建立IR Key and Function的function lsit

研發筆記-PSP的RSS需求

事件:
由於我們設計了database的功能,於是乎RSS feed的需求就來了。所謂的RSS feed,就是把一個item的集合,包成一個XML,讓RSS client來訂閱。由於各家的對XML TAG(link, author, description, .....)需求不一,造成若沒有支援某個TAG,使得RSS client看不懂RSS feed。我們的target client "PSP"就是看不懂,造成他看不懂我們的RSS feed。


相關:
PSP要的TAG有tilte,link,enclosure,pubdate。
RSS client要求RSS feed的順序:
http://ip[0].ip[1].ip[2].ip[3]:port/rss -->main page
http://ip[0].ip[1].ip[2].ip[3]:port/rss/container/M/1.html --> request Container.
http://ip[0].ip[1].ip[2].ip[3]:port/rss/feed/M/1/1.xml -->request Feed.

解法:
PSP的的格式如:pubDate>Tue, 11 Dec 2007 02:08:38 GMT。
c sample code is list below.

bzero(cat_buf,1024);
bzero(t_buf, 50);
tm_temp = gmtime(&(stat_buf->st_mtime));
strftime(t_buf, 50, "%a, %d %b %Y %T GMT", tm_temp);
sprintf(cat_buf, "pubdate %s pubdate\n\n", t_buf);

想法:RSS加DDNS應該有搞頭。