繼續(xù)昨天的
設(shè)置端口TX/RX存儲信息,每個端口的基地址和屏蔽地址在這里確定并保存。W5500有一個通用寄存器,8個Socket寄存器去,以及對應(yīng)每個Socket的收/發(fā)緩存區(qū)。每一個Socket的發(fā)送(接收)緩存區(qū)都在一個16KB的物理發(fā)送(接收)內(nèi)存中,初始化分配為2KB。無論給每個Socket分配多大的收/發(fā)緩存,都必須在16位的偏移地址范圍內(nèi)(從0x0000到0xFFFF)W5500有一個16KB發(fā)送內(nèi)存用于Socket_n的發(fā)送緩存區(qū),以及一個16KB的接收內(nèi)存用于Socket_n接收緩存區(qū)。發(fā)送初始緩存被分配給了每個Socket發(fā)送緩存(2KB x 8 = 16KB),初始化分配的2KBSocket發(fā)送緩存,可以通過使用Socket發(fā)送緩存大小寄存器重新分配。一旦所有的Socket發(fā)送緩存大小寄存器配置完成,16KB的發(fā)送內(nèi)存就會按照配置分配給每個Socket的發(fā)送緩存,并按照從Socket0到7順序分配。16KB的發(fā)送內(nèi)存中分配了對應(yīng)的發(fā)送緩沖區(qū),用于為來自主機傳輸?shù)臄?shù)據(jù)做緩存。讀取內(nèi)存同理。
四.應(yīng)用層協(xié)議開發(fā)
以太網(wǎng)的應(yīng)用層包括支撐協(xié)議和應(yīng)用協(xié)議兩部分
支撐協(xié)議:域名服務(wù)系統(tǒng)(DNS),簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)等,典型應(yīng)用包括Web瀏覽,電子郵件,文件傳輸訪問,遠程登陸等。
應(yīng)用協(xié)議:超文本傳輸協(xié)議(HTTP),簡單郵件傳輸協(xié)議(SMTP),文本傳輸協(xié)議(FTP),簡單文件傳輸協(xié)議(TFTP)和遠程登陸(Telnet)。
五.實例開發(fā)
1.TCP是TCP/IP體系中面向連接的傳輸層協(xié)議,他使用IP作為網(wǎng)絡(luò)層,提供全雙工的可靠交付的服務(wù)。(W5500在內(nèi)部利用軟件實現(xiàn)了TCP/IP協(xié)議棧,即內(nèi)部結(jié)構(gòu)包含了物理層,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層和傳輸層)TCP建立通信的兩端,一段稱為服務(wù)器端,指網(wǎng)絡(luò)中能為用戶提供服務(wù)的計算機系統(tǒng),另一端為客戶端,是與服務(wù)器相對應(yīng)的,接受服務(wù)的一端,為客戶提供本地服務(wù)的程序。
這是一個通過互聯(lián)網(wǎng)進行交互的C/S模型,他是一個最典型最常用的通訊結(jié)構(gòu)。此時服務(wù)器處于守候狀態(tài),并偵聽客戶端的請求。客戶端發(fā)出請求,并請求經(jīng)互聯(lián)網(wǎng)發(fā)送給服務(wù)器,一旦服務(wù)器接收到這個請求,就可以執(zhí)行請求所制定的任務(wù),并將執(zhí)行的結(jié)果經(jīng)互聯(lián)網(wǎng)互聯(lián)網(wǎng)回送給客戶。
TCP協(xié)議通過三個報文段完成連接的建立,這個過程叫做三次握手
第一次握手:建立連接時,客戶端發(fā)送SYN包(TCP/IP建立連接時使用的握手信號客戶機首先發(fā)出一個SYN消息,服務(wù)器使用SYN+ACK應(yīng)答表示接收到了這個消息,最后客戶機再以ACK消息響應(yīng)。)(seq = j)到服務(wù)器,并進入SYN_SEND狀態(tài),等待服務(wù)器確認。
第二次握手:服務(wù)器收到SYN包,必須確認客戶的SYN(ack = j + 1),同時自己也發(fā)送一個SYN包,此時服務(wù)器進入SYN_RECV狀態(tài)。
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認包ACK(ack = k + 1),此包發(fā)送完畢,客戶端和服務(wù)器進入ESTABLISHED狀態(tài),完成三次握手。
建立一個鏈接需要三次握手,但是終止一個鏈接要四次揮手,這是由于TCP的半關(guān)閉造成的。
1.第一次揮手:主動方發(fā)出了FIN位的報文,表示主動終止從本地到遠端的單向連接;此時,主動方進入FIN_WAIT1狀態(tài),意思就是說他在等著遠端的FIN報文。
2.第二次揮手:遠端收到FIN后,會立即發(fā)送ACK;主動方接收到ACK之后,進入FIN_WAIT2狀態(tài),所以FIN_WAIT1狀態(tài)持續(xù)時間非常短;此時遠端進入CLOSE_WAIT狀態(tài),一條單向連接終止了,但另一條還沒有,處于HALF_CLOSE連接狀態(tài)。
3.第三次揮手:當(dāng)遠端進行了必要的數(shù)據(jù)發(fā)送之后,他會發(fā)送FIN,表示從他出發(fā)的單向連接也要關(guān)閉;同時他進入LAST_ACK狀態(tài)。
4.第四次揮手:主動方收到FIN之后,回應(yīng)一個ACK;遠端進入CLOSED狀態(tài),連接關(guān)閉;主動方進入TIME_WAIT狀態(tài);確保最后一個ACK沒有丟失,防止新連接占用剛剛關(guān)閉的主動方的地址端口,使網(wǎng)絡(luò)中流浪的老連接的分組被誤認為新連接的分組。
由于我們的工程中使用他作為客戶端使用,所以我們先看其作為TCP客戶端的數(shù)據(jù)收發(fā)
-
FPGA設(shè)計
+關(guān)注
關(guān)注
9文章
428瀏覽量
26485
發(fā)布評論請先 登錄
相關(guān)推薦
評論