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

计算机网络基础(二):物理层、数据链路层及网络层

一、物理层

1.物理层

物理层面的通信标准可以概括划分为与网络基础设施有关的标准和与被传输物理信号有关的标准两类。

网络基础设施的标准:鉴于物理层面的消息互通也是物理层应该兑现的服务,因此物理层的标准还会包括针脚的用途、线缆的材料与设计等因素。我们大家耳熟能详的水晶头(RJ-11和RJ-45)、串行接口(EIA-RS-232)、网线线序(ANSI/TIA/EIA-568)都属于这一类标准。

所传物理信号的标准:既然接收方设备通过传输介质接收到用物理表示方法描述的二进制信号时,需要将物理信号还原成本来的二进制数据,那么收发数据的双方就必须拥有一套相同的数据编码标准。每个比特的时长、传输开始和终止的信号标志都需要进行定义。不归零编码(NRZ)、曼彻斯特编码、不归零反转编码(NRZI)和4B/5B编码等都对信号的标准进行了定义。

在一些实际网络中,二进制数字信号在传输的过程中需要借助电话线路等模拟网络进行发送。在这种情况下,人们需要在终端与模拟线路之间安装一台调制解调器将这些数字信号转换为模拟信号,这样才能让信号在模拟线路中传输,如图所示。

在这里插入图片描述

2.网络介质

有线介质

目前,连接局域网时采用的有线介质以双绞线和光纤为主。双绞线是指为了冲抵干扰,而将由两根相互绝缘的导线按照一定规格相互缠绕在一起而形成的通信介质。
在这里插入图片描述

在这里插入图片描述
双绞线的最大传输距离为100m。
在这里插入图片描述
双绞线传输数据时采用的方法是将数据转换为电信号进行传输,而光纤传输数据时则会将其转换为光信号。
在这里插入图片描述

在这里插入图片描述
光纤可以分为单模光纤和多模光纤。

多模光纤可以让不同模式的光在一根光纤上传输,由于模间色散较大而导致信号脉冲展宽严重,因此多模光纤传输距离较短,主要用于局域网中的短距离传输,但也可以达到数百米的传输距离,相比双绞线来说已经拥有了数倍的优势。

单模光纤只能传输一种模式的光,不存在模间色散,因此适用于长距离高速传输,传输距离可以达到数千米,甚至上百千米。
在这里插入图片描述
在这里插入图片描述
当然,除了双绞线和光纤之外,人们在连接广域网时,也会采用以EIA-RS-232标准为主的串行连接(Serial接口)等其他连接标准

无线介质

使用有线介质在通过线缆传输信号时,终端会用电压和光强来描述二进制信号。而对于无处不在的无线介质,终端设备则会使用电磁波来描述要传输的信号,并通过微波来承载这些信号。
在这里插入图片描述
无线的连接方式主要分为下面两种:

基础设施连接(Infrastructure):终端设备通过接入点(AP)接入局域网,并进而访问更大的网络(常常是互联网)。

自组织连接(Ad hoc):即终端设备之间直接通过无线信号实现连接,这种连接方式的目的是建立一个小规模的通信网络,而未必是为了连接到其他大型的网络(如互联网)当中。

二、数据链路层

根据OSI参考模型的定义,当接收方设备通过物理层协议将电压高低、光的闪灭或电磁特征等物理描述方式转换为由数据编码成的二进制信号时,这台设备就要继续通过数据链路层来处理这些接收到的比特流,并将经过处理的数据帧交由上层的网络层进行处理。

同样,当发送方设备将网络层封装好的数据包交给数据链路协议处理时,这一层的协议也需要将其封装成数据帧,交由物理层进行编码和发送。

为了完成这些任务,数据链路层需要解决的问题如下。

数据成帧:当网络层封装的数据包到达数据链路层时,数据链路层协议需要给数据包添加上头部和尾部,这个封装之后的结构称为数据帧(Frame)。数据帧就是物理层执行编码转换的数据。

错误校验:由于信号在物理层传输的过程中难免会出现差错,因此位于物理层之上的数据链路层就需要承担错误校验的功能,以确保交付给网络层的数据帧是正确的。

物理寻址:数据链路层为处于同一个网段中的设备提供物理寻址的依据,让发送方设备可以使用接收方设备的地址来封装数据帧,以确保接收方设备能够接收并接受发送方发来的数据。

可靠传输:在物理介质差错率比较严重的情况下,数据链路层协议可以像传输层协议一样提供保障数据可靠传输的机制,即通过确认和重传来确保通信的接收方接收到了数据。由于确认和重传也会占据链路的开销,因此在物理介质差错率不高的环境中,数据链路层协议往往不会提供与可靠传输有关的功能,而会把相关的步骤留给传输层协议进行处理。

1.链路类型

从贴近物理层的角度来看,设备之间的相互连接需要通过某种介质来实现,而这种介质要么是共享型介质,要么是两台设备之间独占的点对点连接。

对于所有通过同一个共享型介质连接在一起的设备来说,只要有一台以上的设备同时发送数据,它们发送的信号就会在这个共享介质上叠加,导致接收方难以识别其中任何一台设备发送的数据,这种因为数据在共享介质上信号叠加导致接收方无法识别原数据的情形称为冲突(Collision),而通过同一个共享型介质连接在一起的设备则称为处于同一个冲突域(Collision Domain)中。

采用共享介质传输数据的环境的协议需要解决的问题至少比采用独占信道通信的协议多出了以下两点:

  • 如何找到接收方;
  • 如何避免冲突。

相比点对点连接,诸如WLAN这类共享型介质环境要求数据链路层协议提供更多硬件层面的标准。尽管相比TCP/IP模型,OSI模型已经细化了对于底层的定义,将TCP/IP模型中,网络接入层的服务分散到了数据链路层和物理层两层当中。

共享型网络要想实现数据传输,必须针对大量设备如何在网络中有序收发数据、如何实现相互寻址等服务制订明确的规则,而这类规则在逻辑上应该比数据链路层的其他服务更加靠近物理层,于是IEEE将数据链路层的服务分为了LLC子层和MAC子层,它们的作用概括如下。

逻辑链路控制(LLC)子层:与网络层相接,为不同的MAC子层协议与网络层协议之间提供统一的接口,并提供流量控制等服务。

介质访问控制(MAC)子层:与物理层相接,为统一的LLC子层协议和不同的物理层介质之间提供沟通的媒介,并执行与硬件有关的服务,包括在共享环境中实现资源分配、让通信可以适应不同的传输介质、实现数据寻址等。这个子层也就是本小节要进行介绍的介质访问控制子层。

在这里插入图片描述
从逻辑上看,保障共享介质不会出现信息冲突的方法有下面两种。

  • 定义不可发送数据的情形:如果介质中有数据正在传输,则设备不能发送数据,否则可以随时发送数据。
  • 定义可以发送数据的情形:只有获得发送数据许可的通信设备可以发送数据,同时只有一台设备可以获得许可。

载波侦听多路访问/冲突检测(后文简称CSMA/CD)是一种通过定义不可发送数据的情形来避免冲突的技术。

载波侦听多路访问指每个站点在发送信号之前需要首先监测共享介质,查看介质中是否有消息正在传输,如果介质中有消息正在传输则暂不传输数据。
不过,如果因为介质中有信号正在传输,导致多台准备发送数据的设备都暂停发送数据,那么这些设备难免会在介质中信号传输结束之后同时开始发送数据,这也会导致冲突。因此,发送方站点在开始发送数据之后仍会侦听传输介质,查看介质中传输的信号是否与自己发送的信号一致,如果不一致说明发生了冲突,此时发送方就会暂停发送,等待一段随机时间之后再发送,这个过程叫作冲突检测。


令牌环是一种通过定义可以发送数据的情形来避免冲突的技术,其方法类似于驾驶员在十字路口等待本方向获得绿灯时方可通过。
在一个环形拓扑环境中,一台设备要发送数据必须首先获取一个赋予设备向介质中发送信号权限的特殊数据帧,这个数据帧就称为令牌(Token),如图4-7所示。令牌在网络中沿着固定的方向一站一站地进行传输,如果收到令牌的设备并没有数据需要传输,它会立刻把令牌转发给下一台设备,否则就会持有该令牌,最大限度地发送数据帧,然后再将令牌转发给下一台设备。


载波侦听多路访问/冲突避免(后文简称CSMA/CA)是用于无线局域网环境中的冲突避免技术,这是另一种通过定义不可发送数据的情形来避免冲突的技术。
无线环境之所以没有沿用传统的CSMA/CD技术,一方面是因为无线环境中的信号衰减十分严重,这使得发送方无法在发送信号的同时,通过判断自己接收到的信号是否与发送的信号一致来检测信号是否在信道中发生了冲突,因为相对于发送方正在发送的信号而言,它有可能接收到的信号往往在强度上过于微弱,设备难以判断信号是否在信道中与其他信号产生了叠加;另一方面,无线设备是以帧为单位发送数据的,即使检测到了冲突也不会为了避免冲突而立刻停止发送数据帧。根据上述两点我们可以得出结论:在无线环境中执行冲突检测不仅难以做到,而且也没有必要。于是,CSMA/CA机制则规定除了发送第一个数据帧的设备可以在检测到信道空闲时,仅仅经历一段短暂的间隔时间就可以发送数据帧之外,其他设备即使检测到信道空闲,也必须随机回退一段时长来避免冲突。设备在回退时会设置一个计时器,等待过程中只要检测到信道被占用,则暂停计时器倒计时,待计时器倒计时结束再执行数据帧的发送。

2.数据封装格式

每当技术人员需要深入了解一项网络协议或者标准,最直观的方法就是观察这项协议或者标准所定义的封装格式。

在这里插入图片描述
前导码(Preamble):前导码由7字节组成,这7字节的每个字节均固定为10101010。在7字节的前导码之后的字节称为帧起始定界符,这个字节固定为10101011。这8个字节的目的是为了通过编码,让一个以太网数据帧的开头部分表现为有规律的物理信号,以便提醒接收方设备,让它与自己同步时钟。而帧起始定界符的最后两位被定义为11,这是为了告知接收方,在这两个比特之后即为以太网数据帧下一个字段的开始。
在这里插入图片描述

目的地址(Destination Address):目的地址由6字节组成,其作用是标识数据帧的目的设备,类似于快递包裹的收件人地址。

源地址(Source Address):源地址由6字节组成,其作用是标识数据帧的始发设备,类似于快递包裹的发件人地址。

类型(Type):类型字段由2字节组成。类型字段的作用是为了告知对端设备,这个数据帧在网络层是使用什么协议进行封装的,以便接收方选择同样的协议来对这个数据帧进行解封装。

填充(Pad):以太网标准规定,一个以太网数据帧的最小长度不得小于64字节。标准将数据字段的最小长度定义为46字节,如果数据部分不足46字节,则用填充位来填充这个数据帧,让它的长度可以满足最小长度的要求。

FCS(Frame Check Sequence):FCS译为帧校验序列,这个字段长度为4字节。这个字段会被封装在数据帧的尾部,其目的是供对端设备校验其接收到的数据帧是否与发送方发送时一致。
在这里插入图片描述

3.MAC地址

MAC地址的作用是在数据链路层标识一台设备适配器的身份。由于MAC地址往往烧录在适配器的硬件上,而不由设备管理员通过逻辑手段进行修改,因此MAC地址也称为硬件地址。

如00-9A-CD-00-00-0A就是一个典型的MAC地址。

此外,在MAC地址的6字节中,前3个字节是IEEE分配给该MAC地址适配器厂商的代码,这个代码是我们在前文中提到过的组织唯一标识符(Organizationally-Unique Identifier,OUI)。

这是适配器制造商在生产适配器之前,向IEEE注册并申请到的本厂商标识符。

而MAC地址的后3个字节则要由设备制造商给各个适配器分配,同一厂商生产的不同适配器,它们的后3个字节不能相同。
在这里插入图片描述

如图所示,在传统的共享型以太网中,集线器只会将数据帧从所有接口不加区分地转发出去,无论终端在发送数据时,以哪台设备的MAC地址作为目的地址来封装数据帧,这个数据帧都会被集线器转发给所有它连接的终端。

所有终端的适配器也都会查看数据的以太网数据帧头部信息,但只有发现该目的MAC地址与自己MAC地址相同的适配器才会进一步解封装数据帧去查看其内部的信息,其余设备在发现数据帧的目的地址并非自己之后,就会丢弃数据帧。

在这里插入图片描述

在交换型以太网中,交换机只会将数据帧从其目的地址所在的那个接口发送出去。

交换机之所以有能力实现有针对性地数据帧转发,是因为交换机内部包含了一个叫作CAM(Content Address Memory)表的缓存表。当终端设备第一次向自己直连的交换机发送数据时,交换机不仅会查看数据帧的目的MAC地址,以便将其转发给目的设备,同时也会查看数据帧的源MAC地址,并且将数据帧的源MAC地址与交换机接口之间的映射关系,添加到自己的CAM表中。

这样一来,以后交换机再收到以这个数据帧的源MAC地址作为目的MAC的数据帧时,交换机只要查看自己CAM表中的映射关系,就可以查询到需要将这个数据帧从哪个端口转发出去了。

在这里插入图片描述

如图所示,通过IP地址为192.168.0.11的PC1向IP地址为192.168.0.13的PC3发送ping命令时,交换机会向其他端口发送广播arp请求,只有PC3会返回响应说明自己的MAC地址192.168.0.13 (54:89:98:45:7f:e6)。而PC2会丢弃该数据,不返回响应。
在这里插入图片描述
当首次返回消息时,交换机的MAC地址缓存表会记录PC1和PC3的MAC地址及对应端口,而没有通信的PC2的MAC地址和端口还没有记录在该表中。
在这里插入图片描述

单播MAC地址:绝大多数MAC地址都是单播MAC地址。

广播MAC地址:只有全1的MAC地址为广播MAC地址,即FF-FF-FF-FF-FF-FF。根据广播的定义,所有设备在接收到以广播MAC地址作为目的MAC地址的数据时,都应该对数据进行解封装而不应该丢弃。此外,交换机会将以广播MAC地址为目的MAC地址的数据帧从除了接收到它的那个接口之外的所有接口转发出去。鉴于广播可达的区域称为广播域,因此交换机所连接的设备共同构成了一个广播域。

在使用Windows操作系统的计算机上,管理员在开始->运行中输入cmd命令进入命令提示符,然后在命令提示符中输入命令ipconfig/all即可在Physical address(物理地址)一行看到这台计算机(各个)适配器的MAC地址。

三、网络层

数据链路层如何在一个局域网的范围内实现寻址。然而,当连接异构局域网形成强烈需求时,那些希望通过更高一层协议最终实现异构网络之间建立连接的用户,他们显然不会满足于仅仅在一个局域网范围内进行通信。

那么,既然需要通过更高一层的协议将多个局域网进行互联,这个协议也就必须为不同局域网环境定义统一的寻址标准,这样才能在逻辑上真正实现设备之间跨越局域网的全局信息互通。

为了让使用某协议的设备之间可以实现跨网络的通信,就需要在OSI模型的网络层(或TCP/IP模型的互联网层)给这个协议定义寻址的服务和流程。因此,网络层协议需要定义的内容包括但不限于:

  • 参与协议的设备相互间用什么地址对进行跨网络的通信;
  • 这些设备如何通过该地址对要发送/接收的数据实现寻址;
  • 网络层协议的头部格式如何定义,才能满足寻址等服务的需求;
  • 如何向传输层协议隐藏下层复杂的环境和标准。

1.IP协议

IP协议的目的就是在全局范围内实现跨越异构网络的寻址,所有与此宗旨无关的服务都不在定义IP协议的考量范畴之内,这也形成了IP协议的特点。

为了跨越不同类型网络实现全面互联,IP协议需要忽略底层的传输介质,将使用不同介质的局域网络连接起来。跨越使用不同介质的网络(有线网络、无线网络),最终实现通信的。

所谓IP协议可以在任何技术上运行,或者IP协议独立于底层介质,用通俗的方式表达,就是IP公司在收寄包裹时,会利用一切交通方式将包裹送达目的地,无论到达目的地址需要采用哪种交通方式,都可以通过IP公司来完成包裹的投递。

其次,原始TCP协议已经按照服务分为了当今工作在网络层(也即TCP/IP模型中的互联网层)的IP协议,以及当今工作在传输层的TCP协议,同时与传输可靠性有关的服务都交给了工作在传输层的TCP协议来实现。

而IP协议的宗旨就是提供最简单的服务:实现从源到目的的数据转发。因此,IP协议既不会在传输数据之前先与接收方建立连接,也不保证传输的可靠性,它只提供尽力而为的服务。

IP协议定义的数据包封装格式:

在这里插入图片描述
版本(Version):由于IP协议不止一个版本,因此根据IP协议的定义,数据包要在头部的一开头即列明这个数据包是使用哪个版本的IP协议进行封装的,不同版本的IP协议所采用的数据包头部封装格式也各不相同。目前网络中使用的IP协议几乎都是IPv4或者IPv6。关于IPv6的数据包封装格式,我们会在系列教材第3册中进行展示和说明。

首部长度(Header Length):如图5-1所示,IPv4的数据包头部中定义了一个可选项字段。由于可选项字段的长度并不固定,因此IPv4的数据包头部长度也是不固定的,这就是为什么IPv4需要在头部定义一个头部长度字段来界定整个数据包中,哪一部分是数据包的头部,以及数据部分从哪里开始。首部长度字段的长度为4字节。

服务类型(Type of Service):服务类型字段的定义和名称都发生过很多次变化,但其宗旨都是界定这个数据包要接受什么等级的服务。目前,这个字段已经改称为区分服务(Differentiated Services)字段,用来说明这个数据需要执行加速传输还是精确传输,以及数据在传输过程中是否经历了拥塞。

数据长度(Length):这个字段负责列明整个数据包的长度,也就是头部长度和数据长度之和。

标识(Identification):当数据包的长度大于链路允许传输的数据长度时,这个数据包就需要进行分片(Fragment),目的设备接收后再通过重组进行还原。标识字段的作用就是在分片前,指明哪些分片此前属于同一个数据包,以备未来重组数据包时之用。

标记(Flag):标记位的作用是标识这个数据包是否允许路由器对其进行分片(标记位的第2位),以及这个分片是不是整个数据包的最后一个分片(标记位的第3位)。具体来说,如果标记位的第2位被设置为1,那么当路由器发现必须对这个数据包进行分片才能将其转发到目的地时,路由器就会丢弃这个数据包,因此标记位的第2位叫作DF位,译为“勿分片(Don’t Fragment)”位;如果标记位的第3位没有被设置为1,则代表这个分片是整个数据包的最后一个分片,整个数据包的分片都已到达,后面不再有任何这个数据包的分片了,因此这一位译为“还有更多分片”(More Fragments)位。标记位一共有3位,至于第1位的用途,IP协议并没有进行定义。

分片偏移(Fragment Offset):分片偏移字段的作用是告诉重组分片的设备,应该按照什么样的顺序重组数据包。即用来标识这个分片在整个数据包中的位置。

生存时间(Time To Live):生存时间字段本来的目的是对数据包在网络中传输的时间进行倒计时,一旦生存时间字段标识的时间耗尽,即使这个数据包还没有传输到目的设备,它也会被网络设备丢弃。设置这个字段的目的显然为了防止数据包在网络中无限地消耗传输资源。然而,由于数据包在网络中传输的时间远比预计得要快很多,因此这个字段目前的用法是对数据包在网络中传输的跳数进行限制。始发数据包每经过一跳路由设备,设备在转发时,就会将其生存时间字段的数值减1,直至该数据包被丢弃。

协议(Protocol):协议字段的作用是标识IP协议上层所使用的协议(如TCP或UDP等),以便让对端设备知道该如何在传输层对数据包进行进一步的解封装。

头部校验和(Checksum):这个字段的作用是供接收方检测数据包的头部在传输过程中是否出现了错误。由于数据包头部在传输中出现错误可能意味着目的地址等重要参数已经与始发时不同,因此这个数据包已经没有继续传输的价值。在大部分情况下,路由器会丢弃头部校验和字段校验失败的数据包。

源IP地址(Source IP Address):源IP地址的作用是标识该数据包源设备的IPv4地址。

目的IP地址(Destination IP Address):目的IP地址的作用是标识该数据包目的设备的IPv4地址。

可选项(Option):IP协议支持设备对数据包封装的头部格式进行扩展,这是IP协议的设计者为后来者按照需求改造协议预留的空间。在设计可选项字段时,人们最初定义了5个可选项,其中包括在数据包的源站点指定数据包的全部或部分传输路径、记录数据包传输过程中经过的路由器等服务。但由于很多路由器并不支持可选项服务,因此可选项字段的使用并不广泛。可选项字段虽然很少使用,但它的存在导致了IPv4数据包头部的长度无法固定,这就是IP协议需要定义一个头部长度字段的原因。这就意味着可选项字段的定义降低了IPv4协议的传输效率,所以这个字段在IPv6协议定义的数据包头部字段中已经取消。

在这里插入图片描述

2.路由

无论哪个版本的IP协议都可以为寻址提供逻辑地址。不过,仅仅定义逻辑地址尚不足以将数据从源设备发送给目的设备,要想实现真正的通信还需要通过其他协议来界定联网设备如何使用逻辑地址实现寻址。
使用逻辑地址实现全局寻址的方式涉及一系列的问题,包括:

  1. 联网设备相互之间如何分享路径信息;
  2. 这些设备如何根据其他设备分享的路径信息,找出一条从自己通往目的网络的路径;
  3. 如果去往同一网络拥有多条不同路径,这些设备如何判断它们的优劣等,

充当名词时,路由是路由条目的简称,表示转发设备之间为了跨网络转发数据包而相互传播的路径信息。

充当动词时,路由表示路由器或其他依据逻辑地址转发数据包的设备对数据包所执行的转发操作。

在默认情况下,一台路由器只拥有直连(Directly Connected)网络的路由,所有非直连网络的路由则超出了路由器默认掌握的信息范畴。然而,路由器却常常需要将数据包转发给非直连网络,为此,路由器之间就需要共同遵循某些相互分享路由的标准,以便相互交换彼此掌握的路由信息,这类标准称为路由协议。

相关文章:

计算机网络基础(二):物理层、数据链路层及网络层

一、物理层 1.物理层 物理层面的通信标准可以概括划分为与网络基础设施有关的标准和与被传输物理信号有关的标准两类。 网络基础设施的标准:鉴于物理层面的消息互通也是物理层应该兑现的服务,因此物理层的标准还会包括针脚的用途、线缆的材料与设计等…...

小白自学—网络安全(黑客技术)笔记

目录 一、自学网络安全学习的误区和陷阱 二、学习网络安全的一些前期准备 三、网络安全学习路线 四、学习资料的推荐 想自学网络安全(黑客技术)首先你得了解什么是网络安全!什么是黑客! 网络安全可以基于攻击和防御视角来分类…...

2.2.3 vim操作合集

1 vim VIM 是 Linux 系统上一款文本编辑器,学习 VIM 最好的文档,应该是阅读学习 VIM 的帮助文档,可以使用本地的帮助文件(vim--->:help),或者使用在线帮助文档。同时针对vim的使用,相应的相书籍也很多,如下 2 vim操作模式 命令模式:默认模式,该模式下可以移动光标…...

解决 Jenkins 性能缓慢的问题~转

解决 Jenkins 性能缓慢的问题 Docker中文社区 ​​ 计算机技术与软件专业技术资格持证人 2 人赞同了该文章 没有什么比缓慢的持续集成系统更令人沮丧的了。它减慢了反馈循环并阻止代码快速投入生产。虽然像使用性能更好的服务器可以为您争取时间,但您最终必须投资…...

Matrix卡顿优化之IdleHandlerLagTracer源码分析

前言 IdleHandler是Android系统为开发者提供的一种在消息队列空闲时运行任务的机制,通过IdleHandler执行的任务优先级低于主线程优先级,会在主线程任务执行完成后再执行,所以适用于一些实时性要求不高的任务,通常用于Android启动…...

(ubuntu)Docker 安装linux 详情过程

文章目录 前言Docker 安装linux第一步:使用dokcker 拉取镜像:第二步:创建本地目录(用于挂载)第三步:(上传配置文件)修改配置文件第四步:创建docker容器第五步: 测试本地连…...

ArcMap:第二届全国大学生GIS技能大赛(广西师范学院)详解-上午题

目录 01 题目 1.1 第一小题 1.2 第二小题 1.3 第三小题 1.4 数据展示 02 思路和实操 2.1 第一问思路 2.2 第一问操作过程 2.2.1 地理配准 2.2.2 镶嵌 2.2.2.1 第一种镶嵌方法 2.2.2.2 第二种镶嵌方法 2.2.3 裁剪 2.2.4 DEM信息提取 2.2.5 分类 2.3 第二问思路 …...

Blender 导出 fbx 到虚幻引擎中丢失材质!!!(使用Blender导出内嵌材质的fbx即可解决)

目录 0 引言1 Blender导出内嵌纹理的fbx模型 0 引言 我在Blender处理了一些fbx模型后再次导出到UE中就经常出现,材质空白的情况(如下图所示),今天终于找到问题原因,记录下来,让大家避免踩坑。 其实原因很简…...

C++交换a和b的方法

以下是用C编写的交换a和b的六种方法&#xff1a; 1. 方法一&#xff1a;使用临时变量 #include <iostream>int main() {int a 5;int b 10;std::cout << "Before swapping: a " << a << ", b " << b << std::end…...

3D孪生场景搭建:模拟仿真

前面几期文章介绍如何使用NSDT 编辑器 搭建3D应用场景&#xff0c;本期介绍下孪生场景中一个一个非常重要的功能&#xff1a;模拟仿真。 1、什么是模拟仿真 模拟仿真是一种用于描述、分析和模拟现实世界中系统、过程或事件的计算机模型和程序。仿真通过输入各种参数和条件&am…...

美国各流域边界下载,并利用arcgis提取与处理

一、边界数据的下载 一般使用最普遍的流域边界数据是从HydroSHEDS官网下载: HydroBASINS代表一系列矢量多边形图层&#xff0c;以全球尺度呈现次级流域边界。该产品的目标是提供一种无缝的全球覆盖&#xff0c;其中包含了不同尺度&#xff08;从数十到数百万平方千米&#xf…...

A Survey and Framework of Cooperative Perception 论文阅读

论文链接 A Survey and Framework of Cooperative Perception: From Heterogeneous Singleton to Hierarchical Cooperation 0. Abstract 首次提出统一的 CP&#xff08;Cooperative Percepetion&#xff09; 框架回顾了基于不同类型传感器的 CP 系统与分类对节点结构&#x…...

【SkyWalking】SkyWalking是如何实现跨进程传播链路数据?

文章目录 一、简介1 为什么写这篇文章2 跨进程传播协议-简介 二、协议1 Standard Header项2 Extension Header项3 Correlation Header项 三、跨进程传播协议的源码分析1 OpenTracing规范2 通过dubbo插件分析跨进程数据传播3 分析跨进程传播协议的核心源码 四、小结参考 一、简介…...

px4仿真实现无人机自主飞行

一,确定消息类型 无人机通过即在电脑是现自主飞行:思路如下。 通过Mavros功能包,将ROS消息转换为Mavlink消息。实现对无人机的控制。 几种消息之间的关系如下: 对于ROS数据,就是我们机载电脑执行ROS系统的数据。 对于Mavros消息,就是Mavros功能包内部的消息。查询网站…...

详解Linux的系统调用fork()函数

在Linux系统中&#xff0c;fork()是一个非常重要的系统调用&#xff0c;它的作用是创建一个新的进程。具体来说&#xff0c;fork()函数会在当前进程的地址空间中复制一份子进程&#xff0c;并且这个子进程几乎完全与父进程相同&#xff0c;包括进程代码、数据、堆栈以及打开的文…...

构建捡垃圾机器人的 ROS 2 项目

一、说明 本系列是关于学习如何使用 ROS2、Docker 和 Github 设计、设置和维护机器人项目。 先决条件 — ROS2 软件包的基本知识、实现发布者、订阅者、操作并连接它们。 我们之前在 ROS2 中了解了不同的部分。但是&#xff0c;在我们转向实际的基于硬件的项目之前&#xff0c;…...

Spring常用注解(2)

6、切面&#xff08;AOP&#xff09;相关注解 Spring AOP详细介绍 Spring支持AspectJ的注解式切面编程。 Aspect 声明一个切面 After 在方法执行之后执行&#xff08;方法上&#xff09; Before 在方法执行之前执行&#xff08;方法上&#xff09; Around 在方法执行之前与之后…...

upload-labs靶场通关

文章目录 Pass-01 前端检测&#xff08;JS检测&#xff09;1.1 原理分析1.2 实验 Pass-02 后端检测&#xff08;MIME检测&#xff09;2.1 原理分析2.2 实验 Pass-03 后端检测&#xff08;黑名单绕过&#xff0c;特殊后缀名&#xff09;3.1 原理分析3.2 实验 Pass-04 后端检测&a…...

git拉取代码过程

第一步&#xff1a;先在本地创建文件夹 &#xff0c;比如我这里的文件夹名称是 fengkgong_zntjfx 第二步&#xff1a;执行命令&#xff1a;git init 第三步&#xff1a;git clone 第四步&#xff1a;git fetch 第五步&#xff1a;git branch -a 第六步&#xff1a;cd 项目 【…...

Swift | 属性包装器

Swift | 属性包装器 1. 什么是 Swift Property Wrapper&#xff1f; Swift Property Wrapper 是一种特性&#xff0c;它允许我们在声明属性时添加自定义的包装逻辑。通过使用属性包装器&#xff0c;我们可以在不修改类或结构体定义的情况下&#xff0c;定制属性的访问和存储方…...

Android改造CardView为圆形View,Kotlin

Android改造CardView为圆形View&#xff0c;Kotlin 可以利用androidx.cardview.widget.CardView的cardCornerRadius特性&#xff0c;将CardView改造成一个圆形的View&#xff0c;技术实现的关键首先设定CardView为一个宽高相等的View&#xff08;正方形&#xff09;&#xff0c…...

Idea下面git的使用:变基、合并、优选、还原提交、重置、回滚、补丁

多分支和分支切换 变基和合并 变基是把本项目的所有提交都列出来按顺序一个个提交到目标分支上去 而合并是把两个分支合并起来&#xff0c;但是旧的分支还是可以启动其他分支&#xff0c;在旧的分支上继续开发 master: A -- B -- C -- M/ feature: D -- Emaster: A -…...

【数据结构】什么是算法

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 一.算法的定义 1.算法的概念 2.数据结构与算法的关系 二.算法的特性 输入 输出 有穷性 确定性 可行性 三.算法的设计要求 1.正确性 2.可读性 3.健壮性 4.效…...

复旦大学EMBA:揭秘科创企业,领略未来战略!

智能制造&#xff0c;国之重器。作为制造强国建设的主攻方向&#xff0c;智能制造的发展水平关系到我国未来制造业在全球的地位与影响力。发展智能制造&#xff0c;是加快建设现代化产业体系的重要手段&#xff0c;提升供给体系适配性的有力抓手&#xff0c;也是建设数字中国的…...

根据您的数据量定制的ChatGPT,改变客户服务的方式

在当今竞争激烈的商业环境中&#xff0c;提供优质的客户服务对于保持忠诚的客户群和推动业务增长至关重要。客户满意度已成为各行各企业的首要任务&#xff0c;因为它直接影响客户留存和品牌声誉。随着技术的进步&#xff0c;公司不断探索创新解决方案&#xff0c;以增强客户服…...

《Unity Shader 入门精要》笔记03

UnityShader的内置变量&#xff08;数学篇&#xff09; Unity内置的变换矩阵摄像机和屏幕参数float3 _WorldSpaceCameraPosfloat4 _ProjectionParamsfloat4 _ZBufferParamsfloat4 unity_OrthoParamsfloat4x4 unity_CameraProjectionfloat4x4 unity_CameraInvProjectionfloat4 u…...

LINUX系统使用软件异地同步数据(灾备)

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步&#xff0c;支持本地复制&#xff0c;或者与其他SSH、rsync主机同步 一、宝塔环境: 有宝塔软件商城支持&#xff0c;参考&#xff1a;https://www.bt.cn/bbs/thread-98022-1-1.html 二、…...

IDEA Rogstry中找不到compiler.automake.allow.when.app.running问题解决

网上大部分人教我们 先 File > Settings 然后 勾选 Build 下的 Compiler中的 Build project automatically 这些步骤都不会有问题 然后就会让我们 ctrl shift alt / 点 Rogstry 打开后 我人就麻了 根本没有什么 compiler.automake.allow.when.app.running 也不用慌 我们…...

c#设计模式-行为型模式 之 状态模式

&#x1f680;简介 状态模式是一种行为设计模式&#xff0c;它允许对象在其内部状态改变时改变其行为&#xff0c;我们可以通过创建一个状态接口和一些实现了该接口的状态类来实现状态模式。然后&#xff0c;我们可以创建一个上下文类&#xff0c;它会根据其当前的状态对象来改…...

使用Docker安装JupyterHub

安装JupyterHub 拉取Jupyter镜像并运行容器 docker run -d -p 8000:8000 --name jupyterhub jupyterhub/jupyterhub jupyterhub # -d&#xff1a;后台运行 # -p 8000:8000&#xff1a;宿主机的8000端口映射容器中的8000端口 # --name jupyterhub&#xff1a;给运行的容器起名…...

SpringCloudGateway网关整合swagger3+Knife4j3,basePath丢失请求404问题

在集成 Spring Cloud Gateway 网关的时候&#xff0c;会出现没有 basePath 的情况&#xff0c;例如定义的 /jeeplus-auth、/jeeplus-system 等微服务前缀导致访问接口404&#xff1a; maven依赖&#xff1a; swagger2于17年停止维护&#xff0c;现在最新的版本为 Swagger3&am…...

html通过使用图像源的协议(protocol)相对 URL 来防止安全/不安全错误

有人知道使用 protocol relative URLs 是否有问题吗&#xff1f;用于图像源以防止混合内容安全警告。 例如链接一张图片: <img src"//domain.com/img.jpg" /> 代替: <img src"http://domain.com/img.jpg" /> or <img src"https…...

【SpringBoot】| Thymeleaf 模板引擎

目录 Thymeleaf 模板引擎 1. 第一个例子 2. 表达式 ①标准变量表达式 ②选择变量表达式&#xff08;星号变量表达式&#xff09; ③链接表达式&#xff08;URL表达式&#xff09; 3. Thymeleaf的属性 ①th:action ②th:method ③th:href ④th:src ⑤th:text ⑥th:…...

Vue Router的进阶

进阶 导航守卫 官方文档上面描述的会比较深奥&#xff0c;而守卫类型也比较多&#xff0c;其中包含了全局前置守卫、全局解析守卫、全局后置钩子、路由独享守卫、组件内守卫。每一种守卫的作用和用法都不相同。这会使得大家去学习的时候觉得比较困难&#xff0c;这边主要介绍…...

方案:快递站智能视频监控3大亮点汇总

快递站智能视频监控方案是一种利用先进的技术和设备&#xff0c;来提升快递站安全管理和快递流程监控的解决方案。具体包括哪些方面呢&#xff1f;今天小编就带大家来看看&#xff01; 1、视频监控系统 在快递站的关键区域安装旭帆科技高清摄像头&#xff0c;如快递仓库、操作…...

Direct3D网格

创建网格 我们可以用D3DXCreateMeshFVF函数创建一个"空"网格对象 &#xff0c;空网格对象是指我们指定了网格的面片总数和顶点总数&#xff0c;然后由该函数为顶点缓存、索引缓存和属性缓存分配大小合适的内存&#xff0c;之后即可手工填入网格数据。 HRESULT WINA…...

docker安装wiki

1.docker pull mediawiki 2.docker run -d --name mywiki -p 8666:80 mediawiki 访问ip:8666,就可以看到配置页面了 3.docker pull mysql docker run -d --name my-mysql -e MYSQL_ROOT_PASSWORD123456 -p 3307:3306 mysql 4.在配置页面链接ip:3307,连接数据库&#xff0c;接下…...

bigemap在林业勘测规划设计行业的一些应用

选择Bigemap的原因&#xff1a; 主要注重影像的时效性&#xff0c;软件的影像时效性比其他的更新快&#xff0c;更清晰。 使用场景&#xff1a; 1.林业督查&#xff0c;主要是根据国家下发的图斑&#xff0c;结合测绘局的影像以及bigemap的较新影像对比去年和今年的林地变化。…...

设计模式学习

文章目录 前言设计模式的七大原则单一职责原则开放封闭原则里氏替换原则依赖倒转原则接口隔离原则合成复用原则迪米特原则总结 GoF二十三种设计模式创建型模式&#xff08;五种&#xff09;结构型模式&#xff08;七种&#xff09;行为型模式&#xff08;十一种&#xff09; 游…...

Openfire身份认证绕过漏洞

漏洞详情&#xff1a; Openfire是采用Java编程语言开发的实时协作服务器&#xff0c;Openfire的管理控制台是一个基于Web的应用程序&#xff0c;被发现可以使用路径遍历的方式绕过权限校验。未经身份验证的用户可以访问Openfire管理控制台中的后台页面。同时由于Openfire管理控…...

类目体系设计总结

一、背景 公司窗帘产品在做分类调整&#xff0c;从原先二级类目调整为三级类目&#xff0c;相对于平台电商我们的类目层次结构要简单很多&#xff08;没有定义商品动态属性等&#xff09;&#xff0c;但对于也有上万款SKU的系统来讲,做好基础的分类对于采购、商品促销、数据报…...

gRPC之proto数据验证

1、proto数据验证 本篇将介绍grpc_validator&#xff0c;它可以对gRPC数据的输入和输出进行验证。 这里复用上一篇文章的代码。 1.1 创建proto文件&#xff0c;添加验证规则 这里使用第三方插件go-proto-validators 自动生成验证规则。 地址&#xff1a;https://github.co…...

计算机竞赛 题目: 基于深度学习的疲劳驾驶检测 深度学习

文章目录 0 前言1 课题背景2 实现目标3 当前市面上疲劳驾驶检测的方法4 相关数据集5 基于头部姿态的驾驶疲劳检测5.1 如何确定疲劳状态5.2 算法步骤5.3 打瞌睡判断 6 基于CNN与SVM的疲劳检测方法6.1 网络结构6.2 疲劳图像分类训练6.3 训练结果 7 最后 0 前言 &#x1f525; 优…...

css--踩坑

1. 子元素的宽高不生效问题 设置flex布局后&#xff0c;子元素的宽高不生效问题。 如果希望子元素的宽高生效&#xff0c;解决方法&#xff0c;给子元素添加如下属性&#xff1a; flex-shrink: 0; flex-shrink: 0;2. 横向滚动&#xff08;子元素宽度不固定&#xff09; /* tab…...

C超市商品信息查询系统

一、系统界面介绍 1. 超市商品信息查询系统 1、显示商品信息&#xff0c;包括&#xff1a;商品名称、商品种类&#xff08;休闲食品、奶品水饮、生鲜水果&#xff09;、商品价格、商品保质期、商品生产日期&#xff1b; 2、从文件中导入数据、显示、排序、查询的功能。&…...

黑马JVM总结(二十七)

&#xff08;1&#xff09;synchronized代码块 synchronized代码块的底层原理&#xff0c;它是给一个对象进行一个加锁操作&#xff0c;它是如何保证如果你出现了synchronized代码块中出现了问题&#xff0c;它需要给这个对象有一个正确的解锁操作呢&#xff0c;加锁解锁是成对…...

软件测试/测试开发丨Python异常处理 学习笔记

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27722 异常处理 编写程序时&#xff0c;即使语句或表达式使用了正确的语法&#xff0c;执行时仍可能触发错误。执行时检测到的错误称为异常&#xff0c;大…...

026 - STM32学习笔记 - 液晶屏控制(三) - DMA2D快速绘制矩形、直线

026- STM32学习笔记 - 液晶屏控制&#xff08;三&#xff09; - DMA2D快速绘制矩形、直线等 上节直接操作LTDC在先视频上直接显示&#xff0c;我们直接操作显存地址空间中的内容&#xff0c;用来显示图形&#xff0c;但是相对来说&#xff0c;这种方法费时费力&#xff0c;这节…...

【牛客网】OR59 字符串中找出连续最长的数字串

题目 思路 创建两个字符串 temp 和 ret 创建指针i用来遍历字符串通过i遍历字符串,如果遇到数字则将这个数组加到字符串temp中 i,如果遇到字母,则判断temp字符串的长度和ret字符串的长度,如果temp<ret则说明这个字符串不是要的字符串,如果temp>ret则说明此时temp字符串是…...

云原生监控系统Prometheus:基于Prometheus构建智能化监控告警系统

目录 一、理论 1.Promethues简介 2.监控告警系统设计思路 3.Prometheus监控体系 4.Prometheus时间序列数据 5.Prometheus的生态组件 6.Prometheus工作原理 7.Prometheus监控内容 8.部署Prometheus 9.部署Exporters 10.部署Grafana进行展示 二、实验 1.部署Prometh…...