日韩床上生活一级视频|能看毛片的操逼网站|色悠悠网站在线观看视频|国产免费观看A淫色免费|国产av久久久久久久|免费A级视频美女网站黄|国产毛片av日韩小黄片|热久久免费国产视频|中文字幕无码色色|成人在线视频99久久久

機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
基于SX單片機(jī)實(shí)現(xiàn)WebServer和網(wǎng)絡(luò)協(xié)議棧
基于SX單片機(jī)實(shí)現(xiàn)WebServer和網(wǎng)絡(luò)協(xié)議棧
 更新時(shí)間:2008-8-16 21:09:49  點(diǎn)擊數(shù):24
【字體: 字體顏色

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

(1)IP協(xié)議

IP是TCP/IP協(xié)議族中最為核心的協(xié)議。Internet所有的數(shù)據(jù)都以IP數(shù)據(jù)報(bào)格式傳輸。IP協(xié)議最大的特點(diǎn)是提供不可靠的和無(wú)連接的數(shù)據(jù)包傳送服務(wù)。

不可靠(unreliable)的意思是它不能保證IP數(shù)據(jù)報(bào)能成功地到達(dá)目的地。IP僅提供最好的傳輸服務(wù)。若發(fā)生某種錯(cuò)誤時(shí),如某個(gè)路由器暫時(shí)用完了緩沖區(qū),IP有一個(gè)簡(jiǎn)單的錯(cuò)誤處理算法;丟棄該數(shù)據(jù)報(bào),然后發(fā)送ICMP(Internet控制報(bào)文協(xié)議)消息報(bào)給信源端。任何要求的可靠性必須由上層來(lái)提供(如TCP)。

無(wú)連接(connectionless)的意思是IP并不維護(hù)任何關(guān)于后續(xù)數(shù)據(jù)報(bào)的狀態(tài)信息。每個(gè)數(shù)據(jù)報(bào)的處理是相互獨(dú)立的。這也說(shuō)明,IP數(shù)據(jù)報(bào)可以不按發(fā)送順序接收。如果一信源向相同的信宿發(fā)送兩個(gè)連續(xù)的數(shù)據(jù)報(bào)(先是A,然后是B),每個(gè)數(shù)據(jù)報(bào)都是獨(dú)立地進(jìn)行路由選擇,可能選擇不同的路線,因此,B可能在A到達(dá)之前先到達(dá)。

IP數(shù)據(jù)包的格式如圖4所示。

版本是指IP協(xié)議的版本號(hào)。目前的協(xié)議版本號(hào)是4,因此IP也稱作IPV4。

首部長(zhǎng)度指的是首部占32bit字的數(shù)目。由于它是一個(gè)4位字段,因此首都最長(zhǎng)為60個(gè)字節(jié)。在這里,IP數(shù)據(jù)報(bào)字段的值是5。

服務(wù)類型字段包括一個(gè)3位的優(yōu)先權(quán)子字段(現(xiàn)在已被忽略)、4位的TOS子字段和1位未用位但必須置0。4bit的TOS分別代表:最小時(shí)延、最大吞吐量、最高可靠性和最小費(fèi)用。4bit中只能置其中1bit。如果所有4bit均為0,那么就意味著是一般服務(wù)。

總長(zhǎng)度字段是指整個(gè)IP數(shù)據(jù)報(bào)的長(zhǎng)度,以字節(jié)為單位。利用首都長(zhǎng)度字段和總長(zhǎng)度字段,這可以知道IP數(shù)據(jù)服中數(shù)據(jù)內(nèi)容的起始位置和長(zhǎng)度。

標(biāo)識(shí)字段唯一地標(biāo)識(shí)主機(jī)發(fā)送的每一份數(shù)據(jù)報(bào)。

標(biāo)志字段用來(lái)指公平目的地址是一個(gè)完整的主機(jī)地址還是一個(gè)網(wǎng)絡(luò)地址。

生存時(shí)間字段設(shè)置了數(shù)據(jù)報(bào)可以經(jīng)過(guò)的最多路由器數(shù)。

首部檢驗(yàn)和字段是根據(jù)IP首部計(jì)算的檢驗(yàn)和碼。

源地址和目的地址都是32位的數(shù)據(jù)。

可選項(xiàng)定義安全和處理限制、記錄路徑、時(shí)間戳、寬松的源站遠(yuǎn)路、嚴(yán)格的源站選路等信息。

    (2)SX協(xié)議棧對(duì)IP層的實(shí)現(xiàn)

SX52BD100的協(xié)議棧中,IP層的實(shí)現(xiàn)就是把要發(fā)送出去的消息進(jìn)行IP打包,即加上IP包頭,使之符合IP數(shù)據(jù)包的格式發(fā)送到物理層;將接收到的來(lái)自物理層的數(shù)據(jù)包進(jìn)行IP解包,即去掉包頭,送到TCP層。應(yīng)注意,協(xié)議棧不接收分片的IP包,因?yàn)樗⒉粚?duì)接收到的數(shù)據(jù)進(jìn)行重新打包。

2.傳輸層

(1)TCP協(xié)議

TCP提供一種面向連接的、可靠的字節(jié)傳送服務(wù)。TCP數(shù)據(jù)包的結(jié)構(gòu)如圖5所示。

每個(gè)TCP段都包含源端和目的端的端口號(hào),用于尋找發(fā)端和收端應(yīng)用進(jìn)程。這兩個(gè)值加上IP包頭中的源端IP地址和目的端IP地址,唯一確定一個(gè)TCP連接。

序號(hào)用來(lái)標(biāo)識(shí)從TCP發(fā)端向TCP收端發(fā)送的數(shù)據(jù)字節(jié)流。它表示在這個(gè)報(bào)文段中的第一個(gè)數(shù)據(jù)字節(jié)。

確認(rèn)序號(hào)包發(fā)送確認(rèn)的一端所期望收到的下個(gè)序號(hào)。

首部長(zhǎng)度給出首部中32bit字的數(shù)目。

緊急指針是一個(gè)正的偏移量,與序號(hào)字段中的值相加表示緊急數(shù)據(jù)最后一個(gè)字節(jié)的序號(hào)。其余字段的意義和IP包中的差不多。

為了保證TCP層的數(shù)據(jù)能有效地傳輸,在建立TCP連接時(shí),用到了三向握手機(jī)制。具體過(guò)程如下(假設(shè)在A、B間通信,A、B的初始化序號(hào)為X、Y):

①由A向B發(fā)出SYN信號(hào),告訴B,A的初始化序號(hào)為X。

②由B向A發(fā)出ACK和SYN信號(hào),告訴A,B知道A的初始化序號(hào)為X,B的是Y。

③由A向B發(fā)出ACK信號(hào),告訴B,A知道B的初始化序號(hào)是Y。

經(jīng)過(guò)這樣的初始化后,TCP連續(xù)的建立就完成了,A與B之間的數(shù)據(jù)傳輸也可靠了。

    (2)SX協(xié)議棧對(duì)TCP層的實(shí)現(xiàn)

在SX52BD100的協(xié)議棧中,對(duì)TCP層的實(shí)現(xiàn)是通過(guò)提供的TCP API(應(yīng)用程序接口)來(lái)實(shí)現(xiàn)。TCP的API主要包括下面的函數(shù)和變量;

TCPApplInit():建立第一個(gè)TCP連接的初始化函數(shù);

TCPApp2Init():建立第二個(gè)TCP連接的初始化函數(shù);

TCPAppTxBytes():TCP連接中發(fā)送數(shù)據(jù)的字節(jié)數(shù);

TCPAppRxBytes():TCP連接中接收數(shù)據(jù)的字節(jié)數(shù);

TCPAppTxData():發(fā)送數(shù)據(jù);

TCPAppRxData():接收數(shù)據(jù);

TCPAppTxDone():發(fā)送完畢;

TCPAppRxDone():接收完畢;

TCPAppPassiveOpen():被動(dòng)TCP連接;

TCPAppActiveOpen():主動(dòng)TCP連接;

Sock1RomoteIP、Sock2RomoteIP:TCP連接的遠(yuǎn)程主機(jī)的IP地址;

MyIP:本機(jī)的IP地址;

tcblLocalPortMSB、tcb1LocalPortLSB、tcb2LocalPortMSB、tcb2LocalPortLSB:本機(jī)的TCP連接端口;

tcb1RemotePortMSB、tcb1RemotePortLSB、tcb2RemotePortMSB、tcb2RemotePortLSB:遠(yuǎn)程主機(jī)的TCP連接端口;

TCP協(xié)議棧支持同時(shí)建立兩個(gè)TCP連接:一個(gè)為主動(dòng)連接,由TCPApp1nit()來(lái)控制;另一個(gè)為被動(dòng)連接,由TCPApp2Init()來(lái)控制。TCP是基于連接的協(xié)議,因?yàn)楸仨毐Wo(hù)對(duì)TCP連接狀態(tài)的監(jiān)視和狀態(tài)有關(guān)的信息保存在發(fā)送控制塊中;而TCP連接狀態(tài)的改變由TCP的軟件狀態(tài)機(jī)來(lái)實(shí)現(xiàn)。軟件狀態(tài)機(jī)又由事件或用戶來(lái)觸發(fā)。比如,當(dāng)監(jiān)視到一個(gè)帶有SYN標(biāo)志的TCP包到達(dá)時(shí),狀態(tài)機(jī)就將TCP連接轉(zhuǎn)換到接收狀態(tài);用戶也可以手工控制狀態(tài)機(jī)處于發(fā)送狀態(tài)來(lái)建立TCP連接。

①用TCP API來(lái)建立TCP被動(dòng)連接

_TCPApp2lint

bank TCB2BANK

mov tcb2LocalPortLSB,#HTTP_PORT_LSB ;設(shè)置TCP的服務(wù)端口

mov tcb2LocalPortMSB,#HTTP_PORT_MSB

bank HTTP_BANK

clr httpParseState

clr httpURIHash

setb flags2.TCP_SOCK ;顯示TCP2的連接狀態(tài)

jmp @TCPAppPassiveOpen ;跳轉(zhuǎn)到TCP被動(dòng)連接子程序,進(jìn)行端口偵聽(tīng)

retp

②用TCP API建立TCP主動(dòng)連接

_TCPApp1lnit

test switch ;條件觸發(fā)

sz

retp ;沒(méi)有觸發(fā),退出

bank HTTPBANK

mov w,#HTTP_CONNECT ;啟動(dòng)HTTP狀態(tài)機(jī)

mov httpState,w

bank TCB1_BANK

mov tcb1LocalPortLSB,#80 ;設(shè)置本機(jī)TCP連接服務(wù)端口

mov tcb1LocalPortMSB,#80

mov tcb1RemotePortLSB,#HTTP_PORT_LSB ;設(shè)置遠(yuǎn)程主機(jī)TCP連接服務(wù)端口

mov tcb1RemotePortMSB,#HTTP_PORT_MSB

bank TCPSOCKET_BANK

mov sock1RemoteIR3,#SMTP_SERVER_IP3 ;設(shè)置遠(yuǎn)程主機(jī)的IP地址

mov sock1RemoteIP2,#SMTP_SERVER_IP2

mov sock1RemoteIP1,#SMTP_SERVER_IP1

mov sock1RemoteIP0,#SMTP_SERVER_IP0

clrb flags2.SOCK ;顯示TCP主動(dòng)連接的狀態(tài)

jmp @TCPAppActiveOpen ;在指定的端口建立TCP連接

retp

③用TCP API發(fā)送數(shù)據(jù)和接收數(shù)據(jù)

一旦建立了TCP連接,那就只有兩種情況:發(fā)送數(shù)據(jù)或接收數(shù)據(jù)。接收數(shù)據(jù)時(shí),從IP層來(lái)的數(shù)據(jù)經(jīng)過(guò)狀態(tài)機(jī)去掉TCP包頭后再送到應(yīng)用層;發(fā)送數(shù)據(jù)時(shí),軟件狀態(tài)機(jī)會(huì)在數(shù)據(jù)前面加上TCP包頭再發(fā)送IP層。

接收數(shù)據(jù)時(shí),需要用到的TCP API函數(shù)為TCPAppRxBytes()、TCPAppRxData()和TCPAppRxDone():發(fā)送數(shù)據(jù)時(shí),有一點(diǎn)值得關(guān)注:為了防止接收緩沖區(qū)的溢出,相對(duì)于發(fā)送數(shù)據(jù)包,協(xié)議棧給予接收數(shù)據(jù)包以更高的優(yōu)先組。也就是說(shuō),協(xié)議棧軟件會(huì)一直處理接收的數(shù)據(jù)包,直到接收緩沖區(qū)中沒(méi)有任何數(shù)據(jù)。

發(fā)送數(shù)據(jù)時(shí),需要用到的TCP API函數(shù)為TCPAppTxBytes()、TCPAppTxData()和TCPAppTxDone()。必須注意,只有在建立了TCP連接后,才可以發(fā)送數(shù)據(jù)。

3.應(yīng)用層

HTTP是WWW上的協(xié)議。當(dāng)用戶要瀏覽服務(wù)器上的一個(gè)網(wǎng)頁(yè)時(shí),一個(gè)HTTP請(qǐng)求就會(huì)從而用戶的瀏覽器發(fā)到HTTP服務(wù)器。服務(wù)器響應(yīng)這個(gè)請(qǐng)求,把指定的網(wǎng)頁(yè)傳送回來(lái),用戶才看到了網(wǎng)頁(yè)。

下面是一個(gè)典型的客戶端向服務(wù)器發(fā)送請(qǐng)求的例子:

GET Destination_IP/index.html http/1.0

GET代表客戶端的請(qǐng)求命令,而服務(wù)器也受理這個(gè)命令;Destination_IP代表遠(yuǎn)程主機(jī)的IP地址;index.html是客戶端請(qǐng)求的資源;http/1.0是HTTP協(xié)議版本。

(1)SX協(xié)議棧對(duì)HTTP層的實(shí)現(xiàn)

因?yàn)镠TTP層的下面是TCP層,也就是說(shuō)HTTP把TCP作為它的傳輸協(xié)議,所以那兩個(gè)TCP連接也為WebServer所用。理所當(dāng)然,TCP API的發(fā)送和接收函數(shù)也用來(lái)實(shí)行WebServer的請(qǐng)求和相應(yīng)命令。

所而的服務(wù)器資源都存放在外部的E2PROM中,HTTP使用統(tǒng)一資源定位器來(lái)指定返回給客戶端的網(wǎng)絡(luò)資源。統(tǒng)一資源定位器就像一個(gè)帶而目錄的文件路徑一樣,指定資源的路徑和擴(kuò)展名。SX協(xié)議棧并沒(méi)而像普通的解決方案那樣使用一般的文件系統(tǒng)來(lái)管理外部存儲(chǔ)器中的資源,而是采用了一種稱之為智能信息表來(lái)解決這個(gè)問(wèn)題。當(dāng)一個(gè)請(qǐng)求到來(lái)時(shí),一個(gè)8位的無(wú)用信息對(duì)統(tǒng)一資源定位器進(jìn)行運(yùn)算(8位字符加運(yùn)算),再將得到的數(shù)據(jù)乘以2,并把這個(gè)結(jié)果作為一個(gè)索引區(qū)中的一個(gè)值。如果在E2PROM中已經(jīng)建立了查找表,憑著這個(gè)值在E2PROM中去查表,找到相應(yīng)的資源并返回。用這種方法的好處是可以避免繁瑣的字符串的比較和將統(tǒng)一資源定位直接存放在服務(wù)器中。這種文件系統(tǒng)的結(jié)構(gòu)如圖6所示。

(2)E2PROM的編程

在WebServer啟動(dòng)以前,要先把資源文件下載到E2PROM中。在這個(gè)方案中采用RS232端口從電腦上傳輸資源文件。下載程序自動(dòng)從電腦中載入磁盤的目錄結(jié)構(gòu)并在E2PROM中創(chuàng)建E2PROM文件系統(tǒng)。

  • 上一篇: 嵌入式系統(tǒng)以太網(wǎng)接口的設(shè)計(jì)
  • 下一篇: 基于PPP協(xié)議單片機(jī)拔號(hào)上網(wǎng)的設(shè)計(jì)與實(shí)現(xiàn)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1