當你需要使用千兆網發送數據的時候,你需要先傳輸8字節的前導碼,也就是7個字節的0xAA和1個字節的0xAB,但是因為網絡協議規定,傳輸一個字節時LSB最先傳輸,所以在程序里,需要先發7個字節的0x55,再發1個字節的0xd5。然后就完成了以太網的數據同步和開始。
接下來就要開始二層MAC幀,里面的內容包括了發送目的地址的MAC地址,源地址的MAC地址以及IP類型,因為MAC幀里面除了IP協議以后,還有其他的比如ATM網絡類型。所以這個地方的IP類型選擇0x0800,為IPv4類型。
二層發完就需要發送三層的IP數據報首部,這個首部的內容就有點多了。以一個圖片來代表,
該圖來源網絡
這里我們只選用最精簡的IP數據報首部,其它的可選項都忽略不表。
- 因為使用IPv4,版本號肯定是4;
- 這里的頭長度,以4個字節為一個單位,我們選用最精簡的版本,所以這里為5;
- 服務類型默認為0;
- 總長度以1個字節為一個單位,所以這個長度需要將UDP數據包長度加上4倍的IP包頭長度;
- 標識是每個數據包的計數器,當然發送一個包后,這個計數器就加1;
- 標志位起到的作用是標志數據包是否有分片,如果有分片該包是否是這個分片的最后一包;
- 片偏移就是在啟用分片的時候標記出,這個數據包在整個數據中的位置;
- 生存時間是這個數據包能夠經過的最大路由器數,當它經過一個路由器轉發,這個生存時間就會減1,減到0就會丟棄這個數據包,也就是代表這個數據包找不到它的下家了;
- 上層協議標識,也就是IP數據包封裝的里面的數據包的類型,我們選用相對簡單的UDP協議,所以這個地方的值為17;
- 頭部檢驗和,這個檢驗和必須按照規則來說,否則接收方會認為這個數據包已經損壞了,它的運算規則可以從網上的資料查到,操作并不麻煩;
- 接下來就要我們發送方的地址——源IP地址,這樣讓接收方收到我們的來信可以給我們回信;
- 然后就是接收這個數據包的收件人的地址——目的IP地址;
至此,我們的IP數據包首部已經設置結束。
接下來就進入了UDP數據包首部,相對來說,UDP數據包的首部就非常簡單,跟MAC幀一樣簡單。
該圖來源網絡
- 它的首部,2個字節的源地址端口,2個字節的目的端口,也就像門牌號一樣,即使給你小區的名字,還需要給你一個幾期幾單元幾棟才能找得到人;
- 接下來就是數據長度,這里的數據長度不是指你要發送的數據長度,而是你要發送的數據長度加上UDP數據包的長度,所以這里的長度等于你要發的數據的長度(1個字節為1個單位)加上8,單位也是1個字節;
- 最后的檢驗和可以設置為0,這里設為0不會影響數據的傳輸;
然后你就可以愉快的發送數據,發送完了之后就可以發送4個字節的CRC校驗值。至此整個數據傳輸結束。
-
FPGA設計
+關注
關注
9文章
428瀏覽量
26575 -
以太網
+關注
關注
40文章
5459瀏覽量
172369 -
Mac
+關注
關注
0文章
1109瀏覽量
51591 -
LSB
+關注
關注
0文章
37瀏覽量
13279 -
UDP通信
+關注
關注
0文章
21瀏覽量
1947
發布評論請先 登錄
相關推薦
評論