本文整理归纳用于学习,大多收集其他大佬的知识及图片,若侵权,请联系删除,若有误请指出。
后面没心情整理了,在笔记上(写给自己看的)。
从硬件上的连接来看
CPU–MAC–PHY–变压器–RJ45–路由器–(交换机,可不连)–光猫–光纤
CPU-MAC:PCI接口
MAC-PHY:MII接口


对于偏硬件的来说,更多的关注是物理层和数据链路层,即TCP/IP的数据链路层。
物理层,就是bit流,呈现的是0和1的电平属性
数据链路层,数据被加上了MAC地址信息,bit流–帧。交换机根据mac地址转发帧
网络层,数据又被加上了IP头,bit流–帧–包。路由根据ip地址转发这些包
传输层,数据又被加上TCP头或者UDP头,bit流–帧–包–段。数据变成一个应用程序特有的数据。os通过tcp/udp端口号来区别不同的应用程序
后续不在硬件考虑范围
光猫是由光纤转网线(光信号转电信号),猫一般会有一个小的接口,PON口(入口),用来接入光纤线的。TEL接口用来接固定电话。LAN一般连接路由器,IPTV口用来接网络电视,都是出口。
路由器分WAN口(入口)和LAN口(出口)。WAN口是连接到猫/光猫的(用网线),LAN口是网络信号的出口,连电脑。
交换机的接口最简单,全部接口都是一样的,没有WAN口和LAN口的区别,路由器网口不够用时,接交换机扩展网口。交换机必须接入到路由器使用,不能直接接到光猫使用。
暂时不整理
Media Access Control:媒体访问控制层协议
它既是硬件控制器,也是一种协议,或者说MAC由硬件控制器和MAC通信协议构成。
该协议位于OSI七层协议中数据链路层的下半部分,PHY 就是物理层
其结构如图:

一边连CPU,一边连PHY。CPU处的接口,整理CPU时归纳,PHY处接口为MII,于下一节PHY处整理。
由上图可示:MII Data 是跟PHY通信的一些数据线,MII Manager是对PHY的行为、状态进行管理和控制的接口,而具体管理和控制动作是通过读写PHY内部的寄存器实现的。
主要功能:
发送数据:事先判断是否可以发送数据,如果可以发送将给数据加上一些控制信息,最终将数据以及控制信息以规定的格式发送到物理层;在接收数据的时候,MAC协议首先判断输入的信息并是否发生传输错误,如果没有错误,则去掉控制信息发送至LLC(逻辑链路控制)层。
理解讨论:
1 在这儿会把bit流加上MAC地址,数据流变成帧信号。也可能就是一些控制信息,不含mac地址
2 是否可以发送数据,其实是PHY完成的,但是PHY上一步就是MAC,所以MAC是去判断PHY的一个信号,以此判断是否可以发送信息。(不太确定)
或者MAC是判断PHY的一些寄存器,以此判断是否可以发送信息。
Physical Layer,物理控制接口。MAC通过MIIM(MII Manage Interface) 就是两根线MDC和MDIO 对PHY的行为、状态进行管理和控制,而具体管理和控制动作是通过读写PHY内部的寄存器实现的。PHY的基本结构如下图:

PHY在发送数据的时候,收到MAC过来的数据(对PHY来说,没有帧的概念,对它来说,都是数据)然后把并行数据转化为串行流数据,再按照物理层的编码规则把数据编码,再变为模拟信号把数据送出去,收数据时的流程反之。可以理解为并转串,串是差分的串
PHY还有个重要的功能就是实现CSMA/CD的部分功能,它可以检测到网络上是否有数据在传送CRS,如果有数据在传送中就等待,一旦检测到网络空闲,再等待一个随机时间后将送数据出去.如果两个碰巧同时送出了数据,那样必将造成冲突,这时候冲突检测机构可以检测到冲突COL,然后各等待一个随机的时间重新发送数据。跟上文呼应,MAC如何判断是否能够发送信息,可能与phy这个功能有联系
MII(Media Independent interface)即介质无关接口,按照发展的顺序介绍。后续的线有重复的,不在重复介绍功能。

TX_CLK 发送时钟 RX_CLK 接收时钟
TX_ER 发送数据错误 RX_ER 接收数据错误 TX_EN 发送使能 RX_DV 接收使能
TXD3…0 发送数据位 TXD3…0 接收数据位
CRS 载波监测 COL 冲突碰撞监测
MDIO 管理数据 MDC 管理数据时钟
MII为百兆或者十兆口,当为百兆口时,TX_CLK =25MHz,即25MHz的时间传送4bit,传送1bit需要100MHz的时间,即百兆网口。同理,当为10M网口时,TX_CLK =2.5MHz。
reduce MII 即精简MII接口。由MII四根数据线传输,减到两根数据线传输。
REF_CLK TX_EN TXD0…1 RX_ER RXD0…1 CRS_DV
CRS_DV MDIO MDC
时钟用一根REF_CLK,发送使能和接收数据错误不变,数据线由四根变两根。
CRS_DV是CRS和RXDV的合并 MDIO MDC还是MIIM接口
RMII为百兆口或者10M口时,REF_CLK=50MHz。当为百兆口时,每个时钟周期采样一次数据,当为10兆口时,每10个时钟周期采样一次。
Serial MII 串行MII接口。
REF_CLK 参考时钟 125MHz
TXD 发送数据 RXD 接收数据 SYNC 同步信号
MDIO MDC

SYNC是数据收发的同步信号,每10个时钟同步置高一次电平,表示同步。TXD和RXD上的数据和控制信息,以10bit为一组。就是TX_ER TX_EN 和八位数据组成一个10bit的一组数据,接收同理
100M时,就是每个时钟周期都采样。10M时,就是每10个时钟周期采样,数据会连续重复发10次。
G 千兆 千兆MII。GMII采用8位接口数据,工作时钟125MHz。
信号线与MII类似。时钟不同,为GTX_CLK TX_CLK RX_CLK三根。GTX_CLK TX_CLK分别为千兆,百兆/十兆十兆。
数据位不一样,一个是4位一个是8位。千兆MII,时钟125MHz。125M分之1秒发送8个bit。速率位1000Mbit/s
精简千兆MII。与RMII类似。
发送/接收数据线由8条改为4条
TX_ER和TX_EN复用,通过TX_CTL传送
RX_ER与RX_DV复用,通过RX_CTL传送
1 Gbit/s速率下,时钟频率为125MHz
100 Mbit/s速率下,时钟频率为25MHz 此时就不是上升下降沿都发了
10 Mbit/s速率下,时钟频率为2.5MHz
虽然RGMII信号线减半,但TXC/RXC时钟仍为125Mhz,为了达到1000Mbit的传输速率,TXD/RXD信号线在时钟上升沿发送接收GMII接口中的TXD[3:0]/RXD[3:0],在时钟下降沿发送接收TXD[7:4]/RXD[7:4],并且信号TX_CTL反应了TX_EN和TX_ER状态,即在TXC上升沿发送TX_EN,下降沿发送TX_ER,同样的道理试用于RX_CTL,下图为发送接收的时序:

首先,变压器的作用是什么?
1,隔离。2,优化波形。3,抑制共模干扰。
注意:电压型和电流型接phy,变压器中间抽头不一样,一个是加上偏置电压,一个是加一个电阻。
还有差分线两端,需要加上100欧电阻,两个49.9欧。有些phy芯片内部集成了,这个电阻是放在靠近phy端。
二线电感,尽量放RJ45端。
还有就是,不一定非要用变压器,如MAC和MAC连接,且不超过一个连接器时,可以在两个mac线上的rgmii结构,直接接一个电容就可以了。
提一下就好,1236是一组,其他没啥好说的
注:调网口的时候,如果没有反应,可以看1线,是否有脉冲,这是检查是否link上了
还有就是,led灯,link灯和act灯。如果link灯都没有亮,那说明还没有到mii接口的地方,是phy出来的mdi接口出问题了。

第一次:客户端发送,服务端接收。证明了客户端的发送和服务端的接收没问题。
第二次:服务端发送,客户端接收。证明了服务端的发送和客户端的接收没问题。
到这儿就会想,这要不都没问题了么,这是不严谨的。
我们再来看,第一次,服务端知道什么:客户端的发送没问题,自己的接收和发送没有问题
第二次,客户端知道了,服务端的发送和接收都没问题,自己的发送和接收都没有问题
但是,服务端,并不知道客户端的接收有问题没有,所以需要第三次握手
第三次:客户端告诉服务端,你发的东西我知道了。至此,双方都明白对方和自己发送接收都没有问题,连接成功。这也是为什么需要三次握手的原因。

首先,我们要知道,以太网是个全双工通信。
第一次:客户端说,我这儿东西发完了,没有数据了,你怎么说
第二次:服务端说,我这儿收到这个消息了,但是我可能还要跟你发,你等我消息。
第三次:服务端说,我这儿东西也发完了,你觉得能不能关闭了。
第四次:客户端说,我收到你说你东西发完了的指令了,我确认关闭。
然后服务端就关了,客户端等2msl后,没回应了,也关了。至此,双方都关闭。
注:这个是双方都可以发起的行为
笔记上。有空再整理
注意看每种模式,phy出来可以连光口电口,手册上面有说。
电源,时钟,复位。先检查这三个。
电源电压,电源纹波
时钟频率,时钟相位,时钟波形质量
复位信号是否有被其他元器件拉住了。
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify
前面一篇关于智能合约翻译文讲到了,是一种计算机程序,既然是程序,那就可以使用程序语言去编写智能合约了。而若想玩区块链上的项目,大部分区块链项目都是开源的,能看得懂智能合约代码,或找出其中的漏洞,那么,学习Solidity这门高级的智能合约语言是有必要的,当然,这都得在公链``````以太坊上,毕竟国内的联盟链有些是不兼容Solidity。Solidity是一种面向对象的高级语言,用于实现智能合约。智能合约是管理以太坊状态下的账户行为的程序。Solidity是运行在以太坊(Ethereum)虚拟机(EVM)上,其语法受到了c++、python、javascript影响。Solidity是静态类型
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
一、RIPV2协议简介 RIP(RoutingInformationProtocol)路由协议是一种相对古老,在小型以及同介质网络中得到了广泛应用的一种路由协议。RIP采用距离向量算法,是一种距离向量协议。RIP-1是有类别路由协议(ClassfulRoutingProtocol),它只支持以广播方式发布协议报文。RIP-1的协议报文无法携带掩码信息,它只能识别A、B、C类这样的自然网段的路由,因此RIP-1不支持非连续子网(DiscontiguousSubnet)。RIP-2是一种无类别路由协议(ClasslessRoutingProtocol),支持路由标记,在路由策略中可根据路由标记对
我尝试执行此页面中显示的ruby示例:http://tomayko.com/writings/unicorn-is-unix但我得到的只是echo.rb:9:in`bind':Addressfamilynotsupportedbyprotocolfamily-bind(2)(Errno::EAFNOSUPPORT)fromecho.rb:9:in`'有什么想法吗? 最佳答案 我遇到了同样的问题。只需将localhost更改为0.0.0.0:address=Socket.pack_sockaddr_in(4242,'0.0.0.0')
我正在上介绍性软件开发课,我的作业是创建一个带有两个参数的剪刀石头布程序(石头,纸)等,并返回获胜的arg。现在,如果我可以使用条件语句,我会快速解决这个问题,但作业说我们需要知道的一切都在前三个ruby教科书的章节,这些章节不包括条件!没有它们是否可以创建这个程序?或者他只是希望我们足智多谋并使用条件句?这是一个非常简单的条件分配......我在想我可能在这里遗漏了一些东西。编辑:我正在考虑那个chmod数字系统,并认为通过该加法系统可能有解决方案...... 最佳答案 这是一个只使用哈希的方法:RULES={:rock=>{:r
最近我使用了一个由单个开发人员创建的不错的gem,它托管在Github上。在我的工作中,我不得不对它进行一些实质性的修改,添加一些改进。有些是特定于项目的,有些是特定于gem的,还有一些是独立的改进。对于特定于gem的改进(例如,错误修复),我fork了存储库,应用了修复,并提出了拉取请求。然后,然而,我注意到独立的改进有点属于原始gem的并行、持续的分支类别。更清楚地说,你以前见过它;我重写了原始gem的View以使用TwitterBootstrap框架。因此,我也将它推送到了Github,但是,当然,我没有提出拉取请求——相反,我更新了README以解释不同之处,并感谢gem的原作
我关注了很多关于这个问题的帖子,但没有一个对我有帮助。我正在尝试使用最简单的irb命令进行连接:require'open-uri'open('https://aristo4stu3.bgu.ac.il')奇怪的是,对于我尝试过的任何其他httpsuri,它都工作正常(即https://google.com)。出于调试目的,我什至尝试使用以下方法禁用SSL验证:OpenSSL::SSL::VERIFY_PEER=OpenSSL::SSL::VERIFY_NONE这似乎也没有帮助。我的设置是(在AWS上):$rvm-vrvm1.21.3(stable)byWayneE.Seguin,Mic
我有一个共享对话框。在开发中它看起来像:http://xxxxxx.com/stuff产品上:https://yyyyyyyyyyy.com/stuff输出#Protocol##URL#的最佳Rails方式是什么我可以在哪里设置它们?谢谢 最佳答案 request.protocolrequest.url参见requestobject. 关于ruby-on-rails-如何使用rails输出当前协议(protocol)和url?,我们在StackOverflow上找到一个类似的问题: