當(dāng)你需要使用千兆網(wǎng)發(fā)送數(shù)據(jù)的時(shí)候,你需要先傳輸8字節(jié)的前導(dǎo)碼,也就是7個(gè)字節(jié)的0xAA和1個(gè)字節(jié)的0xAB,但是因?yàn)榫W(wǎng)絡(luò)協(xié)議規(guī)定,傳輸一個(gè)字節(jié)時(shí)LSB最先傳輸,所以在程序里,需要先發(fā)7個(gè)字節(jié)的0x55,再發(fā)1個(gè)字節(jié)的0xd5。然后就完成了以太網(wǎng)的數(shù)據(jù)同步和開始。
接下來就要開始二層MAC幀,里面的內(nèi)容包括了發(fā)送目的地址的MAC地址,源地址的MAC地址以及IP類型,因?yàn)镸AC幀里面除了IP協(xié)議以后,還有其他的比如ATM網(wǎng)絡(luò)類型。所以這個(gè)地方的IP類型選擇0x0800,為IPv4類型。
二層發(fā)完就需要發(fā)送三層的IP數(shù)據(jù)報(bào)首部,這個(gè)首部的內(nèi)容就有點(diǎn)多了。以一個(gè)圖片來代表,
該圖來源網(wǎng)絡(luò)
這里我們只選用最精簡(jiǎn)的IP數(shù)據(jù)報(bào)首部,其它的可選項(xiàng)都忽略不表。
- 因?yàn)槭褂肐Pv4,版本號(hào)肯定是4;
- 這里的頭長(zhǎng)度,以4個(gè)字節(jié)為一個(gè)單位,我們選用最精簡(jiǎn)的版本,所以這里為5;
- 服務(wù)類型默認(rèn)為0;
- 總長(zhǎng)度以1個(gè)字節(jié)為一個(gè)單位,所以這個(gè)長(zhǎng)度需要將UDP數(shù)據(jù)包長(zhǎng)度加上4倍的IP包頭長(zhǎng)度;
- 標(biāo)識(shí)是每個(gè)數(shù)據(jù)包的計(jì)數(shù)器,當(dāng)然發(fā)送一個(gè)包后,這個(gè)計(jì)數(shù)器就加1;
- 標(biāo)志位起到的作用是標(biāo)志數(shù)據(jù)包是否有分片,如果有分片該包是否是這個(gè)分片的最后一包;
- 片偏移就是在啟用分片的時(shí)候標(biāo)記出,這個(gè)數(shù)據(jù)包在整個(gè)數(shù)據(jù)中的位置;
- 生存時(shí)間是這個(gè)數(shù)據(jù)包能夠經(jīng)過的最大路由器數(shù),當(dāng)它經(jīng)過一個(gè)路由器轉(zhuǎn)發(fā),這個(gè)生存時(shí)間就會(huì)減1,減到0就會(huì)丟棄這個(gè)數(shù)據(jù)包,也就是代表這個(gè)數(shù)據(jù)包找不到它的下家了;
- 上層協(xié)議標(biāo)識(shí),也就是IP數(shù)據(jù)包封裝的里面的數(shù)據(jù)包的類型,我們選用相對(duì)簡(jiǎn)單的UDP協(xié)議,所以這個(gè)地方的值為17;
- 頭部檢驗(yàn)和,這個(gè)檢驗(yàn)和必須按照規(guī)則來說,否則接收方會(huì)認(rèn)為這個(gè)數(shù)據(jù)包已經(jīng)損壞了,它的運(yùn)算規(guī)則可以從網(wǎng)上的資料查到,操作并不麻煩;
- 接下來就要我們發(fā)送方的地址——源IP地址,這樣讓接收方收到我們的來信可以給我們回信;
- 然后就是接收這個(gè)數(shù)據(jù)包的收件人的地址——目的IP地址;
至此,我們的IP數(shù)據(jù)包首部已經(jīng)設(shè)置結(jié)束。
接下來就進(jìn)入了UDP數(shù)據(jù)包首部,相對(duì)來說,UDP數(shù)據(jù)包的首部就非常簡(jiǎn)單,跟MAC幀一樣簡(jiǎn)單。
該圖來源網(wǎng)絡(luò)
- 它的首部,2個(gè)字節(jié)的源地址端口,2個(gè)字節(jié)的目的端口,也就像門牌號(hào)一樣,即使給你小區(qū)的名字,還需要給你一個(gè)幾期幾單元幾棟才能找得到人;
- 接下來就是數(shù)據(jù)長(zhǎng)度,這里的數(shù)據(jù)長(zhǎng)度不是指你要發(fā)送的數(shù)據(jù)長(zhǎng)度,而是你要發(fā)送的數(shù)據(jù)長(zhǎng)度加上UDP數(shù)據(jù)包的長(zhǎng)度,所以這里的長(zhǎng)度等于你要發(fā)的數(shù)據(jù)的長(zhǎng)度(1個(gè)字節(jié)為1個(gè)單位)加上8,單位也是1個(gè)字節(jié);
- 最后的檢驗(yàn)和可以設(shè)置為0,這里設(shè)為0不會(huì)影響數(shù)據(jù)的傳輸;
然后你就可以愉快的發(fā)送數(shù)據(jù),發(fā)送完了之后就可以發(fā)送4個(gè)字節(jié)的CRC校驗(yàn)值。至此整個(gè)數(shù)據(jù)傳輸結(jié)束。
-
FPGA設(shè)計(jì)
+關(guān)注
關(guān)注
9文章
429瀏覽量
27862 -
以太網(wǎng)
+關(guān)注
關(guān)注
41文章
5867瀏覽量
178636 -
Mac
+關(guān)注
關(guān)注
0文章
1124瀏覽量
54439 -
LSB
+關(guān)注
關(guān)注
0文章
41瀏覽量
13609 -
UDP通信
+關(guān)注
關(guān)注
0文章
21瀏覽量
2230
發(fā)布評(píng)論請(qǐng)先 登錄
以太網(wǎng)怎么連接 以太網(wǎng)組網(wǎng)結(jié)構(gòu)分析

FPGA學(xué)習(xí)-以太網(wǎng)的原理介紹

怎么使用以太網(wǎng)發(fā)送字節(jié)幀?
以太網(wǎng)的拓?fù)?b class='flag-5'>結(jié)構(gòu)_以太網(wǎng)的通信協(xié)議
網(wǎng)絡(luò)是否允許小于64字節(jié)的以太網(wǎng)幀或者報(bào)文傳輸?

工業(yè)以太網(wǎng)有何優(yōu)勢(shì)?工業(yè)以太網(wǎng)物理層介紹
Xilinx平臺(tái)以太網(wǎng)接口(一)TCP/IP基礎(chǔ)

基于FPGA的千兆以太網(wǎng)ARP和UDP的實(shí)現(xiàn)
工業(yè)以太網(wǎng)協(xié)議的歷史及其優(yōu)勢(shì)

評(píng)論