深入探索数据链路层:网络通信的基石
⭐小白苦学IT的博客主页⭐
⭐初学者必看:Linux操作系统入门⭐
⭐代码仓库:Linux代码仓库⭐
❤关注我一起讨论和学习Linux系统❤
前言
在网络通信的宏伟世界中,数据链路层扮演着至关重要的角色。它位于物理层和网络层之间,不仅直接处理与物理媒介的交互,还负责将数据帧从一个节点可靠地传输到另一个节点。本文将带您领略数据链路层的魅力,探讨其工作原理、关键技术以及在实际网络中的应用。
在数据通信的旅程中,数据链路层是第一个对原始数据进行处理的层次。它接收来自网络层的数据包,并为其添加必要的帧头和帧尾,形成可以在物理媒介上传输的数据帧。同时,数据链路层还负责处理传输过程中的差错检测与纠正、流量控制以及媒体访问控制等关键任务。
本文将详细介绍数据链路层的主要功能和协议,包括帧同步、差错控制、流量控制以及常见的媒体访问控制方法(如以太网、令牌环和无线局域网)。我们将探讨这些技术和协议如何协同工作,确保数据在复杂的网络环境中高效、准确地传输。
此外,本文还将分析数据链路层在网络安全、网络优化以及新技术融合等方面的应用和挑战。通过深入理解数据链路层的工作原理和关键技术,读者将能够更好地把握网络通信的底层机制,为构建高效、稳定的网络系统提供有力支持。
让我们一同踏上这段探索之旅,揭开数据链路层的神秘面纱,领略网络通信的奥秘。
对比理解 "数据链路层" 和 "网络层"
1.功能定位:
- 数据链路层:主要负责在物理层提供的服务基础上,建立相邻节点之间的数据链路,并通过差错控制提供数据帧在信道上的“透明”传输。其最基本的功能是向该层用户提供透明的和可靠的数据传送基本服务。这包括数据封装、透明传输和差错控制等功能。
- 网络层:主要负责“传送”,即通过通信网络进行信息传输。它作为纽带连接着感知层和应用层,由各种私有网络、互联网、有线和无线通信网等组成。它的主要功能是负责将感知层获取的信息,安全可靠地传输到应用层,然后根据不同的应用需求进行信息处理。
2.侧重点:
- 数据链路层:更侧重于每个小区间上的传递,即用于两个设备(同一种数据链路节点)之间进行传递。例如,手机通过路由器上外网时,手机与路由器之间通过无线网WiFi的方式进行传输,这就是一种数据链路。
- 网络层:更侧重于整体一个点到另一个点之间的一条路径,即数据是如何到达的。它关注的是如何在复杂的网络环境中找到最优的传输路径。
3.协议和组成:
- 数据链路层:数据链路层协议又被分为两个子层:逻辑链路控制(LLC)协议和媒体访问控制(MAC)协议。常见的数据链路包括以太网线、WiFi和蓝牙等。
- 网络层:在物联网中,网络层包含接入网和传输网,分别实现接入功能和传输功能。传输网由公网与专网组成,典型传输网络包括电信网(固网、移动通信网)、广电网、互联网、电力通信网、专用网(数字集群)。接入网则包括光纤接入、无线接入、以太网接入、卫星接入等各类接入方式。
认识以太网
以太网(Ethernet)是一种广泛使用的计算机局域网技术,它基于IEEE(电气和电子工程师协会)制定的标准,主要用于实现计算机之间的数据传输。以下是关于以太网的一些基本认识:
- 定义:以太网是一种计算机局域网技术,用于在局域网(LAN)内连接设备(如计算机、打印机、服务器等)并允许它们共享数据和资源。
- 标准:以太网基于IEEE 802.3标准,这是一个由IEEE定义的关于局域网和城域网的一系列标准。
- 传输介质:以太网可以使用多种传输介质,包括同轴电缆、双绞线(如CAT5、CAT6)和光纤。不同的传输介质支持不同的速度和距离。
- 速度:以太网的速度从最初的10 Mbps发展到现在的10 Gbps、40 Gbps甚至更高。常见的以太网速度包括10 Mbps、100 Mbps、1 Gbps和10 Gbps。
- 帧结构:以太网使用帧(Frame)作为数据传输的基本单位。以太网帧包含帧头(Header)、数据(Data)和帧尾(Footer)三个部分。帧头包含目的地址、源地址、帧类型等信息,数据部分包含要传输的数据,帧尾则用于帧的校验和错误检测。
- CSMA/CD:以太网采用带冲突检测的载波侦听多路访问(CSMA/CD)作为访问控制协议。这意味着在发送数据之前,设备会侦听网络是否空闲,如果空闲则发送数据,并在发送过程中检测是否有冲突(即其他设备同时发送数据)。如果检测到冲突,设备会停止发送并等待一段时间后重试。
- 交换机:在现代以太网中,交换机(Switch)取代了早期的集线器(Hub)。交换机能够识别数据帧中的目的地址,并将数据帧直接发送到目的设备,而不是广播到所有设备。这大大提高了网络性能和带宽利用率。
- 应用:以太网广泛应用于各种场景,包括企业网络、数据中心、校园网、家庭网络等。此外,以太网还与其他网络技术(如无线局域网WLAN、广域网WAN等)相结合,形成了更加复杂的网络架构。
- 安全性:以太网的安全性是一个重要的问题。为了保护网络免受未经授权的访问和攻击,可以采用各种安全措施,如访问控制列表(ACL)、虚拟局域网(VLAN)、加密技术(如IPSec)等。
- 未来趋势:随着云计算、大数据、物联网等新兴技术的发展,以太网将继续发挥重要作用。未来的以太网可能会支持更高的速度、更低的延迟和更智能的管理功能。
以太网帧格式
- 源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的;
- 帧协议类型字段有三种值,分别对应IP、ARP、RARP;
- 帧末尾是CRC校验码。
认识MAC地址
MAC地址(Media Access Control Address)是媒体访问控制地址,也称为物理地址或硬件地址。它用于在网络中唯一标识一个网络接口控制器(Network Interface Controller,NIC),也就是网络接口卡(Network Interface Card,NIC)或其他网络接口设备。
以下是关于MAC地址的一些重要点:
唯一性:MAC地址是全球唯一的,每个网络适配器(如网卡)都有一个唯一的MAC地址。这确保了在网络通信中,数据包能够准确地被发送到目标设备。
组成:MAC地址通常由48位二进制数表示,通常分为6组,每组包含8位(即一个字节),组与组之间用冒号或连字符分隔。例如:
00:1A:2B:3C:4D:5E
或00-1A-2B-3C-4D-5E
。厂商标识:MAC地址的前24位(即前三组)通常用于标识网络适配器的制造商。这被称为组织唯一标识符(Organizationally Unique Identifier,OUI),由IEEE(电气和电子工程师协会)分配给每个制造商。
用途:MAC地址在网络通信中扮演着重要角色,特别是在数据链路层(OSI模型中的第二层)。当数据包在物理网络中传输时,网络设备(如交换机、路由器)会使用MAC地址来确定数据包应该被发送到哪里。
广播和组播:在以太网中,MAC地址有两种特殊类型:广播地址(FF:FF:FF:FF:FF:FF)和组播地址(范围从01:00:00:00:00:00到01:FF:FF:FF:FF:FF)。广播地址用于向网络中的所有设备发送数据包,而组播地址用于向一组特定的设备发送数据包。
可变性:虽然大多数网络适配器的MAC地址是固定的,但有些设备允许用户更改其MAC地址。这通常用于隐私保护、网络隔离或绕过某些网络限制。
封装和解封装:在数据传输过程中,数据链路层会将MAC地址封装在数据包的头部,以便网络设备能够识别和处理。当数据包到达目的地时,数据链路层会解封装MAC地址,并将数据包传递给网络层进行进一步处理。
对比理解MAC地址和IP地址
MAC地址和IP地址在网络通信中各自扮演着重要的角色,但它们在性质、工作层次、长度和分配依据等方面存在明显的区别。以下是对这两种地址的对比理解:
1.地址性质:
- MAC地址是物理地址,具有唯一性。每个硬件设备在出厂时都会被分配一个唯一的MAC地址,通常存储在设备的网络适配器中,不可更改(但部分设备支持用户更改)。
- IP地址是逻辑地址,可以根据需要进行更改。它是根据网络拓扑结构分配的,用于在网络中唯一标识一个设备或网络。
2.工作层次:
- MAC地址工作在OSI模型的数据链路层(第二层),用于唯一标识网络设备,并确保它们可以正确地通信。
- IP地址工作在OSI模型的网络层(第三层),用于标识网络中的不同设备,使它们能够相互通信。
3.长度和表示方式:
- MAC地址是48位的(6个字节),通常用12个十六进制数表示,每两个十六进制数之间用冒号或连字符分隔,如“00:1A:2B:3C:4D:5E”。
- IP地址的长度根据版本不同而有所差异。IPv4地址是32位的,通常表示为四个用点分隔的十进制数,如“192.168.1.1”。IPv6地址则是128位的,采用十六进制表示法,并引入了冒号分隔符来缩短长度。
4.分配依据:
- MAC地址的分配是基于制造商的。每个网络适配器在出厂时都会被分配一个唯一的MAC地址,由IEEE(电气和电子工程师协会)负责管理和分配。
- IP地址的分配是基于网络拓扑结构的。它可以根据网络的需求和规划进行自动分配或手动配置。在IPv4中,由于地址资源的有限性,IP地址的分配和管理变得尤为重要。而在IPv6中,由于地址空间的极大扩展,IP地址的分配和管理相对更加灵活和简单。
5.作用范围:
- MAC地址主要用于局域网内的设备识别和通信。在同一个局域网内,设备通过MAC地址进行通信和数据传输。
- IP地址则用于整个互联网范围内的设备识别和通信。通过IP地址,设备可以在全球范围内的互联网上进行通信和数据交换。
认识MTU
MTU(Maximum Transmission Unit)是最大传输单元的缩写,它在网络通信中起着关键作用。
- 定义:MTU用来通知对方所能接受数据服务单元的最大尺寸,说明发送方能够接受的有效载荷大小。它表示的是包或帧的最大长度,通常以字节为单位。
- 作用:MTU的设定对于网络通信的效率和性能具有重要影响。通过调整MTU的大小,可以使网络设备在一次传输中承载更多的数据量,从而提高传输效率。较大的MTU可以减少传输的分组数量,降低传输的开销和延迟,提高数据传输的速度。此外,合适的MTU设置还可以减少网络拥塞,提高网络的吞吐量,并帮助网络设备适应不同的网络环境。
- 影响因素:MTU的大小设置需要考虑到网络的实际情况。如果MTU设置得过大,可能会导致数据包在传输过程中被丢弃或需要被拆分,增加了传输的复杂性和开销。如果MTU设置得过小,则可能导致网络带宽的利用率降低,影响传输效率。
- 确定合适的MTU:确定合适的MTU值需要根据具体的网络环境和应用需求进行调整。在某些情况下,可能需要进行一些试验来确定最佳的MTU值。另外,不同的网络设备和操作系统可能会有不同的MTU默认值,用户需要根据实际情况进行配置。
- 实际应用:在实际应用中,MTU的设置对于各种网络设备和协议都有影响。例如,在以太网中,通常使用的MTU值是1500字节。而在某些广域网(WAN)连接中,MTU值可能会更小。另外,当两台主机之间的通信需要通过多个网络时,每个网络的链路层可能有不同的MTU值,这时重要的是两台主机通信路径中的最小MTU值,称为路径MTU(Path MTU,PMTU)。
MTU相当于发快递时对包裹尺寸的限制. 这个限制是不同的数据链路对应的物理层, 产生的限制.
- 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
- 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
- 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
- 不同的数据链路层标准的MTU是不同的;
MTU对IP协议的影响
由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包.
- 将较大的IP包分成多个小包, 并给每个小包打上标签;
- 每个小包IP协议头的 16位标识(id) 都是相同的;
- 每个小包的IP协议头的3位标志字段中, 第2位置为0, 表示允许分片, 第3位来表示结束标记(当前是否是最后一个小包, 是的话置为1, 否则置为0);
- 到达对端时再将这些小包, 会按顺序重组, 拼装到一起返回给传输层;
- 一旦这些小包中任意一个小包丢失, 接收端的重组就会失败. 但是IP层不会负责重新传输数据;
MTU对UDP协议的影响
- 数据包分片:当UDP数据包的大小超过链路的MTU时,数据包需要在网络层进行分片。与IP协议类似,UDP协议本身不会进行分片,而是依赖网络层(如IP层)来处理。网络层会将过大的UDP数据包分割成多个较小的片段(或称为分片),每个分片都包含原始UDP数据包的部分内容,并且具有相应的头部信息以便在目标主机上重新组装。
然而,与TCP协议不同,UDP协议不提供数据包的重传机制。因此,如果某个UDP数据包的某个分片在传输过程中丢失或损坏,整个UDP数据包都会被丢弃,而接收端不会收到任何通知或重传请求。这可能导致数据丢失或应用程序错误。
2.传输效率:MTU的大小对UDP协议的传输效率有重要影响。如果MTU设置得太小,会导致更多的UDP数据包被分片,从而增加传输的复杂性和开销。每个分片都需要单独的头部信息,这会增加数据包的总体积,并可能导致传输延迟和带宽浪费。
另一方面,如果MTU设置得过大,可能会导致数据包在传输过程中被丢弃或需要被拆分。当UDP数据包的大小超过链路的MTU时,它会被丢弃,导致传输失败。为了避免这种情况,网络设备通常会根据链路的MTU大小来限制UDP数据包的大小。但是,这可能会限制应用程序可以发送的数据量,从而降低传输效率。
因此,为了获得最佳的传输效率,需要根据网络环境和应用程序的需求来合理配置MTU的大小。在实际应用中,通常会通过一些工具和协议(如PMTUD,即路径MTU发现)来动态检测和调整MTU的大小,以确保UDP数据包的正常传输和高效传输。
MTU对TCP协议的影响
让我们再回顾一下TCP协议:
- TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的最大消息长度, 称为MSS(MaxSegment Size);
- TCP在建立连接的过程中, 通信双方会进行MSS协商.
- 最理想的情况下, MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU).
- 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值.
- 然后双方得知对方的MSS值之后, 选择较小的作为最终MSS.
- MSS的值就是在TCP首部的40字节变长选项中(kind=2);
- TCP分片和重组:当TCP报文段(Segment)的大小超过链路的MTU时,它需要在IP层进行分片。每个分片都会被封装成一个独立的IP数据包进行传输。在接收端,这些分片会被重新组合成原始的TCP报文段。这个分片和重组的过程由IP层负责,但TCP层需要知道分片的最大尺寸(即MSS,最大段大小),以便正确地构建TCP报文段。
- MSS的计算:MSS(Maximum Segment Size)是TCP协议中的一个重要参数,它表示TCP能够接收的最大报文段大小。MSS的值通常根据链路的MTU来计算,以确保TCP报文段在传输过程中不会被分片。具体来说,MSS通常等于MTU减去IP头和TCP头的长度。在以太网环境下,常见的MTU值为1500字节,因此MSS值一般为1460字节(1500字节减去20字节的IP头和20字节的TCP头)。
- 传输效率:MTU的大小对TCP协议的传输效率有重要影响。如果MTU设置得太小,会导致TCP报文段在传输过程中被频繁地分片,从而增加了传输的复杂性和开销。每个分片都需要单独的IP头和TCP头,这会增加数据包的总体积,并可能导致传输延迟和带宽浪费。另一方面,如果MTU设置得过大,可能会超过某些链路的MTU限制,导致数据包在传输过程中被丢弃或需要被拆分。这同样会降低传输效率并增加丢包的风险。
- 拥塞控制:TCP协议具有拥塞控制机制,以避免网络拥塞和数据丢失。MTU的大小可以影响TCP拥塞控制的效果。较小的MTU可能导致更多的数据包被丢弃或需要重传,从而增加拥塞控制算法的复杂度。而较大的MTU可以减少数据包的数量和传输开销,有助于改善网络性能和减少拥塞。
MSS和MTU的关系
使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU;
ARP协议
ARP协议,全称Address Resolution Protocol(地址解析协议),是一个用于将IP地址解析为MAC地址的TCP/IP协议。在局域网中,当主机需要与其他主机进行通信时,由于数据链路层使用MAC地址进行通信,而网络层使用IP地址进行通信,因此需要在数据链路层和网络层之间进行地址转换。ARP协议就承担了这一任务,它可以将目标主机的IP地址转换为MAC地址,以便在局域网中进行通信。
ARP协议工作原理:
- 当一个主机需要将IP地址转换为物理地址时,它会首先检查自己的ARP缓存表。ARP缓存表记录了IP地址和对应的物理地址的映射关系。如果缓存表中已经有该IP地址的对应物理地址,则主机可以直接使用该物理地址进行通信。
- 如果主机在ARP缓存表中没有找到所需的物理地址,它会发送一个ARP请求广播消息到本地网络中的所有主机。ARP请求中包含了目标主机的IP地址。
- 接收到ARP请求消息的主机会检查请求中包含的IP地址是否与自己的IP地址相匹配。如果匹配,则将自己的物理地址作为ARP响应消息发送回去。
- 发送方主机收到ARP响应消息后,会将源IP地址和物理地址的映射关系存储在ARP缓存表中,以便下次通信时直接使用。
用一个案例进行详细解释:
- 源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”, 并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
- 目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中;
- 每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
ARP数据报的格式
注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。
- 硬件类型指链路层网络类型,1为以太网;
- 协议类型指要转换的地址类型,0x0800为IP地址;
- 硬件地址长度对于以太网地址为6字节;
- 协议地址长度对于和IP地址为4字节;
- op字段为1表示ARP请求,op字段为2表示ARP应答。
想一想,为什么要有缓存表? 为什么表项要有过期时间而不是一直有效?
缓存表的存在主要是为了提高数据访问的速度和效率。在网络通信和数据处理中,缓存表可以存储最近访问过的数据或资源的位置信息,当再次需要访问这些数据或资源时,可以直接从缓存表中获取位置信息,而不需要重新进行查找或计算,从而减少了访问时间和计算开销。
缓存表中的表项设置过期时间是为了避免缓存数据过期或失效后仍然被使用,导致数据错误或不一致。由于网络环境和数据状态可能会发生变化,缓存数据可能会失去有效性。如果缓存表项一直有效,那么即使缓存数据已经失效,系统仍然可能会使用这些数据,从而导致错误或不可预测的结果。因此,设置过期时间可以确保缓存数据在有效期内被使用,过期后被自动删除或更新,以保持数据的准确性和一致性。
相关文章:
深入探索数据链路层:网络通信的基石
⭐小白苦学IT的博客主页⭐ ⭐初学者必看:Linux操作系统入门⭐ ⭐代码仓库:Linux代码仓库⭐ ❤关注我一起讨论和学习Linux系统❤ 前言 在网络通信的宏伟世界中,数据链路层扮演着至关重要的角色。它位于物理层和网络层之间,不仅直接…...
STM32使用L9110驱动电机自制小风扇
1.1 介绍: 该电机控制模块采用L9110电机控制芯片。该芯片具有两个TTL/CMOS兼容输入端子,并具有抗干扰特性:具有高电流驱动能力,两个输出端子可直接驱动直流电机,每个输出端口可提供750800mA动态电流,其峰值…...
C语言——队列的实现
队列按照先进先出(FIFO,First In First Out)的原则管理数据。这意味着最先进入队列的元素会被最先移出,类似于排队等候服务的情况。队列通常有两个主要操作:入队(enqueue),将元素添加…...
15-LINUX--线程的创建与同步
一.线程 1.线程的概念 线程是进程内部的一条执行序列或执行路径,一个进程可以包含多条线程。 2.线程的三种实现方式 ◼ 内核级线程:由内核创建,创建开销大,内核能感知到线程的存在 ◼ 用户级线程:线程的创建有用户空…...
【退役之重学Java】如何解决消息持续积压等问题
一、将读写数据库等耗时的操作,从消费者逻辑中抽取出来,专门部署机器去完成这部分操作。...
Linux下的SPI通信
SPI通信 一. 1.SPI简介: SPI 是一种高速,全双工,同步串行总线。 SPI 有主从俩种模式通常由一个主设备和一个或者多个从设备组从。SPI不支持多主机。 SPI通信至少需要四根线,分别是 MISO(主设备数据输入,从设备输出),MOSI (主设数据输出从设备输入),SCLK(时钟信号),CS/SS…...
【转载】数字化工厂规划蓝图报告
制造业进入到全新的数字化时代,需要构建新型智能工厂、数字化工厂与智能车间以助力传统产业智能制造升级,将新一代信息技术贯穿到设计、工艺、生产、物流等各个环节。目的是完善创新体系、提升产品质量、推行绿色制造、增强核心竞争力、发展现代化客户体…...
《基于GNU-Radio和USRP的雷达通信系统的实现》文献阅读
文章目录 前言一、摘要二、引言三、联合系统实施1、基本原理2、实验方案 四、软件设置1、发射机2、接收机 五、实验结果1、实验设置2、波形3、室内外对比4、不同参数的结果 六、结论七、参考文献八、论文自取九、阅读收获 前言 本文记录《基于GNU-Radio和USRP的雷达通信系统的实…...
Sealos急速部署生产用k8s集群
最近一段时间部署k8s全部使用sealos了,整体使用感觉良好,基本没有什么坑。推荐给大家。 使用 Sealos,可以安装一个不包含任何组件的裸 Kubernetes 集群。 最大的好处是提供 99 年证书,用到我跑路是足够了。不用像之前kubeadm安装…...
VTK数据的读写--Vtk学习记录1--《VTK图形图像开发进阶》
读和写操作是VTK可视化管线两端相关的类--Reader和Writer类 Reader:将外部数据读入可视化管线,主要步骤如下 s1:实例化Reader对象 s2:指定所要读取的文件名 s3:调用Update()促使管线执行 对应的Writer: s1:实例化Writer对象 s2输入要写的数据以及指定写入的文…...
Vue3专栏项目 -- 一、第一个页面(下)
一、Dropdown 组件(下拉菜单组件)编码 1、基本功能:展示出下拉按钮和下拉菜单栏的样式 我们可以通过bootstrap来实现这个下拉框,需要注意它这个只是有样式,是没有行为的 然后这个下拉按钮的文字展示是根据用户名称展…...
一栈走天下:使用HBuilderX高效搭建Uni-App微信小程序开发环境
一栈走天下:使用HBuilderX高效搭建Uni-App微信小程序开发环境 Uni-App与HBuilderX简介Uni-App基础HBuilderX介绍 环境搭建步骤步骤1:安装HBuilderX步骤2:创建Uni-App项目步骤3:配置微信小程序平台步骤4:预览与发布 代码…...
docker安装Debian:11 freeswitch1.10.5
文章目录 一、生成一个镜像二、切换一个镜像源为阿里源三、安装一些相关依赖和freeswitch3.1第一步:安装freeswitch-mod和下载所需的依赖项3.2 设置密钥3.3 安装freeswitch所需的依赖项3.4 报错3.4.1 报错13.4.2 报错23.4.3 报错3 四、运行4.1 通话三十秒自动挂断 一…...
c3 笔记6 认识css样式表
<link>与import应该如何选择?事实上,使用link与import链接外部样式文件的效果看起来是一样的,区别在于<link>是HTML标记而import属于CSS语法。<link>标记有rel、type与href属性,可以指定CSS样式表的名称,这样就…...
基于springboot+mybatis+vue的项目实战之增删改查CRUD
目录结构 PeotController.java package com.example.controller;import com.example.pojo.Peot; import com.example.pojo.Result; import com.example.service.PeotService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web…...
字节跳动(社招)四面算法原题
TikTok 进展 又是一期定时汇报 TikTok 进展的推文。 上周,美国总统拜登签署了价值 950 亿美元的一揽子对外援助法案。 该法案涉及强制字节跳动剥离旗下应用 TikTok 美国业务,即 针对 TikTok 非卖即禁的"强抢行为"开始进入九个月(27…...
车道线检测交通信号识别车辆实时检测
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言车道线检测机器学习前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对车道线检测&交通信号识别&…...
用正则表达式打造免费代理IP池
爬虫的过程中,当对方服务器发现你屡次爬取它,可能会遇到被封IP的苦痛,这时IP就应该换啦,打造IP池的意义十分重要,提供免费IP网站有很多,本次用的是西刺代理IP # -*- coding: utf-8 -*- """…...
【每日刷题】Day35
【每日刷题】Day35 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 844. 比较含退格的字符串 - 力扣(LeetCode) 2. 2487. 从链表中移除节点 - 力…...
Python数据清洗与可视化实践:国际旅游收入数据分析
文章目录 概要整体流程名词解释NumPyPandasMatplotlibre 技术细节数据清洗可视化 小结 概要 在本篇博客中,我们将通过一个实际的案例,演示如何使用Python进行数据清洗和可视化,以分析国际旅游收入数据。我们将使用Python中的Pandas库来进行数…...
前置知识储备
基本认知 什么是模式 在一定环境中解决一些问题的方案(通俗来说:特定环境中用固定的套路解决问题) 什么是设计模式 设计模式是一套反复被人使用,多数人知晓的,经过分类编目的代码设计经验的总结 设计模式最终的目…...
六月品牌互动营销方案的作用是什么
品牌需要借势营销,六月的六个节日热点,是企业商家不能错过的,如何运用合适的工具/方法借势也同样重要。 互动h5游戏/传单页面发挥不同效果,这份《六月品牌互动营销方案》看看有哪些内容吧~ 1、儿童节 宜:回忆欢乐营销…...
dummy_worker C++ 预占用部分比例cpu资源,人为创造cpu资源紧张
背景 有时候为了C测试程序在cpu资源紧张情况下是否正常,需要人为创造cpu资源紧张 编译方法 g -o dummp_worker dummp_worker.cpp -stdc11 -pthread 使用方法 ./dummp_worker 4 0.2 占用4个cpu核的20%比例的cpu资源 源码 // dummp_worker.cpp #include <c…...
电脑缺失opencl.dll怎么办,轻松解决opencl.dll的多种方法分享
当我们在操作电脑过程中遇到系统提示“由于找不到opencl.dll,无法继续执行代码”,这个错误会导致软件应用无法正常运行。OpenCL.dll作为一个与Open Computing Language(开放计算语言)相关的动态链接库文件,它在执行需要…...
el-select 点击按钮滚动到选择框顶部
主要代码是在visibleChange 在这个 popper 里面找到 .el-select-dropdown__list let popper ref.$refs.popper const ref this.$refs.select let dom popper.querySelector(.el-select-dropdown__list) setTimeout(() > { dom.scrollIntoView() }, 800) <templat…...
vue 钩子函数updated什么时候触发
触发时机 updated是Vue生命周期钩子函数之一,在组件的数据变化导致虚拟DOM重新渲染并应用到实际DOM之后触发。具体来说,updated会在以下几种情况下被触发: 初始渲染完成后:当组件首次渲染完成并将虚拟DOM渲染到实际DOM之后&#…...
消息队列使用常见问题
一、消息丢失的时机? 生产端消息丢失 问题:因为网络异常导致消息发送失败,此时可能会产生消息丢失的情况,重试后可能产生消息重复生产的情况。 解决:超时重试,并在消费端保证幂等性。 消息队列中消息丢失 …...
常用SQL命令
应用经常需要处理用户的数据,并将用户的数据保存到指定位置,数据库是常用的数据存储工具,数据库是结构化信息或数据的有序集合,几乎所有的关系数据库都使用 SQL 编程语言来查询、操作和定义数据,进行数据访问控制&…...
【neteq】tgcall的调用、neteq的创建及接收侧ReceiveStatisticsImpl统计
G:\CDN\P2P-DEV\Libraries\tg_owt\src\call\call.cc基本是按照原生webrtc的来的:G:\CDN\P2P-DEV\tdesktop-offical\Telegram\ThirdParty\tgcalls\tgcalls\group\GroupInstanceCustomImpl.cpptg对neteq的使用 worker 线程创建call Call的config需要neteqfactory Call::CreateAu…...
使用Python读取las点云,写入las点云,无损坐标精度
目录 1 为什么要写这个博文2 提出一些关键问题3 给出全部代码安装依赖源码(laspy v2.x) 1 为什么要写这个博文 搜索使用python读写las点云数据,可以找到很多结果。但是! 有些只是简单的demo,且没有发现/说明可能遇到的…...
澳门赌网站有做代理/做网站推广一般多少钱
有2台域控 主域控 AD1: IP:192.168.0.1/24首选 DNS 服务器:127.0.0.1备用 DNS 服务器: 192.168.0.2额外 AD2: IP:1921.68.0.2/24首选 DNS 服务器:127.0.0.1备用 DNS 服务器: 192.168.0.1第三台域控: 额外AD3: IP:192.168.0.3/24首选 DNS 服务器:127.0.0.1备用 DNS …...
湖北省市政工程建设网站/外包接单平台
算法中常常会推断两条单链表是否相交,尽管算法简单,但也值得说一下。代码中有详尽凝视。 Show you the code ! #undef UNICODE#include <iostream> #include <Windows.h> #include <cstring>using namespace std;typedef struct _SING…...
app开发公司 弙东/谷歌seo课程
软文推广比传统推广更加容易让大众接受,因为其“含蓄”的软文营销植入广告营销被作为整合营销传播的一个重要支点。软文推广也有自己的特点和禁区,不是随随便便就能拿捏准确,只有明白了软文营销的特殊性才能玩儿得转。 1、不了解软文推广相关…...
外包公司企业网站/管理方面的培训课程
Flume NG 1.x 是Flume 0.9.x的重构版本,基本面目全非了,Master和zookeeper没有了,collector没有了,Web console没有了,只有 source (avro:很简单使用;exec:使用shell命令…...
长春网站制作价格/百度搜索引擎盘搜搜
为什么80%的码农都做不了架构师?>>> IT技术潮流从来没有想今天这般风云变幻,城头变幻大王旗。对于科技人才来说,这是最好的时代,也是最坏的时代。新技能和工具的不断涌现对个人的学习能力是个极大的挑战,同…...
做网站找哪家好思南/yandex搜索入口
当Lua遇到不期望的情况时就会抛出错误,比如:两个非数字进行相加;调用一个非函数的变量;访问表中不存在的值等。你也可以通过调用error函数显示的抛出错误,error的参数是要抛出的错误信息。 assert(a,b) a是要检查是否…...