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