

























本篇我们将会学习以下概念:
IP 地址、子网掩码、网关
以前,“路由器”是和“交换机”“集线器”“网桥”等等名词,共同存在于"网络技术"这个不为人知的世界中的。当初为了搞明白这些词是啥意思,可是非常不容易的。然而,现在“路由器”已经成为京东、淘宝上的一个常见搜索的产品名字了。可是,你知道为啥那个屁股上插了几根线的玩意儿,叫“路由器”而不是其他什么名字吗?跟着下面的步骤操作一下,你就知道啥叫做“路由”了。
根据前面的文章可以知道,在互联网上每个电脑(或者设备),都需要有一个 IP 地址(实际上你可以拥有多个 IP 地址,只要对应的网卡能用的上);有了这个 IP 地址,才能通过互联网互相通信。所以,我们可以用以下命令显示当前的 windows 电脑的 IP 地址信息——使用 cmd.exe 打开命令行窗口,输入指令:
ipconfig
然后你可能会得到一堆字符输出,其中会有一些类似如下图的显示:
这里面显示了本电脑的 IP 地址为 192.168.1.27,这里显示的 IPv4 和 IPv6 是 IP 地址的两个不同的版本,暂时我们可以只看 IPv4。除了 IP 地址以外,还有两个奇怪的参数:子网掩码、默认网关。——我们马上可以做一个实验,来动手研究他们的含义。
我们现在输入命令行:
ping 192.168.1.1
上面的 192.168.1.1 你可以根据你电脑的实际情况,改成上面你所看到“默认网关”的具体 IP 地址。
我们可以看到有一些输出,表示 IP 为 192.168.1.1(或者是你的默认网关的 IP)的电脑,给本电脑的 ping 返回了数据。(这些数据每个占 32 字节,一共发了 4 个数据包)这表示本电脑 192.168.1.27 到 192.168.1.1 是能连通的。这个工具之前我们测试 www.lua.org 网站服务器的时候,也以类似的方法用过。这个默认网关一般来说,就是你家里面的路由器的 IP 地址,那个小小的盒子,也可以算是一台联网的电脑,具有自己的 IP 地址。
以前老式的 ADSL 拨号上网情况下,我们并没有一个自带 IP 的路由器,而是通过一个 Modem 调制解调器连接互联网,那个情况下,默认网关 IP 指向的则是存放于电信运营商提供的一个设备。
然后我们来修改一下自己的 IP 地址,为了避免不同 windows 版本的 GUI 界面的差异。我使用命令行进行修改,请以管理员身份重新打开 cmd.exe 窗口:
然后输入以下命令。注意输入之后可能会让你的电脑断网,所以最好保留一下上面你看到的 IP 地址的内容,完成实验后重新设置回来。
内容因剧透、敏感不适等原因被隐藏
点击查看
netsh interface ip set address "以太网" source=static addr=192.168.2.27 mask=255.255.255.0 gateway=192.168.1.1
这个命令,其中 "以太网" 这个字符,是对应之前 IP 地址输出窗口中的“适配器”部分的(也就是你的网卡在 windows 上配置的名字,现在电脑往往会有两个以上的网卡,包括 WiFi 网卡和有线网卡,还有的会有蓝牙网卡),如果你的适配器叫其他名字,请修改成对应的名字。
而 addr=192.168.2.27 中,是把原来的 192.168.1.27 的第三段数字改成不是 1 的。并且注意 mask 一定要是 255.255.255.0 这个数值。这个命令的含义,就是把“以太网”这个网卡(或者叫“网络适配器”)的 IP 地址 配置成 192.168.2.27,并且 子网掩码 参数改成 255.255.255.0。
当你执行完上面这个命令,你应该会发现:电脑断网了!。断网了咱也先不要着急,我们还得继续实验,在命令行窗口中继续输入以下命令:
ping 192.168.1.1
你会看到以下返回,表示刚才还能连通的网关服务器,现在已经连不通了!
等下我们再解释,为啥改了一下 IP 地址就连不通原来还能连上的电脑。现在我们先尝试恢复网络,可以在同一个命令窗口运行命令:
netsh interface ip set address "以太网" source=dhcp
上面这个命令的作用,就是把 IP 地址从"手工设置",改成"自动获取"。如果你的电脑运行这行代码后还是不能上网,可以参考上面改 IP 的命令,把 IP 地址的第三段改为原来的值,并且修改 mask 参数为原来子网掩码的值,以及修改 gateway 参数为原来的“默认网关”的值。
下面我们来解释一下,为什么改了 IP 地址的其中一段,就会导致原来能联通的网络,变得连不通呢?首先,我们需要了解一下 IP 地址的组成:IPv4 地址一般看起来是由四个数字,通过三个小数点连接起来的。实际上,IPv4 的地址只是一个 32 位二进制长度(bit)的整数,其十进制的取值范围是 0~4294967295。互联网上的所有设备(手机、电脑、游戏机等等)都是用的一个数字编号,来代表自己的地址。我们写成 xxx.xxx.xxx.xxx 的形式,基本是为了避免太长的一个数字给记错了而已。
我们知道在现实世界中,如果我们要向一个地址写一封信,或者发一个快递,一般都是需要写省、市、区、街道、门牌。具体发送快递的时候,物流公司把需要把目标地址,分成不同的一段段空间,先找空间,再找逐步细化空间,最后发到具体的地址上。但如果好像互联网上的设备,如果只有一个数字作为具体地址,就算这个地址不会重复,那又如何才能一步步的找到最后的目标呢?
答案就藏在 IP 地址的另外两个参数里:子网掩码 (netmask)、默认网关 (gateway)。
当我们要发送一个数据包到另外一个 IP 地址的机器上(譬如上面实验中的 ping 命令),我们是知道自己的 IP 地址,以及目标的 IP 地址的。操作系统会根据子网掩码,来判断是否目标 IP 地址的机器,是否是和当前电脑在同一个“子网”中。
如果是在同一个子网中,就会让底层网卡尝试直接连同目标机器,在常见的“以太网”(所谓局域网)中,这个尝试可能是一种数据广播,也可能是通过专用网络设备“交换机”来转发数据。
如果操作系统认为目标地址不是和自己在一个子网中,就会把数据发给配置中的“默认网关”的机器,请它帮忙转发这个数据。
在上面的实验中,我有意让目标 IP 和本机的 IP 地址处于不同的“子网”中,而且默认网关也不起做(因为不在同一个子网中),所以 ping 的结果就是超时,表示无法连同。
那么,操作系统是如何判断,一个目标地址是否和本机处于同一个“子网”中的呢?这个时候就需要“子网掩码”的功能了。在我们的实验中,子网掩码是 255.255.255.0,如果把这个地址,以 IP 地址的方式改成二进制,就会是 11111111 11111111 11111111 00000000 这样一个数字,然后我们用这个子网掩码的二进制数对 IP 地址的二进制数,进行“与”运算,就能得到“子网网段”的地址值。这里的“与”运算,其实就是对应位掩码是 1 的,就保留下来;是 0 的,就变成 0。
子网掩码并不一定需要是 255 和 0 作为组成部分的,它可以是任何数字。只要拿这个数字和 IP地址按二进制位进行“与”运算,就能得到子网的网络地址。根据上面的实验,我们可以知道发起数据的电脑和接收数据的电脑的 IP 地址,经过计算各自的子网地址是:
发起方 IP 192.168.2.27,经过 255.255.255.0 计算后,结果是 192.168.2.0
接收方 IP 192.168.1.1,经过 255.255.255.0 计算后,结果是 192.168.1.0
上面这两个子网地址并不一致,所以操作系统判断:本机和目标机器不处于同一个子网内,需要通过网关转发数据。而网关刚好也配置的是 192.168.1.1 这个不在同一个子网内的机器,所以数据只能是没有回应。一旦我们把本机的地址,改成了让操作系统认为,是和目标机器同一个机器的子网内,我们就又能 ping 通了。
我们既然知道了,在同一个子网内,数据是根据子网掩码来判断和传输的,那么不在同一个子网内的数据,又是如何传递的呢?其实过程是一样的,只是不在一个子网内的数据,会先发给同一个子网内的“默认网关”,这个网关设备负责转发到另外一个子网去(也就是上级网络)。“网关”提供的这种服务,称为“路由”服务。这个过程有点像我们送快递:
先判断收件人和发件人是不是在同一条街道的(通过判断子网地址),如果是的话,快递小哥就直接给你送过去。
如果不是一条街道的,快递小哥会把包裹带到自己的快递站(默认网关),然后由那里的工作人员,根据地址上写的“区”地址,来决定要发给哪个快递站(某个子网的网关)。
如果一个快递站(网关)发现收到了一个从其他街道发来的包裹,而且地址是本街道的(子网地址一致),就会想办法派人送上门。
为了直观的展现这个过程,我们还是可以用命令行工具进行测试:
tracert -dR -4 www.baidu.com
tracert 这个软件,就是记录和显示数据包如何到达目的 IP 的一个工具。从输出我们看到,目标 www.baidu.com 的 IP 是 183.2.172.185,经过了 15 次转发,最终到达了这个 IP 地址。而第一次转发,经过的正是默认网关 192.168.1.1,而第二次转发的网关地址 100.69.0.1,这个 IP 地址通常是路由器的 WAN 的网关,也就是“更上一级”子网网关的地址。后面经过的每一条记录,都可以理解为经过一个“快递站”(网关)的地址。
上图是我的路由器管理界面,上面记录 WAN 的地址,可以看到都是以 100.69. 开头,很可能其子网掩码是 255.255.0.0,从而和 100.69.0.1 处于同一个子网(计算得到子网地址都是 100.69.0.0)
每个网关之间的数据转发规则,往往不是好像我们家里的路由器那么简单:不是一个子网的,全部发给上级网关——而是有一个“路由表”来决定数据包的转发规则的——这方面有很多细节,是一个专门的课题。但我们现在,只需要知道,全世界的所有设备,就是通过这样一次次的转发,最终连接到一起的。
本篇文字的末尾,我们接触到了新的概念: WAN,下一篇,我们会从路由器的配置着手,开始了解更多互联网的知识。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。