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

数据链路层:网络通信的基础与桥梁

目录

数据链路层

认识以太网

以太网帧格式

认识MAC地址

对比理解MAC地址和IP地址

认识MTU

MUT对IP协议的影响

MTU对TCP协议的影响

数据跨网络传输的过程

ARP协议

ARP协议的作用

ARP数据的格式

ARP协议的工作流程


数据链路层

用于两个设备(同一种数据链路节点)之间进行传递.

在上面网络拓扑图中,数据链路层的工作通常是通过每个路由器和主机之间的物理连接实现的,例如在路由器A和路由器B之间的数据传输就是在数据链路层进行的。

数据链路层解决的问题

网络层 (IP) 的作用

  • 跨网络传输数据:网络层主要负责在不同的网络之间传输数据,它使用 IP协议 来确定数据包的路由,并通过路由器将数据从源主机传送到目标主机。

  • 无可靠性保障:IP协议并不保证数据的可靠性,它仅负责数据的路由和传送。在数据传输过程中可能会发生丢包、延迟等问题,因此IP无法确保数据每次都能成功到达目标。

2. 传输层 (TCP/UDP) 的作用

  • 提供可靠性:TCP协议在网络层的基础上增加了可靠性机制,确保数据在传输过程中不会丢失。如果发生丢包,TCP会通过重传机制请求重新发送数据,从而提供端到端的可靠性保障。

  • 进程到进程的通信:TCP/UDP还提供了进程到进程的通信服务。在进行Socket编程时,本质上是通过TCP或UDP协议实现的进程间通信,允许不同主机上的应用程序之间进行数据交换。

3. 链路层的作用

  • 局域网通信链路层解决的是同一网络(如局域网)内的通信问题。它负责数据在物理链路上传输的具体实现,涉及帧的封装与解封装,以及基于MAC地址的设备识别和数据传输。

  • 一跳一跳的数据传输:在跨网络传输数据时,数据需要经过一跳一跳的路由转发。每一跳的转发都发生在同一局域网或子网内,链路层负责将数据传输到下一跳主机或者目标主机。

  • 物理介质的访问:链路层也涉及到数据如何通过物理媒介(如电缆、无线信号等)进行发送与接收,并解决冲突、错误等问题(例如,使用MAC地址避免碰撞、使用流量控制机制等)。

总结

  • IP 负责将数据从源主机传输到目标主机,解决的是跨网络的通信问题,但并不保证数据的可靠性。

  • TCP/UDP 提供了进程到进程的服务,并在IP之上为数据传输提供可靠性保证,确保数据的完整性和顺序。

  • 链路层 解决的是同一网段内主机之间的通信问题,包括数据帧的传输和本地网络中的设备管理。

总的来说,数据的可靠传输依赖于三个层级的协作:网络层提供了跨网络的能力,传输层提供了可靠性保证,而链路层则解决了局域网内的数据传输问题。

认识以太网

局域网技术

不同局域网所采用的通信技术可能有所不同,常见的局域网技术包括以下几种:

  1. 以太网:以太网是最为广泛应用的计算机局域网技术。它使用基于帧的传输方式,在局域网内部进行数据交换。

  2. 令牌环网:令牌环网常用于IBM系统中,采用一种特殊的帧称为“令牌”。令牌在环路中不断传递,通过令牌的控制来确定哪一个节点可以发送数据包,从而避免冲突。

  3. 无线LAN/WAN:无线局域网是对有线网络的补充和扩展,尤其在移动设备和无线通信场景中变得越来越重要,已成为计算机网络的重要组成部分。

尽管网络中不同局域网采用的通信技术可能各不相同,但IP协议有效地屏蔽了底层网络的差异。在网络通信中,IP层及其以上的协议并不需要关注底层网络采用的具体局域网技术,无论是以太网、令牌环网还是无线网络,它们之间都可以无缝协作。

数据封装与跨网络传输

  • 在数据发送之前,首先会进行数据封装。此时,链路层会为数据添加对应局域网的报头。局域网的报头会根据具体的通信技术进行调整,以符合当前网络的要求。
  • 当数据需要跨越不同的网络时,它会经过路由器进行转发。路由器会去除数据中原有的局域网报头,并将数据交付给网络层。接着,在数据转发到下一跳时,路由器会根据目标网络的类型,再为数据添加新的局域网报头,以适应下一跳的局域网通信技术。
  • 通过这一过程,网络中的路由器不断地去掉旧的局域网报头,并添加新的局域网报头,确保数据可以在不同类型的局域网之间正确传输。即使跨越的网络使用的是不同的局域网技术,数据也能成功地通过路由器进行转发,并最终到达目标主机。

IP协议通过屏蔽底层差异,使得网络中的不同局域网技术之间可以无缝协作,数据能够跨越不同的局域网进行传输。数据在进行跨网络传输时,路由器通过不断更换局域网报头,确保数据在不同局域网之间正确流动。这种机制使得不同类型的局域网(如以太网、令牌环网、无线LAN等)可以共同组成一个统一的、可互联的网络。

以太网通信原理

  • “以太网”不是一种具体的网络,而是一种技术标准,它既包含了数据链路层的内容,也包含了一些物理层的内容。例如,以太网规定了网络拓扑结构,访问控制方式,传输速率等。
  • 以太网中的网线必须使用双绞线,传输速率有10M,100M,1000M等。

以太网中所有的主机共享一个通信信道,当局域网中的一台主机发出数据后,该局域网中的所有主机都能够收到该数据

  • 比如当局域网中的主机A想要发送数据给主机E时,其实局域网当中的每一台主机都能收到主机A发出去的数据,只不过最终只有主机E会将主机A发来的数据向上进行交付。
  • 局域网当中的其他主机虽然也收到了主机A发出的数据,但经过识别后发现这个数据不是发送给自己的,于是就会直接将该数据丢弃而不会向上进行交付。

也就是说,在进行局域网通信的时候,局域网当中的所有主机都能够看到局域网中传输的任何数据,只不过每个主机都只关心发送给自己的数据罢了。

以太网帧格式

以太网帧格式如下:

  • 源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。
  • 帧协议类型字段有三种值,分别对应IP协议、ARP协议和RARP协议。
  • 帧末尾是CRC校验码。

MAC帧如何将报头与有效载荷进行分离?

当底层接收到一个MAC帧时,首先需要对帧进行解析:

  • 帧头:由目的MAC地址、源MAC地址和类型字段组成。

  • 有效载荷:紧随帧头之后,实际的数据部分。

  • 帧尾:用于错误校验,通常在有效载荷之后。

通过提取帧头帧尾,我们可以将有效载荷部分单独提取出来。接下来,处理有效载荷

MAC帧如何决定将有效载荷交付给上层的哪一个协议?

以太网MAC帧对应的上层协议不止一种,因此在将MAC帧的报头和有效载荷分离后,还需要确定应该将分离出来的有效载荷交付给上层的哪一个协议。

以太网帧的类型字段用于指示有效载荷属于哪种上层协议。类型字段通常是2字节的,代表不同的协议。例如:

  • 0x0800:表示有效载荷是一个IPv4数据包。

  • 0x0806:表示有效载荷是一个ARP请求或响应。

  • 0x86DD:表示有效载荷是一个IPv6数据包。

所以,分离出有效载荷后,设备会根据类型字段的值将有效载荷交给对应的上层协议进行处理。

举个例子

假设我们收到一个MAC帧,帧头包括以下内容:

  • 目的MAC地址:00:14:22:01:23:45

  • 源MAC地址:00:14:22:67:89:AB

  • 类型字段:0x0800(表示有效载荷是一个IPv4数据包)

假设有效载荷部分是一个IPv4数据包。根据类型字段(0x0800),以太网卡会将有效载荷交给IP协议层进行处理。

+----------------+----------------+----------------+--------------------------+---------+
|  目的MAC地址   |   源MAC地址    |   类型字段    |        有效载荷           |   FCS   |
|   6 字节       |    6 字节      |    2 字节     |    46-1500 字节数据       |   4字节 |
+----------------+----------------+----------------+--------------------------+---------+|               |               |                               |分离              分离             根据类型字段 (0x0800) 判断     |→  报头           →  有效载荷       →  交付给 IP 协议层(IPv4)  |

认识MAC地址

  • MAC地址用来识别数据链路层中相连的节点。
  • 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示,例如:08:00:27:03:fb:19。
  • 在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址)

注:MAC地址前面的单词ether就是“以太”的意思。

对比理解MAC地址和IP地址

实际数据在路由过程中会存在两套地址,一套是源IP地址和目的IP地址,还有一套是源MAC地址和目的MAC地址。

  • IP地址描述的是路途总体的起点和终点。
  • MAC地址描述的是路途上的每一个区间的起点和终点。

比如做公交车时,源IP地址就是我们上车的站点,目的IP地址就是我们最终要下车的站点,而源MAC地址就是公交车上一个已经到达的站点,目的MAC地址就是公交车下一个将要到达的站点。

因此数据在路由过程中,源IP地址和目的IP地址可以理解成是不会变化的,而数据每进行一跳后其源MAC地址和目的MAC地址都会变化

认识MTU

MTU(Maximum Transmission Unit,最大传输单元)描述的是底层数据帧一次最多可以发送的数据量,这个限制是不同的数据链路层对应的物理层产生的。

  • 以太网对应MTU的值一般是1500字节,不同的网络类型有不同的MTU,如果一次要发送的数据超过了MTU,则需要在IP层对数据进行分片(fragmentation)。
  • 此外,以太网规定MAC帧中数据的最小长度为46字节,如果发送数据量小于46字节,则需要在数据后面补填充位,比如ARP数据包的长度就是不够46字节的。
     

为什么MTU的值一般是1500字节?

1. 以太网协议的历史设计

以太网最初设计时的标准由Xerox公司于1970年代提出,后由IEEE 802.3标准化。在早期的设计中,考虑到硬件实现的限制和网络性能的平衡,1500字节作为一个合理的值被选定。这个大小不仅能够有效地传输数据,而且不会让帧过大,造成在网络中传输时效率低下或丢包。

2. 与其他协议的兼容性

以太网MTU为1500字节的设计也考虑到了与IP协议的兼容性。IP协议的设计早期便规定,数据包的最大大小不能超过65535字节,但在实际网络中,传输大于1500字节的包会变得非常低效且容易丢包。IP协议本身允许进行分片,即如果一个数据包大于MTU的限制,IP层会将其分成多个小包进行发送。为了减少网络中的分片和提高传输效率,1500字节作为以太网帧的最大传输单元便应运而生。

3. 避免碰撞和冲突

较大的MTU可能会引发更高的网络延迟,特别是在共享介质上(如传统的以太网)。以太网使用CSMA/CD(载波侦听多路访问/碰撞检测)机制来避免设备之间的冲突,如果每个数据帧过大,发送过程中的冲突概率就会增大,从而影响网络效率。1500字节的MTU确保了较好的传输效率并减少了潜在的碰撞和延迟。

4. 协议栈和硬件实现

在以太网帧的设计中,除了有效载荷(数据)之外,还包括了源和目的MAC地址、类型字段等额外的头部信息。以太网帧的总长度限制在1518字节(包括48字节的头部和4字节的FCS),因此1500字节成为了最大有效载荷的合理值。这个大小的设计确保了网络设备能够在处理能力上高效运行,同时也保证了较小的延迟和传输性能。

5. 网络性能优化

通过保持1500字节的MTU,网络的吞吐量和延迟之间达到了一个平衡。如果MTU值过大,可能会导致更高的延迟,并增加出错的风险;而MTU值过小,则可能导致更多的帧交换和网络拥塞,降低了效率。

滑动窗口的大小和MTU的关系

在TCP协议中,滑动窗口(Window Size)指的是在未收到确认的情况下,发送方可以继续发送的数据量。滑动窗口的大小通常与网络的MTU有关系,因为每个TCP段(Segment)通常被封装在以太网的帧中。

由于以太网的MTU通常是1500字节,而TCP的每个段通常会被封装为以太网帧。因此,滑动窗口每一段的大小通常会考虑到以太网的MTU限制,确保数据传输的有效性。例如,在没有TCP分段的情况下,每个TCP段的数据(有效载荷)通常不会超过1500字节,这样可以避免在以太网中分片和增加额外的开销。

总结

以太网的MTU通常为1500字节是由于以下几个原因:

  • 历史原因:最早的设计考虑了硬件实现和网络性能的平衡。

  • 与IP协议兼容:IP协议设计的最大数据包大小和以太网MTU兼容。

  • 避免碰撞:较小的MTU值减少了冲突和延迟。

  • 硬件处理能力:1500字节适合大多数网络设备的处理能力和性能要求。

因此,滑动窗口每一段的大小通常与以太网的MTU(1500字节)相关,确保了数据的高效传输并避免过大的数据包影响网络性能。

MUT对IP协议的影响

因为数据链路层规定了最大传输单元MTU,所以如果IP层一次要发送的数据量超过了MTU,此时IP层就需要先对该数据进行分片,然后才能将分片后的数据向下交付。

  • IP层会将较大的数据进行分片,并给每个分片数据包进行标记,具体就是通过设置IP报头当中的16位标识、3位标志和13位片偏移来完成的。
  • 由同一个数据分片得到的各个分片报文,所对应的IP报头当中的16位标识(id)都是相同的。
  • 每一个分片报文的IP报头当中的3位标志字段中,第2位设置为0,表示允许分片,第3位用作结束标记(最后一个分片报文设置为0,其余分片报文设置为1)。
  • 当对端IP层收到这些分片报文后,需要先将这些分片报文按顺序进行组装,拼装到一起后再向上交付给传输层。
  • 如果分片后的某个报文在网络传输过程中丢包了,那么对端在进行数据组装时就会失败,此时就需要上层传输层进行数据重传。

数据的分片和组装发生在IP层,不仅源端主机可能会对数据进行分片,数据在路由过程中的路由器也可能对数据进行分片。因为不同网络的MTU是不一样的,如果传输路径上的某个网络的MTU比源端网络的MTU小,那么路由器就可能对IP数据报再次进行分片

MTU对TCP协议的影响

对于TCP来说,分片也会增加TCP报文丢包的概率,但与UDP不同的是TCP丢包后还需要进行重传,因此TCP应该尽量减少因为分片导致的数据重传。

  • TCP发送的数据报不能无限大,还是应该受制于MTU,我们将TCP的单个数据报的最大报文长度,称为MSS(Max Segment Size)。
  • TCP通信双方在建立连接的过程中,就会进行MSS协商,最终选取双方支持的MSS值当中的较小值作为最终MSS。
  • MSS的值实际就是在TCP首部的40字节的选项字段当中的(kind=2)。
  • 最理想的情况下,MSS的值正好就是在数据不会在IP层进行分片的最大长度

图示:MSS与MTU的关系:

+--------------------------------------------------------+
|                    MTU (最大传输单元)                |
|  +-------------------------+-------------------------+ |
|  |      以太网头部(14字节) |    IP头部(20字节)     |   <- 网络层
|  +-------------------------+-------------------------+ |
|  |       TCP头部(20字节)  |      MSS有效载荷         |   <- 传输层
|  +-------------------------+-------------------------+ |
|                     MTU = 1500 字节                     |
+--------------------------------------------------------+|vMSS = MTU - IP头 - TCP头MSS = 1500 - 20 - 20MSS = 1460 字节

数据跨网络传输的过程

当外网的某台主机X向主机E发送报文时,我们知道主机E的IP地址(路由、系统配置)

我们只知道主机E的IP地址(网络层逻辑地址),但是不知道它的mac地址(物理层地址)。即我们只能确定它在哪块局域网内,但是不能确定它是局域网下哪台设备

所以想要在网络中找到特定主机,并确定目标主机在局域网中的具体设备,我们需要一种局域网协议,把IP地址转换为mac地址--------这就是ARP协议

ARP协议

ARP协议的作用

ARP协议建立了主机IP地址和MAC地址的映射关系

  • 在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目 的主机的硬件地址; • 数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件 地址与本机不符,则直接丢弃; 
  • 因此在通讯前必须获得目的主机的硬件地址;

ARP协议的定位

在TCP/IP四层模型中,网络协议栈自顶向下分为应用层、传输层、网络层和数据链路层。

其中应用层最典型的协议有HTTP、HTTPS和DNS等,传输层最典型的协议有TCP和UDP,网络层最典型的协议就是IP,数据链路层最典型的协议就是MAC帧协议,但实际数据链路层还有两种协议叫做ARP和RARP。

ARP、RARP和MAC帧协议虽然都属于数据链路层的协议,但ARP协议和RARP协议属于MAC帧的上层协议

也就是说,MAC帧的上层协议不一定就直接是网络层的协议,MAC帧的上层协议有可能也属于数据链路层的协议,但就是位于MAC帧的上层。
与之类似的,网络层当中的ICMP协议和IGMP协议,这两个协议虽然与IP协议都属于网络层,但这两个协议属于IP的上层协议

ARP数据的格式

ARP数据的格式如下:

  • 硬件类型指链路层的网络类型,1为以太网。
  • 协议类型指要转换的地址类型,0x0800为IP地址。
  • 硬件地址长度对于以太网地址为6字节,因为MAC地址是48位的。
  • 协议地址长度对于IP地址为4字节,因为IP地址是32位的。
  • op字段为1表示ARP请求,op字段为2表示ARP应答。

从ARP的数据格式也可以看出,ARP是MAC帧协议的上层协议,ARP数据格式中的前3个字段和最后一个字段对应的就是以太网首部,但由于ARP数据包的长度不足46字节,因此ARP数据包在封装成为MAC帧时还需要补上18字节的填充字段。

ARP协议的工作流程

主机A、要将数据转发给同一局域网当中的主机B,前提是主机A必须知道主机B的MAC地址,而现在主机A只知道主机B的IP地址,因此主机A现在需要向主机B发起ARP请求,然后等待主机B发送ARP应答得知主机B的MAC地址。

ARP请求的过程

首先主机A需要先构建ARP请求。

  • 首先,因为主机A构建的是ARP请求,因此ARP请求当中的op字段设置为1。
  • ARP请求当中的硬件类型字段设置为1,因为当前使用的是以太网通信。
  • ARP请求当中的协议类型设置为0800,因为主机A是要根据主机B的IP地址来获取主机B的MAC地址。
  • ARP请求当中的硬件地址长度和协议地址长度分别设置为6和4,因为MAC地址的长度是48位,IP地址的长度是32位。
  • ARP请求当中的发送端以太网地址和发送端IP地址,对应就是主机A的MAC地址和IP地址。
  • ARP请求当中的目的以太网地址和目的IP地址,对应就是主机B的MAC地址和IP地址,但由于主机A不知道主机B的MAC地址,因此将目的以太网地址的二进制序列设置为全1,表示在局域网中进行广播。

此时ARP请求构建完成,如下:

ARP请求构建完成后,为了能将ARP请求发送到以太网当中,还需要将ARP数据包向下交付给MAC帧协议,封装成MAC帧。

  • 封装MAC帧报头时,以太网目的地址和以太网源地址,对应分别是主机B和路由器D的MAC地址,但由于路由器D不知道主机B的MAC地址,因此MAC帧报头当中的以太网目的地址的二进制序列也只能设置为全1,表示在局域网中进行广播。
  • 因为这里封装的是一个ARP请求数据包,因此MAC帧当中的帧类型字段设置为0806。
  • 由于ARP请求数据包的长度只有28字节,不足46字节,因此还需要在MAC帧的有效载荷当中补上18字节的填充字段,最后再对MAC帧进行CRC校验即可

此时ARP请求就被封装成MAC帧了,如下:

MAC帧封装完毕后,主机A就可以将封装好的MAC帧以广播的方式发送到局域网当中了。

  • 因为这个MAC帧是以广播的方式发出的,因此局域网当中的每台主机收到这个MAC帧后,都会对该MAC帧进行解包。当这些主机识别到MAC帧当中的帧类型字段为0806后,便知道这是一个ARP的请求或应答的数据包,于是会将MAC帧的有效载荷向上交付给ARP层。
  • 当ARP层收到这个数据包后,发现ARP数据包当中的op字段为1,于是判定这是一个ARP请求,然后再提取出ARP数据包当中的目的IP地址字段,虽然局域网当中的所有主机都会将该数据包交给自己的ARP层,但最终只有主机B发现ARP数据包当中的目的IP地址与自己相同,因此只有主机B会对该ARP请求进行应答,而局域网当中的其他主机在识别到ARP数据包当中的目的IP地址与自己不匹配后,就会直接将这个ARP请求报文丢弃。

需要注意的是,局域网当中其他不相干的主机在收到这个ARP请求报文后,不是在MAC帧层丢弃的,而是在ARP层发现该ARP数据包的目的IP与自己的IP不匹配后丢弃的。

总结:
发起方构建ARP请求,以广播的方式发送给每一个主机。
每台主机都能识别接收,然后根据MAC帧的帧类型字段将有效载荷交付给每个主机的ARP层。
其他不相关主机立马根据目的IP,在自己的ARP协议内部丢弃ARP请求,只有目标主机会处理请求。

ARP应答的过程

主机B在应答时首先需要构建ARP应答。

  • 首先,因为主机B构建的是ARP应答,因此ARP应答当中的op字段设置为2。
  • ARP应答当中的硬件类型、协议类型、硬件地址长度、协议地址长度的值与ARP请求当中设置的值相同。
  • ARP应答当中的发送端以太网地址和发送端IP地址,对应就是主机B的MAC地址和IP地址。
  • ARP应答当中的目的以太网地址和目的IP地址,对应就是主机A的MAC地址和IP地址,因为主机A发来的ARP请求当中告知了主机B它的MAC地址和IP地址,因此主机B知道

此时ARP应答构建完成,如下:

ARP应答构建完成后,为了能将ARP应答发送到以太网当中,也需要将ARP数据包向下交付给MAC帧协议,封装成MAC帧。

  • 封装MAC帧报头时,以太网目的地址和以太网源地址,对应分别是主机A和主机B的MAC地址。
  • 因为这里封装的是一个ARP应答数据包,因此MAC帧当中的帧类型字段设置为0806。
  • 由于ARP应答数据包的长度也只有28字节,不足46字节,因此也需要在MAC帧的有效载荷当中补上18字节的填充字段,最后再对MAC帧进行CRC校验。

此时ARP应答就被封装成MAC帧了,如下:

MAC帧封装完毕后,主机B就可以将封装好的MAC帧发送到局域网当中了。

  • 此时局域网当中的每台主机在底层都能收到这个MAC帧,但局域网当中的不相干的主机,在发现该MAC帧对应的以太网目的地址与自己不同后,就会将该MAC帧丢弃,而不会交付给上层ARP层,最终只有主机A会将解包后MAC帧的有效载荷向上交付给自己的ARP层。
  • 当主机A的ARP层收到这个数据包后,发现ARP数据包当中的op字段为2,于是判定这是一个ARP应答,然后就会提取出ARP数据包当中的发送端以太网的地址和发送端IP地址,此时主机A就拿到了主机B的MAC地址。

需要注意的是,局域网当中其他不相干的主机在收到这个ARP应答报文后,直接在MAC帧层就丢弃了,并没有将其交付给自己的ARP层。

注:ARP协议的局域网广播:ARP请求是广播的,而ARP响应是单播的。ARP请求广播到整个局域网,但响应只发送给请求者

RARP协议

RARP(Reverse Address Resolution Protocol,反向地址转换协议),是根据MAC地址获取IP地址的一个TCP/IP协议。

也就是说,某些情况下我们可能只知道一台主机的MAC地址,此时要得知该主机的IP地址就可以使用RARP协议。

理论上来说,RARP协议一定比ARP协议简单,因为既然我们已经知道一台主机的MAC地址了,那么我们就已经可以直接向给主机发送消息了,因此我们可以直接发消息询问对方的IP地址就行了。
 

http://www.dtcms.com/a/406505.html

相关文章:

  • Keepalived两个集群实验
  • vs网站开发表格大小设置网站建设要注意一些什么
  • js网站模板下载做网站和app哪个难
  • MySQL多实例管理
  • 用dpdk实现udp、tcp数据包收发,tcp协议栈相关原理
  • 3D气象数据可视化:使用前端框架实现动态天气展示
  • 学习日记19:GRAPH-BERT
  • shell编程:sed - 流编辑器(5)
  • 网站制作地点中山网站建设公司哪家好
  • 关于【机器人小脑】的快速入门介绍
  • 无线收发模块保障砂芯库桁架机器人稳定无线通信实践
  • 北京有哪些网站建设国家企业信用信息系统(全国)
  • LabVIEW 动态信号分析
  • 腾讯云容器服务
  • 怎么做网站推广电话广西网站建设哪家有
  • 实战:基于 BRPC+Etcd 打造轻量级 RPC 服务——高级特性与生产环境深度实践
  • 蓝耘MaaS驱动PandaWiki:零基础搭建AI智能知识库完整指南
  • C语言,结构体
  • [创业之路-599]:193nm、266nm、355nm深紫外激光器的上下游产业链和相应的国产化公司
  • 安溪住房和城乡规划建设局网站wordpress+左侧菜单
  • Ubuntu 系统中防火墙
  • 摄像头-激光雷达在线标定相机脚本(ROS 版)
  • 做网站建设需要多少钱手机营销软件
  • 360官方网站餐饮网站开发毕业设计模板
  • 从0到1玩转BurpSuite:Web安全测试进阶之路
  • Go-Zero API Handler 自动化生成与参数验证集成
  • Choosing the Number of Clusters|选择聚类的个数
  • golang基础语法(五)切片
  • Golang学习笔记:标准库sync包
  • 【Git】Git 简介及基本操作