计算机网络——第三层:网络层

1. IP数据报

1.1 IPV4数据报

1.1.1 IPv4数据报的结构

        如图按照RFC 791规范显示了一个IPv4数据包头部的不同字段

        IPv4头部通常包括以下部分:

1.1.1.1 版本(Version)

        指明了IP协议的版本,IPv4表示为4。

1.1.1.2 头部长度(IHL, Internet Header Length)

        指明了头部的长度,以32位的字为单位。

1.1.1.3 服务类型(Type of Service)

        指明了数据包的服务质量。IPv4头部中的“服务类型”(Type of Service,简称ToS)字段,它的设计目的是让发送者指明数据包的处理优先级和要求:

1.1.1.3.1 优先级(Priorité)        

        也称为“先行权”或“优先权”,它通常被设置为0,但可以被用来标记数据包在网络中的处理优先级。

1.1.1.3.2 服务类型

        分为各种不同的位,每个位表示不同的服务质量需求,如延迟(délai)、吞吐量(débit)、可靠性(fiabilité)和成本(coût)。这些位可以设置为1或0,以指示特定的服务需求。

        ToS的使用并不普遍,因为不是所有的网络设备都会利用这些信息。

        预置位可以被用于在网络中的路由器上标记流量,以便于流量管理和QoS(服务质量)。

        ToS位可以通过终端应用程序使用套接字API来设置,在Windows和Linux系统上都有相应的实现。

        在Linux系统上,还可以使用`iptables`命令根据不同的标准来设置这些位。

1.1.1.3.3 区分服务(DiffServ)

        ToS字段是RFC 1349中定义的,并且在后来的RFC 2474中被重新定义为 区分服务(Differentiated Services,简称DiffServ)字段。在现代网络实践中,DiffServ已经变得更加常用,它为互联网流量提供了基于服务质量的分类。

        IPv4头部中服务类型字段的DiffServ(区分服务)版本。

        DiffServ通过使用DSCP(区分服务代码点)重定义了ToS字段,以提供网络流量的分类和优先级处理。DSCP占据了原始ToS字段的前六位,如下所示:

        DSCP:这六位用来编码PHB(每跳行为),它是DiffServ架构的基础,定义了数据包在每个网络设备(如路由器)上的处理方式。

        PHBs定义了不同的服务级别,例如:

        Expedited Forwarding (EF):用于高优先级流量,如VoIP或实时视频会议,它保证低延迟、低丢包率和高可靠性。

        Assured Forwarding (AF):提供一组PHBs,允许客户端获得保证的带宽。

        Best Effort:是传统的互联网服务模型,数据包没有优先级,尽最大努力交付,但不保证。

        Network Control:用于网络控制流量,如路由器之间的路由协议交换信息。

        DSCP使得网络运营商可以实现复杂的QoS策略,以优化网络流量并保证服务质量。这些设置通常在网络设备上配置,并可以基于业务要求来优先处理或限制流量。这种服务质量的区分对于维护网络性能和处理高优先级的流量至关重要。

1.1.1.4 总长度(Total Length)        

        整个数据包的长度,包括头部和数据。

1.1.1.5 标识(Identification)、标志(Flags)、片偏移(Fragment Offset)

        这些字段与IP分段有关,用于重组分段的数据包。

1.1.1.6 生存时间(TTL, Time to Live)

        数据包在网络中的生存时间,每经过一个路由器减一。

1.1.1.7 协议(Protocol)

        指明了数据包携带的上层协议类型,例如TCP或UDP。

1.1.1.8 头部校验和(Header Checksum)

        用于检测头部信息是否在传输过程中被篡改。

1.1.1.9 源地址(Source Address)和目的地址(Destination Address)

        发送方和接收方的IP地址。

1.1.1.10 选项(Options)

        可选字段,可用于各种控制和设置。

1.1.1.11 IPv4头部中的选项字段

        这个字段用于提供额外的功能,例如进行路由选择和特殊处理。图中显示了选项字段的基本格式,包括类型(Type),长度(Longueur),和参数(Paramètres)。

        选项类型包括:

        1. LSR(Loose Source Routing):允许发送者指定数据包在到达目的地之前应该经过的一系列路由器。"松散"指的是数据包可以自由地在指定的路由器之间选择路径。

        2. SSR(Strict Source Routing):与LSR类似,但路径更为严格,数据包必须严格按照发送者指定的路由器路径传递。

        3. RR(Record Route):每个路由器将其IP地址添加到头部中,以记录数据包的路径。

        4. RTALT(Router Alert):通知路由器该数据包包含对路由器上层协议处理很重要的信息,因此需要特别注意。

        这些选项可以用于多种目的,比如诊断网络问题、调试路由器路径、或确保敏感数据包得到正确处理。尽管这些选项很有用,但它们不常用于普通的网络通信,因为它们可能会增加处理复杂性并影响性能。

1.1.1.12 数据(Data)        

        实际传输的数据,也称为有效载荷。

        IPv4头部为网络设备提供了必要的信息,以正确地传递数据包从源地址到目的地址。头部的每个字段都扮演特定的角色,例如,TTL防止数据包在网络中无限循环,而校验和则保证头部在传输中未被错误修改。

1.2 IPV6数字报

1.2.1 IPv6数据报的结构

        如下IPv6数据报的基本结构。IPv6是互联网协议的最新版本,旨在替代IPv4,并解决地址耗尽等问题。IPv6头部的字段包括:

1.2.1.1 版本(Version)

        这表示协议版本,对于IPv6,这个字段的值是6。标识该数据包遵循IPv6协议。

1.2.1.2 通信类别(Traffic Class)

        与IPv4头部的服务类型(Type of Service)(ToS)类似,用于区分不同类别的数据流,提供服务质量管理。通常用于Differentiated Services(区分服务)和Explicit Congestion Notification(显式拥塞通知),以区分处理数据包的优先级和拥塞。

1.2.1.3(Flow Label)

        用于标识来自同一通信流的数据包序列,这些数据包需要类似的处理方式。有助于提供流量管理和QoS,尽管在实际中使用并不广泛。

1.2.1.4 有效载荷长度(Payload Length)        

        表示除了基本头部之外,IPv6数据包中有效数据的长度。表示除了基础头部之外的数据长度。这与IPv4的总长度字段不同,后者包括整个数据报的长度。

1.2.1.5 下一个头部(Next Header)

        指示紧跟在基本头部之后的是什么类型的头部或数据。类似于IPv4中的协议字段,它指明接下来的内容是什么类型的头部或数据。IPv6通过链式的方式可以处理一个以上的扩展头部。

        它允许不同类型的头部按顺序链接在一起。这种结构支持灵活的扩展和多样化的网络功能。通常有以下几种情况:

1.2.1.5.1 基本情况

        一个IPv6头部直接跟随着TCP头部和数据。这种情况下,IPv6头部中的“下一个头部”字段将指明TCP是传输层协议。

1.2.1.5.2 路由头部

        IPv6数据报可以包含一个路由头部,它在IPv6头部和TCP头部之间。在这个例子中,“下一个头部”字段首先指向路由头部,然后路由头部中的相同字段将指向TCP,表明TCP是下一个要处理的协议。

1.2.1.5.3 片段头部

        如果IPv6数据报被分片,那么片段头部将被插入到IPv6头部和传输层头部之间。这里,“下一个头部”字段会链接到路由头部,路由头部再链接到片段头部,最后片段头部指明TCP头部为下一个处理的协议。

        “下一个头部”字段的这种链式结构提供了IPv6比IPv4更大的灵活性,允许多种不同类型的头部信息按需插入。这为高级路由、数据包处理、安全功能(如IPSec)以及其他网络服务提供了必要的支持。

1.2.1.6 跳数限制(Hop Limit)

        与IPv4头部的生存时间(TTL)类似,用于限制数据包在网络中的传输跳数。这是IPv4中TTL字段的对应项,用于防止数据包在网络中无限循环。它表示数据包在网络中可以跳转的最大次数。

1.2.1.7 源地址(Source Address)

        发送数据包的设备的IPv6地址。在IPv6中,这些地址字段被扩展到了128位,这提供了极大的地址空间,使得几乎可以为地球上的每个粒子分配一个独一无二的IP地址。

1.2.1.8 目的地址(Destination Address)

        数据包的目标接收设备的IPv6地址。

1.2.1.9 有效载荷(Payload)

        包含实际传输的数据和任何扩展头部。

        IPv6的设计简化了头部结构,使得路由器的处理变得更为高效,并支持更大的地址空间以及更先进的网络功能。IPv6的设计增强了网络的可伸缩性、安全性和效率,以适应互联网的持续增长和未来技术的需求。

2. IP地址

        在网络设计中,为了使路由表更加紧凑,需要结构化和聚合地址。这意味着将目的地地址组织成能够指示它们在网络中的“位置”的方式。这与邮政地址的结构(国家/城市/街道/房屋号码)相似。IP地址的解决方案是指定哪部分地址代表网络号,哪部分代表该网络内的主机号。这通常通过子网掩码实现,它将IP地址分为网络部分和主机部分,从而允许路由器有效地将数据传输到正确的子网。

2.1 IPv4地址的传统类别系统

        该系统将IP地址划分为A、B、C三个主要类别。这些类别通过地址的前几位来识别,并定义了网络号和主机号的大小。下面是每个类别的详细说明:

2.1.1 类别A

        第一位为0,网络号占据了8位(第一字节),主机号占据了剩下的24位。地址范围从0.0.0.0到126.255.255.255,实际使用时通常从1.0.0.0开始。提供了128个网络,每个网络可以有约2^24(16,777,216)个主机。

2.1.2 类别B

        前两位为10,网络号占据了16位(前两个字节),主机号占据了16位。地址范围从128.0.0.0到191.255.255.255。提供了2^14(16,384)个网络,每个网络可以有2^16(65,536)个主机。

2.1.3 类别C

        前三位为110,网络号占据了24位(前三个字节),主机号占据了8位。地址范围从192.0.0.0到223.255.255.255。提供了2^21(2,097,152)个网络,每个网络可以有254个主机。

2.1.4 类别D(Multicast)

        以1110开始的地址用于多播。这些地址的范围是从224.0.0.0到239.255.255.255。多播地址用于同时将数据包发送给多个目的地(即一对多的通信),常用于视频会议和在线流媒体等应用。

2.1.5 类别E(未使用或实验性使用)

        以1111开始的地址原本是为将来的使用保留,但现在主要用于实验和测试目的。这些地址的范围是从240.0.0.0到255.255.255.255,它们在互联网上并未被正式用于常规数据传输。

        尽管这个系统易于理解,但它自1992年以来已经过时,并被无类别域间路由(CIDR)所取代。因为CIDR允许更细粒度的地址分配,以更有效地利用IP地址空间。尽管如此,类别D仍然被广泛用于多播通信。CIDR使用更灵活的地址划分和子网掩码,允许网络管理员根据实际需要划分任意大小的地址块,从而更有效地使用IP地址空间。

2.1.2 IPv4地址中的几种特殊地址及其用途

2.1.2.1 本地回环地址(Local Loopback Address)

        127.0.0.1是最著名的本地回环地址,用于网络软件测试以及系统自身通信。数据包发送到这个地址不会离开主机,而是直接由本地主机处理。在Linux系统中,这个地址通常与lo(回环)接口关联。

2.1.2.2 私有地址(Private Addresses)        

        根据RFC 1918,有几个地址块被指定为私有地址,它们在私人网络内部使用,而不应该直接在互联网上路由。

        私有地址范围包括:

        10.0.0.0到10.255.255.255(10/8前缀)

        172.16.0.0`到`172.31.255.255(172.16/12前缀)

        192.168.0.0`到`192.168.255.255`(192.168/16前缀)

        这些地址在互联网上不可路由,但可以在内部网络中自由使用。

2.1.2.3 网络地址转换(NAT)

        即使是使用私有地址的设备也可以访问互联网,前提是它们通过执行NAT的网关或路由器进行连接。NAT可以将私有地址翻译成有效的公网地址,允许私有网络内的机器与互联网上的机器进行通信。

2.1.2.4. 私有网络中的路由

        私有地址在私有网络内部是可路由的,这意味着在同一私有网络内的设备可以相互通信,但这些地址不会被互联网路由器转发到外部网络。

        私有地址和NAT技术的使用是因为IPv4地址数量的限制,这些技术可以有效地在没有足够公网地址的情况下扩展网络。

2.1.3 IPv4地址中用于广播的特殊地址及其使用方式

        这段文字介绍了IPv4地址体系中用于广播的特殊地址类型。在计算机网络中,广播地址允许信息发送给网络上的所有设备。这里的内容包括:

        1. 局域网广播地址:`255.255.255.255`是一个特殊的地址,它被用来在本地网络上发送广播消息。当一个信息包发送到这个地址时,网络上的所有设备都会接收到这个信息包。

        2. 定向广播地址:这种类型的广播地址有一个特定的网络部分,而主机部分则全部设置为`255`。例如,在`192.168.100.0`网络中,`192.168.100.255`会被用作广播地址,用来发送给这个子网上的所有设备。

        3. 零主机部分的广播地址:在某些旧的系统中,广播地址可以是网络地址的零主机部分,例如`192.168.100.0`。这种做法在现代网络中很少使用,但在一些老旧的系统(如SUNOS-4操作系统)中可能还存在。

        要点是,广播地址使得发送方能够发送单个数据包给同一网络上的多个接收方,但它可能会导致大量的网络流量。现代网络通常使用更有效的方法,如多播,来减少这种影响。

2.2 通过子网与掩码定义一个网络的地址

        具体包括两个部分:

2.2.1. 标准网络掩码

        网络掩码用来区分IP地址中的网络部分和主机部分。在IP地址中,网络部分的主机号设置为0。例如,在类C网络中,最后一个数字(八位组)为0,像`192.168.100.0`;在类B网络中,最后两个数字为0;而在类A网络中,最后三个数字为0。这种IP地址表示的是整个网络,而不是网络中的单个设备。

2.2.2 子网

2.2.2.1 基本概念

        子网是将一个较大的网络划分成更小的网络块。在子网地址中,网络地址部分可能包括原本属于主机号的一部分。

2.2.2.2 举例说明        

        192.168.100.32`可能是一个子网的网络地址。如果子网掩码是`255.255.255.224`,这意味着这个子网包括的地址从`192.168.100.32`到`192.168.100.63`。

        子网掩码`255.255.255.224`告诉我们网络地址的哪些部分是网络部分,哪些是主机部分。这个子网掩码在二进制中表示如下:

        11111111.11111111.11111111.11100000

        这里的`1`代表网络部分,`0`代表主机部分。

        最后8位中的前三位是网络部分,所以网络部分是`11100000`,这等于十进制中的224。

        在IPv4地址中,主机部分是可变的,而网络部分是固定的。在`255.255.255.224`掩码中,最后8位有5位是可变的,因为它们是`0`:

        00000 - 最小主机地址(这是子网地址)

        11111 - 最大主机地址(这是广播地址)

        二进制的`00000`到`11111`等于十进制的0到31。但是,这些主机部分的数字加上子网的基础部分(在这个例子中是`192.168.100`),给出了可用的IP地址范围:

        网络地址(通常不分配给设备)是`192.168.100.32`(`192.168.100` + `00000`的二进制即32的十进制)。

        广播地址(也通常不分配给设备)是`192.168.100.63`(`192.168.100` + `11111`的二进制即31的十进制加上基础部分32)。

        所以,可分配的主机地址从`192.168.100.33`(网络地址后的第一个地址)到`192.168.100.62`(广播地址前的最后一个地址)。

        网络掩码帮助确定一个IP地址属于哪个子网,这对于路由器转发数据包到正确的目的地非常关键。简单来说,网络掩码是一个用于标识网络地址范围的系统,它定义了哪些IP地址属于同一个网络。

2.2.2.3 子网划分(subnetting)

        用于将一个较大的网络划分为多个较小的子网络。

        1. 扩展网络地址部分:在子网划分中,通过借用IP地址中主机部分的一些高位比特来扩展网络地址部分。这样做可以增加网络部分的长度,从而创建更多的子网络。

        2. 举例说明:例如,在C类地址中,一个常见的子网掩码是255.255.255.224。这个子网掩码意味着IP地址的前27位被用作网络地址,剩下的5位用作主机地址。

        3. 子网掩码的作用:子网掩码用于确定IP地址中哪些位属于网络地址,哪些位属于主机地址。在上述例子中,224(十进制)对应的二进制为1110 0000,表明IP地址的最后三位被用作网络地址的一部分。

        4. 创建子网:这种方法允许将一个大网络划分成多个小网络,每个小网络被称为子网。每个子网都可以作为一个独立的网络来运行。

        5. 子网间的连接:子网之间通常通过路由器相连,就像普通网络一样。路由器负责在不同子网之间转发数据。

        6. 始终存在的子网掩码:在任何网络中,都会有一个子网掩码用来区分网络地址和主机地址。

        7. 标准与非标准子网掩码:如果子网掩码没有扩展出原始地址类别的位数,则称为标准子网掩码。例如,对于C类地址,标准的子网掩码是255.255.255.0。

        通过子网划分,网络管理员可以更有效地管理和分配IP地址,提高网络的安全性和效率。

2.3 无类别域间路由(CIDR)

        网络掩码(netmask)和无类别域间路由(CIDR,Classless Inter-Domain Routing)是现代IP地址管理的重要概念。以下是对这些概念的中文解释:

        1. 无类别地址:传统的IP地址系统按大小分为不同的类别(A、B、C等)。但在CIDR出现后,这种基于类别的划分方式已不再适用,CIDR允许更灵活、更有效的地址分配。

        2. CIDR概念(RFC-1519):CIDR是一种用于创建更灵活、高效的IP地址分配方式的方法。它允许定义不同大小的网络,这比传统基于类别的方法更有效。

        3. 灵活的网络地址界限:使用CIDR时,IP地址中网络部分和主机部分之间的界限不再固定。这提供了对IP地址的更灵活、更优化的使用。

        4. 路由聚合:CIDR特别适合用于路由器的路由表中的路由聚合,从而减小路由表的大小并提高路由效率。

        5. 服务提供商的应用:CIDR允许服务提供商将地址子集分配给客户,这比分配基于类别的完整地址范围更高效。

        6. 指定网络掩码:使用CIDR时,必须明确指定网络掩码。网络掩码确定了IP地址中属于网络地址的部分。

        7. 传统表示法:网络掩码的传统表示方法可能类似于255.255.255.128,其中掩码代表25个比特(例如在此例中)。

        8. CIDR表示法:CIDR表示法更简洁明了,使用“/[掩码比特数]”的格式。例如,“/25”表示IP地址的前25位用作网络地址。一个带有CIDR表示法的IP地址示例可能是192.168.100.128/25,表示前25位用于网络,剩余7位用于主机。

        总之,CIDR是一种IP地址管理方法,提供了更大的灵活性和效率,特别是在IPv4地址日益稀缺的情况下显得尤为重要。

2.4 IP接口地址的分配方式

        IP接口地址的分配可以通过多种方式进行,具体取决于需求和环境。

        以下是主要的方法:

2.4.1 手动配置(“手动”)

        这种方法涉及直接在设备的网络接口上配置IP地址。通常通过操作系统提供的工具来实现,可以是图形化的管理界面,也可以是命令行界面中的特定命令。

2.4.2 自动配置(动态配置)

        通过DHCP协议(动态主机配置协议):

        DHCP是一种协议,允许服务器自动向网络上的设备提供IP配置信息(如IP地址、子网掩码、默认网关等)。

        当设备连接到网络时,它会发送一个DHCP请求,并接收到一个IP配置响应。

        通过PPP协议(点对点协议)在点对点连接中:

        PPP通常用于建立两点之间的直接连接,如通过调制解调器的互联网连接。

        在建立连接时,位于链路另一端的服务器可以向连接的设备提供IP地址和其他网络配置参数。

        每种方法都有其优点和缺点。手动配置提供了完全的控制,但在大型网络中可能会很繁琐。自动配置通过DHCP更易于管理,特别是对于拥有许多设备的大型网络,但需要一个正常运行的DHCP服务器。PPP特定于点对点连接,在现代宽带网络中使用较少。

2.5 IPv6地址

        IPv6地址,如RFC 4291所述,是从IPv4地址系统中发展来的重大进步。

2.5.1 IPv6地址的关键点

2.5.1.1 128位地址

        与IPv4使用32位地址不同,IPv6地址长度为128位。这显著增加了可用地址的数量,解决了IPv4地址耗尽的限制。

2.5.1.2 十六进制表示法

        IPv6地址以十六进制表示。一个典型的IPv6地址被划分为八组,每组包含16位(2个字节)。每组之间用冒号分隔。例如,IPv6地址可能看起来像这样:`2001:db8:cafe:deca:0:0:0:1`。每个段代表一个16位的十六进制值。

2.5.1.3 零压缩

        IPv6地址通常包含长序列的零。为了简化这些地址,RFC 4291允许进行零压缩。这意味着地址中的一个或多个连续零组可以用双冒号(::)替换。例如,`2001:db8:cafe:deca:0:0:0:1`可以压缩为`2001:db8:cafe:deca::1`。但是,这个双冒号在一个地址中只能使用一次,以避免歧义。

        这些特性使得IPv6成为互联网地址未来的强大和可扩展解决方案,允许几乎无限数量的设备直接连接到互联网。

2.5.2 子网划分

        子网前缀(Subnet ID)和主机标识符(Host ID)。这两部分在CIDR(无类别域间路由)表示法中被明确区分。以下是对您给出的示例的解释:

2.5.2.1 子网前缀(Subnet ID)

        在地址`2001:db8:cafe:deca:a9e:1ff:fe6b:25c9/64`中,`/64`表示地址的前64位构成了子网前缀。因此,`2001:db8:cafe:deca`代表子网前缀。它标识了该地址所属的特定网络。

2.5.2.2 主机标识符(Host ID)

        地址的剩余部分,本例中为`a9e:1ff:fe6b:25c9`,是主机标识符(Host ID)。这是地址中用于标识子网内特定设备(或主机)的部分。

2.5.2.3 CIDR表示法

        CIDR表示法是一种指定网络前缀和子网大小的方法。`/64`意味着地址的前64位被用作子网前缀。

2.5.2.4 对应的子网

        对于`2001:db8:cafe:deca::/64`这个子网,双冒号`::`表示地址的其余部分(剩下的64位)都是零。这意味着所有以`2001:db8:cafe:deca`开头,并且在主机部分有任何64位组合的地址都属于这个子网。

        总结来说,在IPv6地址`2001:db8:cafe:deca:a9e:1ff:fe6b:25c9/64`中,`2001:db8:cafe:deca`是子网前缀,`a9e:1ff:fe6b:25c9`是主机标识符。相应的子网`2001:db8:cafe:deca::/64`覆盖了所有具有这个特定前缀的地址。

2.5.3 IPv6前缀被用于不同的特定网络用途

        以下是对每个前缀的解释:

2.5.3.1 文档用途前缀 (2001:db8::/32)

        这个前缀被保留用于文档和书面材料中的示例。以`2001:db8::/32`开头的地址不应用于公共网络,它们仅用于教育或文档目的。

2.5.3.2 链接本地前缀 (fe80::/10)

        链接本地地址用于局域网内部,不会在互联网上路由。以`fe80::/10`开头的地址会自动配置在每个网络接口上,用于同一网络段内的本地通信。

2.5.3.3 多播前缀 (ff02::/10)

        多播地址用于将数据包发送给特定的一组听众,而不是单一的目的地。ff02::/10`前缀表明这是一个仅限于本地链接的多播地址,这意味着这些数据包不会被路由到局域网之外。

2.5.3.4 终端用户前缀示例 (2001:db8:fada:ba00::/56)

        这个前缀是可能分配给终端用户(如住宅或小型企业)的地址的示例。/56`前缀表示地址的前56位被用作网络部分,留下72位(128-56)用于子网和单个主机。这为创建子网和向设备分配地址提供了极大的灵活性。

        每个前缀在IPv6中都有特定的功能,使得地址空间的管理更加有效和有组织。

2.5.4 特殊IPv6地址示例

2.5.4.1 单播地址 (2001:db8:cafe:deca:a9e:1ff:fe6b:25c9/64)

        这是一个单播地址,用于在网络上标识一个独特的设备。/64` 前缀表明地址的前64位(这里是 `2001:db8:cafe:deca`)是网络地址,剩下的64位(`a9e:1ff:fe6b:25c9`)是该设备的特定地址。

2.5.4.2 链接本地地址 (fe80::a9e:1ff:fe6b:25c9/64)

        链接本地地址用于同一局域网段内的通信,不会在互联网上路由。这些地址始终以 `fe80::` 开头,通常在每个网络接口上自动配置。

2.5.4.3 IPv4-IPv6混合表示法 (2001:db8::cafe:192.168.0.1 或 2001:db8::cafe:c0a8:1)

        这个地址展示了IPv4地址嵌入到IPv6地址中的例子,是IPv4-IPv6混合表示法。IPv4地址 `192.168.0.1` 在IPv6中表示为 `c0a8:1`(将每个字节转换为十六进制表示)。

2.5.4.4 本地主机 (::1)

        `::1` 是IPv6中的 `127.0.0.1`。它是一个环回(loopback)地址,用于指代本地设备。连接到这个地址的数据会返回到本地设备,用于测试内部网络堆栈。

2.5.4.5 所有位均为0 (::)

        `::` 表示一个IPv6地址,其中所有位均为0。它是IPv4中 `0.0.0.0` 的等价物。这个地址在特定上下文中使用,例如在路由规则中表示“任何地址”。这些地址类型在IPv6网络的管理和设备间通信中各有特定用途。

2.5.6 IPv6地址分配方式

        将IPv6地址分配给网络接口可以通过多种方式进行,并且一个接口拥有多个IPv6地址(例如链接本地地址和全球范围地址)是常见的。以下是主要的分配方法:

2.5.6.1 接口上的多个IPv6地址

        一个网络接口拥有多个IPv6地址是正常的,例如链接本地地址(link-local)和全球范围地址(global)。链接本地地址用于同一网络段内的通信,而全球范围地址用于互联网通信。

2.5.6.2 手动配置(“手动”)

        手动配置IPv6地址相对较少见,因为这可能比较复杂,且容易出错,尤其是在有许多设备的环境中。

2.5.6.3 动态配置

        自动配置:自动配置是为接口分配IPv6地址的常见方法。

        这通常是通过路由器宣告的前缀来完成的。设备使用此前缀自动生成完整的IPv6地址。

        通过DHCPv6:DHCPv6是针对IPv6的DHCP协议版本。它允许DHCPv6服务器向网络上的设备提供IPv6地址以及其他网络配置信息。

        每种地址分配方法都有其优势。自动配置简化了设备的网络配置,无需人工干预,而DHCPv6则提供了更多关于地址分配和管理的控制。

3 ARP与NDP协议

3.1 网络中地址结构的重要性

        特别是在路由器配置和IP地址分配方面。本文讲述了如何通过适当的地址结构和聚合来实现紧凑的路由表,以下是主要概念:

3.1.1 路由表的需求

        为了高效地管理和转发网络流量,路由器需要维护路由表。这些表中包含了如何将数据包从一个网络传送到另一个网络的信息。为了减少路由表的大小和复杂性,网络地址需要适当的结构化和聚合。

3.1.2 地址结构化

        就像邮政地址有国家、城市、街道和房屋号码一样,IP地址也可以结构化,以反映网络的层次结构。这种结构化有助于识别出哪些IP地址属于同一网络,从而简化路由决策。

3.1.3 地址聚合

        这是一种将多个网络地址组合成单一路由表项的技术,通常通过使用无类别域间路由(CIDR)来实现。CIDR允许网络管理员将多个IP地址聚合成一个单一的、“超网”,大大减少了路由表的大小。

3.1.4 IP地址分割

        IP地址通常分为两部分,一部分是网络号,用于识别特定的网络;另一部分是主机号,用于识别该网络上的特定设备。

        这种方法允许网络以更加有效和可扩展的方式进行管理,确保了随着互联网的增长,路由表的大小保持在可控范围内。通过合理划分网络和主机部分,可以更容易地管理和优化网络流量。

3.2 ARP/NDP协议

        在以太网或802.11(Wi-Fi)这类的局域网中,IP地址和MAC地址之间存在重要的关系。

3.2.1 IP地址与MAC地址

3.2.1.1 IP地址

          IP地址是分配给网络上每个设备的数字标识符,用于实现互联网或局域网内的通信。

        IP地址可以通过操作系统的特定工具手动配置,如图形界面或命令行工具(例如,在Unix/Linux系统中使用`ifconfig`命令)。

        IP地址也可以通过动态主机配置协议(DHCP)自动分配。然而,DHCP服务器的设置需要手动进行。

3.2.1.2 MAC地址

        MAC地址是由网络接口卡(如以太网卡或Wi-Fi卡)制造商预先分配的唯一标识符。

        与IP地址不同,MAC地址通常不由用户管理或配置。它们用于在数据链路层(第2层)唯一标识网络中的每个设备。

        在某些情况下,网络接口卡的驱动程序允许修改MAC地址,尽管这并不常见。

        总之,IP地址用于在网络层(第3层)标识设备,以实现互联网或局域网的通信,而MAC地址是网络接口卡在数据链路层的唯一标识符,主要用于同一局域网内的通信。

3.2.1 ARP协议

        在局域网(LAN)环境中,如果一台设备(我们称之为“机器M”)需要向另一台仅知道IP地址的邻近设备(称为“机器N”)发送IP数据包,就会遇到一个基本问题:如何找到与机器N的IP地址对应的MAC地址,以便在数据链路层(如以太网)传输该数据包。以下是这个过程通常如何进行的:

3.2.1.1 使用ARP协议(地址解析协议)

         ARP用于在以太网网络上将IP地址映射到MAC地址。

        当机器M需要与机器N通信时,它首先发送一个ARP请求,询问哪台设备拥有机器N的IP地址。

3.2.1.2 ARP请求和响应

        ARP请求被发送到局域网上的所有设备(广播),每台设备都检查该ARP请求中的IP地址。

        如果某台设备(在这个例子中是机器N)发现ARP请求中的IP地址与自己的IP地址相匹配,它会用自己的MAC地址作为响应发送回机器M。

3.2.1.3 封装IP数据包

        一旦机器M收到响应并获得机器N的MAC地址,它会将IP数据包封装在一个以太网帧中,其中包含了机器N的MAC地址作为目的地址。

3.2.1.4 发送以太网帧

        封装好的以太网帧随后通过物理网络发送给机器N。这样,IP数据包就能在局域网内正确地从机器M传输到机器N。

        这个过程是局域网中IP通信的基础,确保了即使只知道目标设备的IP地址,数据也能被正确地传输到指定的设备。

        IPv4网络中,MAC地址和IP地址之间是通过ARP(地址解析协议)进行关联的。

3.3 ARP请求和响应的过程

        ARP协议(地址解解析协议 - RFC826):这是一个网络层的通信协议,用于在IPv4网络中解析IP地址到MAC地址。

3.3.1 ARP请求

        机器M(@ethM, @IPM)发出一个广播消息,询问“大家好!我是M。有谁知道IP地址是IPN的机器N吗?”

        这个请求被发送到局域网上的所有设备,消息中包含了发送者(机器M)的MAC地址(@ethM)和IP地址(@IPM),以及它想要找到的设备的IP地址(IPN)。

3.3.2 ARP响应

        如果在局域网中有设备(在这个例子中是机器N)的IP地址与请求中的IPN匹配,机器N就会回应说“嗨,M!我是N(@ethN, @IPN)”,告诉机器M它的MAC地址(@ethN)。

        然后,机器M就可以使用机器N的MAC地址来封装数据帧,并通过以太网将数据直接发送到机器N。

3.3.3 NDP

        邻居发现协议(Neighbor Discovery Protocol, NDP)是IPv6网络中的一个关键协议,它与IPv4中的ARP(地址解析协议)有着相似的功能,但NDP更为复杂,提供了更多的功能。NDP是集成在ICMPv6(Internet Control Message Protocol version 6,互联网控制消息协议第6版)中的,如RFC 4443中所定义。以下是NDP的主要特点:

3.3.3.1 邻居发现

        NDP允许同一局域网(LAN)内的设备发现彼此。例如,一个设备可以仅通过知道另一个设备的IPv6地址来找到其MAC地址。

3.3.3.2 地址自动配置

        NDP使得IPv6设备能够在没有DHCP服务器的帮助下自动配置它们的IP地址,尽管IPv6也可以使用DHCPv6。

3.3.3.3 重复地址检测(Duplicate Address Detection, DAD)

        在一个设备为自己配置IPv6地址之前,它会使用NDP来确保没有其他设备已经在使用这个地址。

3.3.4 路由器发现

        设备可以使用NDP来发现它们局域网内的路由器。

3.3.5 重定向

        NDP允许路由器向网络上的设备通报更优的路由变更。NDP使用的消息类型包括路由器通告(Router Advertisements, RA)、路由器请求(Router Solicitations, RS)、邻居通告(Neighbor Advertisements, NA)、邻居请求(Neighbor Solicitations, NS)以及重定向消息(Redirect Message)。

4. 路由原理

4.1 问题背景

        B是一个路由器,B路由器有两个网络接口,每个接口都有自己的IP地址:192.168.100.1和192.168.250.1。

        M和N是局域网中的两台设备,分别有IP地址192.168.100.10和192.168.250.11。B路由器连接了两个网络段。

        在M中如何确定携带至目的地的以太网帧的MAC地址?

      M想要发送到N的IP数据包的内容,包括发送者M的IP地址、接收者N的IP地址以及数据。然而,要在局域网中传输这个数据包,M需要知道其下一跳路由器B接口的MAC地址。

4.2 解决办法

        解决这个问题通常涉及以下步骤:

        1. M将使用ARP(地址解析协议)来查询192.168.100.1(路由器B的接口)的MAC地址。

        2. 路由器B会回应它的接口MAC地址。

        3. M将根据这个MAC地址创建一个以太网帧,并将IP数据包封装在内。

        4. 然后M会将这个以太网帧发送到局域网,最终由路由器B转发到N所在的网络段。

这就是在局域网内通过路由器转发IP数据包的过程。

4.3 路由表的概念

        在机器M中,为了将数据包发送到IP地址为192.168.250.11的机器N,需要一个路由表。这个表告诉M,要想到达192.168.250.11,数据包需要经过IP地址为192.168.100.1的路由器。有了这个路由表,机器M可以很容易地通过ARP协议找到路由器的MAC地址。然后,M将使用这个MAC地址作为以太网帧的目的地址来发送数据包。

        M向N发送IP数据包的过程。在这个示例中,路由器具有两个接口,Ra和Rb,分别对应两个不同的IP地址,192.168.100.1和192.168.250.1。M通过其以太网接口将数据包发送到Ra,数据包中包含了M和N的IP地址和数据。

        路由表的更多细节,每一条路由表项至少包含以下信息:

                一个方向(网络或机器)

                一条路由指示,即数据包应该通过哪个设备进行路由

                一个成本,通常是跳数或带宽

        计算机A通过其网络接口(eth0,IP地址为192.168.100.10/24)连接到一个交换机上。

        交换机连接到路由器2(Routeur2)的接口if1(IP地址为192.168.100.2/24)。

        路由器2的另一个接口if2(IP地址为192.168.200.1/24)连接到另一个交换机上。

        这个交换机同时连接到了计算机B(IP地址为192.168.10.5/24,通过网络接口eth0连接)。

        路由器3的另一个接口if2(IP地址为192.168.10.1/24)处于与计算机B同一子网中。

        路由器1(Routeur1)通过其接口if1(IP地址为192.168.100.1/24)连接到192.168.100.0/24网络,通过接口if2(IP地址为192.168.50.1/24)连接到192.168.50.0/24网络。        

        图例解释了地址的结构,其中192.168.X.0/24表示网络地址和子网掩码,.X(如.1或.2等)表示接口地址的主机部分,if1、if2、eth0是设备上的接口名称。

        在这种配置中,如果计算机A想要发送数据包到计算机B,它首先需要查看自己的路由表来确定下一跳路由器的IP地址。根据网络的子网划分,计算机A可能需要将数据包发送到路由器2的接口if1(192.168.100.2),路由器2将数据包转发到路由器3,路由器3再将数据包发送到计算机B。在每次转发之前,路由器会根据自己的路由表来确定下一跳的地址。

        简而言之,每个路由器的路由表包含了数据包转发的指令,指明数据包应该经过的接口或路径以到达特定的目的网络。如果路由表配置不正确,数据包可能无法到达目的地,或者可能会选择一条非最优路径。在配置路由时,非常重要的一点是确保每一跳的路由器都能够向正确的方向转发数据包。

        此命令`route print`展示的是在Windows操作系统中,通过命令行查看当前网络路由表的一个例子。下面是对这个路由表的解释:

        列表接口:显示了网络接口设备的列表。`0x1`是回环接口,用于本地主机通信。`0x1000003`可能是一个以太网卡。

        活动路由:显示了当前有效的路由项。每条路由包含了目的网络、子网掩码、网关地址、接口地址和度量值(用于路由选择的成本)。

4.4 具体路由项的解释

        0.0.0.0 0.0.0.0 192.44.75.1 192.44.75.184 1

        这是一个默认路由(也称为“捕获所有”路由),意味着对于任何不匹配其他路由项的目的地,数据都会被发送到默认网关192.44.75.1。

        127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1

        这是回环地址的路由,用于指向本机的通信。

        192.44.75.0 255.255.255.0 192.44.75.184 192.44.75.184 1

        这是一个本地子网路由,意味着位于192.44.75.0/24子网内的任何地址都可以直接通过接口192.44.75.184到达。

        192.44.75.184 255.255.255.255 127.0.0.1 127.0.0.1 1

        这是指向本机特定IP地址的路由,它使用了回环地址作为网关。

        192.44.75.255 255.255.255.255 192.44.75.184 192.44.75.184 1

        这是子网广播地址的路由。

        224.0.0.0 224.0.0.0 192.44.75.184 192.44.75.184 1

        这是多播地址范围的路由。

        255.255.255.255 255.255.255.255 192.44.75.184 192.44.75.184 1

        这是有限广播地址的路由,用于发送到本地网络上的所有设备。

        最后,“默认网关”项表明所有的非本地子网流量都将通过网关192.44.75.1路由。每个路由项的“度量”值都设置为1,这通常表示最低的成本,用于简化路由选择。在有多条路径可达同一目的地时,度量值较低的路径会被优先选择。

        在Windows和Linux操作系统中,有一系列命令可以用来配置和诊断网络设置。以下是这些命令的作用说明:

4.5 在Windows中

4.5.1 ipconfig /all

        这个命令显示所有网络接口的当前配置,包括IP地址、子网掩码、默认网关和DNS服务器等信息。在Windows 9x/ME中,类似的命令是`winipcfg`。

4.5.2 route print

        该命令用来显示当前的路由表,这有助于理解数据包是如何从您的计算机发送到网络上的其他计算机的。

4.5.3 nslookup

        这个命令用于查询DNS记录,可以将域名解析为IP地址,也可以执行反向查找,即将IP地址解析为域名。

4.5.4 arp -a

        在局域网环境中,这个命令可以显示ARP表,即IP地址到MAC地址的映射列表。

4.5.5 tracert

        用于确定IP数据包访问目标的路由路径。它会显示数据包途径的每个路由器的IP地址。

4.6 在Linux中

4.6.1 ifconfig或 ifconfig -a

        这个命令在Linux中与Windows的`ipconfig`相似,用于显示网络接口的配置信息。`-a` 选项显示所有接口的信息,包括那些当前未激活的。

4.6.2 route或 route -n

        类似于Windows中的`route print`,用于显示路由表。`-n` 选项避免对每个路由器的IP地址进行DNS解析,直接显示IP地址。

4.6.3 nslookup或 host

        这两个命令与Windows中的`nslookup`相似,用于查询DNS服务器以解析域名和IP地址。

4.6.4 arp -a

        与Windows命令相同,显示ARP缓存中的所有条目。

4.6.5 traceroute或 traceroute -n

        功能与Windows中的`tracert`相同,用于跟踪数据包到达目标主机的路径。`-n` 选项会禁用域名解析。

        要注意的是,为了使用这些命令,您可能需要具备管理员权限或使用sudo命令来获取必要的权限。这些工具是网络管理员和IT专业人员用来诊断网络问题和配置网络参数的标准工具集。

5. 路由器

        路由器的功能在现代网络中至关重要。以下是路由器的几个主要功能:

5.1 目的地地址检查和比较

        当IP数据包进入路由器时,路由器会检查数据包的目的地IP地址,并将其与路由表中的条目进行比较。路由表包含了不同目的地网络的条目,每个条目关联着一个或多个输出接口。

5.2 路由决策

        通过比较数据包的目的地地址与路由表中的网络地址,路由器决定将数据包转发到哪个接口。这通常涉及匹配最长前缀,确保数据包沿最佳路径发送。

5.3 在终端设备中实现相同功能

        路由功能也在终端设备(如个人电脑和服务器)中实现。这些设备通常有一个更简单的路由表,用于决定数据包是直接发送(例如,到同一局域网中的另一台机器)还是发送到默认网关(路由器)。

5.4 时间生存(TTL)字段递减

        每个通过路由器的IP数据包中的TTL(Time To Live)字段都会被减1。TTL是一个防止数据包在网络中无限循环的机制。当TTL值减至0时,数据包会被丢弃。

5.5 校验和(Checksum)的重新计算

        由于TTL字段的变化,IP头的校验和也必须在每个路由器处重新计算。校验和是用来检测数据在传输过程中是否发生变化的一种方法。

        路由器的这些功能确保了网络流量的有效管理和数据包的正确传递,对于维护网络的稳定性和效率至关重要。

        在这个网络中,数据包从源地址(IP 47.1.1.1)开始,经过一系列的路由器,最终到达目的地(同样是IP 47.1.1.1,可能表示数据包正在进行回环测试)。每个路由器通过查看其路由表并决定最佳的下一跳接口,将数据包逐步引向目的地。

        每个路由器都有输入接口(In)和输出接口(Out),这些接口用标签比如 473/1,473/2,473/3 来标识。这些标签可能表示接口编号、接口上的特定VLAN或其他本地标识符。这个逐跳转发的过程是网络中数据包路由的基本操作。

5.6 用ICMP处理错误

        ICMP(Internet Control Message Protocol,互联网控制消息协议)是网络层的一个核心协议,它定义了一种机制,允许网络设备发送错误消息和操作信息。以下是ICMP的一些主要用途:

ICMP (IPv4) - RFC 792:

5.6.1 传递错误消息

        如果数据包无法成功到达目的地,发送错误消息给源主机。

5.6.2 回显请求和回显回复 (ping命令)

        用于测试网络上两个主机之间的连通性。

5.6.3 目的地不可达        

        通知发送方,目的地无法访问。

5.6.4 网络不可达

        特定于无法到达整个网络的情况。

5.6.5 需要分片但设置了不分片位(DF)

        当数据包太大而不能通过网络的下一个段,且数据包的DF(Don't Fragment)位被设置为1,表明不允许分片时,发送此消息。这在路径MTU发现(PMTU discovery)中很重要。

5.6.6 重定向消息

        如果存在到目的地的更好路由,通知发送方。

5.6.7 生存时间(TTL)超时

        当数据包在网络中的生存时间超过设定值时,发送此消息。

5.7 ICMPv6 (IPv6) - RFC 4443

ICMPv6是IPv6中ICMP的等价物,提供类似IPv4中ICMP的功能,并增加了一些新功能:

5.7.1 邻居发现协议(NDP)

        NDP是IPv6中的一组消息和过程,用于替代IPv4的ARP(地址解析协议),用于发现同一本地链路上的其他节点,确定它们的链路层地址,找到可用的路由器,以及维护链路层地址信息的正确性。

5.7.2 路由器请求和路由器通告

        设备使用这些消息来发现本地链路上的路由器,并进行地址自配置。当设备启动时,它会发送路由器请求消息来查找本地网络上是否有路由器。路由器回复路由器通告消息,其中包含用于地址自配置的网络前缀和其他重要参数。ICMP和ICMPv6是网络诊断和维护的重要工具,它们使得网络设备能够报告错误情况并帮助管理员定位问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/319054.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL基础应用之DDL、DCL、DML、DQL

文章目录 前言一、sql基础应用二、列、表属性1、列属性2、表属性 三、sql学习记录---DDL应用之数据库定义语言1、建库规范2、创建库并设置字符集、校验规则3、查看数据库4、删除数据库5、修改数据库字符集 四、sql学习记录---DDL应用之表定义语言1、建表规范2、建表3、查询建表…

远程开发之端口转发

远程开发之端口转发 涉及的软件forwarded port 通过端口转发,实现在本地电脑上访问远程服务器上的内网的服务。 涉及的软件 vscode、ssh forwarded port 在ports界面中的port字段,填需要转发的IP:PORT,即可转发远程服务器中的内网端口到本…

电脑误清空回收站重要文件不见了?请尝试这12个最好回收站恢复工具。

作为计算机用户,我们都知道回收站的重要性。它是帮助我们临时存储已删除文件的重要工具。但是,如果您不小心清空了回收站或从中删除了一些重要文件怎么办?不用担心,市场上有许多回收站恢复工具可以帮助您找回已删除的数据。在本文…

KEI5许可证没到期,编译却出现Error: C9555E: Failed to check out a license.问题解决

一、编译出现如下报错 二、检查一下许可证 三、许可证在许可日期内,故应该不是许可证的问题 四、检查一下编译器,我用的是这个,这几个编译器的区别其实我不太明白,但我把问题解决是选的这个 五、找到编译器的路径,去复…

【k8s】Kubernetes 声明式 API、命令式

1. 资源管理方式: 1>. 命令式对象管理∶直接使用命令去操作kubernetes资源 kubectl run nginx-pod --imagenginx:1.17.1 --port802>. 命令式对象配置∶通过命令配置和配置文件去操作kubernetes资源 kubectl create/patch -f nginx-pod.yaml3>. 声明式对…

即将推出的 OpenWrt One/AP-24.XY:OpenWrt 和 Banana Pi 合作路由器板

OpenWrt开发人员正在与Banana Pi合作开发OpenWrt One/AP-24.XY路由器板。OpenWrt 是一个轻量级嵌入式 Linux 操作系统,支持近 1,800 个路由器和其他设备。然而,这将是第一块由 OpenWrt 直接开发的路由器板。 该主板将基于 MediaTek MT7981B (Filogic 82…

详解HTTPS加密工作过程

🚗🚗🚗今天给大家分享的是HTTPS加密的工作过程。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! ✈️✈…

【CAN】Mailbox/Hardware Object/HRH/HTH概念介绍

文章目录 1. 前言2. MCMCAN硬件RAM缓存区2.1 RAM缓存区分配2.2 发送缓存区2.3 接收缓存区 3. MailBox&#xff0c;HWObject&#xff0c;HRH&#xff0c;HTH概念1. MailBox2. HWObject3. HRH4. HTH5. 对应关系 >>返回总目录<< 1. 前言 Aurix TC3xx系列MCU中的MCMC…

Gitlab中的CICD的使用方法

一、CI/CD执行机制 二、离线安装gitlab-runner 下载相应版本的gitlab-runner &#xff08;下载地址&#xff1a;https://packages.gitlab.com/runner/gitlab-runner&#xff09; dpkg -i gitlab-runner_12.8.0_amd64.debgitlab-runner register第3步中需要的信息可从下图所示…

网页设计与网站建设作业html+css+js,一个简易的游戏官网网页

一个简易的游戏网页 浏览器查看 目录结构 部分代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport&…

隧道应用1-netsh端口映射内网

测试环境信息 物理机内网 IP &#xff1a;192.168.249.1 win7 虚拟机 IP &#xff1a; 192.168.249.131 win10 虚拟机 IP &#xff1a;192.168.249.129 我们在 win7 上配置 netsh 端口映射&#xff0c;将 win7 作为跳板机&#xff0c;进而访问到 win10 的服务。 端口映射与…

算法每日一题: 删除排序列表中的重复元素 | 链表的删除

大家好&#xff0c;我是星恒 今天给大家带来的是一道简单的链表删除题&#xff0c;题目很简单&#xff0c;不过可以帮助我们很好的复习链表的删除&#xff0c;尤其适合基础薄弱的友友们学习 ~ 题目&#xff1a;leetcode 83 给定一个已排序的链表的头 head &#xff0c; 删除所有…

【每日一题】删除排序链表中的重复元素

文章目录 Tag题目来源解题思路方法一&#xff1a;比较相邻两节点 写在最后 Tag 【遍历】【链表】【2024-01-14】 题目来源 83. 删除排序链表中的重复元素 解题思路 方法一&#xff1a;比较相邻两节点 思路 比较两个相邻的节点&#xff0c;如果下一个节点值和当前节点值一样…

数据库练习题

素材&#xff1a; 表名&#xff1a;worker-- 表中字段均为中文&#xff0c;比如 部门号 工资 职工号 参加工作 等 CREATE TABLE worker ( 部门号 int(11) NOT NULL, 职工号 int(11) NOT NULL, 工作时间 date NOT NULL, 工资 float(8,2) NOT NULL, 政治面貌 varchar(10) NO…

Dockerfile的ADD和COPY

文章目录 环境ADD规则校验远程文件checksum添加Git仓库添加私有Git仓库ADD --link COPYCOPY --parent 使用ADD还是COPY&#xff1f;参考 环境 RHEL 9.3Docker Community 24.0.7 ADD ADD 指令把 <src> 的文件、目录、或URL链接的文件复制到 <dest> 。 ADD 有两种…

Makefile编译原理 make和makefile

一.什么是makefile 如图所示&#xff0c;一个工程中的源文件不计其数&#xff0c;其按类型、功能、模块分别放在若干个目录中&#xff0c; Makefile 文件定义了一系列的规则来指定哪些文件需要先编译&#xff0c;哪些文件需要后编译&#xff0c;哪些文件需要重新编译&#xff…

Python中如何简化if...else...语句

一、引言 我们通常在Python中采用if...else..语句对结果进行判断&#xff0c;根据条件来返回不同的结果&#xff0c;如下面的例子。这段代码是一个简单的Python代码片段&#xff0c;让用户输入姓名并将其赋值给变量user_input。我们能不能把这几行代码进行简化&#xff0c;优化…

JS数组函数 reduce() 的用法—包含基础、进阶、高阶用法

目录 一、语法剖析 二、实例讲解 1. 求数组项之和 2. 求数组项最大值 3. 数组去重 三、其他相关方法 1. reduceRight() 2. forEach()、map()、every()、some()和filter() 四、重点总结 先看w3c语法 ✔ 常见用法 数组求和 数组最大值 ✔ 进阶用法 数组对象中的用…

vmware和ubuntu镜像下载地址

这里有vmware16和ubuntu20.0下载 链接&#xff1a;https://pan.baidu.com/s/1i9IC-KnJlrVDbl6SJ5SIKQ?pwdy2dd 提取码&#xff1a;y2dd 链接&#xff1a;https://pan.baidu.com/s/1imqJVD2dLE1TB6jIrq1-Fg?pwd690f 提取码&#xff1a;690f 这个是我本人下的vmware17 密钥可…

关于tex中的表格设置

文章目录 控制表格列宽和行高控制表格列宽的同时实现居中tex中多表格排列单元格的合并与分割对单个单元格进行操作 控制表格列宽和行高 将下面的代码放在table环境内&#xff0c;放在tabular环境外 调整表格宽度和高度&#xff1a; \resizebox{\textwidth}{2cm}{%第一个{}是表…
最新文章