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

正文內(nèi)容

電子科學(xué)與技術(shù)單片機tcpip論文初稿(編輯修改稿)

2025-07-24 16:48 本頁面
 

【文章內(nèi)容簡介】 協(xié)議棧 ,簡單易用 ,資源占用少是它的設(shè)計特點。其設(shè)計重點放在 IP、 ICMP 和 TCP 協(xié)議的實現(xiàn)上 ,協(xié)議雖然也同時實現(xiàn)了 UDP 和ARP 協(xié)議,但僅將其作為可選模塊 。UIP 處于網(wǎng)絡(luò)通信的中間層 ,其上層協(xié)議在這里被稱之為應(yīng)用程序 ,而下層硬件或固件被稱之為網(wǎng)絡(luò)設(shè)備驅(qū)動。TCP / IP 協(xié)議組11中的鏈路層協(xié)議如 PPP 等可由 uIP 之下的設(shè)備驅(qū)動實現(xiàn);應(yīng)用層協(xié)議如 HTTP、 FTP、SMTP 等可由 ulP 之上的應(yīng)用程序?qū)崿F(xiàn)。這樣的設(shè)計方式大大減小了協(xié)議代碼量和 RA M 占用量。表 1 列出了 ulP 在 stc89c516rd 上代碼和 RAM 占用情況。 表 uIP 代碼和 RAM 占用情況協(xié)議模塊 代碼大小/B 使用 RAM/BARP 1324 118IP/ICMP/TCP 3304 360HTTP 994 110校驗和函數(shù) 636 0數(shù)據(jù)包緩存 0 400總和 6258 988 協(xié)議棧接口 ulP 協(xié)議通過一系列接口函數(shù)與底層系統(tǒng)和上層應(yīng)用程序通信,它內(nèi)部的協(xié)議集合對外部系統(tǒng)來說是透明的,從而增強了該協(xié)議的通用性和獨立性,可以非常方便地移植到不同系統(tǒng)和應(yīng)用平臺。圖 1 描述了 ulP、底層系統(tǒng)和應(yīng)用程序三者之間的調(diào)用關(guān)系。其中 ulP 提供了 3 個函數(shù)給底層系統(tǒng) : uip_init ( ) ,uip_input ( ), uip_periodic ( ) 。應(yīng)用程序向 ulP 提供一個調(diào)用函數(shù) uipappcall ( ) ,在網(wǎng)絡(luò)事件或計時事件發(fā)生時進(jìn)行調(diào)用,同時 uIP 也要向應(yīng)用程序提供一些與協(xié)議棧的接口函數(shù),應(yīng)用程序根據(jù)接口函數(shù)提供的信息或者狀態(tài) ,執(zhí)行相應(yīng)的操作。圖 u l P 底層系統(tǒng)和應(yīng)用程序之間的調(diào)用關(guān)系12 設(shè)備驅(qū)動程序接口u I P 內(nèi)核中有兩個函數(shù)直接提供給底層設(shè)備驅(qū)動程序。一個是 uip_ input ( ) , 當(dāng)設(shè)備驅(qū)動程序從網(wǎng)絡(luò)層收到的一個數(shù)據(jù)包時要調(diào)用這個函數(shù) ,設(shè)備驅(qū)動程序必須事先將數(shù)據(jù)包存入到 uipbur 中包長放到 uip_len,然后交由 uip_input ( ) 處理。當(dāng)函數(shù)返回時,如果 uip_ len 不為 0,則表明有帶外數(shù)據(jù)( 如 SYN,ACK 等) 要發(fā)送。當(dāng)需要 ARP 支持時,還需要考慮更新 ARP 表示 或發(fā)出 ARP 請求和回應(yīng)。以下代碼即為設(shè)備驅(qū)動程序從網(wǎng)絡(luò)層收到的一個數(shù)據(jù)包后的處理過程 : define BUF ( ( struet uip_ethhdr *) amp。uip_buf[ O ] ) uip _len=ethemet_devicedriver_poll ( ) ; // 接收以太網(wǎng)數(shù)據(jù)包 ( 設(shè)備驅(qū)動程序) if(uip_len0){ //收到數(shù)據(jù) if(BUFtype::HTONS(UIP_ETHTYPE_IP)){// 是 I P 包 嗎? uip_arp_ipin(); //去除以太網(wǎng)頭結(jié)構(gòu) , 更新 A R P 表 uip_input ; //I P 包處理13if(uip_len0){ // 有帶外回應(yīng)數(shù)據(jù) uip_arpout(); // 加以太網(wǎng)頭結(jié)構(gòu)在主動連接時可能要構(gòu)造 ARP 請求 ethemet_devicedriver_send();// 發(fā)送數(shù)據(jù)到 以太 網(wǎng)( 設(shè)備驅(qū)動程序 ) } } elseif(sottype==HTONS(UIPETHTYPEARP)){ //是 A RP 請求包 uip_arp_arpin ( ) ;// 如果是 ARP 回應(yīng)更新 ARP 表如果是請求 ,構(gòu)造回應(yīng)數(shù)據(jù)包 if(uip_len0) {// 是 ARP 請求 ,要發(fā)送回應(yīng) Ether_devicedriver_send();// 發(fā) ARP 回應(yīng)到以太網(wǎng)上 } } 另一個 ulP 內(nèi)核直接提供給底層設(shè)備驅(qū)動程序的函數(shù)是 uip_periodic(conn) 。這個 函數(shù)用 于 ulP 內(nèi)核對各連接 的定時輪循 ,因此需要一個硬件支持的定時程序周期性地用它輪循各連接,一般用于檢查主機是 否有數(shù)據(jù)要發(fā)送,如有,則構(gòu)造 I P 包。以下示例即為 u l P 內(nèi)核對各連接的定時輪循過程 :for(i=0。iUIP_CONNS。I++){uip_periodic(i)。if(uip_len0){uip_arp_out()。ethemet_devicedriver_send()。 } }從本質(zhì)上來說 uip_nput()和 uip_periodic()在內(nèi)部是一個函數(shù),即uip_process(u8_flag) uIP 的設(shè)計者將 uip_process (UIPDATA)定義成 uip_input ( ) ,而將uip_process(UIP_TIMER)定義成 uip_periodic(),因此從代碼實現(xiàn)上來說是完全復(fù)用的。 應(yīng)用程序接口 uIP 使用基于事件的程序模式,應(yīng)用程序由 c 語言函數(shù)實現(xiàn)。當(dāng)收發(fā)數(shù)據(jù) 、新連14接建立或者數(shù)據(jù)需要重新傳輸時,uIP 都會調(diào)用應(yīng)用程序。同時,應(yīng)用程序還要周期查詢是否有新的數(shù)據(jù)收發(fā)。因為應(yīng)用程序只提供了一個回調(diào)函數(shù) ,所以應(yīng)用程序還要把不同的網(wǎng)絡(luò)服務(wù)映射到不同的端口和連接。uIP 在接受到底層傳來的數(shù)據(jù)包后 ,如果需要送上層應(yīng)用程序 處理 ,就調(diào)用 UIP_APPCLL()。同時,uIP 設(shè)置結(jié)構(gòu)體 uIP_eonn指針指向當(dāng)前連接。uIP_conn 記錄一條 TCP 連接的所有相關(guān)信息,它是維持 uIP 運行的關(guān)鍵結(jié)構(gòu),定義如下 : struct tcp_conn{ u8_t tcpstateflags;// T C P 的狀態(tài)和標(biāo)志 u16_t lport,rpert ;// 當(dāng)?shù)睾瓦h(yuǎn)端端口 u16_t fipodar[ 2 ] ;// 遠(yuǎn)端的地址 u8_t rcv_nxt [ 4 ] ; // 下一個要接收的序列號 u8_t sod _xt [ 4 ] ;//上一個已發(fā)送的序列號 u8_t aek nxt [ 4 ] ;//對端下一個應(yīng)答序列號 u8_t timer ;// 重傳時間 u8_t nrtx ;//計算特殊段的重發(fā)數(shù)量 u8_t mss ;// 連接中最大分段的大小 u8_t appstate [ UIP_APPSTATE_SIZE] ; } 為了將用戶的應(yīng)用程序掛接到 uIP 中, 必須將宏 UIP_APPCALL ( ) 定義成實際的應(yīng)用程序函數(shù)名,這樣每當(dāng)某個 ulP 事件發(fā)生時,內(nèi)核就會調(diào)用該應(yīng)用程序進(jìn)行處理 。如果要加入應(yīng)用程序狀態(tài)的話 ,必須將宏 UIP_APPSTATE_SIZE 定義成應(yīng)用程序狀態(tài)結(jié)構(gòu)體的長度。在應(yīng)用程序函數(shù)中,依靠 ulP 事件檢測函數(shù)來決定處理的方法,另外可以通過判斷當(dāng)前連接的端 口號來區(qū)分處理不同的連接。 uIP 協(xié)議棧提供的主要接口匯總提供的接口在 中,為了減少函數(shù)調(diào)用造成的額外支出,大部分接口函數(shù)以宏命令實現(xiàn)的。 151.初始化 uIP 協(xié)議棧:uip_init() 2.處理輸入包:uip_input() 3.處理周期計時事件:uip_periodic() 4.開始監(jiān)聽端口:uip_listen() 5.連接到遠(yuǎn)程主機:uip_connect() 6.接收到連接請求:uip_connected() 7.主動關(guān)閉連接:uip_close() 8.連接被關(guān)閉:uip_closed()9.發(fā)出去的數(shù)據(jù)被應(yīng)答:uip_acked() 10.在當(dāng)前連接發(fā)送數(shù)據(jù):uip_send() 11.在當(dāng)前連接上收到新的數(shù)據(jù):uip_newdata() 12.告訴對方要停止連接:uip_stop() 13.連接被意外終止:uip_aborted()4 在單片機上移植 uIP 了解 uIP 的的主循環(huán)代碼架構(gòu)并改寫 main 函數(shù)下面是 uIP 協(xié)議棧的主控制循環(huán)。void main(void){ /*省略部分代碼*/ 16 /*設(shè)置 TCP 超時處理時間和 ARP 老化時間*/ tim er_set(amp。periodic_timer, CLOCK_CONF_SECOND / 2)。 tim er_set(amp。arp_timer, CLOCK_CONF_SECOND * 10)。 /*定時器初始化*/ init_T imer()。 /*協(xié)議棧初始化*/ uip_init()。 uip_arp_init()。 /*應(yīng)用層初始化*/ exam ple1_init()。 /*驅(qū)動層初始化*/ etherdev_init()。 /*IP 地址、網(wǎng)關(guān)、掩碼設(shè)置*/ uip_ipaddr(ipaddr , 192,168,1,9)。 uip_sethostaddr(ipaddr)。 uip_ipaddr(ipaddr , 192,168,1,16)。 uip_setdraddr(ipaddr)。 uip_ipaddr(ipaddr , 255,255,255,0)。 uip_setm ask(ipaddr)。 /*主循環(huán)*/ while(1) { /*從網(wǎng)卡讀數(shù)據(jù)*/ uip_len = etherdev_read()。 /*如果存在數(shù)據(jù)則按協(xié)議處理*/ if(uip_len 0) { /*收到的是 IP 數(shù)據(jù),調(diào)用 uip_input()處理*/ if(BUFtype == htons(UIP_ETHTYPE_IP)) 17 { uip_arp_ipin()。 uip_input()。 /*處理完成后,如果 uip_buf 中有數(shù)據(jù),則調(diào)用 etherdev_send 發(fā)送出去*/ if(uip_len 0) { uip_arp_out()。 etherdev_send()。 } } /*收到的是 ARP 數(shù)據(jù),調(diào)用 uip_arp_arpin()處理*/ else if(BUFtype == htons(UIP_ETHTYPE_ARP)) { uip_arp_arpin()。 if(uip_len 0) { etherdev_send()。 } } } /*查看 是否到了,到了則調(diào)用 uip_periodic 處理 TCP 超時程序*/ els e if(timer_expired(amp。periodic_timer)) { timer_reset(amp。periodic_timer)。 for(i = 0。 i UIP_CONNS。 i++) { uip_periodic(i)。 if(uip_len 0) {18 uip_arp_out()。 etherdev_send()。 } } /*查看 10S 是否到了,到了則調(diào)用 ARP 處理程序*/ if(tim er_expired(amp。arp_timer)) { timer_reset(amp。arp_timer)。 uip_arp_ timer()。 } } } return 。 } 仿照 \unix\ 寫網(wǎng)卡驅(qū)動程序 使用以太網(wǎng)的幀結(jié)構(gòu)下面以 IEEE 數(shù)據(jù)幀來分析數(shù)據(jù)鏈路層和網(wǎng)卡的工作內(nèi)容。IEEE 是電氣和電子工程師協(xié)會(IEEE )制定的一種描述物理層和數(shù)據(jù)鏈路層的實現(xiàn)方法的網(wǎng)絡(luò)協(xié)議,主題是在多種物理媒體上以多種速率采用 CSMA/CD 訪問方式。其規(guī)定的幀結(jié)構(gòu)如下: 表 以太網(wǎng)( )幀結(jié)構(gòu)PR(前導(dǎo)碼) :包括了 7 個字節(jié)的二進(jìn)制“1” 、 “0”間隔的代碼,即 1010…10共 56 位。當(dāng)幀在鏈路上傳輸時,接收方就能建立起同步,因為這種“1” 、 “0”間隔的傳輸波形為一個周期性方波。同時也指明了傳輸?shù)乃俾剩?0M 和 100M 的方波頻率不一樣,所以 100M 網(wǎng)卡可以兼容 10M 網(wǎng)卡) 。19 SD(幀數(shù)據(jù)定界符) :它是長度為 1 個字節(jié)的 10101011 二進(jìn)制序列,此碼表示表示下面跟著的是真正的數(shù)據(jù)。 DA(目的地址) :目的以太網(wǎng)的物理地址,由 48 位二進(jìn)制組成(6 個字節(jié)),說明該幀傳輸給哪個網(wǎng)卡。如果地址為 FFFFFF
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1