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

正文內(nèi)容

基于dm9000a的tcp通信設(shè)計(jì)畢業(yè)論文(參考版)

2025-06-21 15:28本頁(yè)面
  

【正文】 2. TCP協(xié)議應(yīng)用層偵聽事件回調(diào),我們?cè)榻B過TCP協(xié)議的實(shí)現(xiàn),在輸入設(shè)計(jì)中介紹了調(diào)用TCP套接字偵聽事件,本小節(jié)要實(shí)現(xiàn)TCP協(xié)議應(yīng)用層偵聽事件回調(diào)的功能。若客戶端向服務(wù)端上傳數(shù)據(jù),設(shè)置命令字為0x33;服務(wù)器讀取客戶端的參數(shù),置命令字為0x30;客戶端向服務(wù)端返回參數(shù),設(shè)命令字為0x31 ;PC服務(wù)器端下載程序,設(shè)置命令字為0x32。(2)EM客戶端向PC服務(wù)端發(fā)起注冊(cè),此時(shí)命令字為0x01,PC服務(wù)器端回應(yīng)注冊(cè),設(shè)置命令字為0x02。協(xié)議的具體工作過程可表示為(1)EM客戶端向PC服務(wù)端發(fā)起點(diǎn)對(duì)點(diǎn)的連接,設(shè)置客戶端機(jī)器類型為0x03JL206A,它的TCP端口固定為11018,PC服務(wù)器端的端口號(hào)默認(rèn)為10323。填入TCP協(xié)議頭計(jì)算校驗(yàn)和保存校驗(yàn)和數(shù)據(jù)緩存指向TCP協(xié)議頭進(jìn)行IP封裝發(fā)送數(shù)據(jù)開始結(jié)束套接字打開?YN TCP協(xié)議的輸出流程4 應(yīng)用層的實(shí)現(xiàn)使用TCP協(xié)議,在應(yīng)用層實(shí)現(xiàn)數(shù)據(jù)的上傳,具體來說在應(yīng)用層,我們要完成數(shù)據(jù)的接收和應(yīng)答和發(fā)送。2. TCP協(xié)議輸出處理設(shè)計(jì),在發(fā)送過程中,首先要判斷實(shí)際數(shù)據(jù)長(zhǎng)度不超過緩存區(qū)長(zhǎng)度,套接字要求處于打開狀態(tài),然后填入TCP協(xié)議頭,并計(jì)算校驗(yàn)和正確之后保存校驗(yàn)和,使數(shù)據(jù)緩存區(qū)buf指向TCP協(xié)議頭,然后傳給IP層,進(jìn)行IP封裝,然后等待發(fā)送。這時(shí)在數(shù)據(jù)包中,序列號(hào)為第3 步中的確認(rèn)號(hào)值,而確認(rèn)號(hào)為第3 步數(shù)據(jù)包中的序列號(hào)+1。該數(shù)據(jù)包中,序列號(hào)為客戶端發(fā)送的上一個(gè)數(shù)據(jù)包中的確認(rèn)號(hào)值,而確認(rèn)號(hào)為服務(wù)器發(fā)送的上一個(gè)數(shù)據(jù)包中的序列號(hào)+該數(shù)據(jù)包所帶的數(shù)據(jù)的大??; (2)第 2 步:服務(wù)器收到客戶端發(fā)送的終止數(shù)據(jù)包后,將對(duì)客戶端發(fā)送確認(rèn)信息,以關(guān)閉該方向上的TCP 連接。在TCP 關(guān)閉連接時(shí),首先關(guān)閉的一方(即發(fā)送第一個(gè)終止數(shù)據(jù)包的)將執(zhí)行主動(dòng)關(guān)閉,而另一方(收到這個(gè)終止數(shù)據(jù)包的)再執(zhí)行被動(dòng)關(guān)閉。該確認(rèn)數(shù)據(jù)包中,序列號(hào)是為上一個(gè)數(shù)據(jù)包中的確認(rèn)號(hào)值,確認(rèn)號(hào)為服務(wù)器發(fā)送的上一個(gè)數(shù)據(jù)包中的序列號(hào)+該數(shù)據(jù)包中所帶數(shù)據(jù)的大小。序列號(hào)為上一個(gè)數(shù)據(jù)包序列號(hào)值+數(shù)據(jù)包大??;確認(rèn)號(hào)為上一個(gè)數(shù)據(jù)包確認(rèn)序列號(hào)。但返回的確認(rèn)序號(hào)是已收到的數(shù)據(jù)的最高序加1,也就是說,確認(rèn)序號(hào)表示期望下次上到的第一個(gè)數(shù)據(jù)字節(jié)的序號(hào)[16]。服務(wù)器向客戶端發(fā)送一個(gè)數(shù)據(jù)包后,客戶端收到這個(gè)數(shù)據(jù)包后,會(huì)向服務(wù)器發(fā)送一個(gè)確認(rèn)數(shù)據(jù)包。這里為了簡(jiǎn)化,只使用客戶端向服務(wù)器發(fā)送數(shù)據(jù)的情況。該數(shù)據(jù)包中,序列號(hào)是上一個(gè)同步請(qǐng)求數(shù)據(jù)包中的確認(rèn)號(hào)值,確認(rèn)號(hào)是服務(wù)器的初始序列號(hào)+1。1) 第 1 步:客戶端向服務(wù)器發(fā)送一個(gè)同步數(shù)據(jù)包請(qǐng)求建立連接,該數(shù)據(jù)包中,初始序列號(hào)(ISN)是客戶端隨機(jī)產(chǎn)生的一個(gè)值,確認(rèn)號(hào)是0;2) 第 2 步:服務(wù)器收到這個(gè)同步請(qǐng)求數(shù)據(jù)包后,會(huì)對(duì)客戶端進(jìn)行一個(gè)同步確認(rèn)。在TCP 的三次握手中,發(fā)送第一個(gè)SYN 的一端執(zhí)行的是主動(dòng)打開,而接收這個(gè)SYN 并發(fā)回下一個(gè)SYN 的另一端執(zhí)行的是被動(dòng)打開。以客戶端與服務(wù)器之間建立的通信來說明, TCP通訊傳輸過程客戶端 序號(hào) 確認(rèn)號(hào) 標(biāo)志 數(shù)據(jù) 服務(wù)端 建立連接過程:第一次握手: 隨機(jī)C1 不考慮 SYN 第二次握手: 隨機(jī)S1 C1+1 SYN+ACK 第三次握手: C1+1 S1+1 ACK 傳送數(shù)據(jù)過程:發(fā)送數(shù)據(jù): C1+1 S1+1 PSH+ACK n字節(jié) 接收確認(rèn): S1+1 C1+1+n ACK 發(fā)送數(shù)據(jù): C1+1+n S1+1 PSH+ACK m字節(jié) 接收確認(rèn): S1+1 C1+1+n+m ACK 關(guān)閉連接過程: 第一次握手: C1 S1 FIN+ACK 第二次握手: S1 C1+1 ACK 第三次握手: S1 C1+1 FIN+ACK 第四次握手: C1+1 S1+1 ACK 1. TCP 建立連接運(yùn)輸連接的建立和釋放是每一次面向連接通信中必不可少的過程,在連接建立的過程中要解決以下三個(gè)問題:(1)要使每一方都知道對(duì)方的存在;(2)要允許雙方協(xié)商一些參數(shù)(如,最大報(bào)文段長(zhǎng)度,最大窗口的大等); (3)能夠運(yùn)輸實(shí)體資源(如緩沖區(qū)大小,連接表中的項(xiàng)目等)進(jìn)行分配。套接字即是IP地址與端口號(hào)的組合,TCP的一個(gè)連接就是以一對(duì)套接字來標(biāo)識(shí)的,所以在運(yùn)輸層通信的一對(duì)套接字必須是唯一的。端口號(hào)是一個(gè)16bit的地址,不同的應(yīng)用進(jìn)程用不同的端口號(hào)來標(biāo)識(shí)。在軟件編程時(shí),為了實(shí)現(xiàn)TCP協(xié)議,本課題定義了結(jié)構(gòu)體tcb如下: struct tcp_frame //TCP協(xié)議幀{ UINT16 sport; UINT16 dport; UINT32 seqno; UINT32 ackno; UINT16 hlen_flags; UINT16 window; UINT16 checksum; UINT16 urgent; UINT8 opt[MAX_TCP_OPTLEN + 1]; UINT16 buf_index; } 在這個(gè)結(jié)構(gòu)體里,定義了:sport為發(fā)送端端口號(hào),dport為接收端端口號(hào),seqno為包的序列號(hào),ackno為確認(rèn)應(yīng)答號(hào),hlen flags為控制標(biāo)志,window為窗口,checksum為檢驗(yàn)和,urgent為緊急指針,opt[MAX_TCP_OPTLEN + 1]為可選字段,buf_index為存區(qū)起始地址。選項(xiàng)長(zhǎng)度可變,TCP規(guī)定一種選項(xiàng)即最長(zhǎng)報(bào)文段MSS用于告訴對(duì)方的TCP:本地的緩沖區(qū)所能接收的報(bào)文段的最大長(zhǎng)度。 檢驗(yàn)和占兩字節(jié),檢驗(yàn)的范圍包括首部和數(shù)據(jù)兩部分,在計(jì)算檢驗(yàn)和時(shí),首先要在TCP報(bào)文段的前面加上一個(gè)12字節(jié)的偽首部,然后接收端在計(jì)算檢驗(yàn)和時(shí)仍然要加上偽首部。各比特意義如下:緊急比特URG,當(dāng)URG=1時(shí),表明此報(bào)文段應(yīng)盡快發(fā)送而不要按原來的排隊(duì)來傳送,應(yīng)與緊急指針字段配合使用;確認(rèn)比特ACK,當(dāng)ACK=1時(shí)確認(rèn)序號(hào)字段才有意義,除了最初的一個(gè)SYN段之外,它必須為1;急迫比特PSH,當(dāng)PSH=1時(shí),表明請(qǐng)求遠(yuǎn)地TCP將本報(bào)文段立即傳送給其應(yīng)用層,而不等到整個(gè)緩沖區(qū)滿后再向上交付;重建比特RST,當(dāng)RST=1時(shí),表明出現(xiàn)嚴(yán)重錯(cuò)誤,必須釋放連接,然后重新建立運(yùn)輸連接;同步比特SYN,當(dāng)SYN=1而ACK=0時(shí),表明這是一個(gè)連接請(qǐng)求報(bào)文段,若對(duì)方同意建立連接,則應(yīng)在發(fā)回的報(bào)文段中使SYN=1且ACK=1;終止比特FIN,當(dāng)FIN=1時(shí),表明發(fā)送的字節(jié)串已經(jīng)發(fā)送完畢,并要求釋放運(yùn)輸連接[15]。保留位6bit,為了將來的擴(kuò)展而準(zhǔn)備的域,目前應(yīng)置為0。由于序號(hào)字段有32bit長(zhǎng),可對(duì)4GB的數(shù)據(jù)進(jìn)行編號(hào),這樣就可以保證序號(hào)重復(fù)使用時(shí)就序號(hào)的數(shù)據(jù)早已在網(wǎng)絡(luò)中消失了。從0開始,到2321為止,共232個(gè)序列號(hào)。 TCP報(bào)文段的首部0 8 16 24 31發(fā)送端端口號(hào)接收端端口號(hào) 序 列 號(hào) 確 認(rèn) 序 號(hào)數(shù)據(jù)偏移 保留 URGACRPSHRSTSYSFIN窗 口檢 驗(yàn) 和緊 急 指 針選項(xiàng)(長(zhǎng)度可改變)填 充 前兩個(gè)為發(fā)送端端口號(hào)和接收端端口號(hào)各占兩個(gè)字節(jié)端口是運(yùn)輸層與高層的服務(wù)接口,16bit 的端口,32bit的IP地址,構(gòu)成了相當(dāng)于運(yùn)輸層服務(wù)訪問點(diǎn)TSAP的地址(總共是48bit)。TCP報(bào)文段分為首部和數(shù)據(jù)兩部分,TCP的全部功能都體現(xiàn)在它首部中各字段的作用。TCP之所以可靠是因?yàn)樗鼘?duì)發(fā)送數(shù)據(jù)的順序號(hào)進(jìn)行了控制,以及進(jìn)行與其對(duì)應(yīng)的肯定確認(rèn)應(yīng)答控制;面向連接是因?yàn)門CP協(xié)議在傳輸數(shù)據(jù)開始前,通信雙方之間需建立好連接,在通信結(jié)束后切斷連接。在發(fā)送過程中,類似于IP協(xié)議的輸出過程,同樣是調(diào)用DM9000A的驅(qū)動(dòng)函數(shù),完成發(fā)送過程。本課題只處理響應(yīng)請(qǐng)求。設(shè)計(jì)思路如下:處理程序接收到ICMP報(bào)的IP報(bào)頭后,首先對(duì)ICMP校驗(yàn)和驗(yàn)證,然后根據(jù)ICMP報(bào)的類型字段判斷是否是ping請(qǐng)求幀。首先確定是IP數(shù)據(jù)報(bào)后再判斷是不是ICMP報(bào)文,確認(rèn)是ICMP報(bào)文后,驗(yàn)證檢驗(yàn)和,再判斷是請(qǐng)求報(bào)文還是應(yīng)答報(bào)文。 ICMP 響應(yīng)請(qǐng)求、響應(yīng)應(yīng)答的報(bào)文格式 0 8 16 31類型(0或8)代碼(0)檢驗(yàn)和標(biāo)識(shí)符序號(hào)選型數(shù)據(jù)圖 : 開始重新判斷是不 是ICMP 檢驗(yàn)和是否 正確?響應(yīng)請(qǐng)求? 發(fā)送響應(yīng)應(yīng)答結(jié)束響應(yīng)應(yīng)答? 報(bào)錯(cuò) YNNNNYYY ICMP 處理流程ICMP協(xié)議有兩種報(bào)文:請(qǐng)求報(bào)文和應(yīng)答報(bào)文。本課題把ICMP簡(jiǎn)化成只有響應(yīng)請(qǐng)求和響應(yīng)應(yīng)答。ICMP報(bào)文是封裝在IP分組中進(jìn)行傳輸?shù)?。這時(shí)就需要使用網(wǎng)絡(luò)層的ICMP(網(wǎng)絡(luò)控制報(bào)文協(xié)議),使主機(jī)或路由器報(bào)告差錯(cuò)和異常情況。在發(fā)送時(shí),調(diào)用DM9000A的驅(qū)動(dòng)函數(shù)(DM9000_SendFrame),實(shí)現(xiàn)數(shù)據(jù)的發(fā)送。接下來就是計(jì)算出IP首部的檢驗(yàn)和了,因?yàn)榘l(fā)送的IP數(shù)據(jù)報(bào)的時(shí)候要填入首部檢驗(yàn)和字段,在計(jì)算校驗(yàn)和時(shí)采用16位二進(jìn)制取反求和。然后對(duì)其進(jìn)行判斷,如果這兩種協(xié)議都不是就報(bào)錯(cuò)。如果在ARP緩存中找到目的地址的硬件地址以后,再判斷是要發(fā)什么協(xié)議的IP數(shù)據(jù)報(bào),判斷的依據(jù)是根據(jù)IP首部的協(xié)議字段進(jìn)行判斷。開始重新判斷是否 是IP獲取IP首部信息有無可選字段首部檢驗(yàn)和是 否正確更新ARP高速緩存返回?cái)?shù)據(jù)部分長(zhǎng)度YN 報(bào)錯(cuò)記錄可選字段報(bào)錯(cuò)YYNN IP 協(xié)議輸入處理流程3. IP協(xié)議輸出處理設(shè)計(jì) 。最后一步是把記錄下來的IP地址和硬件地址,更新到ARP高速緩存當(dāng)中。如果計(jì)算的檢驗(yàn)和與收到的檢驗(yàn)和相等的話,就表明數(shù)據(jù)正確,就開始接收數(shù)據(jù)了。如果沒有可選項(xiàng),接下來就是驗(yàn)證首部檢驗(yàn)和了。判斷的依據(jù)是以太網(wǎng)協(xié)議頭的幀類型字段,如果不是IP數(shù)據(jù)就會(huì)報(bào)錯(cuò),丟棄該幀。2. IP協(xié)議輸入處理設(shè)計(jì)IP協(xié)議的實(shí)現(xiàn)包括兩個(gè)過程:IP協(xié)議輸入過程和IP協(xié)議輸出過程。它被上層ICMP處理函數(shù)和TCP發(fā)送函數(shù)調(diào)用。Ip_check_cs()函數(shù),負(fù)責(zé)檢查IP協(xié)議頭檢查和。本課程設(shè)計(jì)采用TCP協(xié)議進(jìn)行通信,因此IP層只需要確定是ICMP數(shù)據(jù)包還是TCP數(shù)據(jù)包,然后根據(jù)數(shù)據(jù)包的類型進(jìn)行相應(yīng)的處理。tos為服務(wù)類型;tlen為總長(zhǎng)度;id為標(biāo)志;frags為標(biāo)識(shí)和片偏移;ttl為生存時(shí)間;protocol為協(xié)議;checksum為檢驗(yàn)和;sip為源IP地址;dip為目的IP地址;opt[MAX_IP_OPTLEN + 1]為可選字段;buf_index為數(shù)據(jù)緩存區(qū);數(shù)據(jù)緩存區(qū)位數(shù)據(jù)部分的偏移量在此設(shè)置,則這部分是為了區(qū)分首部和數(shù)據(jù)部分,提取數(shù)據(jù)時(shí),方便操作。以其他形式存儲(chǔ)二進(jìn)制整數(shù)的機(jī)器,如little endian格式,則必須在傳輸數(shù)據(jù)之前把首部轉(zhuǎn)換成網(wǎng)絡(luò)字節(jié)序[13]。這種傳輸次序稱作big endian字節(jié)序。最高位在左邊,記為0 bit;最低位在右邊,記為31 bit。ARP輸出請(qǐng)求查找ARP高速 緩存表分配表空間將本地IP地址和物理地址以及目的IP地址、廣播物理地址寫入緩存中發(fā)送ARP分組請(qǐng)求結(jié)束NY開始 ARP輸出處理數(shù)據(jù)流程圖 IP協(xié)議及其實(shí)現(xiàn) IP協(xié)議幀數(shù)據(jù)結(jié)構(gòu) IP協(xié)議是TCP/IP體系中最主要的協(xié)議之一, 。在這里要指出的是,當(dāng)高速緩存增加一個(gè)新表項(xiàng)時(shí),初始化該表項(xiàng)中的壽命字段,設(shè)置最長(zhǎng)等待時(shí)間ARP_TIMEOUT為60(1分鐘),隨時(shí)間的推移,高速緩存管理程序遞減壽命字段中的值,并當(dāng)其值達(dá)到零時(shí),丟棄該表項(xiàng)。在發(fā)送時(shí),調(diào)用DM9000A驅(qū)動(dòng),完成以太網(wǎng)的數(shù)據(jù)發(fā)送。若有,就更新緩存表并把數(shù)據(jù)放到使用該地址的幀中,并發(fā)送該幀;若沒有,在ARP高速緩存中分配一個(gè)表項(xiàng),用于存放新的綁定。開始重新判斷是否是ARP是請(qǐng)求?發(fā)送回應(yīng)是否是新的IP地址更新ARP高速緩存是響應(yīng)?Y報(bào)錯(cuò)報(bào)錯(cuò)接受響應(yīng)結(jié)束NYYNYNN ARP協(xié)議輸入處理流程圖(2)ARP協(xié)議輸出處理過程。發(fā)送響應(yīng)是個(gè)ARP輸出過程,詳細(xì)細(xì)節(jié)見下文的ARP輸出處理流程。確認(rèn)是ARP數(shù)據(jù)后,再判斷它是屬于分組請(qǐng)求還是分組響應(yīng),判斷的依據(jù)是看ARP協(xié)議的操作字節(jié)是1還是2,1表示請(qǐng)求,2表示應(yīng)答。(1)A
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1