关于交换机
交换机用于局域网内部连接多台设备,工作层级为数据链路层(OSI第二层)因此交换机被称为二层设备。
交换机内部的CPU会在端口成功连接时,将MAC地址和端口对应,形成一张MAC表。每当设备连接时,交换机会将新设备的MAC更新到转发表。
交换机的转发表:
转发表包含了MAC地址和端口
端口的作用是什么?当交换机收到一个数据帧时,会去查询目标的MAC地址,如果有查到对应的MAC地址,则精准推送,不需要广播所有端口。目的是减少不必要的网络流量。
交换机在推送数据帧时,会有两种特殊情况:1.未知MAC地址,如果表找不到对应的MAC,就会触发泛洪机制(广播到所有端口)设备相应后更新转发表。
由此可见,交换机并不关心IP,只关心MAC地址
关于路由器
路由器有两种接口:WAN口和LAN口
WAN口用于连接运营商
LAN口则用于连接多个家庭设备(wifi连接也是同理,是LAN口)(因此,如果只使用LAN口,则路由器=交换机)
TCP/IP协议规定,不同子网之间是不可以通信的,如果需要通信则只能通过网关转发。
路由是怎么实现的
首先处于子网1下的计算机a在发送数据包时,会根据目标IP判断是否与自己同一子网,如果在则直接通过网卡发出,如果不在,则目标mac改为网关mac并发给网关
网关再根据路由表,查询出来子网b,修改目标mac地址为子网b下计算机b的地址,修改源mac为自己的mac(已经不是计算机a的mac了),从子网2的网卡发出
关于IP设置
为什么要避免使用xx.xx.xx.1 xx.xx.xx.255?
在绝大部分情况下,xx.xx.xx.1是最常见的网关IP。因此如果电脑要连入互联网,就最好避免使用这个ip。
xx.xx.xx.255是绝对不能使用的IP,这是广播地址,如果分配给设备会导致网络故障
xx.xx.xx.0也是绝对不能使用的IP,这是网络地址,代表的是整个子网本身的地址,他可以用来标识一个网络段。
总结一下特殊IP:
- 0.0.0.0:默认路由/任意地址
- 255.255.255.255全网广播
- 网络地址(主机位全0):代表这个网段
- 广播地址(主机位全1):发送给所有设备
SNAT与DNAT
发送数据包到路由器上时,会有目标IP和源IP。在子网1下的计算机a的ip是192.168.1.2,在子网2下的计算机b的ip是192.168.1.2。如果就这样进行下去,那就会发生IP冲突,路由出去的数据包,在返回时找不到应该给谁。
SNAT(source nat)
源地址转换是内网设备发送数据给公网设备时,将其私有IP替换为公网IP,让回复能找回来。
在路由器拿到子网下内网设备发送的数据包时,会把其源ip替换为WAN口的公网IP,这样在公网请求的服务器返回的数据包就能找到原本的路径
但是SNAT也不只是到这里为止。如果在子网1下的计算机a和计算机b都请求了一个服务,那么服务该如何返回?很明显仅通过IP是不够的,需要更多的关联属性
以TCP\UDP为例,TCP\UDP中有其他的关键属性:源端口和目标端口,因此在SNAT中,就将原本的修改源IP变为了修改源IP+源port
在ICMP协议中,我们通常使用ping命令,ping命令是不带port的,在这里使用了其中的type+code作为替代。每一种协议都有自己对SNAT技术的实现方案。
DNAT(destination nat)
目的地址转换是在公网设备发送数据给内网设备时,数据在打入到路由器时,会将IP、port转为私有IP,让数据包找到真正的计算机。
在路由器拿到公网下的设备发送的数据包时,会将其WAN口的公网IP替换为私有设备的ip。