当前位置: 首页 > news >正文

以太网通讯协议小结--持续更新中

一、以太网介绍

以太网是一种产生较早,使用相当广泛的局域网技术,局域网就是一个区域的网络互联,可以使办公室也可以是学校等等,大小规模不一。

目前以太网根据速度等级分类大概分为:标准以太网(10Mbit/s),快速以太网(100Mbit/s),千兆以太网(1000Mbit/s),以及更快的万兆以太网(10Gbit/s)。但在平常使用中,快速以太网和千兆以太网已经足够了。

以太网通信是以数据包的形式传输, 其单包数据量达到几十, 甚至成百上千个字节。

以太网接口类型有RJ45接口RJ11接口(电话线接口),SC光纤接口。其中RJ45接口使我们最常用的以太网接口(电脑接口)。

RJ45接口也称为水晶头,由插头和插座组成
在这里插入图片描述
可以看到,RJ45接口和HDMI等接口一样,也是采用差分数据传输,这种传输有抗干扰能力强的特性(这在高速数据传输中很重要)。

RH45接口对应的网线分为4芯网线和8芯网线。
4芯包含两个差分对(Tx+、Tx-\Rx+、Rx-),1、2芯用于发送数据,3、6芯用于接受数据,4、5、7、8线为备用线没有使用(起抗电磁干扰的作用),通常应用于百兆网络传输;8芯包含四个差分对,1、2、3、4芯用于发送数据,5、6、7、8芯用于接受数据,1对3,2对6,3对1,4对7,5对8,6对2,7对4,8对5,通常应用于千兆及以上网络传输。

4芯网线为直通网线时,连接方式如下:
Hub/Switch Host
1 <------------>1
2 <------------>2
3 <------------>3
6 <------------>6

4芯网线为交叉网线时,连接方式如下:
Hub/Switch Hub/Switch
1 <------------>3
2 <------------>6
3 <------------>1
6 <------------>2

这里补充下主机串口的线序(一般也用RJ45接口),它的线序是全反网线,做法就是一端的顺序是1-8,另一端则是8-1 的顺序:
Host Router/Switch
1 <------------>8
2 <------------>7
3 <------------>6
4 <------------>5
5 <------------>4
6 <------------>3
7 <------------>2
8 <------------>1

二、以太网数据包格式
在这里插入图片描述
可以看到,我们一帧能发送的真正的数据内容为:18-1472 Byte;然后将用户数据添加UDP首部,形成UDP层;再加上IP首部,形成IP层;最后加上前导码、SFD(帧起始界定符)、以太网帧头、以及FCS(帧检验序列),构成了MAC层(物理层,包括源MAC地址和目的MAC地址),也就是最终需要在通信线路上传输的数据。

在设计物理层时,只需要计算得到各个首部、前导码、起始界定符、以及校验,就可以得到物理层,然后进行传输。

三、TCP/IP协议簇

TCP( 传输控制协议) /IP(网际协议)协议簇,虽然看上去TCP/IP协议簇只有两个协议,其实TCP/IP协议簇包含了上百种协议,最常用的有TCP、IP、UDP等。其中TCP协议和UDP协议应用最广泛。

1、IP协议

IP协议是TCP/IP协议簇中的核心协议,所有的TCP、 UDP及ICMP数据都以IP数据报格式传输。
从以太网数据包格式中可以看出,IP数据报 包括IP首部和数据段。
在这里插入图片描述
IP数据报内容
在这里插入图片描述
版本:4位版本号,IPv4(0100),IPv6(0110),目前在以太网使用IPv4多,但是在计算机系统中,IPv6也已经流行起来,因为IPv4仅用32个bit来表示地址,IPv4 地址的总数为 4294967296,到现在,已经快用光了;而IPv6使用128bit来表示地址,理论来说根本用不完。

首部长度:4位,表示IP首部一共有多少个32位(4Byte),假设无可选字段(一般来说没有),IP首部有20个Byte,则首部长度为5;最大为15,即60个Byte。

服务类型:8位,普通服务的话,设置为0。可以参考:IP首部中的服务类型(TOS)

总长度:16位,包括IP首部和IP数据部分,以字节为单位。我们利用IP首部长度和IP数据报总长度,就可以计算出IP数据报中数据内容的起始位置和长度。

标识:16位,通常每发一份报文,就加1。

标志:3位,用来表示分片还是不分片,第一位(最高位)保留,第二位(1-不分片,0-允许分片),第三位为1即表示后面“还有分片”的数据报。为0表示这已是若干数据报片中的最后一个。

叶偏移:13位,在接收方进行数据报重组时用来标识分片的顺序。

生存时间:8位,防止丢失的数据包在无休止的传播,一般被设置为64或者128。IPv6 地址有两个生存期:首选生存期和有效生存期,而首选的生存期总是小于等于有效的生存期。具体可以参考官方文档。

协议:8位,表示此数据报所携带上层数据使用的协议类型,TCP为6, UDP为17。可以参考:IP协议号 IP首部中有8位协议号,用于指明IP的上层协议

首部校验和:这部分需要自己计算,用来校验IP数据报头部是否被破坏、篡改和丢失等,不校验数据。

源MAC地址,目的MAC地址:就是发送和接收IP地址。

可选字段:是数据报中的一个可变长度的可选信息,选项字段以32bit为界,不足时插入值为0的填充字节,保证IP首部始终是32bit的整数倍。

2、UDP协议

在以太网数据包中,我们可以看到,TCP协议(IP层)比UDP层复杂,更为可靠,但是UDP运用场景也非常多。
那为什么不所有传输都用更可靠的TCP协议呢,这就像卖手机,不可能都上最好的配置,毕竟有人不需要这么好的配置,我只需要打电话,一个骁龙835就够了,如果你叫我多花2000块,买一个865,那我没必要。所以这就是需求不同,所以UDP也常用。

TCP与UDP的区别:TCP为可靠传输协议,而UDP为不可靠传输协议;TCP协议可以保证数据的完整和有序,而UDP不能保证;UDP由于不需要连接,故传输速度比TCP快,且占用资源比TCP少;

应用场景:TCP适用于对数据完整性要求很高的场合,比如文件传输;而UDP适用于对数据完整性要求不高的场合,比如说视频直播,毕竟直播的时候少传输几个像素点,影响也不大,而且视频直播要求数据传输很快。而文件数据要是少一个byte或者更多,可能会造成很大的问题。

UDP格式数据

在这里插入图片描述

四、以太网电路

一般一个嵌入式终端系统的以太网部分如下图
在这里插入图片描述
主要有MAC控制器、PHY芯片、网络变压器和RJ45接头组成,有的系统会有DMA控制。一般的系统中CPU和MAC以及DMA控制器都是集成在一块芯片上的,为了节省空间简化设计,很多时候网口的变压器和RJ45的接头集成在一起。

1、MAC

MAC即Media Access Control,即媒体访问控制子层协议。该协议位于OSI七层协议中数据链路层的下半部分,主要负责控制与连接物理层的物理介质。在发送数据的时候,MAC协议可以事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC(逻辑链路控制)层。该层协议是以太网MAC由IEEE-802.3以太网标准定义,最新的MAC同时支持10Mbps和100Mbps两种。

2、PHY

PHY是物理接口收发器,它实现物理层。IEEE-802.3标准定义了以太网PHY。包括MII/GMII(介质独立接口)子层,PCS(物理编码子层),PMA(物理介质附加)子层,PMD(物理介质相关)子层,MDI子层。它符合IEEE-802.3k中用于10BaseT(第14条)和100BaseTX(第24条和第25条)的规范。

PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说都是数据),把并行数据转化为串行流数据,再按照物理层的编码规则把数据编码为模拟信号送出去。收数据时的流程反之。

3、示例图片

在这里插入图片描述
在这里插入图片描述
网卡部件
①RJ-45接口
②Transformer(隔离变压器)
③PHY芯片
④MAC芯片
⑤EEPROM
⑥BOOTROM插槽
⑦WOL接头
⑧晶振
⑨电压转换芯片
⑩LED指示灯

4、网络变压器

网络变压器作用是:

耦合差分信号,抗干扰能力更强
变压器隔离网线端不同设备的不同电平,隔离直流信号
网络变压器一般是由差模线圈,变压器以及中心抽头组成。如下示意:
在这里插入图片描述
其中初级中心抽头的接法需要根据PHY芯片来决定,电流驱动的就要接电源,电压驱动直接接个电容到地即可,是具体还要参看芯片的datasheet和参考设计了。 还需要注意的是有的变压器中间抽头是独立的有的是收发合并在一起的,设计的时候需要注意,为了防止初版硬件设计错误,可以兼容设计,如下所示:

在这里插入图片描述
变压器次级中心抽头使用Bob Smith电路来抑制共模噪音,利用75Ω和电容接地吸收共模能量,如上图原理图所示。

5、Bob Smith电路的作用

(1)浪涌防护

(2)降低EMC测试辐射

可以参考链接: 网口浪涌防护电路-Bob Smith电路

五、以太网设计布局布线

1、优先绘制Rx±、Tx±差分对,尽量保持差分对平行、等长、短距,避免过孔、交叉。由于管脚分布、过孔、以及走线空间等因素存在使得差分线长易不匹配,时序会发生偏移,还会引入共模干扰,降低信号质量。所以,相应的要对差分对不匹配的情况作出补偿,使其线长匹配,长度差通常控制在5mil以内,补偿原则是哪里出现长度差补偿哪里;

2、当速度要求高时需对Rx±、Tx±差分对进行阻抗控制,通常阻抗控制在100Ω±10%;

3、差分信号端接电阻(49.9Ω,有的PHY层芯片可能没有)必须靠近PHY层芯片的Rx±、Tx±管脚放置,这样能更好的消除通信电缆中的信号反射;

4、差分线对上的滤波电容必须对称放置,否则差模可能转成共模,带来共模噪声,且其走线时不能有stub ,这样才能对高频噪声有良好的抑制能力。
在这里插入图片描述
5、RJ45未集成变压器的布局布线
在这里插入图片描述
上图是变压器没有集成在网口连接器的电路PCB布局、布线参考,需要注意以下几点

a)RJ45和变压器之间的距离尽可能的短,晶振远离接口、PCB边缘和其他的高频设备、走线或磁性元件周围,PHY层芯片和变压器之间的距离尽可能短,但有时为了顾全整体布局,这一点可能比较难满足,但他们之间的距离最大约10~12cm,器件布局的原则是通常按照信号流向放置,切不可绕来绕去;

b)PHY层芯片的电源滤波按照要芯片要求设计,通常每个电源端都需放置一个退耦电容,他们可以为信号提供一个低阻抗通路,减小电源和地平面间的谐振,为了让电容起到去耦和旁路的作用,故要保证退耦和旁路电容由电容、走线、过孔、焊盘组成的环路面积尽量小,保证引线电感尽量小;

c)网口变压器PHY层芯片侧中心抽头对地的滤波电容要尽量靠近变压器管脚,保证引线最短,分布电感最小;

d)网口变压器接口侧的共模电阻和高压电容靠近中心抽头放置,走线短而粗(≥15mil);

e)变压器的两边需要割地:即RJ45连接座和变压器的次级线圈用单独的隔离地,隔离区域100mil以上,且在这个隔离区域下没有电源和地层存在。这样做分割处理,就是为了达到初、次级的隔离,控制源端的干扰通过参考平面耦合到次级;

f)指示灯的电源线和驱动信号线相邻走线,尽量减小环路面积。指示灯和差分线要进行必要的隔离,两者要保证足够的距离,如有空间可用GND隔开;

g)用于连接GND和PGND的电阻及电容需放置地分割区域。

6、RJ45集成变压器的布局布线

变压器集成在连接器的以太网电路的PCB布局、布线较不集成的相对简单很多,下图 3是采用一体化连接器的网口电路的PCB布局、布线参考图:

在这里插入图片描述

六、参考链接
1、以太网芯片MAC和PHY的关系
2、网口设计时布局布线
3、以太网(Ethernet)学习(一):协议
4、以太网PHY自学笔记

相关文章:

以太网通讯协议小结--持续更新中

一、以太网介绍 以太网是一种产生较早&#xff0c;使用相当广泛的局域网技术&#xff0c;局域网就是一个区域的网络互联&#xff0c;可以使办公室也可以是学校等等&#xff0c;大小规模不一。 目前以太网根据速度等级分类大概分为&#xff1a;标准以太网&#xff08;10Mbit/s…...

Excel换不了行怎么解决?

方法一: 使用Alt Enter键 在Excel中&#xff0c;输入文字时按下回车键&#xff0c;光标将会移到下一个单元格&#xff0c;如果想要换行&#xff0c;可以尝试使用Alt Enter键。具体操作如下: 1.在单元格中输入文字; 2.想要换行时&#xff0c;在需要换行的位置按下Alt Enter键; 3…...

Flink CDC -Sqlserver to Sqlserver java 模版编写

1.基本环境 <flink.version>1.17.0</flink.version> 2. 类文件 package com.flink.tablesql;import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.apache.flink.streaming.api.environment.StreamExecutionEnviro…...

4.前端--HTML标签-表格列表表单【2023.11.25】

1.表格 1.1表格的作用 表格的作用&#xff1a;表格主要用于显示、展示数据 1.2表格的基本格式 <table><tr><td>单元格内的文字</td><td>单元格内的文字</td>...</tr>... </table><table> </table> 是用于定义表…...

MySQL的Redo Log跟Binlog

文章目录 概要Redo Log日志Redo Log的作用Redo Log的写入机制 Binlog日志Binlog的作用Binlog写入机制 两段提交 概要 Redo Log和Binlog是MySQL日志系统中非常重要的两种机制&#xff0c;也有很多相似之处&#xff0c;本文主要介绍两者细节和区别。 Redo Log日志 Redo Log的作…...

定制手机套餐---python序列

if __name__ __main__:print("定制手机套餐")print("")#定义电话时长&#xff1a;字典callTimeOptions{1:0分钟,2:50分钟,3:100分钟,4:300分钟,5:不限量}callTimeInputinput("请输入电话时长的选择编号&#xff1a;")callTimeResultcallTimeOpt…...

线性分类器--数据处理

数据集划分 通常按照 70%&#xff0c;20% &#xff0c;10% 来分数据集 数据处理 斯坦福的线性分类器体验 http://vision.stanford.edu/teaching/cs231n-demos/linear-classify/...

一些可能被忽视的 Vue3 API 附带案例

Vue3 是 Vue.js 的最新版本&#xff0c;它引入了许多新的 API 和改进。以下是一些可能被忽视的 Vue3 API&#xff1a; reactive&#xff1a;这是 Vue3 中用于创建响应式对象的函数。与 Vue2 中的 data 不同&#xff0c;reactive 返回的对象是响应式的&#xff0c;这意味着当对…...

Linux git

1.Git 初识 不知道你⼯作或学习时&#xff0c;有没有遇到这样的情况&#xff1a;我们在编写各种⽂档时&#xff0c;为了防止文档丢失&#xff0c;更改失误&#xff0c;失误后能恢复到原来的版本&#xff0c;不得不复制出⼀个副本&#xff0c;⽐如&#xff1a; “报告-v1”? …...

136. 只出现一次的数字

136. 只出现一次的数字 题目&#xff1a; 给你一个 非空 整数数组 nums &#xff0c;除了某个元素只出现一次以外&#xff0c;其余每个元素均出现两次。找出那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法来解决此问题&#xff0c;且该算法只使用常量额外空…...

redis的性能管理及集群架构(主从复制、哨兵模式)

一、redis的性能管理 1、内存指标info memory 内存指标&#xff08;重要&#xff09; used_memory:853736 数据占用的内存 used_memory_rss:10551296 redis向操作系统申请的内存 used_memory_peak:853736 redis使用内存的峰值 注&#xff1a;单位&#xff1a;字节 系…...

【自然语言处理】正向最大匹配算法(FMM),反向最大匹配算法(BMM)和双向最大匹配算法(BM)原理及实现

目录 一&#xff0c;正向最大匹配算法&#xff08;FMM&#xff09; 二&#xff0c;反向最大匹配算法&#xff08;RMM) 一&#xff0c;正向最大匹配算法&#xff08;FMM&#xff09; 正向最大匹配分词&#xff08;Forward maximum matching segmentation&#xff09;通常简称为…...

数据结构 | 堆排序

数据结构 | 堆排序 文章目录 数据结构 | 堆排序建立大堆排序结果以及全部代码 如果没有看过堆的实现的话可以先看前面的一章堆的实现&#xff0c;然后再来看这个堆排序&#xff0c;都是比较简单的~~ 这里堆排序首先建堆&#xff0c;建堆是要建小堆还是大堆呢&#xff1f; 在堆排…...

编程语言发展史:Go语言的设计和特点

一、前言 Go语言是一种由Google开发的编程语言&#xff0c;于2007年开始设计&#xff0c;2009年首次发布。Go语言是一种面向对象、静态类型、编译型的语言&#xff0c;具有高效、简单、安全等特点&#xff0c;可用于开发各种类型的应用程序。Go语言的设计和特点使其成为越来越…...

FinGPT:金融垂类大模型架构

Overview 动机 架构 底座模型&#xff1a; Llama2Chatglm2 Lora训练 技术路径 自动收集数据并整理 指令微调 舆情分析 搜新闻然后相似搜索 检索增强架构 智能投顾 Hugging face 地址 学术成果及未来方向 参考资料...

24. 深度学习进阶 - 矩阵运算的维度和激活函数

Hi&#xff0c;你好。我是茶桁。 咱们经过前一轮的学习&#xff0c;已经完成了一个小型的神经网络框架。但是这也只是个开始而已&#xff0c;在之后的课程中&#xff0c;针对深度学习我们需要进阶学习。 我们要学到超参数&#xff0c;优化器&#xff0c;卷积神经网络等等。看…...

杰发科技AC7801——keil工程移植到IAR

0、简介 发现AC7801的代码只有keil工程的&#xff0c;IAR和Eclipse的代码只有一个例程&#xff0c;于是在从Keil移植到IAR时候遇到的问题记录下。 正常情况下&#xff0c;直接把keil的usr用户代码移植到iar的文件夹下面&#xff0c;删除原本的文件再添加新加进来的文件即可。…...

Word怎么看字数?简单教程分享!

“我在写文章时&#xff0c;总是想看看写了多少字。但是我发现我的Word无法看到字数。在Word中应该怎么查看字数呢&#xff1f;请帮帮我&#xff01;” Word是一个广泛使用的文档编辑工具。在我们编辑文章时&#xff0c;如果想查看写了多少字&#xff0c;也是可以轻松完成的。 …...

万字解析设计模式之观察者模式、中介者模式、访问者模式

一、观察者模式 1.1概述 观察者模式是一种行为型设计模式&#xff0c;它允许一个对象&#xff08;称为主题或可观察者&#xff09;在其状态发生改变时&#xff0c;通知它的所有依赖对象&#xff08;称为观察者&#xff09;并自动更新它们。这种模式提供了一种松耦合的方式&…...

【MySQL | TCP】宝塔面板结合内网穿透实现公网远程访问

文章目录 前言1.Mysql服务安装2.创建数据库3.安装cpolar3.2 创建HTTP隧道4.远程连接5.固定TCP地址5.1 保留一个固定的公网TCP端口地址5.2 配置固定公网TCP端口地址 前言 宝塔面板的简易操作性&#xff0c;使得运维难度降低&#xff0c;简化了Linux命令行进行繁琐的配置&#x…...

后进先出(LIFO)详解

LIFO 是 Last In, First Out 的缩写&#xff0c;中文译为后进先出。这是一种数据结构的工作原则&#xff0c;类似于一摞盘子或一叠书本&#xff1a; 最后放进去的元素最先出来 -想象往筒状容器里放盘子&#xff1a; &#xff08;1&#xff09;你放进的最后一个盘子&#xff08…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...