//Logo Image
作者:黃冠穎(2009-03-31);推薦:徐業良(2009-03-31)

LAN模式建構單晶片嵌入式伺服器之網路架構

本文介紹如何以LAN模式建構單晶片嵌入式伺服器ARMPIC_SERVER之間的雙向溝通,應用在遠端臨場機器人(Telepresence Robot for Interpersonal Communication, TRIC)各模組間的資訊溝通。本研究使用凱斯電子科技公司(http://www.kaise.com.tw/)KS2410開發板,與YZU PIC_SERVER為模組進行開發。

1.     系統架構

本研究選用其處理器為ARM920TSamsung S3C2410XKS_2410開發板(以下簡稱ARM)與PIC_SERVER V3.X板作為硬體設備進行架構,兩者皆具有乙太網路(Ethernet)與網際網路(Internet)等通訊功能,本研究採用TCPHTTP兩種通訊協定進行溝通。本節首先簡單介紹TCP/IP架構模式和HTTP通訊協定,接著敘述本研究建立之系統架構。

1.1 TCP/IP架構模式簡介

1978International Standardization Organization(ISO)制訂了一套網路模型標準架構,稱做“Reference Model for Open System Interconnection (OSI)”,廣泛被引用來說明數據通訊協定的結構及功能。如圖3-1所示,OSI把數據通訊的各種功能分為七個層級,在功能上又可以被劃分為兩組:

·       網路群組:由實體層、資料連接層、和網路層組成。

·       使用者群組:由傳送層、會談層、表示層、和應用層組成。

3-1. OSI網路模型

層層相疊的OSI架構常被稱為「堆疊(stack)」,或是「協定堆疊」,如圖3-2所示,發送端與接收端溝通時,每一層協定皆只與對方相同的層級溝通,然後將資料串向相鄰的上下兩層協定解釋。同一層彼此之間如何傳送資料都有必然的規則,各層不需要知道其他層是如何工作的,只關心相同層級的協定即可。這樣的網路模型明顯的好處是留給各層都有自己的設計與發展空間,當某一層要進行協定更新時,其他層無需同時被修改。

3-2. OSI網路模型傳輸[…………….]

OSI網路模型提到的七層協定,在實際應用中某些層級常常會被整合在一起,如TCP/IP便是一個四層的架構模TCP/IP字面上代表了兩個協定:TCPTransmission Control Protocol傳輸控制協定)和IPInternet Protocol網際協定)。TCP/IP模式的架構中則只分為實體層、網路層、傳輸層與應用層四層,但並不代表其省略了OSI中某一層的功能,而是將OSI中某些層的功能合併為一層,目的在簡化系統設計。表3-1OSI網路架構與TCP/IP的網路架構比對圖。

3-1. 架構比對圖

ISO/OSI分層

TCP/IP分層

應用層(Application Layer)

應用層(Application Layer)

表示層(Presentation Layer)

交談層(Session Layer)

傳輸層(Transport Layer)

傳輸層(Transport Layer)

網路層(Network Layer)

網路層(Network Layer)

資料連結層(Data Link Layer)

實體層(Physical Layer)

實體層(Physical Layer)

TCPHTTP各分別歸類在TCP/IP架構的傳輸層與應用層內。傳輸層能夠解決諸如可靠性與保證資料按照正確的順序到達等問題;應用層定義了應用程式(FTPE-mailHTTP…)是如何進入OSI模式進行傳送。應用層支持使用者所選用的應用程式做檔案傳送和密碼驗證等動作,但其本身並不屬於應用程式。

TCP現為網路上最常用的一種標準傳輸控制協定,提供可靠的傳遞方式,保證資料完整、無損並且按順序到達;HTTPHypertext Transport Protocol”的簡稱,是網際網路上應用最為廣泛的一種超文件傳輸協定,也是一個客戶端和伺服端發送請求和應答的標準。

在實際用法上,使用者選用應用層中的某一個應用程式向傳輸層發送用於網路間傳輸的資料串,在傳輸層中使用TCP的方式把資料串分割成適當的長度,打包成一個封包發送給網路層,由網路層將封包傳送給接收端。為了不遺失封包,TCP利用編號的方式將封包按序發送,同時接收端也按序接收,並回報一個確認(ACK),如發送端未收到確認,那麼對應的數據可能流失,將會被重傳。

相對於TCP而言,HTTP是架在TCP協定上的一種應用程式,但HTTP在溝通上較為麻煩,使用環境與閘道較複雜,相比之下TCP在使用設定上較簡單容易,只做一次的資料答覆就結束通訊。由於一般大眾或業者在網路的選擇上廣泛使用HTTP作為使用者應用介面,故本研究在網路架構設計上依不同的網域需求分別使用此兩種通訊方式。

1.2 系統網路架構

3-3為本研究建立的系統架構圖。如圖所示,網路環境分為開放式的網際網路(Internet)與封閉式的區域網路(LAN)等兩種網域。

3-3. 系統網路架構

由於開放式的網路環境會因使用者端使用不同的網路連線方式與設定而增加其複雜度,本研究在遠端臨場機器人TRIC的應用上,在ARM端與使用者端之間的網路環境選擇以HTTP通訊協定的方式傳遞資訊,而在區域網路內,以ARM作為伺服主機透過路由器(Router)連接外部網域,若各模組要對外網際網路傳訊溝通皆須統一透過ARM向外溝通,即各終端PIC_SERVER不直接對外溝通,且各個模組之間採用簡單的TCP方式通訊即可。

如圖3-4所示,ARMPIC_SERVER透過路由器上網,遠端使用者發出HTTP訊息經由網際網路傳送至ARM,由ARM判斷訊息後再依指令執行其所需的動作,或將指令用TCP方式轉發給指定的PIC_SERVER執行動作;PIC_SERVER亦可發送指令給ARM或其他模組;各個PIC_SERVER若需回報資訊,也都會經ARM匯集資訊後回傳給遠方使用者。

 

3-4. 系統通訊模式

2.     PIC_SERVER程式需求與流程

本節敘述如何在PIC_SERVER同時建立HTTP ServerTCP ServerTCP Client等程式。

2.1 PIC_SERVER程式設計

本研究將PIC_SERVER範例程式“ex_6_tcp_server.c”“ex_8_tcp_client_1.c”稍作修改,將兩程式部分整合即可在同一塊PIC_SERVER板上,以同時達到TCP ServerTCP Client等功能。圖3-4紅色框部分程式為開通網路功能讓PIC_SERVER上網,有此程式即完成Server功能;圖3-5紅色框部分程式為PIC_SERVERCLIENT端使用時,設定TCP通訊欲發送之IPPort位址程式,讓PIC_SERVER知道須向那個位址發送資訊。

3-4. 開啟SERVER端功能

3-5. 設定位址

至此已開啟了PIC_SERVERServerClient兩功能,發送的命令必須寫在下圖中的Callback function裡面,Callback function掌管了PIC_SERVER所有從網路接收或發送訊息的功能。圖3-6與圖3-7分別為Client端與Server端發送與回報的部分程式。

3-6. Client端發送與回報

3-7. Server端發送與回報

將以上4個部分的程式統合在一起即可讓PIC_SERVER同時擁有HTTP ServerTCP ServerTCP Client等功能,使用者可依所需功能再做其他增加與修改。

3.     KS_2410程式設計與流程

ARM9開發版KS_2410上有掛載Linux作業系統,本研究主要以Linux下的C語言來撰寫程式。

Linux作業系統是使用“socket”觀念來設計網路程式。“Socket”稱之為窗口,是一種可做雙向資料傳輸的通道,可將其想像成一種裝置,Linux程式需經由此裝置與本地或是遠端的程序作溝通。本研究在程式設計上使用的是Internet-domain socket結構的相關函數,並運用“IPv4 socket”定址結構來儲存IP位址、通訊埠等訊息,用來與遠端做溝通。

3.1 Linux TCP程式設計流程

本節先介紹Linux TCP ServerTCP Client兩種程式設計流程。要完成TCP網路程式,需要呼叫許多相關的socket函數來幫助我們撰寫。以下分別介紹引用的相關函數與設計流程。

(1)   Socket

要使用TCP就需要透過socket做資料傳輸,首要工作是先建立socket,可使用socket()函數。

(2)   Bind

TCP通訊協定中,使用bind()函數將IPv4 socket定址結構聯繫到我們所建立的socket,每當封包到達網路介面時,Linux便會將這個封包導向其所連結的socket

(3)   Listen

建立好socket並做好bind後,在Server端我們使用listen()函數來通知Linux建立“listening socket”,等待Client端的連線要求。

(4)   Accept

Server端建立好listening socket且接收到Client端的連線請求,就會把連線請求放到連線佇列中,Server會呼叫accept()函數來處理其連線請求。

(5)   Connect

TCP中,當Client端建立好socket後,可以呼叫connect()函數向Server端要求連線,確定連線後,彼此就能互傳資料。

(6)   Close

最後,呼叫close()函數來終止Server端與Client端的socket連結。

綜合以上說明,可用圖3-8來表示Linux TCP程式設計流程。

3-8. Linux TCP程式設計流程

3.2 Linux TCP Server程式設計

3-9所示為Linux TCP Server程式。圖中第613行為引用的函數宣告;第15行定義Port3334;第1920行為定義IPv4結構;第3638行使用socket()函數建立socket;第4246行為儲存與開通socketIP位址與通訊埠;第4950行使用bind()函數連結socket;第5354行使用listen()函數聆聽Client端連線請求;第5960行是當Client端要求連線後,使用accept()函數處理連線,使用者可在第62行之後可加入自己所想要處理的動作程序,第128131行為Server端回報資訊給Client端;第136行為處理完一次連線後使用close()函數結束此次連線,跳出迴圏,等待下一次接受連線再重新作動。

3-9. Linux TCP Server程式設計

3.3 Linux TCP Client程式設計

3-10Linux TCP Client程式。圖中第610行為引用的函數宣告;第14行為定義IPv4結構;第3538行為儲存與開通socketIP位址與通訊埠;第4145行使用socket()函數建立socket;第4750行使用connect()函數向Server端建立連線,使用者可在第51行之後可加入自己所想要處理的動作程序,第5357行為將指令發送給指定位址的Server端做動;第6063行為Client端列印資訊回報給Server端;第67行為處理完一次發送程序後使用close()函數結束此次連線,跳出迴圏,等待下一次開啟連線再重新作動。

3-10. Linux TCP Client程式設計