freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于stm32的智能建筑以太網(wǎng)與rs232數(shù)據(jù)傳輸網(wǎng)關(guān)的設(shè)計(編輯修改稿)

2024-07-23 09:46 本頁面
 

【文章內(nèi)容簡介】 得以實現(xiàn)。在內(nèi)存池里面進行內(nèi)存管理,一個最大的優(yōu)點就是可以很好的防止內(nèi)存碎片的產(chǎn)生,而且它的內(nèi)存分配和釋放效率會更高,相反,它的缺點就是浪費部分的內(nèi)存。內(nèi)存池管理一般是借鑒事先啟用的宏,在內(nèi)存中直接設(shè)立一個大內(nèi)存,最后運用到內(nèi)存池當(dāng)中,在進行內(nèi)存分配的請求的時侯,會直接地參考它所申請的內(nèi)存大小,選擇適合它的長度的池里面去申請。內(nèi)存池在進行初始化的時候,它的作用是給不同的內(nèi)存設(shè)立一個鏈表memp_tab,此鏈表一般來說是逆序的,除此之外,它還具有統(tǒng)計功能,可以記錄各樣內(nèi)存池地數(shù)目。LWIP的特性有以下幾點:、DHCP協(xié)議,同時也支持多網(wǎng)絡(luò)接口下的IP轉(zhuǎn)發(fā),動態(tài)分配IP地址。,主要是為了加強應(yīng)用程序的功能。 IP處理關(guān)于IP層來說,它所研究的一般是和信息的接收有關(guān),除此之外,還有信息包的發(fā)送和轉(zhuǎn)發(fā),甚至是分片數(shù)據(jù)包的重裝。而LWIP卻只是完成了IP最基礎(chǔ)的幾個性能,那就是數(shù)據(jù)包的傳遞、接收和轉(zhuǎn)發(fā),但是卻并不能對分割的IP包進行發(fā)送和接收,也不能對帶有IP選項的數(shù)據(jù)包進行處理。IP數(shù)據(jù)報頭結(jié)構(gòu)如下:圖41 IP數(shù)據(jù)報頭結(jié)構(gòu)從上圖可以知道,其中的選項字段是允許不存在的,所以我們通常所說的IP數(shù)據(jù)報頭長度一般為20個字節(jié)??梢悦黠@的看出,這是一個4位的字段,對于IPv4來說,該數(shù)值為4;同理,對于IPv6,該數(shù)值就是6了。4bit字段是用來記錄首部的長度的,單位為“字”,因此對于一些不包含任何選項字段的IP報頭而言,它的長度應(yīng)該為5,由于該字段所要求的最大值是15,所以它所能夠描述的最大IP報頭長度就為60字節(jié)了。接下來就是一個8bit的服務(wù)型字段,這個字段的最主要作用就是能很好的描述IP數(shù)據(jù)包繼續(xù)的服務(wù)類型,例如:最大吞吐量,最小延時,最高可靠性等等。但是總的來說,這個字段在LWIP中的作用是很小的。16位的總長度字段可以用來總結(jié)全部的IP數(shù)據(jù)報,同時也包括了IP數(shù)據(jù)報頭的總字節(jié)數(shù)。一般來說,IP數(shù)據(jù)包的總長度是可以達到65535字節(jié)的,然而在實際運用當(dāng)中,對于這么龐大的數(shù)據(jù)包是不允許出現(xiàn)在底層鏈路的,如果存在這樣的情況,只會大大地增加數(shù)據(jù)出現(xiàn)錯誤的可能性。因此,在鏈路層是很容易出現(xiàn)大的IP數(shù)據(jù)包分解這種情況的。接下來的16位標識字段是起到一個標識作用,主要對IP層發(fā)出的每一份數(shù)據(jù)報進行標識,當(dāng)每發(fā)送一份報文的時候,該數(shù)值就會加1。而3位標識和13位片偏移字段都是在IP數(shù)據(jù)包的分片時會運用。TTL字段是用來記錄IP數(shù)據(jù)包能被轉(zhuǎn)發(fā)的次數(shù),在每次轉(zhuǎn)發(fā)過后,該數(shù)值都會減1,直到該數(shù)值減為0時,一個ICMP報文就會被返回到源主機那里。還有8位協(xié)議字段是用來記錄IP數(shù)據(jù)包的來源的。它能總結(jié)每個數(shù)據(jù)包的來源,不管它是從哪個協(xié)議傳來的,如果這個數(shù)值是1,則說明它是ICMP協(xié)議;如果這個數(shù)值值是2,則說明它是IGMP協(xié)議;如果該數(shù)值是6,則說明它是TCP協(xié)議;如果該數(shù)值為17,則說明它是UDP協(xié)議。16位首部校驗和只會針對該IP的首部做檢驗,對于其內(nèi)部數(shù)據(jù)在傳輸過程中是否會出錯,它并不是很在乎,數(shù)據(jù)的校驗工作,一般來說是由上層協(xié)議負責(zé)的,例如:ICMP、UDP、IGMP、TCP等協(xié)議都需要計算他們的頭部和整個數(shù)據(jù)區(qū)的長度。 IP接收包對于要接收的IP數(shù)據(jù)包,必須先讓ip_input()函數(shù)被設(shè)備驅(qū)動函數(shù)調(diào)用后,才能開始進行處理。在這段過程中,初始化的任務(wù)有很多,例如:檢測IP所用的版本,還需要確定報頭的值,除此之外,要算出和檢查報頭的checksum域。理想的情況是,在proxy服務(wù)器對所有的碎片數(shù)據(jù)包進行重組以后,我們在堆棧中就再也收不到碎片,如果是這樣的話,那么所有含有IP碎片的數(shù)據(jù)包都會在不知不覺中被丟掉。同樣,如果是帶有ip選項的包,也會由指定的代理去處理,最終的結(jié)果也是被丟掉。接下來的工作就是檢驗包是否被發(fā)往主機了,其實這檢驗的方法很簡單,只要運用函數(shù)通過網(wǎng)絡(luò)接口的IP地址檢驗?zāi)康牡刂肪涂梢粤?。我們需要的網(wǎng)絡(luò)接口已經(jīng)被安放在鏈表中并加以排序,是支持線性查詢的。一般而言,網(wǎng)絡(luò)接口的序號都是指定為小的號,因為能比線性查詢的方法更好的方法,至今還沒找到。假如需要接收的數(shù)據(jù)包是通過主機指定好的包,那么必須由protocol域來判定該包應(yīng)該被傳給哪個更高層的協(xié)議。 IP發(fā)送包函數(shù)ip_output()可以用來處理一個即將發(fā)送的數(shù)據(jù)包,然后再利用另一個函數(shù)ip_rout()去尋找一個適合的網(wǎng)絡(luò)接口,最后順利的將包上傳出去。一旦我們需要的網(wǎng)絡(luò)接口確定之后,數(shù)據(jù)包就會被傳遞到ip_output_if()函數(shù),而這個函數(shù)也會把發(fā)送網(wǎng)絡(luò)接口當(dāng)作一個函數(shù)自變量。當(dāng)這時候,IP報頭域會被填補,同時,IP報頭checksum也會被計算。最后,IP包的源和目的地址就會被當(dāng)作一個變量,最終也會被傳送到ip_output_if()函數(shù)那里。一般來說,源地址是很有可能被忽略掉的,但是我們還是可以把要發(fā)送的網(wǎng)絡(luò)接口的IP地址作為包的來源地址的。如果想要找到一個合適的網(wǎng)絡(luò)接口,我們可以利用ip_route()函數(shù)來實現(xiàn),它可以通過線性查找網(wǎng)絡(luò)接口列表很容易的找到我們所想要的接口。在查找IP包的IP地址的過程中,可以很好的利用網(wǎng)絡(luò)接口的網(wǎng)絡(luò)掩碼來完成。假如所要求的目的地址和掩碼的接口IP地址相同,就完全可以選擇這個接口。假如并不能找到一個合適的接口匹,那么也只能使用缺省的網(wǎng)絡(luò)接口了。缺省的網(wǎng)絡(luò)接口的裝配一般是由人親自開啟的時侯,或者是處于運轉(zhuǎn)狀態(tài)的時侯。還有一種可能性,假如缺省的接口地址都不能夠和目的IP地址匹配,那么也就只能選擇網(wǎng)絡(luò)結(jié)構(gòu)中的gw字段作為鏈路層幀的目的IP地址。 由于TCP在計算運輸層校驗和的時候需要知道目的的IP地址,所以我們必須保證外發(fā)網(wǎng)絡(luò)接口在已經(jīng)確定的情況下,才能將數(shù)據(jù)包傳遞給IP層。要想達到這個目的,我們可以直接利用運輸層的函數(shù),ip_route()函數(shù)能很好的完成這個任務(wù),因為數(shù)據(jù)包到達IP層的時候,外發(fā)網(wǎng)絡(luò)早已經(jīng)收到信號,就完全沒有必要再一次的去查找網(wǎng)絡(luò)接口列表了。取而代之的是那些協(xié)議可以直接的去調(diào)用ip_output_if()函數(shù)。只要該函數(shù)能把網(wǎng)絡(luò)接口作為一個參數(shù),就有很大的可能性去避免外發(fā)接口的查詢。 TCP服務(wù)器的設(shè)計和實現(xiàn) TCP協(xié)議的特點TCP協(xié)議的中文名字為傳輸控制協(xié)議,它是以IP數(shù)據(jù)幀為基礎(chǔ)而進行傳遞的,能供應(yīng)穩(wěn)定的數(shù)據(jù)傳輸服務(wù)。下面就是關(guān)于TCP的特征::協(xié)議規(guī)定,要想通過TCP而進行數(shù)據(jù)傳輸?shù)脑?,就必須在?shù)據(jù)傳輸之前,需要傳輸?shù)膬蓚€點要通過TCP連接來建立連接,只有當(dāng)這個連接建立成功以后,才能進行下一步的數(shù)據(jù)數(shù)據(jù)傳輸。同理,當(dāng)我們需要終止連接的時候,也必須使用TCP連接中斷過程來關(guān)閉連接,不然就不會達到我們希望達到的要求。:在我們的TCP協(xié)議傳輸過程中,每個數(shù)據(jù)連接都存在兩個狀態(tài),分別是一收一發(fā)兩種邏輯通道。數(shù)據(jù)在傳輸?shù)倪^程中,是可以同時進行接收和發(fā)送數(shù)據(jù)的,在TCP報頭里面,不僅包含著傳出的數(shù)據(jù),而且還有確認輸入數(shù)據(jù)的序列號。:在傳輸數(shù)據(jù)的時候,對于我們需要發(fā)送的數(shù)據(jù),必須要按一定的順序進行發(fā)送,且不可以胡亂的發(fā)送,以至于導(dǎo)致錯誤。除此之外,必須確認數(shù)據(jù)是否發(fā)送成功,這就需要接收到接收方反饋回來的信號,假如沒有得到確認的數(shù)據(jù),那么就需要重新發(fā)送數(shù)據(jù),接收方接收了重復(fù)的數(shù)據(jù)包就會將其丟掉,而失序包就將被還原成正確的序列。:顧名思義,就是當(dāng)TCP在進行數(shù)據(jù)傳輸?shù)臅r候,在邏輯管道上進行傳輸?shù)臄?shù)據(jù)是一種連續(xù)的字節(jié)流,而且TCP的報頭序列號和確認號也是以字節(jié)的形式存在的。TCP在傳輸?shù)倪^程中,并不會知道它所傳輸?shù)淖止?jié)是什么內(nèi)容,也不會知道傳輸?shù)钠鹗嘉恢茫荒芡ㄟ^應(yīng)用層的協(xié)議來對字流節(jié)的數(shù)據(jù)進行分析。:和一般的流水管道一樣,為了防止堵塞,TCP協(xié)議也規(guī)定了數(shù)據(jù)傳輸?shù)牧髁?。所以在傳輸?shù)據(jù)的兩方都會預(yù)留一個接收的緩沖區(qū),假如其中一方的接收數(shù)據(jù)緩沖區(qū)滿了,那么它會發(fā)送信號給另一方,讓它終止數(shù)據(jù)的發(fā)送,直到緩沖區(qū)有空余的空間為止。但是雙方的接收緩沖區(qū)都是獨立存在的,永遠也不會出現(xiàn)膨脹的情況。:如果我們的TCP連接一旦成立以后,兩方就會對彼此能傳遞的最大值進行互換,假設(shè)收到的是ICMP的“路徑最大傳輸單位”值,就可以自動的調(diào)整TCP的大小了。:TCP協(xié)議可以提供一對一的通訊服務(wù)。 TCP協(xié)議結(jié)構(gòu)TCP協(xié)議進行數(shù)據(jù)傳輸?shù)目煽啃允欠浅5母叩?,只有需要發(fā)送的應(yīng)用數(shù)據(jù)被拆分成比較合適的數(shù)據(jù)塊的時候,TCP協(xié)議才會對其進行發(fā)送。這么可靠的數(shù)據(jù)發(fā)送能力肯定是和TCP協(xié)議的首部結(jié)構(gòu)是分不開的。以下就是TCP協(xié)議的首部結(jié)構(gòu)圖:圖42 TCP協(xié)議的首部結(jié)構(gòu)上圖是TCP的首部結(jié)構(gòu)圖,一般來說,假如不要求任選字節(jié)的話,它的長度應(yīng)該在20字節(jié),這樣一來,可見TCP協(xié)議與IP協(xié)議的首部大小是一樣的。接下來是TCP協(xié)議首部結(jié)構(gòu)的各部分的應(yīng)用。首先介紹結(jié)構(gòu)圖最頂端的兩個部分,源端口號和目的端口號。它們主要起到的是一個標識的作用,不管是在發(fā)送端,還是在接收端,它們都可以對當(dāng)前的應(yīng)用程序進行標識。其實,它們對確定一個TCP的連接也起到了至關(guān)重要的作用,當(dāng)他們兩個的數(shù)值組合IP首部的源IP地址和目的IP地址,就會確定一個獨一無二的TCP連接了。同源端口號和目的端口號的作用一樣,32位序號字段也起到一個標識的作用,它主要是標識TCP發(fā)送端到它的接收端的數(shù)據(jù)字流節(jié),確切的說,是對這個報文的第一個數(shù)據(jù)字節(jié)進行標序。在建立了一個新的連接的時候,我們的SYN標志就會置向1的位置,最后加上主機的初始序號ISN后,我們的這個主機將要發(fā)送的數(shù)據(jù)的第一個字節(jié)序號就會變?yōu)镮SN+1了。32位確認序號的ACK字段永遠是被置于1的位置,因為當(dāng)ACK被置于1的時候才有效,這個序號攜帶的是接收端希望接收到的下一個序列號。,它們的用法依次分別是:第一個是緊急指針的有效標識;第二個是確認序號的有效標識;第三個表示的是接收端應(yīng)該快速的把報文段發(fā)送給應(yīng)用層;第四個是重新建立連接;第五個表示的是一個同步的序號,在建立連接的時候需要用它來發(fā)起連接;第六個表示發(fā)送端已經(jīng)完成了發(fā)送的任務(wù)。窗口的作用主要是進行流量的控制,一般是根據(jù)自己的窗口字段的大小來實現(xiàn)既定的目標,除此之外,它還能進行字節(jié)數(shù)接收的操作。檢驗和的范圍非常的廣,在TCP的首部和TCP數(shù)據(jù)里都分布著,簡單的概括就是占據(jù)了整個TCP報文段。這個字段必須是從發(fā)送端進行計算和儲存,而且由接收端進行檢驗。緊急指針是一個正的偏移量,通過和序號字段中的數(shù)值進行求和,最終可以表示緊急數(shù)據(jù)最后一個字節(jié)的序號。值得注意的一點是:要想緊急指針有效的工作,就必須在URG標志數(shù)值置于1的時候進行。在TCP的報文段中,有時候也會出現(xiàn)數(shù)據(jù)部分沒有值的狀態(tài)。很可能會出現(xiàn)在某個連接的建立和終止的時候,因為這個時候兩方所交換的報文段都只是存在TCP首部?;蛘哌€有另一個可能,那就是某方在沒有進行數(shù)據(jù)發(fā)送的時候,它是需要通過不含任何數(shù)據(jù)的首部去檢測收到的數(shù)據(jù)的。 TCP連接函數(shù)的建立每個新的TCP連接都是由函數(shù)tcp_new()來創(chuàng)建的。在連接創(chuàng)建完成以后,協(xié)議控制模塊(PCB)就進入監(jiān)聽模式了,可以直接的去連接另外一個主機,也可以等待數(shù)據(jù)接收的連接信號。()Struct tcp_pcb*tcp_new(void)這個函數(shù)的主要功能是為了建立一個新的連接標志(pcb),只有在定義一個tcp_pcb控制塊以后,才能首先被調(diào)用。當(dāng)返回來的數(shù)值為pcb時,表明已經(jīng)正常的建立了連接;當(dāng)返回值為NULL時,表明一個全新的pcb內(nèi)存是不能被用的。()Err_t tcp_bind(struct tcp_pcb*pcb,struct ip_addr*ipaddr,u16_t port)該函數(shù)主要是用于綁定本地的IP地址和端口號,用戶在使用的過程中,可以將其綁定在任何一個本地的IP地址上,不過有一點是必須注意的,只有在函數(shù)tcp_new()被調(diào)用之后,它才可以被調(diào)用。在以上函數(shù)的原型中,pcb表示我們準備綁定的連接,ipaddr表示綁定的IP地址,port表示綁定的本地端口號。當(dāng)返回值是ERROK時,說明已經(jīng)正確地綁定了指定的連接;當(dāng)返回值是ERRUSE時,說明我們之前所指定的端口號已經(jīng)被綁定了一個連接,與這次綁定產(chǎn)生了嚴重的沖突。()Struct tcp_pcb*tcp_listen(struct tcp_pcb*pcb)該函數(shù)的功能就是當(dāng)一個正在請求的連接被接收的時候,會使之前所指定的連接開始進入監(jiān)聽狀態(tài)。當(dāng)返回的是一個新的pcb的時候,它會被當(dāng)作一個新的參數(shù)發(fā)送給即將要分配的函數(shù),因為當(dāng)處于監(jiān)聽狀態(tài)的時候,連接對于內(nèi)存的需求是很小的,所以tcp_listen()函數(shù)會收回原有的連接內(nèi)存,并重新的去分配一個相對較小的內(nèi)存塊供監(jiān)聽狀態(tài)連接使用。當(dāng)返回的是NULL的時候,說明監(jiān)聽模式的連接內(nèi)存是不可用的,假如是這個結(jié)果的話,我們之前傳遞給tcp_listen()函數(shù)的pcb所占有的內(nèi)存就無法得以分配。()Void tcp_acc_pt(strcut tcp_pcb*pcb, err_t(*accept)(void*arg, struct tcp_pcb*newpcb, err_t err))這個函數(shù)的性能就是:之前規(guī)定好的的處于監(jiān)聽狀態(tài)的連接連接成功以后,調(diào)用將要被調(diào)用的函數(shù)。也就是說,只有正處于監(jiān)聽狀態(tài)的連接與新來的連接連上之后,這個函數(shù)指定的回調(diào)函數(shù)才能被調(diào)用,一般來說,會在tcp_listen()函數(shù)調(diào)用之后才能被調(diào)用。 TCP服務(wù)器的初始化在這個設(shè)計過程中,我們所選取的傳輸協(xié)議是TCP傳輸控制協(xié)議,在STM32微型控制板中,選取的是RS232串口,把TCP傳輸作為服務(wù)器端。TCP服務(wù)器端的系統(tǒng)初始化函數(shù)段過程如下:void TCP_server_init(void){ struct tcp_pcb *pcb。/*****以下為RS232端口初始化******/ pcb = tcp_new()。 /* 建立通信的TCP控制塊(pcb) */ tcp_bind(pc
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1