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

【网络基础】数据链路层

【网络基础】数据链路层

文章目录

  • 【网络基础】数据链路层
    • 1、对比网络层
    • 2、以太网
      • 2.1 基本概念
      • 2.2 类似技术
      • 2.3 以太网帧
    • 3、MAC地址
      • 对比IP地址
    • 4、MTU
      • 4.1 对IP协议影响
      • 4.2 对UDP协议影响
      • 4.3 对TCP协议影响
      • 4.4 地址、MTU查看
    • 5、ARP协议
      • 5.1 协议作用
      • 5.2 协议工作流程
      • 5.3 数据报格式
    • 6、DNS协议
      • 6.1 域名简介
      • 6.2 域名解析
    • 7、ICMP协议
      • 7.1 功能介绍
      • 7.2 报文格式
      • 7.3 命令
    • 8、NAT技术
      • 8.1 IP转换
        • 8.1.1 动静态转换
        • 8.1.2 地址转换表
      • 8.2 NAPT
      • 8.3 NAT技术缺陷
      • 8.4 代理服务器
        • 8.4.1 与NAT异同
        • 8.4.2 正反向代理

1、对比网络层

数据链路层和网络层是计算机网络体系结构中的两个重要层级,各自具有不同的作用和功能。

数据链路层的作用:

数据链路层主要关注直接相连的两个节点之间的数据传输,它的作用包括以下几个方面:

  1. 物理地址寻址: 数据链路层使用物理地址(MAC地址)来标识网络中的设备,以便正确地将数据帧发送到目标设备。

  2. 帧封装和解封装: 数据链路层将上层传递下来的数据分割成适合传输的帧,并在接收端将帧重新组装成原始数据。

  3. 流控制和错误控制: 数据链路层负责确保数据在物理媒体上的可靠传输。流控制机制可以控制发送速率,以避免接收端缓冲区溢出。错误控制则涉及校验和、确认和重传,以保证传输数据的准确性。

  4. 介质访问控制(MAC): 在共享介质上,数据链路层负责实现介质访问控制,协调多个设备之间的访问,以避免冲突和碰撞。

网络层的作用:

网络层更关注整个网络的数据传输,涉及跨越多个节点和网络的数据路由和转发。网络层的作用包括以下方面:

  1. 逻辑地址寻址: 网络层使用逻辑地址(如IP地址)来标识不同的主机和网络,以便在广域网中进行路由和转发。

  2. 路由选择: 网络层决定数据在网络中的最佳路径,根据不同网络间的距离、拓扑结构、流量等因素选择路由。

  3. 分段和重组: 网络层将较大的数据包(分组)分割成更小的分段进行传输,并在接收端重新组装这些分段。

  4. 跨网络通信: 网络层实现了不同网络之间的通信,处理跨越多个子网的数据传输。

数据链路层与网络层的对比:

  1. 范围: 数据链路层仅关注相邻节点间的数据传输,而网络层关注整个网络范围内的数据路由和转发。

  2. 寻址: 数据链路层使用物理地址(MAC地址)寻址,网络层使用逻辑地址(IP地址)寻址。

  3. 重点: 数据链路层重点在于传输的可靠性和错误控制,网络层重点在于数据的路由和跨网络传输。

  4. 作用层级: 数据链路层位于物理层之上,网络层位于传输层之下。

综上所述,数据链路层和网络层在计算机网络中扮演不同但互补的角色,分别负责相邻节点间的数据传输和整个网络中数据的路由与转发。

2、以太网

2.1 基本概念

以太网(Ethernet)是一种常用的局域网(LAN)技术,它是由Xerox公司的研究人员在20世纪70年代末和80年代初开发的,并由后来的公司(如Intel、Digital Equipment Corporation和Xerox)进一步推广和标准化。以太网已经成为最为广泛使用的有线局域网技术之一。

以下是关于以太网的一些重要特点和概念:

  1. 传输介质: 以太网最初使用同轴电缆作为传输介质,后来逐渐发展为使用双绞线和光纤等多种传输介质。

  2. 拓扑结构: 以太网采用总线型和星型等拓扑结构。在总线型拓扑中,所有设备连接在一条共享的传输线上;在星型拓扑中,每个设备都连接到中央集线器或交换机。

  3. 帧结构: 以太网数据被封装成帧,每一帧包含了目标MAC地址、源MAC地址、数据和校验等字段。以太网帧的最小长度是64字节,以确保足够的帧间距。

  4. MAC地址: 以太网使用物理地址,也称为MAC地址,来唯一标识网络中的每个网络适配器(网卡)。

  5. 速率: 以太网的传输速率有多种标准,包括最初的10 Mbps(以太网)、100 Mbps(快速以太网)、1 Gbps(千兆以太网)、10 Gbps(10千兆以太网)等,随着技术的发展,速率不断提高。

  6. 冲突检测: 在早期的以太网中,采用的是CSMA/CD(Carrier Sense Multiple Access with Collision Detection)机制,用于检测和处理传输媒体上的冲突。

  7. 交换机技术: 随着时间的推移,交换机取代了集线器,实现了更高效的数据传输,减少了冲突。

  8. 标准化: 以太网的标准由IEEE(Institute of Electrical and Electronics Engineers)制定,其中最为常见的标准包括IEEE 802.3系列标准。

  9. 应用广泛: 以太网被广泛应用于各种环境,包括家庭、企业、校园以及数据中心等,用于连接计算机、服务器、打印机、路由器等设备。

以太网作为一种局域网技术,因其易用性、灵活性和适用性,已经成为了计算机网络领域中的基础技术之一,为连接设备提供了高效的数据通信方式。

2.2 类似技术

与以太网技术对标的是其他局域网(LAN)技术和数据通信技术。以下是一些与以太网技术类似或与之竞争的技术:

  1. 令牌环(Token Ring): 令牌环是一种局域网技术,与以太网相比,它采用了不同的访问控制机制。在令牌环中,数据在一个环形拓扑中传输,每个设备在获得令牌时才能发送数据。这种机制避免了碰撞,但可能导致较低的网络利用率。

  2. FDDI(Fiber Distributed Data Interface): FDDI是一种使用光纤作为传输介质的局域网技术,它具有双环结构,可提供较高的带宽和可靠性。虽然在一些特定环境下仍在使用,但由于光纤成本较高,FDDI的应用范围相对有限。

  3. ARCNET(Attached Resource Computer Network): ARCNET是一种使用同轴电缆的局域网技术,它具有简单的拓扑和低延迟,常用于工业控制和嵌入式系统。

  4. 无线局域网(WLAN)技术: 无线局域网技术(如Wi-Fi)在与以太网竞争方面逐渐崭露头角。Wi-Fi技术使设备能够通过无线信号连接到局域网和互联网,提供更大的灵活性和移动性。

  5. 局域网交换技术: 局域网交换技术通过使用交换机替代集线器,实现了更高效的数据传输。这种技术使数据只传输到目标设备,避免了以太网中的广播传输,提高了网络利用率。

  6. 媒体访问控制(MAC)协议的变种: 不同的局域网技术使用不同的媒体访问控制协议,如以太网的CSMA/CD和令牌环的令牌传递机制等。

这些技术在不同的环境和应用中具有不同的特点和优势。以太网作为一种最为广泛应用的局域网技术,凭借其高带宽、易用性和低成本,在很多场景中仍然占据主导地位。但随着技术的发展,其他技术也在不断进化和创新,以满足不同应用的需求。

2.3 以太网帧

以太网帧(Ethernet Frame)是在以太网网络中传输数据的基本单位。它是将数据封装成一个结构化的数据包,包含了目标MAC地址、源MAC地址、数据、校验和等信息,以确保数据在网络中的可靠传输。

以太网帧的格式是按照一定的顺序组织各个字段,以封装数据并在以太网网络中进行传输。以下是标准以太网帧的格式:

image-20230820135126138

  1. 前导码(Preamble): 前导码是一个7字节的模式,每个字节都是10101010(即0xAA)。它用于在接收方同步时钟,并为接收端提供准确的数据传输起始点。

  2. 起始帧定界符(Start Frame Delimiter): 这是一个1字节的模式,值为10101011(即0xAB),标志着帧数据的开始。

  3. 目标MAC地址(Destination MAC Address): 这是6字节的物理地址,指示帧数据要发送到的目标设备。

  4. 源MAC地址(Source MAC Address): 同样是6字节的物理地址,表示发送帧数据的设备的地址。

  5. 长度/类型字段(Length/Type Field): 这个字段可以有两种不同的含义。如果长度小于或等于1500,它表示数据部分的长度;如果长度大于1500,它代表帧数据的类型。

  6. 数据(Data): 这是帧的主要数据部分,其长度可以在46到1500字节之间,根据数据的大小而变化。

  7. 帧校验序列(Frame Check Sequence,FCS): 这是一个4字节的校验和字段,用于检测帧数据传输中是否出现错误。

这种格式使得以太网帧能够在物理媒体上进行可靠传输,并且确保接收方能够准确地解析和处理接收到的数据。帧的各个字段相互配合,构成了一个完整的数据单元,以在以太网网络中传输信息。不过请注意,虽然这是标准的以太网帧格式,但不同的以太网标准和技术变种可能会有一些细微的差异。

在以太网中,帧的大小是有限制的,但也有一些最小和最大的规定。以太网的帧大小范围由不同的标准和技术规范所规定,主要是为了确保网络的性能和可靠性。

最小帧大小是为了确保帧的前导码和帧定界符能够正确同步,并且在物理媒体上传输的帧能够被准确地识别为有效帧。最大帧大小则是为了避免过长的帧在传输过程中引发网络拥塞、延迟以及其他问题。

以下是一些常见的以太网帧大小限制:

  1. 最小帧大小: 以太网的最小帧大小是64字节。这个限制是为了确保帧的前导码和帧定界符都能够完整地传输,以便接收方能够准确地同步和解析帧的开始。如果帧太短,前导码和定界符可能无法正常工作。

  2. 最大帧大小: 以太网的最大帧大小通常是1518字节(包括帧头和FCS)。这个限制是由于以太网的物理传输介质和帧结构。如果帧太大,可能会导致碰撞和网络拥塞,同时也可能使数据在传输过程中受到更多的干扰。

需要注意的是,有些以太网技术的最大帧大小可能会有所不同。例如,Jumbo Frames技术允许在某些情况下发送更大的以太网帧,以提高数据传输效率。但是,这些超过标准最大帧大小的帧可能在一些网络设备和环境中不被支持。

总之,以太网的帧大小是有限制的,这些限制在不同的以太网标准和技术规范中有所规定,旨在确保网络的性能、可靠性和互操作性。

3、MAC地址

MAC地址(Media Access Control address)是用于在数据链路层识别网络中相连的不同节点的唯一标识符。以下是一些关键点:

  1. 长度和表示形式: MAC地址通常是48位,即6个字节,通常使用十六进制数字来表示。为了提高可读性,通常使用冒号或破折号将各个字节分隔开,例如:08:00:27:03:fb:19。

  2. 不可更改性: MAC地址是在网络适配器(网卡)出厂时分配并固定的,因此在一般情况下不能随意更改。这有助于确保网络中每个节点具有唯一的标识。

  3. 唯一性: 每个网卡的MAC地址通常都是唯一的,这使得网络设备能够准确地识别和寻址不同的节点。然而,在一些特殊情况下,可能会出现冲突,尤其是在虚拟机等环境中,因为虚拟机可能共享相同的物理网卡。

  4. 虚拟机中的MAC地址: 虚拟机中的MAC地址通常由虚拟化平台生成,不一定与物理网卡的真实MAC地址相对应。虚拟机的MAC地址可以在虚拟化软件中进行配置,以便在虚拟网络中与其他虚拟机和物理网络通信。

  5. 部分网卡支持用户配置: 尽管大多数网卡的MAC地址是出厂设置并固定的,但有些网卡可能支持用户配置,允许用户在一定范围内自定义MAC地址。但是,这通常受到一些限制,以防止不当配置引发网络问题。

总的来说,MAC地址在网络通信中起着重要作用,帮助数据链路层确保数据的准确传输和正确寻址。

对比IP地址

MAC地址和IP地址是计算机网络中两种不同类型的地址,分别在不同的网络层次上使用,具有不同的功能和作用。

MAC地址(Media Access Control address):

  1. 位置: MAC地址位于数据链路层(第二层)中,用于在局域网中识别网络适配器(网卡)。

  2. 唯一性: 每个网卡的MAC地址通常是唯一的,用于在同一局域网中标识不同的设备。

  3. 长度: MAC地址的长度是固定的,通常为48位,即6个字节,用十六进制表示。

  4. 不可更改性: MAC地址在网卡出厂时被分配,并通常不能更改,保持不变。

  5. 作用: MAC地址主要用于在局域网内部寻址和识别设备,用于在同一物理网络上传输数据帧,以便设备之间进行通信。

IP地址(Internet Protocol address):

  1. 位置: IP地址位于网络层(第三层)中,用于在广域网中寻址和路由。

  2. 唯一性: 每个设备的IP地址在整个互联网中应该是唯一的,但并不总是绝对保证。

  3. 长度: IP地址通常是32位或128位,IPv4使用32位,IPv6使用128位。

  4. 可变性: IP地址可以根据需要分配、更改或重新配置。动态主机配置协议(DHCP)用于自动分配和管理IP地址。

  5. 作用: IP地址主要用于在广域网上唯一地标识设备,并帮助路由器将数据包从源设备传递到目标设备,使设备能够跨越多个子网进行通信。

对比:

  1. 层次不同: MAC地址在数据链路层上工作,IP地址在网络层上工作。

  2. 用途不同: MAC地址用于在同一局域网内部识别设备,IP地址用于在更大的网络范围内寻址和路由。

  3. 唯一性不同: MAC地址通常在局域网内是唯一的,IP地址应该在全球范围内唯一,但这不总是绝对的。

  4. 长度和表示方式不同: MAC地址是固定长度的48位十六进制数,IP地址长度和版本有关,IPv4是32位的十进制数,IPv6是128位的十六进制数。

  5. 可变性不同: MAC地址在网卡出厂时确定并通常不可更改,IP地址可以配置、更改和重新分配。

综上所述,MAC地址和IP地址在不同的网络层次上有不同的功能和用途,它们共同构成了计算机网络中的寻址和通信系统。

4、MTU

MTU(Maximum Transmission Unit)是数据链路层或网络层中的一个概念,表示在不进行分段的情况下可以在网络上传输的最大数据包大小。简单来说,MTU就是能够在一次传输中发送的最大数据量。

在现实世界中,通信网络的各个部分可能使用不同的传输介质和协议,因此对于不同的网络段,MTU可能会有所不同。理解MTU的重要性在于它可以影响数据传输的效率和可靠性。

以下是一些简单认识MTU的关键点:

  1. 数据分段: 如果要发送的数据包的大小超过了网络的MTU,就需要对数据进行分段,将数据切割成适合网络传输的小块。这个过程称为分段。

  2. 分段开销: 分段会引入额外的开销,因为每个分段都需要添加一些附加信息,如分段序号、偏移等。这可能会导致一些额外的网络流量。

  3. 碎片: 如果分段后的数据包在网络中遇到不同的MTU限制,可能会导致数据包的碎片化,增加数据包在网络上的传输时间和潜在的丢失风险。

  4. 路径 MTU 发现: 为了避免分段和碎片问题,许多现代网络使用“路径 MTU 发现”机制,它允许设备发现沿途网络中的最小 MTU,从而确保数据传输的可靠性和效率。

  5. 影响网络性能: 较大的MTU可能会提高数据传输效率,但也可能增加传输中出现问题的风险,因为较大的数据包容易受到干扰或丢失。较小的MTU可能会减少传输效率,但在某些网络中更稳定。

  6. 常见的 MTU 大小: 在以太网中,常见的MTU大小为1500字节。在某些网络技术中,如IPv6,MTU可以更大。

  7. 网络优化: 在一些情况下,根据特定网络环境的需求,可能会对设备或路由器的MTU进行调整,以优化网络性能。

综上所述,MTU是网络通信中一个重要的概念,理解它有助于了解数据在网络上的传输方式,以及如何优化网络性能以提高数据传输的效率和可靠性。

4.1 对IP协议影响

MTU对IP协议的影响主要体现在数据传输的可靠性、效率和分段上。IP协议在网络层负责数据的路由和寻址,而MTU作为数据链路层和网络层之间的一个参数,影响了IP数据包在网络中的传输方式和性能。

以下是MTU对IP协议的影响体现:

  1. 分段: IP数据包的大小可能超过网络路径上的某些部分的MTU,特别是当数据包在不同网络段之间传输时。如果IP数据包的大小超过了任何一个中间设备的MTU,路由器或中间设备就会将这个大的数据包分成更小的片段,以适应每个片段的MTU。这个过程被称为分段。分段带来了额外的开销,并且可能会导致数据包碎片化,影响网络性能。

  2. 性能和效率: 较大的MTU可以提高数据传输效率,因为更多的数据可以一次性传输。然而,过大的MTU可能会导致数据包在传输过程中出现丢失、延迟或重传的情况,特别是在不稳定的网络环境中。适当设置MTU大小可以平衡性能和可靠性。

  3. 路径 MTU 发现: 为了避免分段和碎片问题,IPv4和IPv6引入了“路径 MTU 发现”机制。这个机制允许源设备在发送数据包之前,确定沿途网络中的最小MTU,从而避免在传输中出现分段和碎片问题。

  4. 路由器处理: 路由器会根据输入和输出接口的MTU大小来处理数据包。如果路由器接收到一个大于输出接口MTU的数据包,它需要将数据包分段或丢弃。

  5. ICMP 协议: 当一个数据包因为MTU限制而被分段时,中间设备(如路由器)可能会生成 ICMP “分段需要” 错误消息,通知源设备需要重新发送较小的数据包。

综上所述,MTU对IP协议的影响在于它决定了IP数据包在网络中的传输方式、效率和可靠性。适当地设置MTU大小可以帮助优化数据传输,并避免由于数据包分段和碎片化引起的问题。

4.2 对UDP协议影响

MTU(Maximum Transmission Unit)对UDP(User Datagram Protocol)协议的影响与对IP协议的影响类似,但是在UDP中由于它是一个面向无连接的传输协议,所以一些影响可能更加明显。

以下是MTU对UDP协议的影响体现:

  1. 分段和碎片: 当UDP数据包的大小超过网络路径上的某些部分的MTU时,路由器或中间设备可能会将数据包分成更小的片段,以适应各个片段的MTU。这可能导致UDP数据包被分段和碎片化,影响数据传输的效率和可靠性。

  2. 数据包丢失: 较大的UDP数据包在分段和传输过程中可能会受到更多的干扰,从而增加数据包丢失的风险。UDP不具备像TCP那样的确认和重传机制,因此一旦数据包丢失,它不会被自动重传,需要应用层自行处理。

  3. 数据包延迟: 分段和重组UDP数据包可能会引入额外的处理开销,从而增加数据包传输的延迟。较大的MTU可能会导致路由器和设备需要更多的时间来处理数据包。

  4. 路径 MTU 发现: 对于UDP数据传输,路径 MTU 发现机制同样适用。源设备可以通过路径 MTU 发现来确定合适的数据包大小,以避免分段和碎片问题。

  5. 应用层影响: 由于UDP协议不提供像TCP那样的可靠性机制,应用程序需要自行处理数据包的丢失、重复和乱序等问题。MTU的影响可能会进一步放大这些问题。

总之,MTU对UDP协议的影响主要表现在分段、碎片、数据包丢失、延迟以及应用层处理等方面。在使用UDP协议进行数据传输时,特别是在涉及到网络中MTU变化的情况下,应用程序需要考虑这些影响并采取适当的措施,以确保数据传输的可靠性和性能。

4.3 对TCP协议影响

MSS(Maximum Segment Size)和MTU(Maximum Transmission Unit)是两个相关但不同的网络概念,它们在TCP数据传输中起着关键作用。它们的关系在于MSS决定了在TCP数据传输中每个TCP段(Segment)的最大大小,而MTU决定了在网络传输中最大的数据包大小。

具体来说,MSS和MTU之间的关系体现在以下几个方面:

  1. MSS的限制: MSS是TCP层中的一个参数,表示在传输中每个TCP段(Segment)的最大数据量,它包括TCP头部和数据负载。MSS的值通常会小于或等于路径上的MTU,以避免在网络中发生分段和碎片化。MSS的计算公式为:MSS = MTU - TCP头部长度。

  2. TCP段的分段: 当TCP数据包的大小(包括TCP头部和数据负载)超过MSS时,TCP会在发送数据包之前将其分成多个TCP段,每个TCP段的大小不超过MSS。这样可以确保每个TCP段在网络传输中不会超过路径上的MTU,避免分段和碎片问题。

  3. MTU的影响: MTU是网络层的参数,表示在网络传输中最大的数据包大小,包括数据链路层头部和网络层头部。TCP的MSS必须小于或等于MTU,以确保TCP段不会在网络中被分段或碎片化。

总之,MSS和MTU在TCP数据传输中密切相关。MSS决定了每个TCP段的最大大小,而MTU决定了整个数据包在网络传输中的最大大小。为了避免分段和碎片问题,MSS需要小于或等于路径上的MTU。通过适当设置MSS和MTU,可以优化TCP数据传输的效率和可靠性。

4.4 地址、MTU查看

ifconfig(Interface Configuration)命令是一个用于配置和显示网络接口信息的命令行工具,常用于类Unix操作系统(如Linux和macOS)。它可以用于查看、配置和管理网络接口的相关信息,包括IP地址、子网掩码、MTU等。

以下是一些常见的用法示例:

  1. 查看所有网络接口信息:

    ifconfig
    
  2. 查看特定网络接口信息:

    ifconfig eth0
    

    在这里,eth0 是网络接口的名称,可以根据实际情况替换网络接口名称。

  3. 启用/禁用网络接口:

    ifconfig eth0 up    # 启用 eth0 接口
    ifconfig eth0 down  # 禁用 eth0 接口
    
  4. 配置IP地址和子网掩码:

    ifconfig eth0 192.168.1.10 netmask 255.255.255.0
    
  5. 配置MTU:

    ifconfig eth0 mtu 1500
    

    在这里,1500 是想要设置的MTU值。

注意:随着时间的推移,一些Linux发行版已经开始转向使用ip命令来替代ifconfig,因为ip命令提供了更强大和更灵活的网络管理功能。因此,根据操作系统版本和发行版,可能会在一些情况下发现ifconfig不再被默认安装,而是使用ip命令。如果系统支持ip命令,可以使用ip addr来代替ifconfig来查看网络接口信息。

5、ARP协议

ARP(Address Resolution Protocol)应用于计算机网络模型的数据链路层与网络层之间。具体来说,它是在数据链路层上操作的一种协议,用于将网络层的IP地址转换为物理链路层的MAC地址。这个过程实现了IP地址与MAC地址之间的映射,以便在局域网内正确地将数据包从源主机传输到目标主机。因此,ARP协议在网络模型中用于解决在同一局域网内的主机之间的寻址和通信问题。

5.1 协议作用

假设你的计算机需要向局域网内的另一台计算机发送数据。你知道目标计算机的IP地址,但是在数据链路层,需要知道目标计算机的MAC地址才能正确地将数据包发送到目标。

这时,ARP协议就发挥了作用。当你的计算机要发送数据时,它会先检查自己的ARP缓存表,看看是否已经知道目标IP地址对应的MAC地址。如果不知道,它就会发送一个ARP请求广播,询问网络中是否有响应这个IP地址的计算机。其他计算机收到这个广播后,会检查自己的IP地址,如果匹配,就会发送一个ARP响应,其中包含自己的MAC地址。

一旦发送ARP请求的计算机收到了响应,它就会在本地缓存中存储这个IP地址与MAC地址的映射关系。现在,计算机就知道了目标IP地址对应的MAC地址,可以使用这个MAC地址来构建数据包,正确地将数据发送到目标计算机。

这个过程中,ARP协议起到了查询和解析IP地址与MAC地址之间的映射关系的作用,确保数据包能够在局域网内正确地传输到目标计算机。如果没有ARP协议,我们就很难在局域网中实现正确的通信,因为IP地址只在网络层起作用,而数据链路层需要用到MAC地址来进行实际的数据传输。

5.2 协议工作流程

ARP(Address Resolution Protocol)协议的工作流程可以简要概括为以下步骤:

  1. 需要目标MAC地址: 当一台主机A需要向另一台主机B发送数据包时,主机A知道目标主机B的IP地址,但是在数据链路层需要目标主机B的MAC地址来正确地将数据包传递给它。

  2. ARP请求广播: 主机A首先在局域网内发送一个ARP请求广播帧,其中包含主机A的MAC地址、IP地址和目标主机B的IP地址。这个广播帧会被发送到局域网内的所有设备。

  3. 其他设备的处理: 其他设备收到ARP请求广播后,首先检查自己的IP地址是否与ARP请求中的目标IP地址匹配。如果匹配,表示收到请求的设备就是目标设备。

  4. ARP响应: 目标设备B会向主机A发送一个ARP响应帧,其中包含设备B的MAC地址、IP地址和设备A的IP地址。这个ARP响应帧是直接发送给主机A,而不是广播到整个网络。

  5. MAC地址映射: 主机A收到目标设备B的ARP响应后,会将目标IP地址与MAC地址的映射关系存储在本地的ARP缓存表中,以便将来使用。

  6. 数据包发送: 主机A现在知道了目标设备B的MAC地址,可以将数据包封装成一个帧,并在帧头部添加目标MAC地址,然后发送给局域网。

整个流程中,ARP协议起到了查询和解析IP地址与MAC地址之间映射关系的作用。这个过程确保了数据包在局域网内正确传递到目标设备,从而实现了设备之间的通信。值得注意的是,ARP协议只在同一个局域网内部起作用,用于解析目标设备的MAC地址。在不同的子网或网络之间,需要使用其他协议来解决路由和跨网络的问题。

为什么是缓存表?

ARP缓存表是为了在局域网内加速IP地址与MAC地址的映射解析,从而提高通信的效率。然而,为了保证网络的稳定性和适应网络中设备的变化,ARP缓存表设置了缓存时间而不是一直有效。

以下是为什么需要ARP缓存表和缓存时间的原因:

  1. 加速解析: 在通信中,频繁地查询和解析IP地址与MAC地址的映射会带来不小的开销。通过使用ARP缓存表,可以将已经解析过的映射关系存储起来,避免每次通信都需要发送ARP请求来获取MAC地址。这样可以大大提高通信的速度和效率。

  2. 网络拓扑变化: 在一个局域网内,设备的连接状态可能会发生变化,比如设备的上线、下线、IP地址的变更等。如果ARP缓存表一直有效,当网络中的设备状态发生变化时,缓存表中的映射关系可能会变得不准确甚至错误。为了适应这种变化,设置缓存时间可以定期清除旧的映射关系,从而使得ARP缓存表能够及时反映网络中的实际情况。

  3. IP地址重用: 在一些情况下,同一个IP地址可能会被不同的设备使用,尤其是在移动设备、虚拟化环境等场景下。如果ARP缓存表一直有效,可能会导致过期的MAC地址与新的设备关联,从而导致通信错误。设置缓存时间可以确保过期的映射关系能够及时清除,避免这种问题。

综合上述原因,为ARP缓存表设置缓存时间是为了保证网络的稳定性、准确性和适应性。合理的缓存时间可以在一定程度上平衡缓存效果和适应网络变化的需求。一般来说,缓存时间会根据网络的特点和使用情况进行调整。

5.3 数据报格式

ARP协议数据报格式描述了在ARP消息中包含的字段和信息。ARP数据报格式通常在以太网帧内,因为ARP是在数据链路层运行的协议。下面是ARP协议数据报的基本格式:

  1. 硬件类型(Hardware Type): 指定硬件地址的类型,通常为以太网,其值为1。

  2. 协议类型(Protocol Type): 指定网络层协议的类型,如IPv4,其值为0x0800。

  3. 硬件地址长度(Hardware Address Length): 指定硬件地址的长度,对于以太网MAC地址来说,通常是6。

  4. 协议地址长度(Protocol Address Length): 指定协议地址的长度,对于IPv4地址来说,通常是4。

  5. 操作码(Operation Code): 指示此ARP数据报是ARP请求还是ARP响应。例如,1表示ARP请求,2表示ARP响应。

  6. 发送者硬件地址(Sender Hardware Address): 发送ARP消息的主机的物理硬件地址(MAC地址)。

  7. 发送者协议地址(Sender Protocol Address): 发送ARP消息的主机的协议地址,通常是IP地址。

  8. 目标硬件地址(Target Hardware Address): 目标主机的物理硬件地址。在ARP请求中,通常是未知(全0)。

  9. 目标协议地址(Target Protocol Address): 目标主机的协议地址,通常是请求中的IP地址。

ARP数据报的具体内容会根据是ARP请求还是ARP响应以及主机的角色而有所不同。ARP请求会包含主机自身的MAC和IP地址以及目标IP地址,而ARP响应会包含目标主机的MAC和IP地址以及发送主机的MAC和IP地址。这些信息共同构成了在局域网中解析IP地址和MAC地址映射的过程。

6、DNS协议

DNS(Domain Name System)技术是为了解决在计算机网络中使用人类可读的域名(例如:www.example.com)与网络设备使用的IP地址之间的映射关系问题而出现的。它在互联网和局域网中发挥着重要的作用。

背景:
早期的互联网使用IP地址来标识网络设备,这些地址是一串数字,不易于人们记忆。随着互联网的扩大和发展,越来越多的人开始使用互联网,但记住大量IP地址变得困难。因此,需要一种能够将易于记忆的域名映射到IP地址的机制。

DNS的作用:

  1. 域名解析: DNS最主要的作用是将人类可读的域名转换成对应的IP地址,以便在网络中定位和访问目标服务器或设备。当你在浏览器中输入一个域名时,浏览器会向DNS服务器发送查询请求,获取该域名对应的IP地址,然后使用该IP地址与服务器进行通信。

  2. 负载均衡: DNS还可以用于实现负载均衡。通过在一个域名下配置多个IP地址,DNS服务器可以根据各服务器的负载情况、地理位置等因素,将请求分发到不同的服务器上,以平衡服务器的负载,提高服务的可用性和性能。

  3. 电子邮件交换: DNS还被用于电子邮件系统中的邮件交换。MX(Mail Exchanger)记录可以指定邮件服务器的地址,以确保邮件能够被正确地投递到目标邮件服务器。

  4. 递归查询和缓存: DNS支持递归查询,这意味着当一个DNS服务器无法直接解析某个域名时,它会向其他DNS服务器发起查询,直到找到能够提供解析结果的DNS服务器。一旦解析结果获得,DNS服务器会将结果保存在缓存中,以便后续查询时快速响应。

  5. 反向解析: 除了将域名解析为IP地址,DNS还支持反向解析,即将IP地址解析为对应的域名。这在一些安全检测和故障排除场景中很有用。

总之,DNS技术的出现解决了网络中域名与IP地址之间的映射问题,使互联网更易于使用和管理。它在现代互联网基础设施中起到了至关重要的作用。

6.1 域名简介

域名是互联网上用于识别和定位网络资源(如网站、服务器、邮件服务器等)的人类可读的字符串。它是代替复杂的IP地址,使人们更容易记住和使用网络资源的方式。

域名通常由多个部分组成,以点号分隔,从右到左依次表示更具体的层级。例如,考虑域名"www.example.com",它可以被分解为以下部分:

  • 最右边的部分是顶级域名(TLD,Top-Level Domain),如.com、.org、.net等。这些域名表示顶级域,由全球互联网管理机构分配和维护。
  • 中间的部分是二级域名(SLD,Second-Level Domain),如example。这是域名的主要部分,通常代表一个组织、公司、个人等。
  • 最左边的部分是三级域名,如www。这通常表示特定的子域,例如“www”通常用于指示网站。

通过将域名与IP地址进行映射,域名系统(DNS)允许人们使用易于记忆的名称来访问互联网上的资源。当你在浏览器中输入一个域名时,计算机会向DNS服务器发送查询请求,以获取该域名对应的IP地址,然后使用这个IP地址与服务器进行通信。

域名的出现大大简化了人们在互联网上的浏览、通信和交流,使互联网更加用户友好。

6.2 域名解析

域名解析是将人类可读的域名转换为计算机可识别的IP地址的过程。这个过程涉及到DNS(Domain Name System)服务器的协作,以便找到与域名对应的IP地址。以下是域名解析的基本过程,以一个示例来帮助理解:

假设你在浏览器中输入了域名 “www.example.com”,浏览器需要获取与该域名对应的IP地址,以便访问网站。

  1. 本地缓存查找: 浏览器首先会检查自己的本地缓存,看看是否已经存储了域名 “www.example.com” 的IP地址。如果有,浏览器就可以直接使用这个IP地址来访问网站,无需进行后续的解析过程。

  2. 本地主机文件查找: 如果本地缓存中没有找到对应的IP地址,浏览器会查找操作系统的本地主机文件(通常是"hosts"文件),看看是否在这个文件中设置了 “www.example.com” 的IP地址映射。这是一种常见的域名解析方式,用于本地网络环境或测试场景。

  3. DNS查询: 如果在本地缓存和主机文件中都找不到域名的IP地址,浏览器会向本地网络中的DNS解析器发送查询请求,询问 “www.example.com” 的IP地址。

  4. 本地DNS解析器查询: 本地DNS解析器通常由你的ISP(互联网服务提供商)或其他网络管理员提供。它会检查自己的缓存,如果有对应的IP地址,则返回给浏览器。

  5. 根域名服务器查询: 如果本地DNS解析器没有域名的IP地址,它会向互联网上的根域名服务器发送查询请求。根域名服务器是DNS层次结构的顶级,它提供顶级域名(TLD)的IP地址信息。

  6. TLD域名服务器查询: 根域名服务器返回一个指向顶级域名服务器的IP地址。本地DNS解析器随后会查询相应的顶级域名服务器(如.com域名服务器)。

  7. 权威域名服务器查询: 顶级域名服务器返回一个指向 “example.com” 的权威域名服务器的IP地址。本地DNS解析器继续向权威域名服务器查询 “www.example.com” 的IP地址。

  8. 解析成功: 权威域名服务器返回了 “www.example.com” 的IP地址,本地DNS解析器将该IP地址返回给浏览器。浏览器可以使用这个IP地址来与服务器建立连接并获取网站内容。

总结起来,域名解析是一个多级查询的过程,涉及本地缓存、主机文件、本地DNS解析器、根域名服务器、顶级域名服务器和权威域名服务器等多个步骤,最终将域名映射到对应的IP地址。这个过程确保了你可以使用易于记忆的域名来访问互联网上的资源。

浏览器中输入url后会发生什么?

在浏览器中输入URL(统一资源定位符)并按下回车键后,浏览器会启动一系列步骤来获取和显示所请求的网页。以下是详细的流程:

  1. URL解析: 浏览器会解析输入的URL,分解成不同的部分,如协议(如http、https)、域名、路径、查询参数等。

  2. 域名解析: 浏览器会使用域名解析流程,向本地缓存、主机文件和DNS服务器查询,以获取所输入域名对应的IP地址。这是为了找到要请求的服务器的位置。

  3. 建立TCP连接: 一旦浏览器获得服务器的IP地址,它会尝试建立与服务器的TCP连接。TCP是一种传输层协议,用于可靠地传输数据。

  4. 发起HTTP请求: 一旦TCP连接建立,浏览器会发送HTTP请求,其中包含请求类型(GET、POST等)、路径、查询参数、请求头等。这个请求会发送给服务器,服务器会开始处理这个请求。

  5. 服务器处理请求: 服务器接收到浏览器发送的HTTP请求后,会根据请求的内容进行相应的处理。这可能涉及从服务器上获取数据、查询数据库、生成动态内容等操作。

  6. 服务器响应: 服务器会生成一个HTTP响应,其中包含响应状态码、响应头和响应体。响应状态码表示请求是否成功,响应头包含一些与响应相关的元数据,而响应体包含了要返回给浏览器的数据。

  7. 数据传输: 一旦服务器生成响应,它会将响应数据传输回浏览器。这个过程是通过之前建立的TCP连接来进行的。

  8. 浏览器渲染: 浏览器接收到响应数据后,会根据响应中的内容类型(如HTML、CSS、JavaScript)开始解析和渲染页面。浏览器会根据HTML构建文档对象模型(DOM),根据CSS进行样式化,执行JavaScript代码等。

  9. 显示页面: 一旦页面解析和渲染完成,浏览器会将最终的页面显示给用户。用户可以看到网页上的文本、图像、链接等内容。

  10. 关闭连接: 当页面完全加载并显示后,浏览器会关闭与服务器的TCP连接,释放资源。

总之,在浏览器中输入URL后,浏览器会执行一系列复杂的步骤,涉及到域名解析、建立连接、发起请求、服务器响应、数据传输、页面渲染等过程,最终将网页呈现给用户。

7、ICMP协议

ICMP(Internet Control Message Protocol)是一种用于在IP网络中传递控制和错误消息的协议。它是在网络层(第三层)上工作的协议,主要用于在互联网中进行网络故障排除、错误通知和网络状态报告。

7.1 功能介绍

ICMP(Internet Control Message Protocol)协议具有多种不同的功能,用于在IP网络中传递控制和错误消息。以下是ICMP协议的一些不同功能:

  1. Echo请求和回应(Ping): ICMP Echo请求和回应用于测试主机或设备的可达性。发送方发送一个ICMP Echo请求消息,目标主机如果正常工作,会返回一个ICMP Echo回应消息,表明它是可达的。这在网络故障排除和监控中很常见。

  2. 网络不可达通知: 当一个IP数据包无法到达目标主机或网络时,路由器或主机会发送ICMP Destination Unreachable消息,通知发送者数据包无法到达目标。这有助于及早发现网络问题。

  3. 超时通知: 如果一个IP数据包在经过路由器时花费的时间超过了预定的时间,路由器会发送ICMP Time Exceeded消息,表明数据包的生存时间已过期,可能存在问题。这可以用于故障排除和网络延迟监测。

  4. 重定向通知: 路由器可以使用ICMP Redirect消息来通知主机发送数据包时更优的路径,以优化数据包的转发。这有助于网络优化和提高数据包传输效率。

  5. 错误报告: ICMP可以用于发送各种错误报告,如源站抑制(Source Quench)消息,表示目标主机或网络的负载过重,请求发送方减缓发送速率。这有助于防止网络拥塞。

  6. MTU路径发现: ICMP协议中的Path MTU Discovery功能允许发送端发现沿途的最小传输单元(Maximum Transmission Unit,MTU),以避免IP分片。这有助于优化数据传输并提高网络性能。

  7. ICMP Redirect: ICMP Redirect消息通知主机发送数据包时更好的路由路径,以减少冗余的数据传输。这在一些网络环境中有助于优化数据传输。

  8. 查询和应答: ICMP还包括用于进行网络设备查询和应答的功能,如ICMP Echo请求和回应。这在网络管理和故障排除中非常有用。

总之,ICMP协议具有多种不同的功能,从测试主机可达性到传递错误和控制信息,以及用于网络优化和管理。这些功能使得ICMP成为了网络层中不可或缺的一部分。

7.2 报文格式

ICMP(Internet Control Message Protocol)报文格式是在IP数据报内部的,它作为IP数据报的数据部分,以便在IP网络中传递控制和错误消息。以下是ICMP报文的基本格式:

  0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Type      |     Code      |           Checksum            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                    Data (variable, if present)                |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

ICMP报文的主要字段如下:

  1. Type(8位): 该字段指示ICMP消息的类型,表示消息的目的和功能。常见的类型包括 Echo Request(8)、Echo Reply(0)、Destination Unreachable(3)、Time Exceeded(11)等。不同的Type值对应不同的功能。

  2. Code(8位): 该字段进一步说明ICMP消息的类型,以提供更多的细节。例如,当Type为 Destination Unreachable 时,Code字段会指示不可达的原因,如网络不可达、主机不可达等。

  3. Checksum(16位): 这是一个校验和字段,用于检测ICMP报文是否在传输过程中发生了错误。发送方在生成ICMP报文时会计算校验和,接收方在接收到报文后也会计算校验和,然后比较两者是否一致。

  4. Data(可变长度): 这是ICMP消息的数据部分,它的长度和内容会根据不同的ICMP消息类型而变化。有些ICMP消息类型可能不包含数据部分。

不同类型的ICMP消息具有不同的格式和数据。例如,Ping消息中的数据部分包含的是发出请求的时间戳,而Destination Unreachable消息可能会包含IP头部和部分原始数据。

总之,ICMP报文格式是通过Type、Code、Checksum和Data字段来表示ICMP消息的类型、细节、校验和和数据部分,从而在IP网络中传递控制和错误消息。

7.3 命令

pingtraceroute 是两个常用的网络诊断命令,用于测试网络连接、测量网络延迟以及跟踪数据包在网络中的路径。它们都是基于ICMP(Internet Control Message Protocol)协议的工具。

  1. ping 命令:
    ping 命令用于测试主机或设备的可达性和响应时间。它通过发送ICMP Echo请求消息到目标主机,并等待目标主机的ICMP Echo回应消息,从而判断目标主机是否可达,以及测量往返时间(Round-Trip Time,RTT)。

    命令格式:ping [目标主机或IP地址]

    示例:ping www.example.com

    输出结果会显示目标主机的IP地址、每个ICMP Echo请求的往返时间、回应次数、丢失的数据包百分比等信息。通过观察回应时间和丢包情况,可以初步判断网络的可用性和延迟。

  2. traceroute 命令:
    traceroute 命令用于跟踪数据包在网络中的路径,显示数据包从发送主机到目标主机的途径。它发送一系列的UDP数据包(或ICMP Echo请求),每个数据包具有逐跳递增的 TTL(Time To Live)值,以便在每一跳上观察路径。

    命令格式:traceroute [目标主机或IP地址]

    示例:traceroute www.example.com

    输出结果会显示每个跳的IP地址、主机名(如果可解析)、往返时间等信息。通过 traceroute 命令,你可以了解数据包在从源主机到目标主机的过程中经过了哪些路由器和网络节点,以及每个跳的延迟情况。

注意:在某些系统上,pingtraceroute 命令可能有不同的选项和语法,具体取决于操作系统和网络工具的版本。在使用这些命令时,你可能需要查看相关文档或使用命令行帮助来了解更多选项和用法。

ping是什么端口?(错误认识)

ping 命令是一种基于 ICMP(Internet Control Message Protocol)的网络工具,用于测试主机的可达性和测量往返时间(Round-Trip Time,RTT)。与许多其他应用程序不同,ping 命令并不使用传统的端口号,而是使用 ICMP 报文。

ICMP 报文是封装在 IP 数据包中的,它们被用于传递网络控制和错误消息。ping 命令发送的是 ICMP Echo 请求消息,这些消息没有像传统的应用程序数据那样使用端口号。相反,ICMP 报文具有自己的类型和代码字段,以及其他一些相关数据。ICMP Echo 请求和回应的目的是测试主机的可达性和测量往返时间,而不涉及传统的端口号。

所以,当你使用 ping 命令时,并不需要指定端口号,因为 ping 使用的是 ICMP 报文,而不是传统的应用程序端口。

8、NAT技术

NAT(Network Address Translation,网络地址转换)技术的背景可以追溯到IPv4(Internet Protocol version 4)地址枯竭的问题。IPv4使用32位的地址,理论上可以支持约42亿个不同的IP地址,但由于互联网的迅速增长和设备的普及,IPv4地址的供应变得不足,这导致了IPv4地址短缺问题。

NAT技术的出现主要是为了应对IPv4地址短缺问题,以及为多个内部设备提供共享单个公共IP地址的需求。在早期互联网的日子里,人们可能只有一台或几台计算机与互联网相连,因此分配公共IP地址的问题不太突出。然而,随着家庭、办公室和数据中心中设备的增加,公共IP地址供应紧张。

NAT技术的背景和发展主要有以下几点:

  1. IP地址枯竭: 随着互联网用户和连接设备的急剧增加,IPv4地址的有限性导致了公共IP地址的短缺。这使得只使用公共IP地址的传统网络架构变得难以维持。

  2. 网络拓扑变化: 传统的网络拓扑是单一的,即内部网络直接连接到公共互联网,而没有对内部网络的保护。这在安全性和隐私方面存在问题。

  3. 私有IP地址的引入: 为了缓解IPv4地址短缺问题,私有IP地址范围(如10.0.0.0/8、192.168.0.0/16等)被引入,允许内部网络使用非唯一的IP地址。然而,私有IP地址在互联网上无法直接路由。

NAT技术的出现解决了上述问题。通过在内部网络和外部互联网之间设置NAT设备,内部设备可以使用私有IP地址,而NAT设备负责将内部设备的请求映射到一个或多个公共IP地址,从而实现多个内部设备共享单个公共IP地址的功能。这种技术可以将内部网络中的多个设备映射到一个公共IP地址,节约了IPv4地址的使用,并提高了网络的安全性和隐私保护。

总之,NAT技术的背景源于IPv4地址短缺问题,它应对了IP地址枯竭、网络拓扑变化和私有IP地址的引入等挑战,为多个内部设备共享公共IP地址提供了解决方案。

8.1 IP转换

8.1.1 动静态转换

NAT(Network Address Translation,网络地址转换)技术的主要目标是将内部网络中的私有IP地址映射到一个或多个公共IP地址,从而实现多个内部设备共享单个公共IP地址的功能。NAT技术可以分为两种常见的转换方式:静态NAT和动态NAT。

下面我将分别解释这两种NAT技术的IP转换过程,并通过举例进行分析:

1. 静态NAT(Static NAT):
静态NAT是一种一对一的IP地址映射方式,将内部设备的私有IP地址映射到一个固定的公共IP地址。每个内部设备都有一个固定的映射关系,这使得内部设备可以与外部网络进行通信,而外部网络只能看到固定的公共IP地址。

示例:
假设你有一个家庭网络,内部有两台电脑分别使用私有IP地址 192.168.1.2 和 192.168.1.3。你想通过静态NAT将它们映射到单个公共IP地址 203.0.113.1。当这两台电脑与外部服务器通信时,外部服务器只会看到它们的通信来自于公共IP地址 203.0.113.1。

2. 动态NAT(Dynamic NAT):
动态NAT是一种多对多的IP地址映射方式,内部设备在需要访问外部网络时,NAT设备会动态地从一个可用的公共IP地址池中分配一个公共IP地址,然后将内部设备的私有IP地址映射到该公共IP地址。每个内部设备在每次通信时都会分配一个临时的公共IP地址。

示例:
假设你有一个公司网络,内部有多台电脑。你设置了一个公共IP地址池,其中包含几个可用的公共IP地址。当这些电脑与外部服务器通信时,NAT设备会从公共IP地址池中选择一个可用的公共IP地址,将内部电脑的私有IP地址映射到该公共IP地址,以便进行通信。

总之,NAT技术通过静态或动态的方式,将内部设备的私有IP地址映射到公共IP地址,实现内部设备与外部网络的通信。不同的NAT方式和配置会影响内部设备与外部网络之间的IP转换过程。

8.1.2 地址转换表

“地址转换表”(Address Translation Table)是一个用来记录NAT(Network Address Translation,网络地址转换)设备所进行的IP地址映射的表格。在进行NAT转换时,NAT设备会维护这个表格,以便在内部私有IP地址与外部公共IP地址之间进行映射。

地址转换表中通常包含以下信息:

  1. 内部私有IP地址: 这是NAT设备内部网络中的设备所使用的私有IP地址。

  2. 外部公共IP地址: 这是NAT设备与外部网络通信时使用的公共IP地址。

  3. 端口信息: 在一些情况下,NAT还需要映射端口号,以确保不同的内部设备之间能够正确地共享同一个公共IP地址。这通常用于处理多个内部设备同时发起连接的情况。

  4. 映射状态: 表示映射的状态,可以是临时映射、永久映射等。

  5. 超时信息: 对于临时映射,NAT设备可能会记录映射的超时时间,以便在一段时间后自动解除映射,释放资源。

地址转换表的维护和管理对于NAT设备的正常运行非常重要。当内部设备发起通信请求时,NAT设备会查找地址转换表,检查目标IP地址是否已经有对应的映射,如果有,就会将通信请求中的源IP地址和端口号替换成映射后的地址和端口号。这样,外部网络收到的数据包就会被正确地路由到内部设备。

需要注意的是,地址转换表的大小和容量可能会受限于NAT设备的性能和配置。当内部设备数量增加或者连接数增多时,地址转换表的管理可能会变得复杂。

8.2 NAPT

NAPT(Network Address and Port Translation),也称为PAT(Port Address Translation),是NAT(Network Address Translation,网络地址转换)的一种扩展形式,它在解决IP地址短缺问题的基础上,进一步解决了端口资源的短缺问题。NAPT通过在内部网络中使用私有IP地址的同时,使用不同的端口号来映射多个内部设备到一个公共IP地址,从而实现多对多的IP地址与端口映射。

NAPT主要解决了以下两个问题:

  1. 端口资源短缺: 在有限的公共IP地址下,如果多个内部设备需要与外部网络通信,传统的NAT技术可能面临端口资源的短缺问题。每个内部设备需要一个唯一的端口,而公共IP地址数量有限,因此需要一种方法来合理分配端口资源。

  2. 多个内部设备共享公共IP地址: NAPT技术使得多个内部设备可以共享一个公共IP地址,这在IPv4地址短缺的环境中尤为重要。NAPT通过使用不同的端口号来区分不同的内部设备,从而实现多对多的映射关系。

NAPT是如何解决这些问题的呢?让我们通过一个示例来解释:

假设有一个内部网络,内部有多台计算机使用私有IP地址(例如,192.168.1.2、192.168.1.3等),而只有一个公共IP地址(例如,203.0.113.1)可供外部网络使用。使用NAPT技术,路由器或NAT设备会维护一个地址转换表,将每个内部设备的私有IP地址与不同的端口号相结合,映射到一个公共IP地址上。

例如,当内部设备A(私有IP:192.168.1.2)发起请求时,NAPT设备会将请求从内部IP地址转换为公共IP地址(203.0.113.1),并为该请求分配一个端口号(例如,端口号10000)。当内部设备B(私有IP:192.168.1.3)发起请求时,NAPT设备会将请求从内部IP地址转换为同一公共IP地址(203.0.113.1),但分配一个不同的端口号(例如,端口号20000)。这样,外部网络上的服务器就可以通过公共IP地址和不同的端口号区分不同的内部设备,并将数据包正确地传递到相应的设备。

总之,NAPT通过在一个公共IP地址上使用不同的端口号,实现了多对多的IP地址与端口映射,解决了端口资源短缺和多个内部设备共享公共IP地址的问题。这种技术在IPv4地址短缺的情况下非常有用。

8.3 NAT技术缺陷

虽然NAT技术在解决IPv4地址短缺问题和实现多个内部设备共享公共IP地址方面具有很多优势,但它确实存在一些限制和挑战。

  1. 无法从NAT外部向内部服务器建立连接: **由于NAT设备会对外部通信请求进行地址转换,将内部设备的私有IP地址映射为公共IP地址,外部网络无法直接访问内部设备的私有IP地址。**这会导致从外部向NAT内部的服务器建立连接变得困难。为了解决这个问题,通常需要配置端口映射(端口转发)规则,将特定的外部端口映射到内部服务器的私有IP地址和端口上。

  2. 转换表的生成和销毁需要额外开销: NAT设备需要维护地址转换表,记录内部设备与公共IP地址之间的映射关系。这个过程需要消耗一定的内存和计算资源。当内部设备的数量增加或连接数增多时,转换表的管理和更新可能会产生额外的开销,影响NAT设备的性能。

  3. 通信过程中NAT设备异常会中断连接: 如果NAT设备出现异常,无论是硬件故障还是软件故障,都可能导致地址转换表的失效。在这种情况下,所有与NAT设备相关的TCP连接都可能会断开,影响通信的连续性和可靠性。即使存在热备(冗余备份)的NAT设备,故障切换可能会导致短暂的连接中断。

总之,尽管NAT技术在特定情况下能够提供一定的优势和便利,但它确实存在一些限制,这些限制可能需要通过合适的配置和管理来缓解。在设计和部署网络时,需要综合考虑NAT技术的优势和限制,以确保网络的性能、可用性和安全性。

8.4 代理服务器

8.4.1 与NAT异同

特点NAT代理服务器
作用地址转换,允许多个内部设备共享公共IP地址转发请求、隐藏客户端/服务器身份、提供额外功能
使用场景网络路由器、防火墙、网络设备Web代理、反向代理、负载均衡、缓存、安全性等
转发方向从内部到外部可以是正向代理(从客户端到服务器)或反向代理(从服务器到客户端)
连接通常涉及TCP/UDP连接通常涉及应用层协议,如HTTP、HTTPS等
地址转换将内部私有IP地址映射为公共IP地址不直接涉及IP地址转换,但可能涉及端口映射
隐藏内部网络是,通过转换隐藏内部网络细节是,隐藏了服务器的真实IP地址和身份
解决问题解决IPv4地址短缺问题,共享IP地址提供安全性、负载均衡、缓存、访问控制等功能
可用性影响如果NAT设备出现故障,可能会中断连接如果代理服务器出现故障,可能会中断请求
部署位置通常是在网络设备中部署,如路由器、防火墙等可以是独立的硬件设备,也可以是软件程序
通信过程控制通过地址转换控制通信通过转发和过滤控制通信

请注意,尽管这个表格总结了NAT和代理服务器的一些主要特点,但实际上每种技术在不同场景和用途中都有更详细的应用和差异。在设计网络架构和选择合适的技术时,需要根据具体的需求和情况进行详细的考虑和分析。

8.4.2 正反向代理

代理服务器是一种应用非常广泛的技术,可以在不同场景下提供多种功能。翻墙和负载均衡正是代理服务器在不同领域中的两个重要应用。

  • 翻墙(广域网中的代理): 在网络中,特别是在防火墙、网络限制等限制下,访问特定网站或服务可能会受到限制。代理服务器可以用作翻墙工具,让用户通过代理服务器访问被封锁的内容,同时隐藏用户的真实IP地址,从而绕过网络限制。这类代理服务器通常是正向代理,代表用户访问外部网络。

  • 负载均衡(局域网中的代理): 在局域网中,当有多个后端服务器提供相同的服务时,负载均衡代理服务器可以将客户端请求分发到不同的服务器上,以平衡服务器负载,提高性能和可用性。这种代理服务器通常是反向代理,代表外部客户端访问内部服务器,同时隐藏服务器的真实IP地址。

代理服务器可以进一步分为正向代理和反向代理:

  • 正向代理(Forward Proxy): 正向代理服务器代表客户端发起请求,将请求转发给目标服务器,然后将响应返回给客户端。这种代理服务器通常位于客户端和目标服务器之间,隐藏客户端身份。用户可以通过正向代理访问外部网络资源,同时代理服务器可以对请求进行过滤、缓存等处理。

  • 反向代理(Reverse Proxy): 反向代理服务器代表服务器接收客户端请求,然后将请求转发到后端服务器,将后端服务器的响应返回给客户端。这种代理服务器通常位于服务器端,隐藏后端服务器的真实IP地址和身份。反向代理可以用于负载均衡、安全性、缓存等目的。

总之,代理服务器是一种多功能的技术,可以根据需求在不同环境中提供访问控制、隐私保护、性能优化等功能。不同类型的代理服务器在实现方式和应用场景上有所不同,但它们都是网络架构中的重要组成部分。

相关文章:

【网络基础】数据链路层

【网络基础】数据链路层 文章目录 【网络基础】数据链路层1、对比网络层2、以太网2.1 基本概念2.2 类似技术2.3 以太网帧 3、MAC地址对比IP地址 4、MTU4.1 对IP协议影响4.2 对UDP协议影响4.3 对TCP协议影响4.4 地址、MTU查看 5、ARP协议5.1 协议作用5.2 协议工作流程5.3 数据报…...

云计算|OpenStack|使用VMware安装华为云的R006版CNA和VRM---初步使用(二)

前言: 在前面一篇文章云计算|OpenStack|使用VMware安装华为云的R006版CNA和VRM---初始安装(一)_华为cna_晚风_END的博客-CSDN博客 介绍了基于VMware虚拟机里嵌套部署华为云的云计算,不过仅仅是做到了在VRM的web界面添加计算节点…...

Python typing函式庫和torch.types

Python typing函式庫和torch.types 前言typingSequence vs IterableCallableUnionOptionalFunctionsCallableIterator/generator位置參數 & 關鍵字參數 Classesself自定義類別ClassVar\_\_setattr\_\_ 與 \__getattr\_\_ torch.typesbuiltins 參數前的* …...

UE5 编程规范

官方文档 使用现代C编程标准, 使用前沿C标准库版本. 1. 类中按照先 Public 后 Private 去写 2. 继承自 UObject 的类都以 U 前缀 3. 继承自 AActor 的类都以 A 前缀 4. 继承自 SWidget 的类都以 S 前缀 5. 模板以 T 前缀 6. 接口以 I 前缀 7. 枚举以 E 前缀 8. 布尔值…...

交互消息式IMessage扩展开发记录

IMessage扩展简介 iOS10新加入的基于iMessage的应用扩展,可以丰富发送消息的内容。(分享表情、图片、文字、视频、动态消息;一起完成任务或游戏。) 简单的将发送的数据内型分为三种: 1.贴纸Stickers; 2.交…...

软件团队降本增效-建立需求评估体系

需求对于软件开发来说是非常重要的输入,它们直接决定了软件的产品形态、代码数量和质量。如果需求不清晰、不完善,或者存在逻辑冲突,将会导致软件质量迅速下降,增加代码耦合性和开发成本。 在开发过程中,对需求的产品…...

npm yarn pnpm 命令集

npm 安装依赖 npm install 安装某个依赖 npm install xxx7.6.3 安装到全局(dependencies) npm install xxx7.6.3 -S 安装到线下(devDependencies) npm install xxx7.6.3 -D 卸载某个依赖 npm uninstall xxx 卸载全局依…...

python 开发环境(PyCharm)搭建指南

Python 的下载并安装 参考:Python基础教程——搭建Python编程环境 下载 Python Python 下载地址:官网 (1)点击【Downloads】>>>点击【Windows】>>>点击【Python 3.x.x】下载最新版 Python; Pyt…...

springboot里 运用 easyexcel 导出

引入pom <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency>运用 import com.alibaba.excel.EasyExcel; import org.springframework.stereotype.Contr…...

一“码”当先,PR大征集!2023 和RT-Thread一起赋能开源!

活动地址&#xff1a;https://club.rt-thread.org/ask/article/3c7cf7345ca47a18.html 活动介绍 「一“码”当先&#xff0c;PR大征集&#xff01;」是一项为了鼓励开发者积极参与开源软件开发维护的活动。 你可在Github RT-Thread&#xff08; https://github.com/RT-Thread …...

jmeter模拟多用户并发

一、100个真实的用户 1、一个账号模拟100虚拟用户同时登录和100账号同时登录 区别 &#xff08;1&#xff09;1个账号100个人用&#xff0c;同时登录&#xff1b; &#xff08;2&#xff09;100个人100个账号&#xff0c;同时登录。 相同 &#xff08;1&#xff09;两个都…...

澎峰科技|邀您关注2023 RISC-V中国峰会!

峰会概览 2023 RISC-V中国峰会&#xff08;RISC-V Summit China 2023&#xff09;将于8月23日至25日在北京香格里拉饭店举行。本届峰会将以“RISC-V生态共建”为主题&#xff0c;结合当下全球新形势&#xff0c;把握全球新时机&#xff0c;呈现RISC-V全球新观点、新趋势。 本…...

【系统架构】系统架构设计之数据同步策略

文章目录 一、介绍1.1、分布式系统中的数据同步定义1.2、为何数据同步如此关键1.3、数据同步策略简介 二、为什么需要数据同步2.1、提高系统可用性2.2、备份与灾难恢复2.3、提高性能2.4、考虑地理位置&#xff08;如使用CDN&#xff09; 三、同步备份3.1、定义和概述3.2、工作原…...

Linux内核学习笔记——ACPI命名空间

所有定义块都加载到单个命名空间中。命名空间 是由名称和路径标识的对象层次结构。 以下命名约定适用于 ACPI 中的对象名称 命名空间&#xff1a; 所有名称的长度均为 32 位。 名称的第一个字节必须是“A”-“Z”、“_”之一。 名称的每个剩余字节必须是“A”-“Z”、“0”之…...

使用 OpenCV Python 实现自动图像注释工具的详细步骤--附完整源码

注释是深度学习项目中最关键的部分。它是模型学习效果的决定因素。然而,这是非常乏味且耗时的。一种解决方案是使用自动图像注释工具,这大大缩短了时间。 本文是pyOpenAnnotate系列的一部分,其中包括以下内容。 1、使用 OpenCV 进行图像注释的路线图。 2、pyOpenAnnotate工…...

RunnerGo中WebSocket、Dubbo、TCP/IP三种协议接口测试详解

大家好&#xff0c;RunnerGo作为一款一站式测试平台不断为用户提供更好的使用体验&#xff0c;最近得知RunnerGo新增对&#xff0c;WebSocket、Dubbo、TCP/IP&#xff0c;三种协议API的测试支持&#xff0c;本篇文章跟大家分享一下使用方法。 WebSocket协议 WebSocket 是一种…...

【Java 动态数据统计图】动态数据统计思路案例(动态,排序,数组)一(112)

需求&#xff1a;&#xff1a; 有一个List<Map<String.Object>>,存储了某年某月的数据&#xff0c; 数据是根据用户查询条件进行显示的&#xff1b;所以查询的数据是动态的&#xff1b;需按月份统计每个年月数据出现的次数&#xff0c;并且按照月份排序&#xff1…...

kafka踩坑

问题&#xff1a;项目中用到kafka作为消息中间件&#xff0c;因为现在是开发阶段&#xff0c;试了一次没问题之后就没在管&#xff0c;今天又要测试kafka相关功能&#xff0c;发现消息发送者能够正常发送消息&#xff0c;但是消费者怎么也就收不到数据。然后经过各种百度进行了…...

让你专注于工作的电脑桌面日程提醒软件

在现代职场中&#xff0c;上班族们常常在繁忙的工作中会遇到各种各样的事情干扰。比如&#xff0c;当我们专注于完成重要的报告时&#xff0c;却又有同事来询问问题&#xff1b;在准备去会议事项时&#xff0c;手机却突然收到了一系列的短信和通知。这些干扰不仅浪费了我们的时…...

62页智慧产业园区数字化综合解决方案PPT

导读&#xff1a;原文《62页智慧产业园区数字化综合解决方案PPT》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 喜欢文章&#xff0c;您可以关注评论转发本文&#…...

苹果开发者账号注册方法简明指南

注册苹果开发者账号的方法 在2020年以前&#xff0c;注册苹果开发者账号后&#xff0c;就可以生成证书。 但2020年后&#xff0c;因为注册苹果开发者账号需要使用Apple Developer app注册开发者账号&#xff0c;所以需要缴费才能创建ios证书了。 所以新政策出来后&#xff0c;…...

SQL-每日一题【1321. 餐馆营业额变化增长】

题目 表: Customer 你是餐馆的老板&#xff0c;现在你想分析一下可能的营业额变化增长&#xff08;每天至少有一位顾客&#xff09;。 计算以 7 天&#xff08;某日期 该日期前的 6 天&#xff09;为一个时间段的顾客消费平均值。average_amount 要 保留两位小数。 结果按 …...

PyCharm PyQt5 开发环境搭建

环境 python&#xff1a;3.6.x PyCharm&#xff1a;PyCharm 2019.3.5 (Community Edition) 安装PyQT5 pip install PyQt5 -i https://pypi.douban.com/simplepip install PyQt5-tools -i https://pypi.douban.com/simple配置PyCharm PyQtUIC Program &#xff1a;D:\Pytho…...

2023-08-17 Untiy进阶 C#知识补充8——C#中的日期与时间

文章目录 一、名词概念二、DateTime三、TimeSpan 一、名词概念 &#xff08;一&#xff09;格里高利历 ​ 格里高利历一般指公元&#xff0c;即公历纪年法。目前我们所说公历&#xff0c;就是格里高利历。 ​ 比如 2022 年就是从公元元年开始算起的两千二十二年。 &#xf…...

SPSS--如何使用分层分析以及分层分析案例分享

分层分析&#xff1a;将资料按某个或某些需要控制的变量的不同分类进行分层&#xff0c;然后再估计暴露因子与某结局变量之间关系的一种资料分析方法。 分层分析的最重要的用途是评估和控制混杂因子所致的混杂偏倚。通过按混杂因子分层&#xff0c;可使每层内的两个比较组在所控…...

时序数据库influxdb笔记

官方资料 https://docs.influxdata.com/influxdb/v2.7/install/?tLinux https://www.influxdata.com/influxdb/ 安装 1、linux平台下 1&#xff09;下载 2&#xff09;解压 3&#xff09;添加账户&#xff08; adduser influx&#xff09; 4&#xff09;设置目录权限 5…...

8月18日上课内容 Haproxy搭建Web群集

本章结构 课程大纲 Haproxy调度算法 常见的web集群调度器 目前常见的Web集群调度器分为软件和硬件软件 通常使用开源的LVS、Haproxy、Nginx 硬件一般使用比较多的是F5&#xff0c;也有很多人使用国内的一些产品&#xff0c;如梭子鱼、绿盟等 Haproxy应用分析 LVS在企业应用中…...

【高阶数据结构】红黑树详解

文章目录 前言1. 红黑树的概念及性质1.1 红黑树的概念1.2 红黑树的性质1.3 已经学了AVL树&#xff0c;为啥还要学红黑树 2. 红黑树结构的定义3. 插入&#xff08;仅仅是插入过程&#xff09;4. 插入结点之后根据情况进行相应调整4.1 cur为红&#xff0c;p为红&#xff0c;g为黑…...

树莓牌4B安装Centos8

准备工作 镜像&#xff1a;https://people.centos.org/pgreco/CentOS-Userland-8-stream-aarch64-RaspberryPI-Minimal-4/ 烧制工具&#xff1a;https://www.raspberrypi.com/software/ 初始化 将上述工具烧制好的SD卡插入树莓派&#xff0c;通电。通过网线将树莓派与电脑连…...

SQL Monitor Crack,PostgreSQL监控的传入复制图表

SQL Monitor Crack,PostgreSQL监控的传入复制图表  现在&#xff0c;您可以在从Estate页面导出的Microsoft Excel报告的摘要标题中看到UTC偏移量。 添加了PostgreSQL监控的传入复制图表。 Microsoft PowerShell API现在支持将使用New-SqlMonitorWindowsHost和New-SqlMonitorin…...

软件测试技术之单元测试—工程师 Style 的测试方法(3)

如何设计单元测试&#xff1f; 单元测试设计方法 单元测试用例&#xff0c;和普通测试用例的设计&#xff0c;没有太多不同&#xff0c;常见的就是等价类划分、边界值分析等。而测试用例的设计其实也是开发者应该掌握的基本技能。 等价类划分 把所有输入划分为若干分类&…...

Ubuntu中安装OpenSSL

文章目录 一、前期准备1.1 压缩包下载1.2 gcc, make等的安装二、安装配置 一、前期准备 1.1 压缩包下载 在安装openssl之前&#xff0c;我们需要下载对应的压缩包 https://www.openssl.org/source/openssl-3.0.1.tar.gz 此压缩包可以选择win上下载后解压再复制到本地虚拟机中…...

CW4-6A-S、CW4-10A-S、CW4-20A-S、CW4-30A-S螺栓式滤波器

CW3L2-3A-S、CW3L2-6A-S、CW3L2-10A-S、CW3L2-20A-S CW3-3A-S、CW3-6A-S、CW3-10A-S、CW3-20A-S、CW3-30A-S CW4EL2-3A-S、CW4EL2-6A-S、CW4EL2-10A-SCW4EL2-20A-S、CW4EL2-30A-S CW4E-3A-S、CW4E-6A-S、CW4E-10A-S、CW4E-20A-S、CW4E-30A-S CW4E-40A-S(001)、CW4E-50A-S(0…...

课程项目设计--项目设计--宿舍管理系统--vue+springboot完成项目--项目从零开始

写在前面&#xff1a; 本文是从项目设计到完成开始写的&#xff0c;本来这个项目基础功能是做完了的&#xff0c;但是之前时间紧张想从头做起了。之前一周写前端后端累死了. 设计是关键&#xff0c;这一篇主讲设计。可能后面会有修改&#xff0c;本人实力有限,学习的也是别人的…...

【Linux】Linux下常用搜索命令及其常用选项小结

0x00 前言 版本信息&#xff1a;Ubuntu 18.04.6 LTS 最后更新日期&#xff1a;2023.8.18 0x01 Linux下常用搜索命令及其常用选项小结 1.find &#xff08;1&#xff09;find path -name filename &#xff1a;在指定目录path查找名为filename 文件&#xff0c;文件名可用*匹…...

web APIs-练习五

5秒自动关闭的广告&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…...

MySQL——基础——外连接

一、外连接查询语法&#xff1a;(实际开发中,左外连接的使用频率要高于右外连接) 左外连接 SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件...; 相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据 右外连接 SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN …...

spring boot 实现Redisson分布式锁及其读写锁

分布式锁&#xff0c;就是控制分布式系统中不同进程共同访问同一共享资源的一种锁的实现。 1、引入依赖 <dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>3.15.5</versio…...

java-IONIO

一、JAVA IO 1.1. 阻塞 IO 模型 最传统的一种 IO 模型&#xff0c;即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后&#xff0c;内 核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待数据就绪&#xff0c;而用户线程就会处于阻塞状态&#xff0c;用户线…...

Python学习笔记_基础篇(十一)_socket编程

python 线程与进程简介 进程与线程的历史 我们都知道计算机是由硬件和软件组成的。硬件中的CPU是计算机的核心&#xff0c;它承担计算机的所有任务。 操作系统是运行在硬件之上的软件&#xff0c;是计算机的管理者&#xff0c;它负责资源的管理和分配、任务的调度。 程序是运行…...

C#8.0本质论第三章--更多数据类型

C#8.0本质论第三章–更多数据类型 3.1类型的划分 一个类型要么是值类型&#xff0c;要么是引用类型。区别在于拷贝方式&#xff1a;值类型数据总是拷贝值&#xff1b;引用类型的数据总是拷贝引用。 3.1.1值类型 3.1.2引用类型 引用类型的变量存储对数据存储位置的引用。 3.…...

浅拷贝与深拷贝

作者简介&#xff1a; zoro-1&#xff0c;目前大一&#xff0c;正在学习Java&#xff0c;数据结构等 作者主页&#xff1a; zoro-1的主页 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01;&#x1f496;&#x1f496; 浅拷贝与深拷贝 浅拷贝浅拷贝定义浅拷贝代码演示浅…...

背包 问题

1、背包问题 1.1、01背包 题目&#xff1a; 有n件物品和一个容量为m的背包&#xff0c;第i件物品的体积是v[ i ]&#xff0c;价值是w[ i ]&#xff0c;每件物品只有一件&#xff0c;求在不超过背包容量的前提下&#xff0c;可以放的物品的最大价值是多少 基本思路&#xff…...

蓝牙资讯|安卓将加强耳机音量监控,耳机查找功能将更加普遍

为了保护用户的听力健康&#xff0c;Android 14 将增加一项新功能&#xff0c;当用户使用耳机听音乐时&#xff0c;如果音量过高或持续时间过长&#xff0c;系统会发出警告&#xff0c;并自动降低音量。这个功能叫做“耳机音量过高警告&#xff08;headphone loud sound alert&…...

vue,element。监听快捷键粘贴图片,添加到el-upload的列表。

在①中&#xff0c;粘贴图片&#xff0c;图片能够自动添加到底下el-upload组件的文件列表②。 // 对应① <el-card><el-tooltip content"粘贴图片至此" placement"top"><input readonly class"pasteImg" paste.prevent"hand…...

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)

时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价) 目录 时序预测 | MATLAB实现基于CNN-BiLSTM卷积双向长短期记忆神经网络的时间序列预测-递归预测未来(多指标评价)预测结果基本介绍程序设计参考资料 预测结果 基本介绍…...

编织梦想:SpringBoot AOP 教程与自定义日志切面完整实战

什么是 AOP AOP 是指通过预编译方式和运行期动态代理的方式&#xff0c;在不修改源代码的情况下对程序进行功能增强的一种技术。AOP 不是面向对象编程&#xff08;OOP&#xff09;的替代品&#xff0c;而是 OOP 的补充和扩展。它是一个新的维度&#xff0c;用来表达横切问题&a…...

AssignableTypeFilter 和 AnnotationTypeFilter什么区别?

在 Spring 框架中&#xff0c;AssignableTypeFilter 和 AnnotationTypeFilter 都是用于在组件扫描过程中进行过滤的工具类&#xff0c;用于筛选出特定类型或特定注解的类。它们的主要区别在于筛选的侧重点和使用方式。 AssignableTypeFilter&#xff1a; AssignableTypeFilte…...

TCP-事件模型

#include "main.h"VOID Server_write_error() {}/*1.打开网络库 * 2.校验网络库版本 * 3.创建SOCKET * 4.绑定IP地址和端口 * 5.开始监听 * 6.创建客户端socket/接受链接 * 7.与客户端收发消息 * 8.(6.7)两步的函数accept&#xff0c;send,recv 有堵塞&#xff0c;可…...

typescript 声明文件

作用 1、为已存在js库提供类型信息&#xff0c;这样在ts项目中使用这些库时候&#xff0c;就像用ts一样&#xff0c;会有代码提示、类型保护等机制 2、项目内共享类型&#xff1a;如果多个.ts文件中都用到同一个类型&#xff0c;此时可以创建.d.ts文件提供该类型&#xff0c;…...