什么是NAT
Network Address Translation(网络地址转换),它负责将目标IP或源IP进行了改变,相当于一个中间代理,我们家庭常用的路由器就是一个NAT设备,NAT是为了解决IPv4的IP地址快要耗尽的问题,以实现多个私有IP共享一个公网IP。
私有地址(RFC 1918):10.0.0.0/8、172.16.0.0/12、192.168.0.0/16
NAT的转换流程如下:
1、PC访问外部网络
源=192.168.2.157:7788
目标=47.104.250.233:802、经过NAT转换后
源=27.16.246.40:12345
目标=47.104.250.233:803、服务器返回数据
源=47.104.250.233:80
目标=27.16.246.40:123454、经过NAT转换后
源=47.104.250.233:80
目标=192.168.2.157:7788
在第2步的时候,NAT会建立一个映射表
内网IP:PORT | 公网IP:PORT | 协议 |
---|---|---|
192.168.2.157:7788 | 27.16.246.40:12345 | |
192.168.2.134:8899 | 27.16.246.40:13333 |
NAT的三种类型
类型 | 特点 | 应用场景 | 转换示例 |
---|---|---|---|
静态NAT | 1:1 的固定映射 | 企业服务器托管 | 192.168.1.1 -> 170.34.2.1 |
动态NAT | IP池动态分配 | 中型企业网络 | 内网IP轮流使用公网IP池 |
PAT | IP+端口组合映射(最常用) | 家庭/企业网关 | 192.168.1.1:1234 -> 公网IP:端口 |
NAT穿透难题与解决方案
NAT的存在,是其下游的机器的IP被隐藏了,这会使那些端到端的直接通信造成困扰,比如P2P应用,视频通话应用。
解决方式
- UDP打洞:这是最常用的NAT穿透技术之一,适用于大多数Cone NAT(包括完全锥型NAT、受限锥型NAT和端口受限锥型NAT)。其基本思想是让NAT设备认为某个来自内部网络的数据包是一个合法的响应,从而允许外部数据包进入。
- TCP打洞:与UDP打洞类似,但应用于TCP协议,成功率相对较低,因为TCP协议本身的一些特性使得打洞更加困难。
- STUN服务器:STUN服务器帮助客户端发现自己的公网IP地址和端口号,也就说,客户端A主动请求一下STUN服务器,那STUN服务就知道了A的IP和端口,并且保存下来,这样客户端B想要连接客户端A的时候,就可以从STUN服务器得到A的地址。
- TURN服务器:当直接连接无法建立时,可以通过TURN服务器转发数据。
- ICE框架:结合了多种NAT穿透技术(包括STUN和TURN),提供了一种更全面的解决方案来处理不同的NAT类型和防火墙设置。
早期组网技术
在网桥技术出现之前,组建局域网(LAN)主要依赖于粗同轴电缆和集线器(Hubs),以及稍后的细同轴电缆。以下是那个时期构建局域网的一些关键技术点:
- 粗同轴电缆(Thicknet)
- 以太网标准:最初,局域网采用的是基于DIX以太网标准的粗同轴电缆,也称为10Base5。这种电缆直径较大,最大传输距离可达500米。
- 连接方式:设备通过一种名为“vampire tap”的装置直接物理连接到电缆上,这种方式需要钻透电缆的外皮来建立连接,比较复杂且不易维护。
- 细同轴电缆(Thinnet)
- 改进版本:随后出现了更为灵活的细同轴电缆标准,即10Base2,也被称作“Cheapernet”。相比粗同轴电缆,它更易于安装和布线,但仍然受限于总线拓扑结构。
- 链路长度:细同轴电缆的最大段长为185米,并且所有节点共享同一介质,这意味着网络性能容易受到单个节点故障的影响。
- 集线器(Hub)
- 中心化连接:随着技术的发展,开始使用集线器作为中心设备来简化局域网的搭建。每个设备通过双绞线连接到集线器的一个端口上,形成星型拓扑结构。
- 工作原理:集线器本质上是一个多端口的中继器,它将从一个端口接收到的所有数据包广播到所有其他端口。这种方法虽然简单易行,但由于缺乏智能处理能力,导致了严重的带宽浪费和潜在的安全隐患。
局域网限制
由于上述技术手段缺乏有效的流量控制机制,早期的局域网存在明显的局限性:
- 冲突域问题:所有连接在同一段电缆上的设备构成一个冲突域,当多个设备同时尝试发送数据时会发生冲突,降低整体网络效率。
- 扩展困难:随着用户数量增加,单纯依靠延长电缆或添加更多集线器会导致管理复杂度上升,并可能影响网络稳定性。
直到网桥技术的引入,才有效解决了这些问题。网桥能够分割大型局域网为较小的部分,减少冲突域大小,从而提高了网络性能并促进了更大规模网络的有效管理。此外,网桥还可以过滤不同部分之间的流量,增强安全性并优化资源利用。
冲突域
每个接入网络的人都有发送消息的权利,但在同一时间只能有一个人占当前的线路,否则会发生混乱,因此每个人需要在发生前进行载波侦听(是否有人正在占线),如果有则需要等待后才可以发送消息。
当两端同时发生冲突时,则会发生冲突检测,会话终止并随机等待一段时间后再开始的判断。
因此,在同一个网络介质下的多个节点按照以上方式进行共享链路带宽的传输任务。而当冲突发生时网络进行随机一段时间的等待(称为回退),此时不进行传输。
而当链路中的节点越多冲突的发生概率就会更大,无法保证通信质量。将连在同一介质下的所有节点集合,称作冲突域。此时,总线型的网络方式就不够合适了,于是引入了二层交换机。
二层交换机,工作在数据链路层,是基于 MAC地址的基础上对数据包的转发。内部的 ASIC的芯片来实现硬件转发。二层交换机的端口发送和接受数据独立,从而可以将各端口归属于不同的冲突域,从而有效的隔离了冲突。
集线器
集线器(Hub)是一种简单的网络设备,主要用于局域网(LAN)中连接多个设备。它工作在OSI模型的物理层(第一层),主要作用如下:
- 信号转发:集线器的主要功能是接收从一个端口传入的数据信号,并将这个信号广播到所有其他端口。这意味着无论数据包的目标地址是什么,集线器都会将接收到的信息发送给所有连接的设备。
- 网络连接:通过提供多个端口,集线器允许计算机、打印机或其他网络设备相互连接,形成一个网络。这使得这些设备能够共享资源或相互通信。
- 扩展网络:集线器可以用来扩展网络规模,通过连接多个集线器或者其他网络设备,可以构建更大规模的网络结构。
然而,集线器也有其局限性:
- 效率低:因为集线器无法识别目标地址,会将数据发送给所有端口,这样会导致不必要的网络流量增加,尤其是在大型网络中。
- 冲突域:所有的端口共享同一个冲突域。如果两个设备同时尝试发送数据,会发生冲突,导致数据需要重新发送。
- 不支持高级功能:与交换机和路由器相比,集线器缺乏智能处理能力,不能提供如MAC地址过滤、VLAN划分等高级功能。
网桥
网桥(Bridge)在网络中主要用于连接两个或多个局域网(LAN)网段,它工作在OSI模型的数据链路层(第二层),能够识别MAC地址并据此决定是否转发数据帧。网桥有一个映射表,MAC->PORT 是多对一的关系,它跟交换机一样也是通过学习过程来填充映射表的。将两个集线器连接在网桥的两个端口上就实现这两个局域网的互通。
以下是网桥的主要作用:
- 分割冲突域:通过学习MAC地址表,网桥可以智能地将数据帧仅转发到目标设备所在的网络段,而不是广播到所有连接的设备。这有助于减少网络中的冲突,提高网络效率。
- 扩展网络:网桥允许扩展局域网覆盖范围,同时保持各部分网络的逻辑连通性。这对于那些物理上分布较广但需要作为一个整体进行管理的网络特别有用。
- 过滤通信流量:网桥能够根据MAC地址过滤数据帧,阻止不必要的流量穿越整个网络。这意味着只有目的地为另一侧网段的数据帧才会被转发,从而减少了跨网段的流量,提高了网络性能。
- 促进不同类型的LAN互连:虽然现代应用较少见,但在过去,网桥曾用于连接使用不同协议的局域网,如以太网和令牌环网。
- 提高安全性:通过限制哪些数据帧可以通过网桥,可以在一定程度上控制网络访问,增强网络安全。
交换机
交换机是在网桥的基础上发展而来的,它拥有更多的端口。假如一个交换机有24个端口,那么只要连接到这个交换机上的所以网络设备都可以通信,交换机工作在OSI第2层,即链路层,通过MAC地址来通信,不需要IP。比如设备1要向设备2发送数据,交换机的职责就是搞清楚设备2接在哪个端口上,以及设备2的MAC地址,然后交换机就从此端口发出数据,数据中会带上MAC地址。
交换机中会存储一个映射表(MAC->PORT),刚开始这个表是空的,设备1向设备2发送数据,交换机就知道MAC1接到了PORT1上,存起来,但是并不知道设备2的信息,此时它会将消息向所有设备广播(设备1除外),因为数据中带有目标MAC地址,所以这些设备收到数据后会进行校验,如果不是发给自己的那就舍弃,如果是目标MAC,那就处理,并做出回应,此时交换机就会知道MAC2接到了PORT2,因此经过一段时间之后,这个映射表就齐全了,此后就是精准发送,而不是广播,效率得以提升。
交换机中的端口和MAC是一一对应的关系,如果某个端口换了设备,对应的MAC会更新。
虚拟局域网VLAN
同一个交换机上的设备属于同一个局域网(广播域),而VLAN技术,可以在同一物理交换机上创建多个逻辑上的独立广播域。每个VLAN相当于一个独立的广播域,即使这些VLAN可能共享相同的物理交换机。这样,属于不同VLAN的设备之间不会直接接收到对方的广播流量,除非通过路由器进行通信,这有效地实现了广播域的隔离。处于不同的 VLAN下的端口,必须经过三层交换机或路由器在网络层进行转发。
获取MAC地址
在同一个广播域中,设备之间是通过MAC地址来通信的,比如交换机。那么设备A如何知道设备B的MAC地址呢?这里就需要用到ARP广播协议。ARP广播报文只会在广播域中传播,路由器可以隔离广播域,该网络中所有主机包括网关都会接收到此ARP request报文。网关将会阻止该报文发送到其他网络上。只有目标IP的主机才会回应。
ARP Request: who hua 10.0.0.3? Tell 10.0.0.1
ARP Response: 10.0.0.3 at 54:89:98:db:33:4e
每台设备都会缓存一份 IP --> MAC 的信息表,防止每次通信都要广播,当然,这个缓存表也是有过期时间的。
路由器
路由器在网络中扮演着至关重要的角色,其主要作用包括以下几个方面:
- 路径选择:路由器工作在OSI模型的网络层(第三层),能够根据IP地址进行数据包的转发。它使用内部路由表来决定数据包从源地址到目的地址的最佳传输路径。当路由器接收到一个数据包时,它会检查目标IP地址,并根据路由表中的信息决定将该数据包转发到哪个接口或下一跳路由器。
- 连接不同网络:路由器可以连接不同类型和规模的网络,如局域网(LAN)与广域网(WAN)、两个不同的局域网或者互联网。通过这种方式,路由器使得位于不同网络中的设备能够相互通信。
- 隔离广播域:路由器不会自动转发广播消息。这意味着每个路由器接口连接的网络部分构成了独立的广播域,有助于减少不必要的网络流量,提高网络效率,并增强安全性。
- 实施网络安全策略:路由器可以配置访问控制列表(ACLs)和其他安全措施来限制哪些类型的流量可以通过,以及哪些设备可以相互访问。这有助于保护网络不受未经授权的访问和攻击。
- 支持多种协议:除了处理IP协议外,路由器还可以支持其他网络协议,如IPv6、AppleTalk等,以适应不同的网络环境需求。
- 提供动态路由功能:通过运行路由协议(如RIP、OSPF、BGP等),路由器能够动态地学习和更新路由表,从而适应网络拓扑的变化,确保数据包始终沿着最优路径传输。
- 实现NAT(网络地址转换):路由器通常用于执行NAT,允许使用私有IP地址的内部网络设备与外部公共网络(如互联网)通信,同时隐藏内部网络结构,进一步增强安全性。
路由器和交换机的区别
路由器和交换机是计算机网络中两种基本但功能不同的设备。以下是它们之间的一些关键区别:
工作层次
- 交换机:主要工作在OSI模型的第二层(数据链路层,只关心MAC地址),某些高级交换机也可以工作在第三层(网络层),这类交换机通常被称为三层交换机。
- 路由器:工作在OSI模型的第三层(网络层,只关心IP地址)。
功能
- 交换机:主要用于局域网(LAN)内部的数据帧转发,它通过学习MAC地址表来决定如何将数据帧发送到正确的端口。交换机可以减少冲突域,并且支持VLAN(虚拟局域网)以提高网络的安全性和管理效率。
- 路由器:用于连接不同的网络或子网,执行路由选择功能,根据IP地址决定最佳路径转发数据包。路由器还提供NAT(网络地址转换)、DHCP(动态主机配置协议)、防火墙等服务,以及可能包括无线接入点的功能。
数据转发机制
- 交换机:使用MAC地址进行数据帧的转发。当一个数据帧到达时,交换机会检查其MAC地址表来确定目标MAC地址对应的输出端口。
- 路由器:使用IP地址进行数据包的转发。路由器会查看目的IP地址,并根据路由表来决定下一跳地址。
广播域与冲突域
- 交换机:每个端口代表一个独立的冲突域,但是所有端口仍然属于同一个广播域(除非使用了VLAN)。
- 路由器:每个接口代表一个独立的广播域和冲突域,因此路由器天然地隔离了广播域。
应用场景
- 交换机:适用于需要在同一局域网内连接多个设备的情况,如办公室、数据中心等。
- 路由器:适用于需要连接不同网络或者子网的场合,例如家庭网络连接互联网,企业环境中的分支互联等。
价格和复杂性
- 交换机:对于小型网络或家庭用户来说,二层交换机的价格相对较低,设置也较为简单。
- 路由器:家用路由器集成了一些额外的功能,比如无线接入点,而企业级路由器则更复杂且价格更高,因为它们需要处理更多的流量和更复杂的路由决策。
综上所述,虽然交换机和路由器都可以在网络中传输数据,但它们的作用和工作方式有显著的不同。交换机主要用于局域网内的高效数据交换,而路由器则是跨网络通信的关键设备。在实际应用中,两者常常协同工作,构建出完整的网络架构。
桥接网络与NAT的区别
桥接网络和NAT(网络地址转换)是两种不同的网络连接方式,它们在网络配置、工作原理、应用场景等方面有着明显的区别。以下是两者的主要区别:
网络配置
- 桥接模式:在这种模式下,虚拟机直接连接到物理网络,就像是一台独立的物理设备。它会从网络中的DHCP服务器获取自己的IP地址,与宿主机处于同一网段这意味着虚拟机可以直接与其他网络设备通信,并且可以被其他设备访问。
- NAT模式:在NAT模式中,虚拟机通过一个内部网络适配器连接到一个虚拟路由器,这个虚拟路由器负责将私有IP地址转换为宿主机的公共IP地址,从而允许虚拟机访问外部网络。虚拟机通常会获得一个私有的IP地址,例如
10.x.x.x
或192.168.x.x
工作原理
- 桥接模式:桥接模式工作在数据链路层(OSI模型的第2层),它通过MAC地址转发数据帧,不修改数据帧的内容。这意味着所有进出虚拟机的数据包都直接通过物理网络传输,没有经过任何形式的地址转换。
- NAT模式:NAT模式则工作在网络层(OSI模型的第3层),它修改数据包的源或目标IP地址及端口号,以实现私有网络与公共网络之间的通信。当虚拟机尝试访问互联网时,其请求首先发送到虚拟路由器,后者将其私有IP地址转换为宿主机的公共IP地址。
地址处理
- 桥接模式:虚拟机需要有自己的独立IP地址,并且必须确保该IP地址不会与网络上的其他设备发生冲突。
- NAT模式:虚拟机的IP地址是由虚拟化软件分配的,通常位于一个私有的子网内,不需要担心与外部网络的IP地址冲突。
应用场景
- 桥接模式:适用于那些需要提供服务(如Web服务器)或需要直接与局域网内的其他设备进行通信的虚拟机。
- NAT模式:更适合于只需要访问互联网但不需要对外提供服务的虚拟机,因为它提供了额外的安全性,防止外部网络直接访问虚拟机。
透明性与性能
- 桥接模式:对上层协议透明,设备无需知道桥接的存在。由于它直接转发数据帧,因此延迟较低。
- NAT模式:对某些协议(如FTP、SIP等)可能需要额外处理(NAT穿透)。由于需要修改数据包,可能会增加一定的延迟。
总结来说,如果你希望虚拟机能够像物理机器一样参与到局域网中,并且能够被其他设备访问,就需要桥接网络。而如果你只关心虚拟机能否上网,而不希望它暴露给外部网络,或者你的网络环境不允许每个虚拟机都有独立的公网IP地址,那么NAT模式可能是更好的选择。根据具体的使用需求和网络条件来决定最适合的网络模式。一般在虚拟机上可能同时需要NAT和桥接网络,所以需要两个虚拟网卡。
子网划分
示例:192.168.0.0/24
后面的/24
表示子网掩码占24位,IPv4是四个字节,也就是32位,所以子网IP是192.168.0.xxx
一个200人的办公室有线组网方案
[Internet]↓
[防火墙/边界路由器]↓
[核心交换机] ↘ ↘[汇聚交换机1] [汇聚交换机2]↘ ↘[接入交换机A] ... [接入交换机X]↘ ↘用户终端 用户终端