IPv4,子网掩码,默认网关
在网上查找了相关的资料,发现都说的都比较晦涩难懂。这篇文档从整体的网络通讯流程,以通俗易懂地方式来解释这些网络词汇,比如,如何判断两台主机是否在同一个网段下,以及什么时候会用到默认网关。本文内容是根据自己查阅资料和理解,如果有什么不对的地方,还请指出。(本文最后会出一个面试思考题哦,欢迎在评论区留言)
一个简单的通信流程
首先先介绍一下在局域网下通信的一个基本流程。 在Windows电脑上,如果你打开你网络的IPV4属性,你会看到你有两种选择IP的方式。
自动获取IP地址 会帮你自动设置IP值,子网掩码 和 默认网关,因此大部分人都是用的自动获取IP值。而手动设置IP则需要你能够正确的设置这些值。
当一台计算机需要和另一台计算机通讯时,计算机需要根据 本机子网掩码和目标IP地址 计算出目标IP所在的网段,然后再根据 本机IP 和 本机的子网掩码 得出本机所在的网段。如果两个网段相同,那么两台计算机是局域网,然后则开始通信;如果不同,也就意味着目标IP是一个远程地址,这时候本机会把数据发送给默认网关,然后默认网关处理接下来的通信。
例如,如下的一个网络结构:
一台局域网下有如下两台主机
主机1 IP地址:192.168.137.5 子网掩码:255.255.255.0 默认网关:192.168.137.1 主机2 IP地址:192.168.137.10 子网掩码:255.255.255.0 默认网关:192.168.137.1
路由器的地址: 192.168.137.1
假如:主机1要与主机2通讯,
首先用 主机1 子网掩码 和 主机2 IP 计算出网段(网段:也被称为 网络地址)
主机2 IP地址 192.168.137.10 11000000.10101000.10001001.00001010 主机1子网掩码 255.255.255.0 111111111.111111111.111111111.00000000 =========================================================== 按位与& 11000000.10101000.10001001.00000000 192.168.137.0
然后用 主机1子网掩码 和 主机1IP 计算出自己所在的网络地址
主机2 IP地址 192.168.137.5 11000000.10101000.10001001.00000110 主机1子网掩码 255.255.255.0 111111111.111111111.111111111.00000000 =========================================================== 按位与& 11000000.10101000.10001001.00000000 192.168.137.0
两个网段都是 192.168.137.0 ,因此主机1和主机2是处在同一个局域网内的,所以接下来的通信是主机1广播ARP寻址包,查找主机2的MAC地址。
再假设一个 主机3,主机3是一台服务器,该服务器不与主机1在同一个局域网内。
主机3 IP地址:104.233.232.39 子网掩码:255.255.255.224 默认网关:104.233.232.62
如果主机1访问主机3上的资源,首先用 主机1的子网掩码 和 主机3的IP 计算一下网络地址。
主机3 IP地址 104.233.232.39 1101000.11101001.11101000.00100111 主机1子网掩码 255.255.255.0 111111111.111111111.111111111.00000000 =========================================================== 1101000.11101001.11101000.00000000 = 104.233.232.0
104.233.232.0 和主机1所在的网段明显不同,此时 主机1 会将请求发送给默认网关 192.168.137.1 ,也就是路由器的地址。然后路由器负责接下来的通信。当路由器找到主机3后,反馈给主机1。此后,主机1和主机3的通信,都要走路由器过。
上面简单的概括了一下网络通讯的流程,接下来进一步的分析一下这些概念。
IP地址 和 子网掩码
IP地址和子网掩码是紧密相连的,只有IP地址是无法得出这个IP地址所在的 网络地址 的,要计算处IP地址所在的 网络地址 就要用 子网掩码。局域网内,只有相同 网络地址 的计算机才能相互通讯。 就比如:公司的电话系统,例:459 001,459 002 ....等,电话号码前都有一个区号比如459。 而IP中的 网络地址 就相当于这里的区号,只不过IP中的 网络地址 长度是不固定的,必须要IP地址和子网掩码进行 按位与 计算,才能得出 网络地址 值。
比如我有一个IP地址:104.160.41.50,子网掩码为:255.255.248.0
接下来要计算出网络地址,广播地址,和 主机号
网络地址:IP地址与子网掩码 进行逻辑与(&)运算。
IP地址 104.160.41.50 1101000.10100000.00101001.00110010 子网掩码 255.255.248.0 11111111.11111111.11111000.00000000 =========================================================== 逻辑与&运算 1101000.10100000.00101000.00000000 网络地址 = 104.160.40.0
广播地址:子网掩码取反后,与 网络地址 进行逻辑或(|)运算
子网掩码 255.255.248.0 11111111.11111111.11111000.00000000 取反~ 0.0.7.255 00000000.00000000.00000111.11111111 网络地址 104.160.40.0 1101000.10100000.00101000.00000000 =========================================================== 逻辑或|运算 1101000.10100000.00101111.11111111 广播地址 = 104.160.47.255
主机号:子网掩码取反后,与 IP地址 进行逻辑与(&)运算
子网掩码 255.255.248.0 11111111.11111111.11111000.00000000 取反~ 0.0.7.255 00000000.00000000.00000111.11111111 IP地址 104.160.41.50 1101000.10100000.00101001.00110010 =========================================================== 逻辑与&运算 00000000.00000000.00000001.00110010 主机号 = 0.0.1.50
默认网关
网关可以理解为一个网络节点,它负责不同 网络地址(aka. 网段) 之间的通信。 一般情况下(家用网络环境 或 较小的网络环境),默认网关 就是我们的路由器设备。
在前面的基本案例中,也提到了,当一个主机发现它所访问的目标主机并不在同一个网段内时,主机就会发送数据包到默认网关,让默认网关进行下一步的查找,查到了就反馈给主机。
本文就先介绍到这里了,在结束本文之前,给大家出一个思考题。
主机A IP:192.168.10.5 子网掩码:255.255.255.254 默认网关:192.168.10.1
主机B IP:192.168.10.7 子网掩码:255.255.255.0 默认网关:192.168.10.1
问题:请问主机A与主机B能相互通信吗?如果能相互通信,你能说出 A主动访问B 和 B主动访问A 的基本通信流程吗?
本文参考文献:
2. Understand TCP/IP addressing and subnetting basics
3. Subnetwork