基于PXA270嵌入式系統的Socket通信設計
1 引言
PXA270 是Intel 公司的一款基于XScale 架構的高集成度高性能嵌入式處理器,采用ARMv5TE內核,包含了Intel的SpeedStep 技術,優化了處理器的功耗,可以動態調節 CPU 的電壓和頻率來節省電源的功耗。支持多種嵌入式操作系統,如Linux、WinCE、Nucleus、Palm OS、VxWorks等。
Socket接口是TCP/IP網絡層的API,定義了許多函數和例程,可以用它們來開發TCP/IP網絡層的應用程序。網絡的Socket數據傳輸是一種特殊的I/O,具有一個類似于打開文件的函數調用Socket(),該函數返回一個整型的Socket描述符,隨后的連接建立、數據傳輸等操作都是通過該Socket實現的。
2 系統設計
系統的設計分為服務器端和客戶端設計兩部分,服務器端為運行Linux操作系統的PC機,客戶端為PXA270系統,在該系統中移植和構建Linux嵌入式操作系統,兩者通過Switch交換機進行網絡通信。
2.1 系統工作原理
在Linux 操作系統中,Socket 屬于文件系統的一部分,網絡通信可以被看作是對文件的讀取。Linux 擁有POSIX 標準庫函數,Socket()、Bind()、Sendto()、Recvfrom()等庫函數可以方便地實現客戶/ 服務器模型中數據的傳送與接收。系統設計主要的目的是完成服務器和客戶端網絡通信的實現。首先啟動宿主機和客戶機的操作系統Linux,然后每個模塊加載網絡設備驅動程序,最后通過TCP/IP協議建立雙方的通信鏈路,完成Socket通信,詳細情況如圖1所示。
2.2 嵌入式TCP/IP協議架構
嵌入式系統作為TCP服務器,在三次握手建立連接的過程中,嵌入式系統作為監聽狀態的服務器,處于LISTEN狀態,等待對方發起連接。當它接收到SYN數據片,立即發出SYN+ACK的數據片確認收到對方的SYN,此時變為SYN_ RECEIVED狀態。再接收到對方返回的一個包含ACK的空數據片則三次握手完成,進入ESTABLISHED狀態,最后進行TCP數據通訊。
圖1 系統的原理示意圖
嵌入式系統建立連接時初始化序列號,然后根據對方發包中的值來確定序列號,不記憶序列號,不能識別重復報文。嵌入式服務器僅僅在服務器端響應客戶端的請求,接收一個發送一個確認回答,不考慮失序問題。同時接收到TCP請求后,將存儲于發送緩沖區中的數據立即發送即可,只需一個數據包就能完成,也不需考慮失序問題。
因為嵌入式系統采用滑動窗口為1的傳輸方式,即發送一次數據包就等待返回應答,因此當接收不到確認包,就認為自己發送的包丟失,直接發送上次發送的數據。TCP的連接中,當客戶機異常導致連接崩潰時,嵌入式系統發數據時會被回復復位信號,回到初始狀態。嵌入式TCP/IP協議如圖2所示。
3 客戶端/服務器端功能設計
在TCP/IP網絡中,通信的兩個進程間相互作用的主要模式是客戶/服務器模式,即客戶端向服務器端發出服務請求,服務器接收到請求后,提供相應的服務??蛻?服務器模式在操作過程中采取的是主動請求方式。
圖2 嵌入式TCP/IP圖解
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)tcp/ip相關文章:tcp/ip是什么
評論