當(dāng)你需要使用千兆網(wǎng)發(fā)送數(shù)據(jù)的時(shí)候,你需要先傳輸8字節(jié)的前導(dǎo)碼,也就是7個(gè)字節(jié)的0xAA和1個(gè)字節(jié)的0xAB,但是因?yàn)?a target="_blank">網(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ò)
這里我們只選用最精簡的IP數(shù)據(jù)報(bào)首部,其它的可選項(xiàng)都忽略不表。
- 因?yàn)槭褂肐Pv4,版本號(hào)肯定是4;
- 這里的頭長度,以4個(gè)字節(jié)為一個(gè)單位,我們選用最精簡的版本,所以這里為5;
- 服務(wù)類型默認(rèn)為0;
- 總長度以1個(gè)字節(jié)為一個(gè)單位,所以這個(gè)長度需要將UDP數(shù)據(jù)包長度加上4倍的IP包頭長度;
- 標(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ì)簡單的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ù)包的首部就非常簡單,跟MAC幀一樣簡單。
該圖來源網(wǎng)絡(luò)
- 它的首部,2個(gè)字節(jié)的源地址端口,2個(gè)字節(jié)的目的端口,也就像門牌號(hào)一樣,即使給你小區(qū)的名字,還需要給你一個(gè)幾期幾單元幾棟才能找得到人;
- 接下來就是數(shù)據(jù)長度,這里的數(shù)據(jù)長度不是指你要發(fā)送的數(shù)據(jù)長度,而是你要發(fā)送的數(shù)據(jù)長度加上UDP數(shù)據(jù)包的長度,所以這里的長度等于你要發(fā)的數(shù)據(jù)的長度(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文章
428瀏覽量
26489 -
以太網(wǎng)
+關(guān)注
關(guān)注
40文章
5384瀏覽量
171153 -
Mac
+關(guān)注
關(guān)注
0文章
1099瀏覽量
51377 -
LSB
+關(guān)注
關(guān)注
0文章
37瀏覽量
13240 -
UDP通信
+關(guān)注
關(guān)注
0文章
21瀏覽量
1891
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論