UDP:user Datagram protocol 用户数据报协议
无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。UDP在IP报文的协议号是17(0x11)
UDP协议的主要作用是将网络数据流量压缩成数据包的形式。一个典型的数据包就是一个二进制数据的传输单位。每一个数据包的前8个字节用来包含包头信息,剩余字节则用来包含具体的传输数据。
UDP报头使用两个字节存放端口号,所以端口号的有效范围是从0------65535
熟知端口号(well-known prot number)
数值为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包头如下所示: