FFGA实现UDP通信(1)——通信协议简介

1.概述

以太网是一种计算机局域网技术,IEEE组织的IEEE802.3标准指定了以太网的技术标准,它规定了物理层连线、电子信号和介质访问层协议的内容。

以太网是在20世纪70年代研制开发的一种基带局域网技术,使用同轴电缆作为网络媒体,采用载波多路访问和冲突检测机制,数据传输速率高达10MBPS。随着技术的发展,当前以太网已经能够达到100Gbps的超高传输速率了。

以太网传输中,10M,100M和1000M以太网常用于我们日常的学习和生活中,而10G,40G,100G以太网主要用于服务器内部进行高速数据交互或者电信骨干网络。以太网传输在不同的应用方面有不同的通信协议,例如QQ聊天消息收发是基于UDP协议加腾讯自定义上层协议,实时视频数据的传输也多采用UDP协议,而文件传输则使用FTP协议,除了这些协议,还有应用非常广泛的网页传输协议HTTP和可靠数据传输使用的TCP协议。

以太网协议中,最常见的应该就是TCP/IP协议了,在计算机和嵌入式系统中,TCP/IP协议应用非常广泛,因为TCP/IP协议设计之初是因为软件设计的灵活性而准备的,对于硬件描述语言verliog实现较为困难,FPGA发展到现在,却鲜有见成功的商用级RTL的TCP/IP设计,大部分使用verliog实现的以太网传输都是基于较为简单的UDP协议,所以本次基于FPGA实现UDP通信,UDP是一种不可靠传输,他只管数据有没有发送出去,而不管对方是否正确接收到,但在很多场合是可以接受这种潜在的不可靠性的。

2.UDP通信协议简介

UDP(User Datagram Protocol),即用户数据报协议,是一种面向无连接的传输层协议,无连接是指在传输数据时数据的发送端和接收端不建立逻辑连接,由于UDP协议消耗的资源少,通信效率高,所以经常用于音频、视频和普通数据的传输。

与我们所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层,根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议,UDP协议的主要作用是将网络数据流量压缩成数据包的形式,按数据包进行传输。

以太网UDP帧的用户数据是打包在UDP协议中,而UDP协议又是基于IP协议之上的,IP协议优势走MAC层发送的,即从包含关系来说:MAC帧中的数据段为IP数据报文,IP报文中的数据段为UDP报文,UDP报文中的数据段为用户希望传输的数据内容,比如我们要传输的内容为“Hello,welcome to FPGA!”,其报示意图如下图所示:

UDP数据包格式格式如下图所示:

其中前导码为0x55,0x55,0x55,0x55,0x55,0x55,0x55,帧起始界定符SFD为0xd5,以太网帧头的数据帧格式为:

由上图可以,如果想使用FPGA实现UDP通信,需要知道目的MAC地址,MAC地址是由网卡厂家设定的,每个网卡出厂时有一个确定的MAC地址。长度/类型为0x0800表示IP协议,因为UDP协议是在IP协议下的,0x0806表示APR协议。IP首部的报文格式如下:

其中前 20 个字节和紧跟其后的可选字段是 IP 数据报的首部,前 20 个字节是固定的,后面可选字段是可有可无的,首部的每一行以 32 位( 4 个字节)为单位。
版本: 4 IP 版本号( Version ),这个值设置为二进制的 0100 时表示 IPv4 ,设置为 0110 时表示 IPv6 , 目前使用比较多的 IP 协议版本号是 4
首部长度: 4 位首部长度( IHL Internet Header Length ),表示 IP 首部一共有多少个 32 位( 4 个字节)。 在没有可选字段时,IP 首部长度为 20 个字节,因此首部长度的值为 5
服务类型: 8 位服务类型( TOS Type of service ),该字段被划分成两个子字段: 3 位优先级字段(现在已经基本忽略掉了)和 4 TOS 字段,最后一位固定为 0 。服务类型为 0 时表示一般服务。
总长度: 16 IP 数据报总长度( Total Length ),包括 IP 首部和 IP 数据部分,以字节为单位。我们利用 IP 首部长度和 IP 数据报总长度,就可以知道 IP 数据报中数据内容的起始位置和长度。由于该字段长 16bit ,所以 IP 数据报最长可达 65535 字节。尽管理论上可以传输长达 65535 字节的 IP 数据报,但实际上还要考虑网络的最大承载能力等因素。
标识字段: 16 位标识( Identification )字段,用来标识主机发送的每一份数据报。通常每发送一份报文它的值就会加 1
标志字段: 3 位标志( Flags )字段,第 1 位为保留位;第 2 位表示禁止分片( 1 表示不分片 0 :允许分片);第 3 位标识更多分片(除了数据报的最后一个分片外,其它分片都为 1 )。
片偏移: 13 位片偏移( Fragment Offset ),在接收方进行数据报重组时用来标识分片的顺序。
生存时间: 8 位生存时间字段, TTL Time To Live )域防止丢失的数据包在无休止的传播,一般被设置为 64 或者 128
协议: 8 位协议( Protocol )类型,表示此数据报所携带上层数据使用的协议类型, ICMP 1 TCP 为6, UDP 17
首部校验和: 16 位首部校验和( Header Checksum ),该字段只校验数据报的首部,不包含数据部分;校验 IP 数据报头部是否被破坏、篡改和丢失等。
IP 地址: 32 位源 IP 地址( Source Address ),即发送端的 IP 地址,如 192.168.1.123
目的 IP 地址: 32 位目的 IP 地址( Destination Address ),即接收端的 IP 地址,如 192.168.1.102
可选字段:是数据报中的一个可变长度的可选信息,选项字段以 32bit 为界,不足时插入值为 0 的填充字节,保证 IP 首部始终是 32bit 的整数倍。
假设我们的IP首部数据设置如下图所示:
则IP首部校验和的计算方法为:
0x4500+0x0032+0x0000+0x4000+0x4011+0x0000+0xc0a8+0x017b+0xc0a8+0x0166=0x22974,
0x0002+0x2974=0x2976
0xffff-0x2976=0xd689
则首部校验和为0xd689。
之后就是UDP首部和数据部分了,格式如下图所示:
其中UDP校验和可以不用,直接置零就可以。
最后还有一个CRC32检验部分,这个我们放到下一篇去讲。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值