DeltaOS 3.0 -簡(jiǎn)介(4)
DeltaOS的TCP/IP網(wǎng)絡(luò )協(xié)議棧(以下簡(jiǎn)稱(chēng)網(wǎng)絡(luò )協(xié)議棧)符合TCP/IP協(xié)議工業(yè)標準,支持多任務(wù)應用開(kāi)發(fā)模型,利用DeltaOS的TCP/IP網(wǎng)絡(luò )協(xié)議棧,開(kāi)發(fā)人員可以為一個(gè)嵌入式設備增加和配置網(wǎng)絡(luò )功能。
DeltaOS的網(wǎng)絡(luò )協(xié)議棧是一套完整的嵌入式TCP/IP協(xié)議棧,在應用上,網(wǎng)絡(luò )協(xié)議棧提供:
- 網(wǎng)絡(luò )應用編程界面(套接字,socket):網(wǎng)絡(luò )的應用程序不是直接與TCP/IP核心、而是與網(wǎng)絡(luò )應用編程界面(套接字)打交道,編程界面構成了核心協(xié)議的用戶(hù)視圖。網(wǎng)絡(luò )協(xié)議棧支持流套接字(SOCK_STREAM)和數據報套接字(SOCK_DGRAM)。
- 對網(wǎng)絡(luò )參數進(jìn)行設置的接口:網(wǎng)絡(luò )參數指IP地址、掩碼、網(wǎng)關(guān)地址、PPP撥號參數等,網(wǎng)絡(luò )協(xié)議棧提供對這些網(wǎng)絡(luò )基本參數進(jìn)行讀取/設置的接口,應用程序中根據用戶(hù)需求直接調用,使應用網(wǎng)絡(luò )協(xié)議棧的終端或網(wǎng)絡(luò )設備能夠動(dòng)態(tài)修改這些參數。
- 擴展的應用功能:網(wǎng)絡(luò )協(xié)議棧提供簡(jiǎn)單的ping功能調用接口,應用程序可利用該接口實(shí)現檢測鏈路通斷的功能。
應用程序與操作系統以及網(wǎng)絡(luò )協(xié)議棧的關(guān)系如下圖:
圖:網(wǎng)絡(luò )協(xié)議棧體系結構
新版本的網(wǎng)絡(luò )協(xié)議棧包括如下特點(diǎn):
- 以太網(wǎng)和撥號網(wǎng)絡(luò )可同時(shí)使用;
- 基于DLL/HAL技術(shù)的多網(wǎng)絡(luò )適配設備支持;
- 支持大數據量的穩定通信;
- 提供穩定、高效的多連接處理。
特性
應用特點(diǎn)
編程接口標準化
網(wǎng)絡(luò )協(xié)議棧提供的網(wǎng)絡(luò )編程接口(套接字)與Windows Socket版本1.1基本一致
可移植性
- 除網(wǎng)絡(luò )設備驅動(dòng)程序可能需要使用匯編語(yǔ)言外,其它代碼全部使用ANSI C編寫(xiě),具有良好的可移植性;
- 網(wǎng)絡(luò )協(xié)議棧雖然是DeltaOS的網(wǎng)絡(luò )組件,但它與操作系統內核之間的接口僅為少量的系統調用,如任務(wù)管理、信號量管理、定時(shí)器管理、中斷管理和內存管理,因此很容易移植到其它的系統平臺上,比如:網(wǎng)絡(luò )協(xié)議棧成功支持了RTXC和ITRON等操作系統。
配置靈活
網(wǎng)絡(luò )協(xié)議棧提供系統配置表,用戶(hù)既可以配置自己所需要的網(wǎng)絡(luò )組件(如DNS、DHCP等)或硬件支持(如多網(wǎng)卡),也可以根據具體的需要配置一些相關(guān)的網(wǎng)絡(luò )參數(如IP地址、網(wǎng)關(guān)、撥號串等)。既提供靜態(tài)配置的方式,也提供部分調用接口,實(shí)現了參數的動(dòng)態(tài)配置。
對多任務(wù)的支持
網(wǎng)絡(luò )協(xié)議棧中使用信號量機制,實(shí)現任務(wù)間及任務(wù)與中斷處理程序之間資源的互斥與共享,從而實(shí)現了對多任務(wù)環(huán)境的支持。
可擴充性
網(wǎng)絡(luò )協(xié)議棧使用模塊化設計模式,根據實(shí)際需要,可方便地添加新的協(xié)議模塊到網(wǎng)絡(luò )協(xié)議棧的TCP/IP協(xié)議棧軟件包中,實(shí)現對新的網(wǎng)絡(luò )協(xié)議的支持。
支持組播功能
基于網(wǎng)絡(luò )協(xié)議棧開(kāi)發(fā)的應用程序通過(guò)調用setsockopt函數設置組播選項,能夠實(shí)現組播發(fā)送和接收。
性能特點(diǎn)
網(wǎng)絡(luò )協(xié)議棧在實(shí)現上采取了一些措施以提高其性能,如下:
采用“零拷貝”技術(shù)(Zero Copy)
用戶(hù)數據在通過(guò)TCP/IP協(xié)議從本地主機傳輸到遠地主機的過(guò)程中,需要不斷地拆包和打包。如果在拆包和打包時(shí),各協(xié)議層之間均采用數據拷貝進(jìn)行數據傳遞,則將大大增加系統開(kāi)銷(xiāo),從而降低系統性能。網(wǎng)絡(luò )協(xié)議棧采用零拷貝技術(shù)以解決該問(wèn)題。
所謂“零拷貝”技術(shù),是指TCP/IP協(xié)議棧沒(méi)有用于各層間數據傳遞的緩沖區,協(xié)議棧各層間傳遞的都是數據指針,只有當數據最終要被驅動(dòng)程序發(fā)送出去或是被用戶(hù)應用程序取走時(shí),才進(jìn)行真正的數據搬移。
采用靜態(tài)分配技術(shù)
如果在網(wǎng)絡(luò )發(fā)送或接收的過(guò)程中,某一次傳送的數據超過(guò)了在一個(gè)物理網(wǎng)絡(luò )上能夠傳輸的最大數據量(MTU),則該數據處理任務(wù)往往會(huì )阻塞等待,直到上層重新調整需要處理的數據量的大小,才會(huì )繼續執行下去。{{分頁(yè)}}
網(wǎng)絡(luò )協(xié)議棧采用靜態(tài)分配技術(shù),在網(wǎng)絡(luò )初始化時(shí)就靜態(tài)分配通信緩沖區,設置了專(zhuān)門(mén)的發(fā)送和接收緩沖(一般是小于或等于物理網(wǎng)絡(luò )上的MTU值),從而確保了每次發(fā)送或接收時(shí)處理的數據不會(huì )超過(guò)MTU值,也就避免了數據處理任務(wù)的阻塞等待。
通信采用非暫停方式
通信采用非暫停方式是指通信雙方中的接收方在等待接收的過(guò)程中,創(chuàng )建一個(gè)接收任務(wù),該任務(wù)首先發(fā)出一個(gè)接收信號,然后進(jìn)入休眠狀態(tài),當有新的報文到達時(shí)才被喚醒,并對接收到的新的報文進(jìn)行處理;暫停方式則是指接收方在新的報文到來(lái)之前一直等待,直到有報文到達后進(jìn)行相應的處理。
網(wǎng)絡(luò )協(xié)議棧中的通信采用非暫停方式。與暫停方式比較,非暫停方式既可以提高計算機和網(wǎng)絡(luò )通信的并行性,又能保證接收時(shí)響應的及時(shí)性。
協(xié)議特點(diǎn)
網(wǎng)絡(luò )協(xié)議棧遵從TCP/IP的四層協(xié)議體系結構,如下圖所示:
圖:網(wǎng)絡(luò )協(xié)議棧協(xié)議的體系結構
在不同的層次上,網(wǎng)絡(luò )協(xié)議棧在支持協(xié)議上有如下特點(diǎn):
鏈路層
網(wǎng)絡(luò )協(xié)議棧支持以太網(wǎng)鏈路層和RS232串口鏈路層(PPP)。
數據鏈路層的實(shí)現主要表現為網(wǎng)絡(luò )驅動(dòng)程序。網(wǎng)絡(luò )協(xié)議棧提供網(wǎng)絡(luò )驅動(dòng)程序模板,用戶(hù)可根據模板編寫(xiě)自己的驅動(dòng)程序。
- 以太網(wǎng)
網(wǎng)絡(luò )協(xié)議棧支持以太網(wǎng)傳輸,并且有以下特點(diǎn):- 支持10M/100M以太口、ISA/PCI接口;
- 提供多種以太網(wǎng)驅動(dòng)供用戶(hù)選擇,也提供以太網(wǎng)驅動(dòng)的模板,允許用戶(hù)添加自己的驅動(dòng);
- 支持多網(wǎng)卡。
- PPP
網(wǎng)絡(luò )協(xié)議棧支持完整的PPP協(xié)議(包括LCP、IPCP、PAP和CHAP),既可以應用到傳統的有線(xiàn)撥號網(wǎng)絡(luò )、也可以應用到通過(guò)GPRS/CDMA無(wú)線(xiàn)上網(wǎng)的終端設備上,對物理鏈路的適應性強。
網(wǎng)絡(luò )層
- ARP/RARP
ARP是幾乎每種TCP/IP實(shí)現中的基本協(xié)議,但它通常在應用程序或系統管理員并未意識到的情況下完成工作。ARP緩沖是其操作的基礎,網(wǎng)絡(luò )協(xié)議棧將緩沖中每個(gè)表目綁定一定時(shí)器,用于管理過(guò)時(shí)的表目。
許多無(wú)盤(pán)系統用RARP在啟動(dòng)時(shí)獲得其IP地址。RARP數據包格式與ARP幾乎相同。RARP請求是廣播的,標識發(fā)送者的硬件地址,要求別人回答發(fā)送者的IP地址;其應答通常是單目的。 - IP
IP協(xié)議是網(wǎng)絡(luò )協(xié)議棧網(wǎng)絡(luò )層的主要組成部分,其主要功能包括:- 提供一種無(wú)連接的、不可靠的、盡最大努力進(jìn)行數據報傳遞的服務(wù)。
- 提供簡(jiǎn)單的IP數據報的選路。IP選路基于IP選路表,該表存儲有關(guān)可能的目的網(wǎng)點(diǎn)及怎樣到達目的網(wǎng)點(diǎn)的信息,主機或路由器軟件需要傳送數據報時(shí),它就查詢(xún)選路表來(lái)決定把數據報發(fā)往何處。網(wǎng)絡(luò )協(xié)議棧中的IP選路表為增加RIP及OSPF等動(dòng)態(tài)路由協(xié)議提供了接口,進(jìn)一步體現了網(wǎng)絡(luò )協(xié)議棧的可擴充性。
- 實(shí)現IP數據報的分片、重組
- ICMP
網(wǎng)絡(luò )協(xié)議棧的ICMP協(xié)議實(shí)現了所有標準ICMP協(xié)議的功能,包括差錯報告和控制。其中最常用的是ICMP回送請求和應答功能,并在此基礎上提供ping的簡(jiǎn)單應用接口供應用程序調用,用于檢查鏈路的通斷。
傳輸層
網(wǎng)絡(luò )協(xié)議棧傳輸層提供兩種協(xié)議——UDP和TCP。
- UDP
網(wǎng)絡(luò )協(xié)議棧支持組播功能。組播(multicast)是一到多或者多到多的多方通信形式,遠程會(huì )議、交互式仿真、分布式內容系統、多方游戲等應用都對組播業(yè)務(wù)(multicast service)提出了需求。由于TCP是有連接的,決定了TCP之上的應用程序不能夠實(shí)現組播?;赨DP的應用程序能夠通過(guò)組播發(fā)送和接收大大提高網(wǎng)絡(luò )性能,合理利用網(wǎng)絡(luò )帶寬。 - TCP
網(wǎng)絡(luò )協(xié)議棧提供面向流的傳輸協(xié)議—TCP協(xié)議,它提供可靠的傳輸服務(wù)以確保數據無(wú)差錯、無(wú)亂碼的到達。為了這個(gè)目的,TCP協(xié)議軟件要進(jìn)行協(xié)商,讓接收方回送確認信息及讓發(fā)送方重發(fā)丟失的分組。
應用層
網(wǎng)絡(luò )協(xié)議棧為應用層的開(kāi)發(fā)提供了一套Socket編程接口,用戶(hù)可以基于這套Socket編程接口來(lái)完成適合自己的網(wǎng)絡(luò )應用。{{分頁(yè)}}
網(wǎng)絡(luò )協(xié)議棧也實(shí)現了應用層上一些常見(jiàn)的標準協(xié)議,如Telnet Client(遠程登錄客戶(hù)端)、FTP Client(文件傳輸客戶(hù)端)等。
- DNS
網(wǎng)絡(luò )協(xié)議棧提供對DNS Client的支持,上層應用通過(guò)域名請求TCP打開(kāi)一個(gè)連接或使用UDP發(fā)送一個(gè)數據報之前,必須調用網(wǎng)絡(luò )協(xié)議棧提供的系統調用將一個(gè)主機名轉換為一個(gè)IP地址。 - DHCP
網(wǎng)絡(luò )協(xié)議棧協(xié)議棧支持DHCP Client,基于網(wǎng)絡(luò )協(xié)議棧的應用程序能夠調用相關(guān)接口發(fā)送DHCP請求,動(dòng)態(tài)獲得IP地址。 - TELNET
網(wǎng)絡(luò )協(xié)議棧支持TELNET Server功能,允許任何Telnet客戶(hù)終端通過(guò)TELNET命令進(jìn)行遠程登錄,并提供菜單方式的界面,實(shí)現遠程配置和管理。 - FTP
- 網(wǎng)絡(luò )協(xié)議棧支持FTP Client功能,具有以下特點(diǎn):
- 支持FTP通用命令;
- 提供獨有的FTP IO操作,用戶(hù)無(wú)需過(guò)多了解FTP協(xié)議就可完成遠程文件操作;
- 無(wú)需文件系統支持,體積較小。
- HTTP
HTTP Server功能是網(wǎng)絡(luò )協(xié)議棧的可選組件,又名DeltaHTTPD。詳細說(shuō)明請參見(jiàn)《DeltaHTTPD技術(shù)白皮書(shū)》。
基本規格
標準
網(wǎng)絡(luò )協(xié)議棧提供的Socket調用與Windows Socket 1.1調用基本一致。網(wǎng)絡(luò )協(xié)議棧支持標準TCP/IP模型中的多種協(xié)議,主要包括(每個(gè)協(xié)議對應的RFC編號,只是該協(xié)議早期版本的編號):
支持的應用協(xié)議如下:
- 網(wǎng)絡(luò )應用層
DHCP Client[RFC 1541]、[RFC 2131]、[RFC 3396]
DNS Client[RFC 1035]
TELNET Server[RFC 854]
FTP Client[RFC 765]
HTTP[RFC 2068]、[RFC 2616]
- 網(wǎng)絡(luò )傳輸層
UDP[RFC 768]、TCP[RFC 793] - 網(wǎng)絡(luò )層
IP[RFC 791]、ICMP[RFC 792] - 數據鏈路層
PPP[RFC 1661]、ARP[RFC 826]、RARP[RFC 903]
資源占用情況
以DeltaCORE為例來(lái)介紹網(wǎng)絡(luò )協(xié)議棧所占用的操作系統內核資源。
任務(wù)數 |
>=4 (如果啟動(dòng)Telnet Server功能則要求>=9) |
信號量數 |
>=14 |
中斷??臻g |
>=10K |
任務(wù)額外堆??臻g |
>=30K |
網(wǎng)絡(luò )協(xié)議棧占用內存情況(注:不包括以選件方式提供的應用層協(xié)議)
靜態(tài)內存空間
下表列出了網(wǎng)絡(luò )協(xié)議棧在A(yíng)RM7-4510B、x86平臺上運行Pinghost演示程序時(shí),網(wǎng)絡(luò )協(xié)議棧占用內存資源的實(shí)際情況:
網(wǎng)絡(luò )協(xié)議棧的靜態(tài)內存需求(單位:字節)
|
arm7-4510B |
x86 |
CODE |
0x33b9b |
0x24cb4 |
BSS |
0x2968c |
0x29694 |
DATA |
0x6c7 |
0x717 |
注意:
- 網(wǎng)絡(luò )協(xié)議棧在編譯時(shí)未使用“優(yōu)化”選項;
- 以上數據表示均采用十六進(jìn)制方式。
動(dòng)態(tài)內存空間
網(wǎng)絡(luò )協(xié)議棧在初始化時(shí)需要CRTL動(dòng)態(tài)分配的空間為110776字節。這部分空間是為接收和發(fā)送緩沖、還有控制結構預留的,不會(huì )釋放。
網(wǎng)絡(luò )協(xié)議棧的七個(gè)DEMO在運行過(guò)程中也需要動(dòng)態(tài)分配一部分空間,但是這部分空間在程序運行過(guò)程中會(huì )釋放掉的,不會(huì )產(chǎn)生內存泄漏等情況。各個(gè)DEMO需要分配的空間如下表所示:
網(wǎng)絡(luò )協(xié)議棧的動(dòng)態(tài)內存需求(單位:字節)
DEMO |
PingHost |
TcpClnt |
TcpServ |
UdpClnt |
UdpServ |
FtpIoAPI |
TelServer |
動(dòng)態(tài)分配空間 |
384 |
1968 |
3888 |
1752 |
1752 |
4136 |
14496(含任務(wù)堆??臻g) |
注意:
- 創(chuàng )建demo任務(wù)時(shí)會(huì )分配一些空間,刪除此任務(wù)后,分配的空間將會(huì )被釋放。
- PingHost、TcpClnt、TcpServ、UdpClnt、UdpServ、FtpIoAPI任務(wù)創(chuàng )建需要分配11056字節空間。另外,TelServer在初始化時(shí)為任務(wù)的創(chuàng )建分配了11056字節空間。
在為每個(gè)DEMO進(jìn)行內存配置時(shí),CRTL堆的大小不能小于網(wǎng)絡(luò )協(xié)議棧初始化及DEMO任務(wù)創(chuàng )建、DEMO運行過(guò)程中動(dòng)態(tài)分配的內存之和。
典型性能指標
測試環(huán)境:
CPU:Pentium 628MHZ CPU
內存:128M
測試內容 |
測試結果(ms) |
TCP連接數據吞吐量(發(fā)送,32字節) |
0.026 |
TCP連接數據吞吐量(接收,32字節) |
0.031 |
TCP連接數據吞吐量(發(fā)送,1430字節) |
0.061 |
TCP連接數據吞吐量(接收,1430字節) |
0.080 |
UDP連接數據吞吐量(發(fā)送,32字節) |
0.018 |
UDP連接數據吞吐量(接收,32字節) |
0.032 |
UDP連接數據吞吐量(發(fā)送,1430字節) |
0.023 |
UDP連接數據吞吐量(接收,1430字節) |
0.080 |
tcp/ip相關(guān)文章:tcp/ip是什么
評論