惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
量子位
S
SegmentFault 最新的问题
V
Visual Studio Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
D
Docker
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
博客园 - Franky
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
V
V2EX

蛮荆

如何获取更多的免费服务器 Kubernetes 调度器队列 - 设计与实现 Kubernetes 调度器 - 核心流程 Kubernetes Networking Model & CNI Kubernetes 控制器管理总结 Kubernetes CronJob 设计与实现 Kubernetes Job 设计与实现 Kubernetes HPA 设计与实现 Kubernetes Deployment 滚动更新实现原理 Kubernetes GC 设计与实现 Kubernetes Pod 驱逐 - 设计与实现 Kubernetes Daemonset 设计与实现 Kubernetes ReplicaSet 设计与实现 Kubernetes EndPoint 设计与实现 Kubernetes Informer 设计与实现 降本增效之应用优化 (三) 日志存储与检索 Kubernetes Pod 设计与实现 - 创建流程 Kubernetes 探针设计与实现 Unix 编程艺术名句摘录 Kubernetes - CRI 概述 Golang 编译速度为什么这么快? Kubernetes Pod 设计与实现 - Pause 容器 Kubernetes - kube-proxy 代理模式工程优化 Kubernetes 应用最佳实践 - 优雅关闭长连接 Kubernetes Service 类型和会话亲和性 Kubernetes 为什么需要 Ingress Kubernetes 架构 - 控制平面和数据平面 降本增效之应用优化 (二) 大报表 Go 语言如何获取 CPU 利用率 降本增效之应用优化 (一) Redis
网络基础: 交换机和路由器的区别
2018-01-25 · via 蛮荆

网络基础: 交换机和路由器的区别

2018-01-25 计算机网络

  • 前言
  • 工作层次
    • 交换机
    • 路由器
  • 转发依据
  • 转发表的维护方式
  • 转发规则
  • 端口和 Mac 地址
  • 附录
    • 三层交换机与路由器的比较
  • 扩展阅读

前言

本文中提到的交换机指的是 “二层交换机”,路由器指的是 “三层路由器”,三层交换机 (或者带有路由功能的交换设备等) 不在本文讨论范围内。

工作层次

  • 交换机主要工作在数据链路层,主要用于组建局域网
  • 路由器工作在网络层,主要用于将交换机组建的局域网相互连接起来,或者接入互联网

有个很形象的比喻:

交换机是小区看门大爷,路由器是快递小哥。

交换机

交换机是基于以太网设计的,实现了特定网络内的 数据帧 转发。

路由器

路由器是基于 IP 设计的,实现了不同网络之间的 数据包 转发。

图片来源: 网络是怎样连接的(户根勤)

路由器在转发网络包时,需要在前面加上 Mac 头部 (将 IP 报文包装进二层数据帧),委托数据链路层去传输数据 (传输到下一个路由器)。

创建 Mac 报文头部时,从路由表中查找出下一个路由器的 IP 地址,并通过 ARP 查询出对应的 Mac 地址,然后将 Mac 地址写入 Mac 报文头部中,表示 IP 对以太网的委托只是将包传输到下一个路由器就行了。

当包到达下一个路由器后,下一个路由器又会重新委托以太网将包传输到再下一个路由器,以此类推,包最终到达 IP 目标地址。


转发依据

  • 交换机转发所依据的对象是 Mac 地址
  • 路由转发所依据的对象是 IP 地址

Mac 地址通常是硬件实现的,由网卡生产商来分配,一般情况下不可修改。

IP 地址是在软件中实现的,描述的是设备所在的网络,通常由网络管理员或系统自动分配。

转发表的维护方式

  • 交换机维护 Mac 表
  • 路由器维护路由表

交换机对 Mac 地址表的维护是数据包转发操作中的一个 (顺带的) 步骤。

路由器对路由表的维护和数据包的转发操作相互独立的,也就是说,在转发数据包的过程中不需要对路由表的内容进行维护。

对路由表进行维护的方法有几种,大体上可分为以下两类。

  1. 由人手动维护路由记录
  2. 根据路由协议机制,通过路由器之间的信息交换,由路由器自行维护路由表的记录

转发规则

  • 交换机在地址表中只匹配完全一致的记录
  • 路由器只匹配网络号部分,忽略主机号部分
  • 交换机不会校验包中的目标 Mac 地址,全部收下做转发
  • 路由器会校验包中的目标 Mac 地址是不是自己,如果是的话存入内存缓冲区,否则丢弃
  • 交换机匹配不到时广播消息
  • 路由器匹配不到时丢弃消息

如果交换机在 Mac 地址表里找不到转发端口时,会选择广播。

如果路由器在路由表中无法找到匹配的记录,会丢弃这个包,并通过 ICMP 消息 (Destination Unreachable) 告知发送方。

两者的处理机制完全不同,原因在于网络规模的大小。

交换机连接的网络最多也就是几千台设备的规模,这个规模并不大。如果只有几千台设备,遇到不知道应该转发到哪里的包,交换机可以将包发送到所有的端口上,虽然这个方法很简单粗暴,但不会引发什么问题。

然而,路由器工作的网络环境就是互联网,它的规模是远远大于以太网的,全世界所有的设备都连接在互联网上,在如此庞大的网络中,如果将不知道应该转发到哪里的包发送到整个网络上,那就会产生大量的网络包,造成网络拥塞。因此,路由器遇到不知道该转发到哪里的包,就会直接丢弃。

端口和 Mac 地址

交换机只是将数据包转发到正确的端口,它自己并不会成为数据包的 (源) 发送方、(目标) 接收方。

路由器的各个端口都具有 Mac 地址和 IP 地址,因此能够成为数据链路层/以太网的发送方和接收方。从这个意义上来说,它和计算机的网卡是一样的。当转发数据包时,首先路由器端口会接收发给自己的以太网包,然后查询转发目标,再由相应的端口作为发送方将以太网包发送出去。


附录

前文中提到了交换机和路由器的几个区别,那么两者之间有哪些相同点呢?

路由器和交换机不考虑请求包和响应包之间的关联,而是将它们作为独立的包来对待,因此请求和响应有可能通过不同的路由来传输,具体走哪条路由,是由路由器的路由表和交换机的地址表中的配置来决定的。

服务器向客户端返回的响应消息 和 客户端向服务器发送的请求消息 不一定通过相同的路由传输。

三层交换机与路由器的比较

图片来源: 图解网络硬件(三轮贤一)

传统路由器的路由选择功能、分组转发以及管理功能等均由 CP U处理,管理功能负载的增加,就会带来分组转发能力的下降。

L3 交换机改善了这一缺点,将硬件设备内部分离成两个区域,即以路由选择、管理功能为主的控制平面,和以数据转发功能为主的数据平面,从而实现了能够高速转发分组的系统架构。

图片来源: 图解网络硬件(三轮贤一)

扩展阅读