交换机与路由器
Posted 皓洲
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了交换机与路由器相关的知识,希望对你有一定的参考价值。
交换机与路由器
参考视频:https://www.bilibili.com/video/BV1fU4y1t7Ju
交换机
我们先来了解一下交换机,它的功能就是把数据包发送到正确的位置。
交换机就像是快递员,它可以根据数据包中的目标mac地址,找到它对应的物理端口,一台交换机有很多个端口,他们都有自己的编号,计算机的网卡通过网线连接到交换机的端口上,这个端口就是一个确定的物理位置,我们只要知道某个网卡的mac地址在哪个端口上,我们就能正确的把数据包发给他。
在交换机中,有一张端口与mac地址的映射关系表,我们称之为mac地址表,交换机维护着这张映射关系表,想要和某个mac地址通讯时,只需要查询一下mac地址在哪个端口上,然后从对应的端口发送出去就可以了。
我们知道,每一个数据包都会有两个mac地址,一个时发送方的mac地址称之为源mac,另一个时接收方的mac地址成为目标mac。交换机收到一数据包后,会执行以下步骤:
- 首先要把这包数据的源mac与发送端口进行绑定
- 然后交换机要根据目标mac查找,从哪个端口把数据包发送出去。有下面两种情况:
- 第一种是在mac地址表种查询到了端口,那就直接从关联端口发送出去。
- 第二种是找不到端口,那么就向发送端口以外的端口进行群发。如果目标地址在这个网络中,那么它一定能收到群发的数据包。
如此下来,通过交换机的mac地址表,就可以找到该网络中的所有网卡设备。
由此可见:交换机只会关心数据包中的mac地址,而不会关心IP地址。mac地址在TCP/IP协议(或者OSI模型)中,处于第二层数据链路层,所以交换机也被称为二层设备。
路由器
我们知道路由器有两种接口,一种是LAN口、一种是WAN口。LAN口有多个,可以用来连接家庭网络设备。WAN口只有一个,它是连接到互联网的,如果把路由器的WAN口忽略,那么他和交换机就没有任何区别了。
如果考虑WAN口的话,这里就需要引入一个概念:网关。
网关
我们先从子网划分讲起。
如果我们把两个IP地址和子网掩码按位相与得到的结果相同,那么我们就认为这是在同一个子网中。(这个和HashMap有异曲同工之妙,IP地址就像hashCode,子网掩码就是表的大小n-1)
不同子网之间是不可以直接通信的,如果要通讯,则需要通过网关来进行转发,网关有两张网卡,分别配置了属于两个子网的IP地址,可以在两个网络之间转发数据包。
我们通过计算机A发送数据包到计算机B来举个例子:
- 子网1中的计算机A发送数据包,根据目标IP判断是否与自己处于同个子网
- 如果是同个子网,那么就可以直接通过网卡发出
- 如果不是同一个子网,则把目标mac改为网关mac发出,发送给网关
- 网关通过路由表查询到数据包属于子网2
- 网关将目标mac地址改为计算机B,源mac地址改为自己的mac
- 把数据发送给计算机B
网关在这个过程中的行为,就称为路由。
以上是数据包通过网关在两个子网中的传输过程,但是我们平时对互联网的访问是公网,那路由器是怎么做到的呢?
SNAT
我们在家庭网络中,将一个数据包发送到公网服务器时,会进行以下SNAT过程:
- 一个计算机发送一包数据出来到路由器上,包含两个重要信息:原IP+端口、目标IP+端口
- 路由器在拿到这个数据时,会进行源IP地址和端口转换,源IP地址改为WAN口的公网IP,端口也通过一定的规则进行修改,比如计算机A的123端口改为123,而计算机B的123端口改为321,然后将数据发送出去。
- 服务器收到数据,处理完后,需要回复,把源IP+端口和目标IP+端口互换。
- 路由器收到回报,执行反向SNAT,这时候可以根据端口判断是“123”还是“321”来确定是计算机A还是计算机B的数据包。并且在反向SNAT时,将目标端口改回。
以上是关于交换机与路由器的主要内容,如果未能解决你的问题,请参考以下文章
SDN的南向接口(Southbound interface)与北向接口是什么