以太网-IP、UDP、ARP协议记录用

IP协议工作示意图:
 
ARP协议(获取目标的MAC地址):
 
注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的
硬件类型指链路层网络类型,1为以太网;
协议类型指要转换的地址类型,0x0800为IP地址;
硬件地址长度对于以太网地址为6字节;
协议地址长度对于和IP地址为4字节;
op字段为1表示ARP请求,op字段为2表示ARP应答
工作流程:
 
ARP报头中含有目标主机的IP地址: 通过路由找到目标网络之后,但是不知道目标主机的MAC地址。因为数据在网络中传送都是以MAC帧形式的,所以双方都要知道对方的MAC地址才可以。此时ARP发一条广播出去,谁的IP地址是XXX,请主动联系我。局域网所有主机都会收到这条数据,将数据向上交付到网络层,对比自己的IP地址。如果相同,就回复自对方,将自己的MAC地址告诉对方,不同,就将数据丢弃。
如果现在只知道MAC地址而不知道IP地址的话就采用RARP协议,其协议类似,原本全1的是MAC地址,现在全1的是IP地址。
UDP协议:
一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)), 那么就会在网络层分成多个IP数据报,如下图。
 
IP报头组成:
 
 
UDP报文:
UDP 报文包括 UDP 报文首部数据和 UDP 报文数据(数据负载),其中 UDP 首部有 8 个 字节,由 4 个字段构成,每个字段都是两个字节。 
 
1. 源端口:源端口号,需要对方回信时选用,不需要时全部置 0. 
2. 目的端口:目的端口号,在终点交付报文的时候需要用到。 
3. 长度:UDP 的数据报的长度(包括 UDP 首部和数据)其最小值为 8(只有首部) 
4. 校验和:检测 UDP 数据报在传输中是否有错,有错则丢弃。该字段是可选的,当 源主机不想计算校验和,则直接令该字段全为 0。

报文组包如下:
 
由此可得到流程图:
    发送模块流程:
 
IDLE:空闲状态 
TX_PREAMBLE:发送以太网的 7 个字节的前导码和 1 字节的帧首定界符状态 
TX_ETH_HEADER:发送以太网头部数据状态 
TX_IP_HEADER:发送 IP 头部数据状态 
TX_UDP_HEADER:发送 UDP 头部数据状态 
TX_UDP_DATA:发送 UDP 数据状态
TX_FILL_DATA:发送填充数据状态,当需要发送的有效数据的长度比较小的时候,导致 以太网帧的数据段小于 46 字节就需要用 0 来填充到 46 字节,该状态就是用来应对这 种情况下,发送填充 0 相应个数的 0 来满足以太网帧数据段长度要求。
TX_CRC:发送 FCS 校验数据状态。
在上面的各个状态中只需要按照协议在各个状态发送指定的数据即可。状态机使用 2 段 式状态机实现。FPGA 上电后进入 IDLE 状态,在输入 tx_en_pulse 为 1 时就进入到以太网 UDP 帧的发送,根据以太网 UDP 帧的协议,
首先进入到发送前导码和帧首定界符的状态 TX_PREAMBLE。在 7 个字节前导码和 1 个字节帧首定界符发送完成后(通过计数器 cnt_preamble 对发送数据字节数进行计数,即 cnt_preamble 计数达到 7)
进入到 TX_ETH_HEADER 状态。该状态下发送以太网头部数据,当以太网头部的 14 个字节数据发送完成后
进入到 TX_IP_HEADER 状态。依次类推,在不同的状态下发送指定个数字节的数据。 发送完成后就进入到下一状态。这里需要说明的是,考虑到发送的有效数据字节个数可能会 小于 46 字节(以太网帧数据个数最小值),在状态机设计上增加了 TX_FILL_DATA 状态。当发送的以太网帧数据段字节个数小于 46(对应以太网 UDP 帧数据段个数为 46-20 个 IP头部数据-8 个 UDP 头部数据 = 18)时,就进入到 TX_FILL_DATA 状态继续发送无效数据 0 凑足到 以太网数据段最小字节个数。

    由流程可得接受模块和发送模块的状态转移图:
接收模块状态转移图:
 
发送模块状态转移图:
 
由此得以太网 UDP 帧发包接口 FPGA 实现:
 
每次传输完成后需要等待一段的时间吗,这个时间称为帧间隙,间隙时间一般为:间隙(IFG,Frame Check Sequence)为接收下一顿做准备的时间,IFG的最小值是96 bit time
10Mbit/s最小时间为96*100ns = 9600ns100Mbit/s最小时间为 :96*10ns = 960ns1000Mbit/s最小时间为: 96*1ns = 96ns.
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值