notes

路由器和交换机的区别

以前在公司涉及到网络方面的东西经常会听到同事提到交换机,我搞不懂交换机是什么,和路由器有什么区别。后来弄清楚后是这样的,交换机和路由器上都有很多的网线插口,很多设备都可以接入组成一个内网,最常见的就是家用路由器,组成一个内网之后,所有的设备都在一个相同的网段里面,比如 192.168.0.0 这个网段,交换机也可以实现同样的功能,唯一一点的区别是交换机没有跨网段的能力,而路由器有。比如有两个网段 192.168.0.0 和 192.168.1.0,想要联通这两个网络的话必须用路由器,而不能用交换机,这也是为什么家里用的都是路由器,因为家里要连接外网肯定是要跨网段,最终要转成公网的 IP,而不是像 192.168 这种内网 IP。

既然说路由器有跨网段的能力,那么为什么我很多的设备插到路由器后面的 LAN 插口里,他们是在同一网段呢?感觉应该是不同的网段才对啊?

事实是这样的,一般路由器只有1个 WAN 口和多个 LAN 口,只有 WAN 口有跨网段的能力,LAN 口没有,可以把多个 LAN 口看成是路由器内置了一个交换机。

什么是MAC地址,网卡

电脑想要上网,就需要网卡,网卡负责接口来自互联网(或者内网)的流量,每个网卡都有全球唯一的一个地址,叫做 MAC 地址,MAC 地址就是网卡的地址,MAC 地址一般用 “-“ 分成六段,前三段表示生产厂家,后三段由每个厂商自行决定。

网段,子网掩码

比如有一个 IP 192.168.0.1,一般情况下,网段就是 192.168.0.0,网段最后都是以 0 结尾的,像 192.168.0.1 这种是网段内具体的某一个 IP。

上面之所以说是一般情况下,是因为有例外,其实看网段是要看子网掩码的,比如这个 192.168.0.1/24,这个 IP 的子网掩码是 255.255.255.0,为什么我一看就能看出来呢?是因为后面的 24 数字表示的是子网掩码,一个 IP 占 32 个字节,24 / 8 = 3,意思就是前面 3 个字节表示网段,后面 1 字节表示主机位。比如有些 IP 是这样的 192.168.0.1/23,这就和刚刚的 IP 不在同一个网段,是属于不同的网段,不能直接访问。

干过开发的同学可能有一个疑惑,为什么有时候 ping 一个不同的网段 IP 能 ping 通,有时又不行,不同的网段能不能互相访问靠的是什么呢?

靠的是路由器,一般由交换机组成的内网都是在同一个网段的,但是如果主机太多的话,内网 IP 会不够用,所以就分多个网段,那如果想让多个处在不同网段的电脑互相访问,那这多个网段就必须用路由器连接。路由器具有跨网段的能力。

TTL 和 ping 的神奇用法

TTL 是 time to live,表示这个数据包在网络上的存活时间,是一个整数。比如一个数据包的 TTL 为 8,则表示这个数据包在网络上经过 8 个路由器如果还没到达目的地,那么就丢掉。每经过一个路由器,路由器就会把 TTL 值减去 1,设计这个 TTL 的目的就是防止数据无限次的在互联网上传输。比如数据经过一个路由器A,路由器内部有个路由表,判断这个数据包下一次的目的地,那假设路由器A把数据包传给了路由器B,路由器B经过判断又把数据传给了路由器A,如果没有 TTL 的限制,那么这个数据包会在这两个路由器间永远传递下去。

我们可以用 ping 命令查看数据包到达目的地的详细过程。就是用 TTL 来实现。

以 mac 系统为例:

# 输入 ping 查看命令信息,发现 -m 参数为设置 ttl 的值
> ping

# 设置 ttl 的值为 1,这样在数据包到达第一个路由器就会被丢弃
# 然后看返回的数据,找到 36 bytes from 10.11.32.1 这行,这表示到达 10.11.32.1 这个路由器时被丢弃,返回了 36 个字节的数据
# 仔细观察,本机 ip 是 10.11.xx.xx,发现 10.11.32.1 这个 ip 就是内网的网关,这也符合逾期,到达的第一个路由器肯定是网关嘛。
> ping www.baidu.com -m 1
PING www.a.shifen.com (180.101.49.11): 56 data bytes
36 bytes from 10.11.32.1: Time to live exceeded
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 88a6   0 0000  01  01 1931 10.11.40.87  180.101.49.11

# 然后把 -m 参数改成 2,这样就能拿到第二个路由器的 IP 信息,这里看到的第二个路由器是 172.16.0.1,也是一个网关,可以看到还是在内网里
# 接下来就是依次改 -m 的值,就能知道数据包经过的所有路由器。
> ping www.baidu.com -m 2
PING www.a.shifen.com (180.101.49.12): 56 data bytes
Request timeout for icmp_seq 0
36 bytes from 172.16.0.1: Time to live exceeded
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 4760   0 0000  01  01 5a76 10.11.40.87  180.101.49.12

NAT

VPN

蜂窝网络

为什么我们手机上用的 4G,5G 叫蜂窝网络?

是因为移动网络是要发数据给附近的基站的,基站的排列很像蜂窝,基站不能靠太近也不能隔太远,像蜂巢一样。

IPv6

CDN

DDos

DNS 劫持

我们在浏览器中输入域名的时候,会向 DNS 服务器发送请求,返回域名对应的 IP 地址。DNS 劫持的意思是就是 DNS 服务器被劫持了,假设 域名_A 本来对应的是 IP_A,当我们访问一个被劫持的 DNS 服务器时,可能请求 域名_A 返回的是 IP_B,那我们就访问到了别的页面。所以我们平时在访问页面的时候尽量选择可靠的 DNS 服务器。

HTTP 劫持

发生 HTTP 劫持的原因就是 http 请求在网络中是明文传输的,http 劫持会劫持网络中的 http 请求,然后加一些脚本进去,比如我们浏览网页经常会看到页面的右下角会有弹窗的广告,这些广告可能并不是该网站投放的。

最好的解决办法就是使用 HTTPS。

TLS 和 SSL

我们知道,HTTPS = HTTP + SSL/TLS,现在