基于Xilinx artix 7的FPGA高级应用(二):千兆以太网通信(原理篇)第二期补充

这几天在了解了更多以太网结构之后感觉自己之前写的文章根本没讲明白以太网,所以在这里再写一篇讲一下以太网的基本结构和通信过程,看官们可以配合之前写的那一期一同观看,这样就应该可以理解以太网的通信原理了。

在这里插入图片描述
理解以太网的基本条件之一还是要理解OSI七层模型的基础知识。
OSI七层模型给出了从最基本的比特流到用户以及不同系统间通信的层层递进的通信协议。我们用FPGA实现以太网通信主要是对物理层到传输层进行数据操作。

物理层解决了发送比特流这一功能,其中有几个比较重要的点有:接口类型、传输速度、电平标准等等。

完成了发送比特流之后我们需要进行两台设备的通信于是有了链路层。那么为了彼此识别,首先我们要给两台设备一个地址,这个地址就叫做物理地址,也叫MAC地址,有6个字节,前三个字节是IEEE规定的,后三个字节是各公司自由规定的,物理地址具有唯一性。然后我们不希望发一些杂乱无章的比特流,所以我们要进行包装,在比特流上加上前面提到的物理地址(源地址和目的地址)、帧类型、校验码。校验码是用于检测数据是否出错。经过这一层,比特流形成链路,包装后的比特流被称为“数据帧”。下图为常用MAC帧格式。
在这里插入图片描述

这里额外介绍一下MAC地址互相寻找的原理:

在这里插入图片描述
在链路层里面,比较重要的设备就是交换机,它处理了两台设备之间的数据帧传输,在交换机里面存储着 MAC表 ,这是一张记录着MAC地址和交换机端口对应关系的表。
刚开始时,上图中所有交换机的MAC表都为空,这个时候假如说主机A要发送数据帧了,那么它的起始和目标MAC地址和端口的对应关系会以MAC表的形式写入switch1,switch1紧接着开始在自己的端口里寻找目标端口,如果正好是主机B,那么主机B的MAC地址和端口就会写入MAC表,并与主机A建立联系,但如果找不到对应的端口,那么switch1会将数据广播到整个二层链路的所有交换机上,对应的交换机的对应端口的主机检测到MAC地址符合的话,就会产生应答并且与主机A建立联系。


接下来接着说OSI七层结构,在形成了数据链路之后,我们会考虑到,两台设备之间的通信可能有多条链路,或者说同一网络中的多台设备进行通信时,其路径是多样化的,那么如何选择合适的路径就成了一个需要解决的问题,这样就应运而生出现了网络层以及它对应的设备:路由器。
在网络层我们又出现了一个新的地址:IP地址,有的人会问:之前不是已经用MAC地址指定了每个硬件设备的唯一地址了吗,为什么还需要在此处给它们定义IP地址呢?(下图是IP协议格式)
在这里插入图片描述
首先,IP地址是为网络中的交换机或者主机分配的一种32bit的“逻辑地址”(因为他没有实际的物理意义),相当于网络中的ID。为什么要使用它的原因有以下几点:
1.IP地址比MAC地址更简单,便于为上层OSI协议服务
2.IP地址是根据网络的拓扑来决定的,而非硬件的物理地址,所以围绕IP进行开发显然是更加合理的
3.有利于设备的移动和维修,比如网卡坏了,不用换IP地址,只需换一个网卡就行了(因为IP地址和MAC地址之间能够识别,具体怎么识别接下来会说);而如果我的主机从一个网络转移到另一个网络中了,那么我们无需更换网卡,只需要给它指定一个新的IP地址就可以了。

除了包含IP地址外,IP协议下的数据包(IP协议包是包含在以太网数据帧的数据部分)还有一些版本号、数据长度、分片操作(把过大的数据包拆分成小的进行传输,最后重组,目的是减小错误)、校验。

在这里插入图片描述

在网络层的最后我们说一下IP地址和MAC地址的转换:依靠ARP协议进行切换。 类似于MAC表,在主机和路由器中会存在着ARP缓存表,用于保存IP地址和该设备中MAC地址的映射关系。

假如在传输数据时能在主机的ARP缓存表中找到对应的地址,那么可以直接传输数据,但如果找不到,那么设备就会对局域网上的所有设备广播一个ARP请求:发送一个MAC地址为FF-FF-FF-FF-FF-FF 的数据,局域网中的各个设备接收到这个请求后会将发送端的IP地址和自己的IP地址进行对照,如果符合要求,那么会产生应答,将自己的MAC地址传输给发出请求的设备以供它形成ARP表。

回到OSI协议,我们现在有了网络层的IP协议,可以在网络中根据IP地址来发送数据帧了(注意经过网络层之后我们的单元叫做数据包了)。但是IP协议是不可靠而无连接的:

不可靠:表示IP协议不能保证IP数据报能成功的到达目的地。IP仅提供传输服务,任何可靠性的要求都必须由上层来提供(如TCP)。如果传输过程发生错误,IP协议简单的丢弃该数据报,然后发送ICMP消息给发送端。

无连接:表示IP协议不维护任何关于后续数据报的状态信息,每个数据报都是相互独立的。这也说明,IP数据报可能不是按照发送顺序被接收到的,很有可能后发送的数据被先收到。

那么为了为OSI结构中上层的部分提供可靠的数据传输服务我们需要传输层来完成。传输层首先要对乱序到达的数据包、丢失的数据等错误进行监控,其次它可以实现复用和分用:在一个网络中建立多个数据链接。对上层来说,传输层屏蔽了通信传输的细节,比如不同通信子网的区别(比如电话交换网和公用数据交换网之间存在着吞吐量、数据传输速率的区别),它是能根据源端和目的端地址进行控制的最高一层。此外它还应该有差错恢复的能力。

在这里插入图片描述
在本项目中我们采用的是传输层的UDP协议,在IP协议的基础上,它增加了复用和分用以及差错检测的功能,适合传输比较少的数据。具体的协议内容大家可以查资料,这里不做详细介绍了。

至此我们就沿着OSI七层模型,从bit流到传输层数据包完成了整个以太网原理的概述,接下来我们再详解代码,请大家继续关注。此外我发现了CSDN文章网页编译器的加粗功能不能对含有标点的文字进行加粗

由于我不是计算机专业出身,对通信协议的研究也仅限于为了练习FPGA,所以难免会出现一些错误,还请各位看官多多提出批评,本人不胜感激!

谢谢观看!

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值