3、集线器、交换机、路由器、ip的关系。

所有图片和资料均来源于B站:网络安全收藏家

1、集线器

一开始两台电脑通信就需要网线就可以,但是三台或者更多主机通信时,就需要很多网口,用来插网线。这样显然是不合理的。集线器就应运而生。大家都接集线器,集线器通过广播的形式进行工作。主机1要和主机5通信时候,需要携带目标的mac地址、源mac地址、数据.。然后给到集线器,集线器通过广播的形式寻找通信的目标。机器多了,通信需求多,这样的通信方式很容易造成广播风暴

在这里插入图片描述

2、交换机(每个交换机是不同的广播域,ip地址起到划分广播域的作用)

为了应对上述的情况,需要划分广播域,但是mac地址不满足需求,这个时候,ip地址产生了。这种情况下,需要为每台机器,自动分发ip 地址,集线器不满足需求了。需要交换机中的DHCP,来给主机分发ip .

在这里插入图片描述

3、 路由器

交换机集群多了以后,就需要路由器来管理交换机了。夸交换机通信的请求,需要通过路由器来实现。请求通过路由器找到对应的交换机的地址段,转发请求到对应的交换机。交换机拿到请求,通过ARP协议,将ip地址转换我mac地址。arp协议本质上是ip和mac地址对照表
在这里插入图片描述

4、ip地址

ipv4地址现在不够用:
在这里插入图片描述

主要采用以下解决办法:

  • 通过划分私网和公网ip。比如将192.168.x.x划分为私网ip地址。私网ip可以在不同的局域网里面,重复出现。但是它们上不了公网。通过连接的公网路由器来上网。公网ip地址是唯一的。

  • 举例:如果我们访问www.baidu.com。

  • 1、首先我们要将请求中的地址,通过DNS转换为数据形式的ip。119.12.66.22。

  • 2、我们在路由器这边通过NAT网络地址转换,打包一个数据包。
    数据包内容:目标ip(百度服务器所在的公网路由器)、源ip(主机所在的公网路由器)、自己的私网ip、目标程序的port (请求到百度所在的公网ip以后,通过端口号来寻找服务所在的主机)。

  • 请求到达百度所在的服务器以后,通过端口映射找到。80对应192.168.12.11这台主机。

  • 第一次找百度服务所在的公网路由器时候,需要通过路由跳转,但是这是个人主机所在的路由器会记录百度服务器的ip地址,下次请求直接发送过去。

### 集线器交换机路由器的区别及功能 #### 集线器的功能与特点 集线器是一种基本的网络设备,仅具备简单的转发功能。其工作原理是在接收到数据信号后,会无差别地向所有端口广播该信号,而不考虑目标地址。因此,在同一冲突域内的所有设备都会接收到来自任何其他设备的数据帧,这可能导致带宽浪费以及潜在的安全风险。由于缺乏智能化处理能力,集线器被认为是被动式的硬件装置,并不运行专门的操作系统软件[^1]。 #### 交换机的工作机制及其分类 相比之下,交换机会更加智能一些。它能够识别并记录下连接到各个端口上的MAC地址信息,从而实现精确的目的地寻址传输服务。当一个数据包到达时,第二层(即数据链路层)交换机会检查目的MAC地址并将之定向发送给对应的接口;而第三层交换除了具有上述特性外还能执行IP路由选择操作,类似于小型化的内部网关协议路由器。不过总体而言,无论是哪种类型的交换机所提供的功能性都要逊色于真正的路由器产品[^2]。 #### 路由器的独特之处 作为高级别的联网组件之一,路由器不仅限于局域网内通信管理,还可以跨越多个不同子网甚至广域范围来进行高效的信息传递任务。通过解析更高层次——也就是网络层中的逻辑地址结构来决定最佳路径规划方案,进而完成跨网段间报文的有效分发作业。此外值得注意的是,现代路由器通常配备有丰富的配置选项和支持多种安全策略实施手段,这些都是普通意义上的Hub所不具备的能力特征。 ```python # Python伪代码展示三种设备的主要区别 class Hub: def __init__(self): self.port_count = None def broadcast(self, data_signal): # 将接收到的数据信号无差别的传送给所有端口 pass class Switch(Layer=2): mac_table = {} @staticmethod def forward_based_on_mac(data_frame): destination_address = get_destination_from_data_frame(data_frame) if destination_address in Switch.mac_table.values(): send_to_specific_port(destination_address) class Router(NetworkLayer=True): routing_table = [] @classmethod def route_packet(cls, ip_packet): target_network = extract_target_network(ip_packet) for entry in cls.routing_table: if matches_route(entry, target_network): next_hop = determine_next_hop(entry) transmit_to(next_hop) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值