UDP千兆以太网FPGA_verilog实现(四、代码前期准备-UDP和IP协议构建)
UDP:user Datagram protocol 用戶數據報協議
無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳送服務,IETF RFC 768是UDP的正式規范。UDP在IP報文的協議號是17(0x11)
UDP協議的主要作用是將網絡數據流量壓縮成數據包的形式。一個典型的數據包就是一個二進制數據的傳輸單位。每一個數據包的前8個字節用來包含包頭信息,剩余字節則用來包含具體的傳輸數據。
UDP報頭使用兩個字節存放端口號,所以端口號的有效范圍是從0------65535
數值為0-1023,這些數值可以在網址www.iana.rog查到,IANA把這些端口號指派給TCP/IP最重要的一些應用程序,讓所有的用戶都知道。
登記端口號
數值在1024-49151。這類端口號是為沒有熟知端口號的應用程序使用的。使用這類端口號必須在IANA按照規定的手續登記,防止重復。
客戶端使用的端口號數值在49152-65535。由于這類端口號僅在客戶進程運行時才動態選擇,因此又叫短暫端口號。這類端口號是留給客戶進程選擇暫時使用。當服務器進程收到客戶進程的報文時,就知道了客戶進程使用的端口號,因此可以把數據發送個客戶進程。通信結束后,剛才已使用過的客戶端端口號不復存在,這個端口號就可以供其他客戶進程使用。
----UDP的長度是指包括包頭和數據部分在內的總字節數。因為報頭的長度是固定的,所以該域主要被用來計算可變長度的數據部分(又稱為數據負載)。數據報的最大長度根據操作環境的不同而各異。理論上,包含報頭在內的數據報的最大長度為65535字節。
---- UDP協議使用報頭中的校驗值來保證數據的安全。校驗值首先通過特殊的算法計算得出,在傳遞到了接收方之后,還需要再重新計算。因此UDP協議可以檢測是否出錯。雖然UDP提供有錯誤檢測,但檢測到錯誤時,UDP不做錯誤校正,知識簡單地把損壞的消息段扔掉,或者給應用程序提供警告信息。
‘’’’’'由于每次需要發送的數據都不相同,而且校驗和內容在發送數據段之前就需要計算出來,不像MAC層是在所有數據都發送完成之后才發送CRC校驗值,因此在UDP組包時,校驗值的計算是一個不太好處理的地方,在UDP要求不是很嚴格的地方校驗和其實是可以忽略的,因此,在使用verilog實現,為了提升效率并節約FPGA資源,將校驗和字段忽略。這樣一來,UDP數據包的組包就百年的非常簡單了。
’ -----------------------------------------------------------------------------------------------------------------------------------------------------‘
IP協議的介紹
IP首部:20個固定字節+可選字段
每一行32位bit
4字節的32bit值按照以下次序來傳輸,首先0-7bit,其次8-15比特,然后16-23bit,最后是24-31bit。(這種傳輸次序稱之為big—endian)
首部長度,說明了首部必須為4的倍數,最大值15(說明IP首部長度最大為60bit)。當IP首部長度為20時(無可選字段),該值為5.(5*4=20)
總長度指整個IP數據報的長度,包括首部和數據部分,16bit,最長可達65535
服務類型:指示了報文的優先權等,默認全部0
片標識:是否屬于同一個數據段,IP報文的分片ID。全0即可
片偏移:全0即可
生存周期:TTL,典型值32or64
上層協議類型:指封包所使用的網絡協議類型,常用協議號:00IP,01ICMP,06TCP,17UDP
IP報頭校驗和:是根據IP首部計算的校驗和,不對首部后面的數據進行計算,其計算方法為:
在發送數據時候,為了計算IP的校驗和,應該按照如下步驟:
1.將校驗和字段置0,然后將IP包頭按照16bit分為多個單元,如包頭長度不是16bit的倍數,則用0bit填充到16bit的倍數。
2.對各個單元采用反碼加法運算(即高位溢出位會加到低位,通常的補碼運算是直接丟掉溢出的高位),將得到的和的反碼填入校驗和字段
例如,我們使用IP協議發送一個數據長度為30個字節的數據包,發送端IP為192.168.0.2,接收端IP為192.168.0.3 則IP包頭如下所示:
總結
以上是生活随笔為你收集整理的UDP千兆以太网FPGA_verilog实现(四、代码前期准备-UDP和IP协议构建)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UDP千兆以太网FPGA_verilog
- 下一篇: UDP千兆以太网FPGA_verilog