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