<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > DeltaOS 3.0 -簡(jiǎn)介(4)

          DeltaOS 3.0 -簡(jiǎn)介(4)

          ——
          作者: 時(shí)間:2007-03-01 來(lái)源:科銀京成 收藏

          DeltaOS的TCP/IP網(wǎng)絡(luò)協(xié)議棧(以下簡(jiǎn)稱(chēng)網(wǎng)絡(luò)協(xié)議棧)符合TCP/IP協(xié)議工業(yè)標(biāo)準(zhǔn),支持多任務(wù)應(yīng)用開(kāi)發(fā)模型,利用DeltaOS的TCP/IP網(wǎng)絡(luò)協(xié)議棧,開(kāi)發(fā)人員可以為一個(gè)嵌入式設(shè)備增加和配置網(wǎng)絡(luò)功能。

          DeltaOS的網(wǎng)絡(luò)協(xié)議棧是一套完整的嵌入式TCP/IP協(xié)議棧,在應(yīng)用上,網(wǎng)絡(luò)協(xié)議棧提供:

          • 網(wǎng)絡(luò)應(yīng)用編程界面(套接字,socket):網(wǎng)絡(luò)的應(yīng)用程序不是直接與TCP/IP核心、而是與網(wǎng)絡(luò)應(yīng)用編程界面(套接字)打交道,編程界面構(gòu)成了核心協(xié)議的用戶(hù)視圖。網(wǎng)絡(luò)協(xié)議棧支持流套接字(SOCK_STREAM)和數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)。
          • 對(duì)網(wǎng)絡(luò)參數(shù)進(jìn)行設(shè)置的接口:網(wǎng)絡(luò)參數(shù)指IP地址、掩碼、網(wǎng)關(guān)地址、PPP撥號(hào)參數(shù)等,網(wǎng)絡(luò)協(xié)議棧提供對(duì)這些網(wǎng)絡(luò)基本參數(shù)進(jìn)行讀取/設(shè)置的接口,應(yīng)用程序中根據(jù)用戶(hù)需求直接調(diào)用,使應(yīng)用網(wǎng)絡(luò)協(xié)議棧的終端或網(wǎng)絡(luò)設(shè)備能夠動(dòng)態(tài)修改這些參數(shù)。
          • 擴(kuò)展的應(yīng)用功能:網(wǎng)絡(luò)協(xié)議棧提供簡(jiǎn)單的ping功能調(diào)用接口,應(yīng)用程序可利用該接口實(shí)現(xiàn)檢測(cè)鏈路通斷的功能。

          應(yīng)用程序與操作系統(tǒng)以及網(wǎng)絡(luò)協(xié)議棧的關(guān)系如下圖:

          圖:網(wǎng)絡(luò)協(xié)議棧體系結(jié)構(gòu)

          新版本的網(wǎng)絡(luò)協(xié)議棧包括如下特點(diǎn):

          • 以太網(wǎng)和撥號(hào)網(wǎng)絡(luò)可同時(shí)使用;
          • 基于DLL/HAL技術(shù)的多網(wǎng)絡(luò)適配設(shè)備支持;
          • 支持大數(shù)據(jù)量的穩(wěn)定通信;
          • 提供穩(wěn)定、高效的多連接處理。

          特性

          應(yīng)用特點(diǎn)

          編程接口標(biāo)準(zhǔn)化

          網(wǎng)絡(luò)協(xié)議棧提供的網(wǎng)絡(luò)編程接口(套接字)與Windows Socket版本1.1基本一致

          可移植性 

          • 除網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序可能需要使用匯編語(yǔ)言外,其它代碼全部使用ANSI C編寫(xiě),具有良好的可移植性;
          • 網(wǎng)絡(luò)協(xié)議棧雖然是DeltaOS的網(wǎng)絡(luò)組件,但它與操作系統(tǒng)內(nèi)核之間的接口僅為少量的系統(tǒng)調(diào)用,如任務(wù)管理、信號(hào)量管理、定時(shí)器管理、中斷管理和內(nèi)存管理,因此很容易移植到其它的系統(tǒng)平臺(tái)上,比如:網(wǎng)絡(luò)協(xié)議棧成功支持了RTXC和ITRON等操作系統(tǒng)。

          配置靈活

          網(wǎng)絡(luò)協(xié)議棧提供系統(tǒng)配置表,用戶(hù)既可以配置自己所需要的網(wǎng)絡(luò)組件(如DNS、DHCP等)或硬件支持(如多網(wǎng)卡),也可以根據(jù)具體的需要配置一些相關(guān)的網(wǎng)絡(luò)參數(shù)(如IP地址、網(wǎng)關(guān)、撥號(hào)串等)。既提供靜態(tài)配置的方式,也提供部分調(diào)用接口,實(shí)現(xiàn)了參數(shù)的動(dòng)態(tài)配置。

          對(duì)多任務(wù)的支持

          網(wǎng)絡(luò)協(xié)議棧中使用信號(hào)量機(jī)制,實(shí)現(xiàn)任務(wù)間及任務(wù)與中斷處理程序之間資源的互斥與共享,從而實(shí)現(xiàn)了對(duì)多任務(wù)環(huán)境的支持。

          可擴(kuò)充性

          網(wǎng)絡(luò)協(xié)議棧使用模塊化設(shè)計(jì)模式,根據(jù)實(shí)際需要,可方便地添加新的協(xié)議模塊到網(wǎng)絡(luò)協(xié)議棧的TCP/IP協(xié)議棧軟件包中,實(shí)現(xiàn)對(duì)新的網(wǎng)絡(luò)協(xié)議的支持。

          支持組播功能

          基于網(wǎng)絡(luò)協(xié)議棧開(kāi)發(fā)的應(yīng)用程序通過(guò)調(diào)用setsockopt函數(shù)設(shè)置組播選項(xiàng),能夠?qū)崿F(xiàn)組播發(fā)送和接收。

          性能特點(diǎn)

          網(wǎng)絡(luò)協(xié)議棧在實(shí)現(xiàn)上采取了一些措施以提高其性能,如下:

          采用零拷貝技術(shù)(Zero Copy

          用戶(hù)數(shù)據(jù)在通過(guò)TCP/IP協(xié)議從本地主機(jī)傳輸?shù)竭h(yuǎn)地主機(jī)的過(guò)程中,需要不斷地拆包和打包。如果在拆包和打包時(shí),各協(xié)議層之間均采用數(shù)據(jù)拷貝進(jìn)行數(shù)據(jù)傳遞,則將大大增加系統(tǒng)開(kāi)銷(xiāo),從而降低系統(tǒng)性能。網(wǎng)絡(luò)協(xié)議棧采用零拷貝技術(shù)以解決該問(wèn)題。

          所謂“零拷貝”技術(shù),是指TCP/IP協(xié)議棧沒(méi)有用于各層間數(shù)據(jù)傳遞的緩沖區(qū),協(xié)議棧各層間傳遞的都是數(shù)據(jù)指針,只有當(dāng)數(shù)據(jù)最終要被驅(qū)動(dòng)程序發(fā)送出去或是被用戶(hù)應(yīng)用程序取走時(shí),才進(jìn)行真正的數(shù)據(jù)搬移。

          采用靜態(tài)分配技術(shù)

          如果在網(wǎng)絡(luò)發(fā)送或接收的過(guò)程中,某一次傳送的數(shù)據(jù)超過(guò)了在一個(gè)物理網(wǎng)絡(luò)上能夠傳輸?shù)淖畲髷?shù)據(jù)量(MTU),則該數(shù)據(jù)處理任務(wù)往往會(huì)阻塞等待,直到上層重新調(diào)整需要處理的數(shù)據(jù)量的大小,才會(huì)繼續(xù)執(zhí)行下去。{{分頁(yè)}}

          網(wǎng)絡(luò)協(xié)議棧采用靜態(tài)分配技術(shù),在網(wǎng)絡(luò)初始化時(shí)就靜態(tài)分配通信緩沖區(qū),設(shè)置了專(zhuān)門(mén)的發(fā)送和接收緩沖(一般是小于或等于物理網(wǎng)絡(luò)上的MTU值),從而確保了每次發(fā)送或接收時(shí)處理的數(shù)據(jù)不會(huì)超過(guò)MTU值,也就避免了數(shù)據(jù)處理任務(wù)的阻塞等待。

          通信采用非暫停方式

          通信采用非暫停方式是指通信雙方中的接收方在等待接收的過(guò)程中,創(chuàng)建一個(gè)接收任務(wù),該任務(wù)首先發(fā)出一個(gè)接收信號(hào),然后進(jìn)入休眠狀態(tài),當(dāng)有新的報(bào)文到達(dá)時(shí)才被喚醒,并對(duì)接收到的新的報(bào)文進(jìn)行處理;暫停方式則是指接收方在新的報(bào)文到來(lái)之前一直等待,直到有報(bào)文到達(dá)后進(jìn)行相應(yīng)的處理。

          網(wǎng)絡(luò)協(xié)議棧中的通信采用非暫停方式。與暫停方式比較,非暫停方式既可以提高計(jì)算機(jī)和網(wǎng)絡(luò)通信的并行性,又能保證接收時(shí)響應(yīng)的及時(shí)性。

          協(xié)議特點(diǎn)

          網(wǎng)絡(luò)協(xié)議棧遵從TCP/IP的四層協(xié)議體系結(jié)構(gòu),如下圖所示:

          圖:網(wǎng)絡(luò)協(xié)議棧協(xié)議的體系結(jié)構(gòu)

          在不同的層次上,網(wǎng)絡(luò)協(xié)議棧在支持協(xié)議上有如下特點(diǎn):

          鏈路層

          網(wǎng)絡(luò)協(xié)議棧支持以太網(wǎng)鏈路層和RS232串口鏈路層(PPP)。
          數(shù)據(jù)鏈路層的實(shí)現(xiàn)主要表現(xiàn)為網(wǎng)絡(luò)驅(qū)動(dòng)程序。網(wǎng)絡(luò)協(xié)議棧提供網(wǎng)絡(luò)驅(qū)動(dòng)程序模板,用戶(hù)可根據(jù)模板編寫(xiě)自己的驅(qū)動(dòng)程序。

          • 以太網(wǎng)
            網(wǎng)絡(luò)協(xié)議棧支持以太網(wǎng)傳輸,并且有以下特點(diǎn):
            1. 支持10M/100M以太口、ISA/PCI接口;
            2. 提供多種以太網(wǎng)驅(qū)動(dòng)供用戶(hù)選擇,也提供以太網(wǎng)驅(qū)動(dòng)的模板,允許用戶(hù)添加自己的驅(qū)動(dòng);
            3. 支持多網(wǎng)卡。
          • PPP
            網(wǎng)絡(luò)協(xié)議棧支持完整的PPP協(xié)議(包括LCP、IPCP、PAP和CHAP),既可以應(yīng)用到傳統(tǒng)的有線撥號(hào)網(wǎng)絡(luò)、也可以應(yīng)用到通過(guò)GPRS/CDMA無(wú)線上網(wǎng)的終端設(shè)備上,對(duì)物理鏈路的適應(yīng)性強(qiáng)。

          網(wǎng)絡(luò)層

          1. ARP/RARP
            ARP是幾乎每種TCP/IP實(shí)現(xiàn)中的基本協(xié)議,但它通常在應(yīng)用程序或系統(tǒng)管理員并未意識(shí)到的情況下完成工作。ARP緩沖是其操作的基礎(chǔ),網(wǎng)絡(luò)協(xié)議棧將緩沖中每個(gè)表目綁定一定時(shí)器,用于管理過(guò)時(shí)的表目。

            許多無(wú)盤(pán)系統(tǒng)用RARP在啟動(dòng)時(shí)獲得其IP地址。RARP數(shù)據(jù)包格式與ARP幾乎相同。RARP請(qǐng)求是廣播的,標(biāo)識(shí)發(fā)送者的硬件地址,要求別人回答發(fā)送者的IP地址;其應(yīng)答通常是單目的。
          2. IP
            IP協(xié)議是網(wǎng)絡(luò)協(xié)議棧網(wǎng)絡(luò)層的主要組成部分,其主要功能包括:
            1. 提供一種無(wú)連接的、不可靠的、盡最大努力進(jìn)行數(shù)據(jù)報(bào)傳遞的服務(wù)。
            2. 提供簡(jiǎn)單的IP數(shù)據(jù)報(bào)的選路。IP選路基于IP選路表,該表存儲(chǔ)有關(guān)可能的目的網(wǎng)點(diǎn)及怎樣到達(dá)目的網(wǎng)點(diǎn)的信息,主機(jī)或路由器軟件需要傳送數(shù)據(jù)報(bào)時(shí),它就查詢(xún)選路表來(lái)決定把數(shù)據(jù)報(bào)發(fā)往何處。網(wǎng)絡(luò)協(xié)議棧中的IP選路表為增加RIP及OSPF等動(dòng)態(tài)路由協(xié)議提供了接口,進(jìn)一步體現(xiàn)了網(wǎng)絡(luò)協(xié)議棧的可擴(kuò)充性。
            3. 實(shí)現(xiàn)IP數(shù)據(jù)報(bào)的分片、重組
          3. ICMP
            網(wǎng)絡(luò)協(xié)議棧的ICMP協(xié)議實(shí)現(xiàn)了所有標(biāo)準(zhǔn)ICMP協(xié)議的功能,包括差錯(cuò)報(bào)告和控制。其中最常用的是ICMP回送請(qǐng)求和應(yīng)答功能,并在此基礎(chǔ)上提供ping的簡(jiǎn)單應(yīng)用接口供應(yīng)用程序調(diào)用,用于檢查鏈路的通斷。

          傳輸層

          網(wǎng)絡(luò)協(xié)議棧傳輸層提供兩種協(xié)議——UDP和TCP。

          1. UDP
            網(wǎng)絡(luò)協(xié)議棧支持組播功能。組播(multicast)是一到多或者多到多的多方通信形式,遠(yuǎn)程會(huì)議、交互式仿真、分布式內(nèi)容系統(tǒng)、多方游戲等應(yīng)用都對(duì)組播業(yè)務(wù)(multicast service)提出了需求。由于TCP是有連接的,決定了TCP之上的應(yīng)用程序不能夠?qū)崿F(xiàn)組播?;赨DP的應(yīng)用程序能夠通過(guò)組播發(fā)送和接收大大提高網(wǎng)絡(luò)性能,合理利用網(wǎng)絡(luò)帶寬。
          2. TCP
            網(wǎng)絡(luò)協(xié)議棧提供面向流的傳輸協(xié)議—TCP協(xié)議,它提供可靠的傳輸服務(wù)以確保數(shù)據(jù)無(wú)差錯(cuò)、無(wú)亂碼的到達(dá)。為了這個(gè)目的,TCP協(xié)議軟件要進(jìn)行協(xié)商,讓接收方回送確認(rèn)信息及讓發(fā)送方重發(fā)丟失的分組。

          應(yīng)用層

          網(wǎng)絡(luò)協(xié)議棧為應(yīng)用層的開(kāi)發(fā)提供了一套Socket編程接口,用戶(hù)可以基于這套Socket編程接口來(lái)完成適合自己的網(wǎng)絡(luò)應(yīng)用。{{分頁(yè)}}

          網(wǎng)絡(luò)協(xié)議棧也實(shí)現(xiàn)了應(yīng)用層上一些常見(jiàn)的標(biāo)準(zhǔn)協(xié)議,如Telnet Client(遠(yuǎn)程登錄客戶(hù)端)、FTP Client(文件傳輸客戶(hù)端)等。

          • DNS
            網(wǎng)絡(luò)協(xié)議棧提供對(duì)DNS Client的支持,上層應(yīng)用通過(guò)域名請(qǐng)求TCP打開(kāi)一個(gè)連接或使用UDP發(fā)送一個(gè)數(shù)據(jù)報(bào)之前,必須調(diào)用網(wǎng)絡(luò)協(xié)議棧提供的系統(tǒng)調(diào)用將一個(gè)主機(jī)名轉(zhuǎn)換為一個(gè)IP地址。
          • DHCP
            網(wǎng)絡(luò)協(xié)議棧協(xié)議棧支持DHCP Client,基于網(wǎng)絡(luò)協(xié)議棧的應(yīng)用程序能夠調(diào)用相關(guān)接口發(fā)送DHCP請(qǐng)求,動(dòng)態(tài)獲得IP地址。
          • TELNET
            網(wǎng)絡(luò)協(xié)議棧支持TELNET Server功能,允許任何Telnet客戶(hù)終端通過(guò)TELNET命令進(jìn)行遠(yuǎn)程登錄,并提供菜單方式的界面,實(shí)現(xiàn)遠(yuǎn)程配置和管理。
          • FTP
          • 網(wǎng)絡(luò)協(xié)議棧支持FTP Client功能,具有以下特點(diǎn):
          • 支持FTP通用命令;
          • 提供獨(dú)有的FTP IO操作,用戶(hù)無(wú)需過(guò)多了解FTP協(xié)議就可完成遠(yuǎn)程文件操作;
          • 無(wú)需文件系統(tǒng)支持,體積較小。
          • HTTP
            HTTP Server功能是網(wǎng)絡(luò)協(xié)議棧的可選組件,又名DeltaHTTPD。詳細(xì)說(shuō)明請(qǐng)參見(jiàn)《DeltaHTTPD技術(shù)白皮書(shū)》。

          基本規(guī)格

          標(biāo)準(zhǔn)

          網(wǎng)絡(luò)協(xié)議棧提供的Socket調(diào)用與Windows Socket 1.1調(diào)用基本一致。網(wǎng)絡(luò)協(xié)議棧支持標(biāo)準(zhǔn)TCP/IP模型中的多種協(xié)議,主要包括(每個(gè)協(xié)議對(duì)應(yīng)的RFC編號(hào),只是該協(xié)議早期版本的編號(hào)):

          支持的應(yīng)用協(xié)議如下:

          • 網(wǎng)絡(luò)應(yīng)用層

          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]
          • 數(shù)據(jù)鏈路層
            PPP[RFC 1661]、ARP[RFC 826]、RARP[RFC 903]

          資源占用情況

          以DeltaCORE為例來(lái)介紹網(wǎng)絡(luò)協(xié)議棧所占用的操作系統(tǒng)內(nèi)核資源。

          任務(wù)數(shù)

          >=4 (如果啟動(dòng)Telnet Server功能則要求>=9)

          信號(hào)量數(shù)

          >=14

          中斷棧空間

          >=10K

          任務(wù)額外堆??臻g

          >=30K

          網(wǎng)絡(luò)協(xié)議棧占用內(nèi)存情況(注:不包括以選件方式提供的應(yīng)用層協(xié)議)

          靜態(tài)內(nèi)存空間

          下表列出了網(wǎng)絡(luò)協(xié)議棧在ARM7-4510B、x86平臺(tái)上運(yùn)行Pinghost演示程序時(shí),網(wǎng)絡(luò)協(xié)議棧占用內(nèi)存資源的實(shí)際情況:

          網(wǎng)絡(luò)協(xié)議棧的靜態(tài)內(nèi)存需求(單位:字節(jié))

           

          arm7-4510B

          x86

          CODE

          0x33b9b

          0x24cb4

          BSS

          0x2968c

          0x29694

          DATA

          0x6c7

          0x717

          注意:

          • 網(wǎng)絡(luò)協(xié)議棧在編譯時(shí)未使用“優(yōu)化”選項(xiàng);
          • 以上數(shù)據(jù)表示均采用十六進(jìn)制方式。

          動(dòng)態(tài)內(nèi)存空間

          網(wǎng)絡(luò)協(xié)議棧在初始化時(shí)需要CRTL動(dòng)態(tài)分配的空間為110776字節(jié)。這部分空間是為接收和發(fā)送緩沖、還有控制結(jié)構(gòu)預(yù)留的,不會(huì)釋放。

          網(wǎng)絡(luò)協(xié)議棧的七個(gè)DEMO在運(yùn)行過(guò)程中也需要?jiǎng)討B(tài)分配一部分空間,但是這部分空間在程序運(yùn)行過(guò)程中會(huì)釋放掉的,不會(huì)產(chǎn)生內(nèi)存泄漏等情況。各個(gè)DEMO需要分配的空間如下表所示:

          網(wǎng)絡(luò)協(xié)議棧的動(dòng)態(tài)內(nèi)存需求(單位:字節(jié))

          DEMO

          PingHost

          TcpClnt

          TcpServ

          UdpClnt

          UdpServ

          FtpIoAPI

          TelServer

          動(dòng)態(tài)分配空間

          384

          1968

          3888

          1752

          1752

          4136

          14496(含任務(wù)堆棧空間)

          注意:

          • 創(chuàng)建demo任務(wù)時(shí)會(huì)分配一些空間,刪除此任務(wù)后,分配的空間將會(huì)被釋放。
          • PingHost、TcpClnt、TcpServ、UdpClnt、UdpServ、FtpIoAPI任務(wù)創(chuàng)建需要分配11056字節(jié)空間。另外,TelServer在初始化時(shí)為任務(wù)的創(chuàng)建分配了11056字節(jié)空間。

          在為每個(gè)DEMO進(jìn)行內(nèi)存配置時(shí),CRTL堆的大小不能小于網(wǎng)絡(luò)協(xié)議棧初始化及DEMO任務(wù)創(chuàng)建、DEMO運(yùn)行過(guò)程中動(dòng)態(tài)分配的內(nèi)存之和。

          典型性能指標(biāo)

          測(cè)試環(huán)境:

          CPU:Pentium 628MHZ CPU

          內(nèi)存:128M

          測(cè)試內(nèi)容

          測(cè)試結(jié)果(ms)

          TCP連接數(shù)據(jù)吞吐量(發(fā)送,32字節(jié))

          0.026

          TCP連接數(shù)據(jù)吞吐量(接收,32字節(jié))

          0.031

          TCP連接數(shù)據(jù)吞吐量(發(fā)送,1430字節(jié))

          0.061

          TCP連接數(shù)據(jù)吞吐量(接收,1430字節(jié))

          0.080

          UDP連接數(shù)據(jù)吞吐量(發(fā)送,32字節(jié))

          0.018

          UDP連接數(shù)據(jù)吞吐量(接收,32字節(jié))

          0.032

          UDP連接數(shù)據(jù)吞吐量(發(fā)送,1430字節(jié))

          0.023

          UDP連接數(shù)據(jù)吞吐量(接收,1430字節(jié))

          0.080

           

          tcp/ip相關(guān)文章:tcp/ip是什么




          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();