日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

淺談uIP中UDP協(xié)議改進(jìn)方案

出處:維庫(kù)電子市場(chǎng)網(wǎng) 發(fā)布于:2023-06-25 11:18:13

  UDP協(xié)議的全稱是用戶數(shù)據(jù)包協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理,數(shù)據(jù)包。在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)包分組、組裝和不能對(duì)數(shù)據(jù)包進(jìn)行排序的缺點(diǎn),也就是說,當(dāng)報(bào)文發(fā)送之后,是無(wú)法得知其是否安全完整到達(dá)的。UDP用來支持那些需要在計(jì)算機(jī)之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)在內(nèi)的眾多的客戶/服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用UDP協(xié)議。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天,UDP仍然不失為一項(xiàng)非常實(shí)用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。

由于嵌入式系統(tǒng)的軟硬件資源都較為有限,大多數(shù)嵌入式系統(tǒng)中運(yùn)行的TCP/IP協(xié)議棧均根據(jù)嵌入式系統(tǒng)的特點(diǎn)進(jìn)行了相應(yīng)的裁剪。目前應(yīng)用比較廣泛的嵌入式TCP/IP協(xié)議棧有:ucTCP-IP、LWIP、uIP、Linux TCP/IP等。其中uIP是專為8 bit和16 bit的嵌入式微控制器設(shè)計(jì)的微型TCP/IP協(xié)議棧,運(yùn)行時(shí)需要的內(nèi)存很少,實(shí)現(xiàn)了常用的TCP/IP協(xié)議;代碼注釋詳盡,可以用于商業(yè)或非商業(yè)用途。由于具有上述特點(diǎn),uIP被廣泛應(yīng)用在嵌入式系統(tǒng)的網(wǎng)絡(luò)互聯(lián)中。

 1 uIP協(xié)議棧的體系結(jié)構(gòu)

uIP協(xié)議棧往掉了完整的TCP/IP中不常用的功能,簡(jiǎn)化了通訊流程,但保存了網(wǎng)絡(luò)通訊必須使用的協(xié)議,設(shè)計(jì)重點(diǎn)放在了IP/TCP/ICMP/UDP/ARP這些網(wǎng)絡(luò)層和傳輸層協(xié)議上,保證了其代碼的通用性和結(jié)構(gòu)的穩(wěn)定性。

由于uIP協(xié)議棧專門為嵌進(jìn)式系統(tǒng)而設(shè)計(jì),因此還具有如下優(yōu)越功能:

(1)    代碼非常少,其協(xié)議棧代碼不到6K,很方便閱讀和移植。

(2)    占用的內(nèi)存數(shù)非常少,RAM占用僅幾百字節(jié)。

(3)    其硬件處理層、協(xié)議棧層和應(yīng)用層共用一個(gè)全局緩存區(qū),不存在數(shù)據(jù)的拷貝,且發(fā)送和接收都是依靠這個(gè)緩存區(qū),極大的節(jié)省空間和時(shí)間。

(4)    支持多個(gè)主動(dòng)連接和被動(dòng)連接并發(fā)。

(5)    其源代碼中提供一套實(shí)例程序:web服務(wù)器,web客戶端,電子郵件發(fā)送程序(SMTP客戶端),Telnet服務(wù)器, DNS主機(jī)名解析程序等。通用性強(qiáng),移植起來基本不用修改就可以通過。

(6)    對(duì)數(shù)據(jù)的處理采用輪循機(jī)制,不需要操縱系統(tǒng)的支持。

由于uIP對(duì)資源的需求少和移植輕易,大部分的8位微控制器都使用過uIP協(xié)議棧, 而且很多的著名的嵌進(jìn)式產(chǎn)品和項(xiàng)目(如衛(wèi)星,Cisco路由器,無(wú)線傳感器網(wǎng)絡(luò))中都在使用uIP協(xié)議棧。

在使用uIP的嵌入式系統(tǒng)的軟件體系結(jié)構(gòu)中,uIP協(xié)議棧相當(dāng)于一個(gè)代碼庫(kù),它通過一系列的函數(shù)實(shí)現(xiàn)與底層硬件和上層應(yīng)用程序的通信。


uIP協(xié)議棧主要提供了uip_input()和uip_periodic()2個(gè)函數(shù)供系統(tǒng)底層調(diào)用。uIP協(xié)議棧與應(yīng)用程序的主要接口是UIP_APPCALL()和UIP_UDP_APPCALL()。

uIP初始化時(shí)調(diào)用uip_init()函數(shù),它的主要功能是初始化協(xié)議棧的監(jiān)聽端口,并把所有連接設(shè)置為關(guān)閉狀態(tài)。然后uIP的主控部分調(diào)用uip_input()函數(shù),該函數(shù)將會(huì)根據(jù)數(shù)據(jù)包首部的協(xié)議標(biāo)識(shí)處理這個(gè)包,并在需要時(shí)調(diào)用上層應(yīng)用程序。當(dāng)uip_input()返回時(shí),一個(gè)輸出數(shù)據(jù)包被放在同一個(gè)全局緩沖區(qū)uip_buf中,其大小賦給uip_len。如果uip_len是0,則說明沒有包要發(fā)送,否則主控部分調(diào)用底層系統(tǒng)的發(fā)包函數(shù)將數(shù)據(jù)包發(fā)送到網(wǎng)絡(luò)上[3]。

uIP周期計(jì)時(shí)用于驅(qū)動(dòng)所有的uIP內(nèi)部時(shí)鐘事件。當(dāng)周期計(jì)時(shí)激發(fā)后,每一個(gè)TCP連接都會(huì)調(diào)用uIP函數(shù)uip_periodic()。類似于uip_input()函數(shù),uip_periodic()函數(shù)返回時(shí),輸出的IP包要放到uip_buf中,供底層系統(tǒng)查詢uip_len的大小以決定是否發(fā)送。

由于使用TCP/IP的應(yīng)用很多,因此應(yīng)用程序作為單獨(dú)的模塊由用戶實(shí)現(xiàn)。用戶需要把對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的處理函數(shù)作為接口提供給uIP,并將這個(gè)函數(shù)定義為宏UIP_APPCALL()或者UIP_UDP_APPCALL()。UIP_APPCALL()是用戶對(duì)TCP數(shù)據(jù)包的處理,UIP_UDP_APPCALL()是用戶對(duì)UDP數(shù)據(jù)包的處理[4]。這樣,uIP在接收到底層傳來的數(shù)據(jù)包后,在需要送到上層應(yīng)用程序處理的地方,直接調(diào)用UIP_APPCALL()或者UIP_UDP_APPCALL()即可,無(wú)需修改uIP。

  2 uIP的UDP協(xié)議分析

  2.1 UDP協(xié)議的實(shí)現(xiàn)

當(dāng)uIP接收到一個(gè)UDP數(shù)據(jù)包后,首先從包頭中取出數(shù)據(jù)的長(zhǎng)度,然后重新對(duì)包進(jìn)行校驗(yàn),如果校驗(yàn)和不對(duì),則直接丟掉這個(gè)包。如果校驗(yàn)無(wú)誤,則對(duì)收到的包進(jìn)行解復(fù)用。此時(shí)進(jìn)行如下判斷:

if(uip_udp_conn->lport != 0 &&

UDPBUF->destport == uip_udp_conn->lport &&

(uip_udp_conn->rport == 0 ||

UDPBUF->srcport == uip_udp_conn->rport) &&

(uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_zeroes_addr) ||

uip_ipaddr_cmp(uip_udp_conn->ripaddr, all_ones_addr) ||      uip_ipaddr_cmp(BUF->srcipaddr, uip_udp_conn->ripaddr)))          上述代碼中用到的主要變量、數(shù)據(jù)結(jié)構(gòu)和函數(shù)的含義是:

uip_udp_conn->lport:本地UDP的源端口;

uip_udp_conn->rport:本地UDP的目的端口;

UDPBUF->srcport:接收到的數(shù)據(jù)包中的源端口;

UDPBUF->destport:接收到的數(shù)據(jù)包中的目的端口;

uip_udp_conn->ripaddr:本地UDP的目的IP地址;

BUF->srcipaddr:接收到的數(shù)據(jù)包中的源IP地址;

all_zeroes_addr:IP地址0.0.0.0;

all_ones_addr:IP地址255.255.255.255;

uip_ipaddr_cmp:IP地址比較函數(shù),如果參加比較的兩個(gè)IP地址相等,則返回1。

在uIP的實(shí)現(xiàn)中,如果以上判斷語(yǔ)句為真,則對(duì)接收到的數(shù)據(jù)包進(jìn)行處理,處理過程包括調(diào)用用戶上層處理程序UIP_UDP_APPCALL()、構(gòu)造新包的包頭、計(jì)算新包的校驗(yàn)和等,然后將構(gòu)造好的返回UDP包送到IP層進(jìn)行處理。

  2.2 UDP實(shí)現(xiàn)的不足

通過對(duì)uIP中UDP協(xié)議實(shí)現(xiàn)過程的分析可以發(fā)現(xiàn),uIP沒有提供初始化指定端口的函數(shù),僅提供了一個(gè)對(duì)給定IP地址上給定端口建立UDP連接的函數(shù),其原型是struct uip_udp_conn*uip_udp_new(uip_ipaddr_t*ripaddr,u16_t rport)。

 3 uIP中UDP協(xié)議的改進(jìn)

  3.1 增加初始化UDP服務(wù)端口

UDP協(xié)議使用端口號(hào)為不同的應(yīng)用保留其各自的數(shù)據(jù)傳輸通道。UDP和TCP協(xié)議正是采用這一機(jī)制實(shí)現(xiàn)對(duì)同一時(shí)刻內(nèi)多項(xiàng)應(yīng)用同時(shí)發(fā)送和接收數(shù)據(jù)的支持。數(shù)據(jù)發(fā)送一方(可以是客戶端或服務(wù)器端)將UDP數(shù)據(jù)報(bào)通過源端口發(fā)送出去,而數(shù)據(jù)接收一方則通過目標(biāo)端口接收數(shù)據(jù)。有的網(wǎng)絡(luò)應(yīng)用只能使用預(yù)先為其預(yù)留或注冊(cè)的靜態(tài)端口;而另外一些網(wǎng)絡(luò)應(yīng)用則可以使用未被注冊(cè)的動(dòng)態(tài)端口。因?yàn)閁DP報(bào)頭使用兩個(gè)字節(jié)存放端口號(hào),所以端口號(hào)的有效范圍是從0到65535。一般來說,大于49151的端口號(hào)都代表動(dòng)態(tài)端口。

UDP協(xié)議作為服務(wù)端運(yùn)行時(shí),同TCP一樣,必須在某個(gè)指定端口上監(jiān)聽客戶端是否有數(shù)據(jù)包發(fā)送,如果有則還要接收數(shù)據(jù)包,這就要求在uIP記錄UDP連接的數(shù)據(jù)結(jié)構(gòu)uip_udp_conn中設(shè)置本地端口號(hào)一項(xiàng)。


  3.2 IP地址、端口號(hào)的判斷及匹配

uip_process函數(shù)接收到網(wǎng)絡(luò)控制芯片驅(qū)動(dòng)程序送來的數(shù)據(jù)包后,當(dāng)判斷出收到的包是UDP包,執(zhí)行2.1中的判斷并且得到結(jié)果為真后,但還需要再做以下工作:如果uip_udp_conn中的目的端口號(hào)為0,因此要把uip_udp_conn中的目的端口號(hào)設(shè)為收到的包中的源端口號(hào),把uip_udp_conn中的目的IP地址設(shè)為收到的包中的源IP地址,具體代碼如下:

if(uip_udp_conn->rport==0)

{

uip_udp_conn->rport=UDPBUF->srcport;                memcpy(uip_udp_conn->ripaddr,UDPBUF->srcipaddr,sizeof(uip_ipaddr_t ));

}

3.3 UDP服務(wù)端目的端口的釋放

UDP服務(wù)端的端口應(yīng)該可以為來自多個(gè)客戶端的請(qǐng)求提供服務(wù),而UDP本身是一種無(wú)連接的傳輸層協(xié)議,因此在每次uIP作為服務(wù)端的UDP通信結(jié)束之后,還要釋放uip_udp_conn中記錄的目的端口號(hào),以便下次接收來自不同IP、不同端口的新請(qǐng)求,否則當(dāng)來自其他端口的請(qǐng)求到達(dá)時(shí),uIP會(huì)不予響應(yīng)。

在uIP的網(wǎng)站上到uIP 1.0的源代碼之后,按照本文給出的幾個(gè)步驟對(duì)uIP 1.0進(jìn)行改造之后,利用gcc編譯器把uIP 1.0編譯成S3C2410上的可執(zhí)行代碼,把基于S3C2410的開發(fā)板作為UDP服務(wù)器,運(yùn)行在S3C2410上的uIP可以對(duì)PC通過UDP協(xié)議發(fā)出的數(shù)據(jù)進(jìn)行處理,并給PC作出正確的回復(fù)。UDP協(xié)議使用報(bào)頭中的校驗(yàn)值來保證數(shù)據(jù)的安全。校驗(yàn)值首先在數(shù)據(jù)發(fā)送方通過特殊的算法計(jì)算得出,在傳遞到接收方之后,還需要再重新計(jì)算。如果某個(gè)數(shù)據(jù)報(bào)在傳輸過程中被第三方篡改或者由于線路噪音等原因受到損壞,發(fā)送和接收方的校驗(yàn)計(jì)算值將不會(huì)相符,由此UDP協(xié)議可以檢測(cè)是否出錯(cuò)。這與TCP協(xié)議是不同的,后者要求必須具有校驗(yàn)值。

關(guān)鍵詞:淺談uIP中UDP協(xié)議改進(jìn)方案UDP協(xié)議

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機(jī)號(hào)碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時(shí)間周一至周五
9:00-17:30

關(guān)注官方微信號(hào),
第一時(shí)間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫(kù)提出的寶貴意見,您的參與是維庫(kù)提升服務(wù)的動(dòng)力!意見一經(jīng)采納,將有感恩紅包奉上哦!