网络协议复习笔记(六)从MAC层继续出发
宿舍上网的原理
学校给每个宿舍的网口分配了一个 IP。这个 IP 是校园网的 IP,完全由网管部门控制。宿舍网的 IP 地址多为 192.168.1.x。校园网的 IP 地址,假设是 10.10.x.x。
有两个办法上网:
- 让舍长再买一个网卡。这个时候舍长的电脑里就有两张网卡。一张网卡的线插到宿舍的交换机上,另一张网卡的线插到校园网的网口。而且,这张新的网卡的 IP 地址要按照学校网管部门分配的配置,不然上不了网。这种情况下需要一直开着宿舍长的电脑。
- 共同出钱买个家庭路由器。家庭路由器会有内网网口和外网网口。把外网网口的线插到校园网的网口上,将这个外网网口配置成和网管部的一样。内网网口连上你们宿舍的所有的电脑。这种情况下需要一直开着路由器。
本质上第一种方式只是让舍长的电脑变成了一个有多个口的路由器,两种方法的本质是一样的。当舍长可以上网后,需要解决其他人电脑怎么上网的问题,就需要配置网卡,DHCP 进行网卡配置,除了 IP 地址,还需要配置Gateway ,也就是网关。
MAC 头和 IP 头的细节
在任何一台机器上,当要访问另一个 IP 地址的时候,都会先判断,这个目标 IP 地址,和当前机器的 IP 地址,是否在同一个网段。怎么判断同一个网段呢?需要 CIDR
和子网掩码
。
如果是同一个网段,例如,访问室友的电脑,就没网关什么事情,直接将源地址
和目标地址
放入IP 头
中,然后通过 ARP
获得 MAC
地址,将源 MAC
和目的 MAC
放入 MAC 头
中,发出去就可以了。
如果是不同网段,例如,访问你们校园网里面的 BBS。这就需要发往默认网关 Gateway
。Gateway 的地址一定是和源 IP 地址是一个网段的。往往不是第一个,就是第二个。例如 192.168.1.0/24 这个网段,Gateway 往往会是 192.168.1.1/24 或者 192.168.1.2/24。
发往默认网关
的过程就和发往同一个网段的其他机器是一样的:将源地址和目标 IP 地址放入 IP 头中,通过 ARP 获得网关的 MAC 地址,将源 MAC 和网关的 MAC 放入 MAC 头中,发送出去。
**网关往往是一个路由器,是一个三层转发的设备。**三层设备就是把 MAC 头和 IP 头都取下来,然后根据里面的内容,看看接下来把包往哪里转发的设备。宿舍里面,网关就是舍长的电脑。一个路由器往往有多个网口,如果是一台服务器做这个事情,则就有多个网卡,其中一个网卡是和源 IP 同网段的。
路由器是一台设备,它有五个网口或者网卡,相当于有五只手,分别连着五个局域网。每只手的 IP 地址都和局域网的 IP 地址相同的网段,每只手都是它握住的那个局域网的网关。
任何一个想发往其他局域网的包,都会到达其中一只手,被拿进来,拿下 MAC 头和 IP 头,看看,根据自己的路由算法,选择另一只手,加上 IP 头和 MAC 头,然后扔出去。
静态路由
IP 头和 MAC 头加什么内容,大致可以分为两类,一个是静态路由(不变),一个是动态路由(变)。
静态路由就是在路由器上,配置一条一条规则。这些规则包括:想访问 BBS 站(它肯定有个网段),从 2 号口出去,下一跳是 IP2;想访问教学视频站(它也有个自己的网段),从 3 号口出去,下一跳是 IP3,然后保存在路由器里。
MAC 地址是一个局域网内才有效的地址。因而,MAC 地址只要过网关,就必定会改变,因为已经换了局域网。两者主要的区别在于 IP 地址是否改变。不改变 IP 地址的网关,我们称为转发网关。改变IP 地址的网关,我们称为NAT 网关。
转发网关
服务器 A 要访问服务器 B。首先,服务器 A 会思考,192.168.4.101 和我不是一个网段的,因而需要先发给网关。网关是 192.168.1.1。发送 ARP 获取网关的 MAC 地址,然后发送包的内容是这样的:
- 源 MAC:服务器 A 的 MAC
- 目标 MAC:192.168.1.1 这个网口的 MAC
- 源 IP:192.168.1.101
- 目标 IP:192.168.4.101
包到达 192.168.1.1 这个网口,发现 MAC 一致,将包收进来。在路由器 A 中配置了静态路由之后,要想访问 192.168.4.0/24,要从 192.168.56.1 这个口出去,下一跳为 192.168.56.2。
从 192.168.56.1 这个口发出去,发给 192.168.56.2,路由器 A 发送 ARP 获取 192.168.56.2 的 MAC 地址,然后发送包:
- 源 MAC:192.168.56.1 的 MAC 地址
- 目标 MAC:192.168.56.2 的 MAC 地址
- 源 IP:192.168.1.101
- 目标 IP:192.168.4.101
到达 192.168.56.2 这个网口,发现 MAC 一致,将包收进来,在路由器 B 中配置了静态路由,要想访问 192.168.4.0/24,要从 192.168.4.1 这个口出去。
发给 192.168.4.101。路由器 B 发送 ARP 获取 192.168.4.101 的 MAC 地址,然后发送包。包的内容是这样的:
- 源 MAC:192.168.4.1 的 MAC 地址
- 目标 MAC:192.168.4.101 的 MAC 地址
- 源 IP:192.168.1.101
- 目标 IP:192.168.4.101
包到达服务器 B,MAC 地址匹配,将包收进来。
可以观察到所有的包都只是MAC地址在发生改变,IP地址不变。所谓的下一跳是,通过ARP
将某个 IP 要将这个 IP 地址转换为 MAC 放入 MAC 头。
IP 地址在三个局域网都可见,在三个局域网之间的网段都不会冲突。在三个网段之间传输包,IP 头不改变。也就是经过的是转发网关。
NAT网关
局域网之间没有商量过,各定各的网段,因而 IP 段冲突了。比如上图的服务器A和服务器B。
虽然在各自的局域网相同,但他们都需要在“大环境”下有对应的身份,假设服务器B为192.168.56.2。在网关 B 上,记下国际身份 192.168.56.2 对应国内身份 192.168.1.101。凡是要访问 192.168.56.2,都转成 192.168.1.101。
于是,源服务器 A 要访问目标服务器 B,要指定的目标地址为 192.168.56.2。于是原理同上,先发给网关A:
- 源 MAC:服务器 A 的 MAC
- 目标 MAC:192.168.1.1 这个网口的 MAC
- 源 IP:192.168.1.101
- 目标 IP:192.168.56.2
核对MAC后被路由器接收,在路由器A中,要从 192.168.56.1 这个口发出去,发给 192.168.56.2。当网络包发送到中间的局域网的时候,服务器 A 也需要有个国际身份,因而在国际上,源 IP 地址也不能用 192.168.1.101,需要改成 192.168.56.1:
- 源 MAC:192.168.56.1 的 MAC 地址
- 目标 MAC:192.168.56.2 的 MAC 地址
- 源 IP:192.168.56.1
- 目标 IP:192.168.56.2
到达192.168.56.2 这个网口,路由器 B 是一个 NAT 网关
,它上面配置了,要访问国际身份 192.168.56.2 对应国内身份 192.168.1.101,于是改为访问 192.168.1.101。
从 192.168.1.1 这个口出去,包内容是这样的:
- 源 MAC:192.168.1.1 的 MAC 地址
- 目标 MAC:192.168.1.101 的 MAC 地址
- 源 IP:192.168.56.1
- 目标 IP:192.168.1.101
包到达服务器 B,MAC 地址匹配,将包收进来。从服务器 B 接收的包可以看出,源 IP 为服务器 A 的国际身份,因而发送返回包的时候,也发给这个国际身份,由路由器 A 做 NAT,转换为国内身份。
观察以上所有包可以发现,IP地址在发生改变,也就是Network Address Translation,简称 NAT。而NAT
更常见,现在大家每家都有家用路由器,家里的网段都是 192.168.1.x,所以你肯定访问不了你邻居家的这个私网的 IP 地址的。
小结
- 离开本局域网,就需要经过网关,网关是路由器的一个网口
- 路由器是一个三层设备,里面有如何寻找下一跳的规则
- 经过路由器之后 MAC 头要变,如果 IP 不变,就是
转发网关
,如果 IP 变,就是NAT