IP协议有两个版本:
IPv4数量=2^32,大约43亿左右,而TCP/IP协议规定,每个主机都需要有一个IP地址。对于全世界计算机来说,这个数量是不够。
所以后来推出了IPv6(长度128位,是IPv4的4倍)。但因为目前IPv4还广泛的使用,且可以使用其他技术来解决IP地址不足的问题,所以IPv6也就没有普及。
(此后,凡是提到IP协议,没有特殊说明的,默认都是指IPv4。)
IP地址分为两个部分,网络号和主机号
通过合理设置网络号和主机号,就可以保证在相互连接的网络中,每台主机的IP地址都是唯一的,那么,我们该如何划分网络号和主机号呢?
过去曾经提出一种划分网络号和主机号的方案,把所有IP 地址分为五类,如下图所示:
类别 | 范围 | 适用网络 | 网络数量 | 主机最大连接数 |
---|---|---|---|---|
A | 0.0.0.0 ~ 127.255.255.255 | 大型网络 | 126 | 16,777,214 (224-2) |
B | 128.0.0.0 ~ 191.255.255.255 | 中等规模网络 | 约16,000 | 65,534 (216-2) |
C | 192.0.0.0 ~ 223.255.255.255 | 小型网络 | - | 254 (28-2) |
D | 224.0.0.0 ~ 239.255.255.255 | - | - | - |
E | 240.0.0.0 ~ 247.255.255.255 | - | - | - |
请注意,类别 D 和 E 用于特殊用途,不分配给实际的网络和主机,
主机最大连接数减去2,是扣除主机号为全0和全1的特殊IP地址。
特殊的IP地址:
在上述的分类中,存在IP地址浪费的问题:
单位一般会申请B类网络(C类连接主机数量有限),但实际网络架设时,连接的主机数量又常远小于65534(B类连接主机数),造成IP地址浪费;同理,A类网络的IP地址也会造成大量的浪费。
当一个单位申请了一个网络号,并且想将该网络中的IP地址再分给它下属的几个小单位时,那么这将导致IP地址资源的浪费,因为每个下属单位都需要一个独立的网络号,那么这将导致IP地址资源的浪费。
为了解决以上问题,引入子网掩码来进行子网划分。
子网掩码格式和IP地址一样,也是一个32位的二进制数,其中:
子网掩码的作用:
如一个B类IP地址:191.100.0.0,按A ~ E类分类来说,网络号二进制数为16位网络号+16位主机号。
假设使用子网掩码 255.255.128.0,即11111111.11111111.10000000.00000000 ,这里有17个1,这意味着划分子网后,高17位都是网络位/网络号
此时,IP地址组成为:网络号+子网号+主机号,网络号和子网号统一为网络标识(划分子网后的网络号/网段)
通过子网掩码结合IP地址,可以计算获得网络号(划分子网后的网络号)及主机号(划分子网后的主机号),用于判断目的IP与本IP是否为同一个网段。
对于网络通信来说,发送数据报时,目的主机与发送端主机是否在同一个网段,流程是不一样的。
将 IP 地址和子网掩码进行“按位与”操作,得到的结果就是网络号,IP地址减去网络号,剩下的就是主机号
让我们以一个例子来说明:
以下是具体的计算步骤:
IP地址:11000000.10101000.00000000.01100100
子网掩码:11111111.11111111.11111111.00000000
子网掩码11111111.11111111.11111111.00000000 意味着划分子网后,高24位都是网络位/网络号,剩下的8为是主机号
进行逻辑运算(按位与)。
将IP地址的每一位与子网掩码的对应位进行逻辑与运算。
结果为:11000000.10101000.00000000.00000000,此时这个结果就是网络部分,IP 地址减去网络部分就是主机部分了
得到网络部分和主机部分的二进制值后,可以将它们转换回十进制形式。
网络部分:192.168.0.0
主机部分:0.0.0.100
通过使用子网掩码进行地址划分,可以将一个IP地址空间合理地分配给不同的网络和主机。这样就避免了IP地址的浪费,这对于大规模的网络环境尤为重要,因为IP地址是有限的资源。
MAC地址,即 Media Access Control Address,用于标识网络设备的硬件物理地址。
MAC地址用来识别数据链路层中相连的节点,长度为48位,即6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
主机具有一个或多个网卡,路由器具有两个或两个以上网卡;其中每个网卡都有唯一的一个MAC地址,网络数据传输的本质是网络硬件设备将数据发送到网卡上,再从网卡接收数据。
注意: MAC地址在网卡出厂时就确定了,不能修改。虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址。
广播数据报:发送一个广播数据报,表示对同网段所有主机发送数据报。广播数据报有一个特殊的MAC地址:FF:FF:FF:FF:FF:FF
以下为主机B传输数据到主机C经过的网络设备:
对于以上经过的网络设备:
对于网络数据传输,不是想象中那样,数据直接从源主机到达目的主机,而是类似在地图中,从 A 到 D 的过程:
就好比唐僧去西天取经,行程为长安、五指山、黑风山、女儿国……大雷音寺。
IP地址描述的是路途总体的起点和终点:
而行进也必须一个地点一个地点的前进,由MAC地址来描述路途上每一个区间的起点和终点:
集线器是工作在物理层的网络设备,发送到集线器的任何数据,都只是简单的将数据复制并转发到其他所有端口。(端口指集线器后边的物理端口)
交换机工作在数据链路层,交换机内部会记录并维护一张MAC地址转换表:
发送数据报时,发送端主机都需要先根据网络分层从上到下封装:
此时还需要根据发送端主机(源主机)与接收端主机(目的主机)是否在同一网段,来设置下一跳设备:
所谓网关,我们这里可以简单理解为,不同网段的网络互连时,需要使用网关设备。
通常的网关设备是路由器,可以划分公网和局域网(内网),同时还可以把局域网划分为多个子网(不同网段),Windows中可以在网络设置中,更改适配器设置查看网关IP:
以上两种情况,下一跳设备IP地址都可以获取到,但该设备的MAC地址(即目的MAC)可能不知道,就需要使用以下ARP寻址:
首先,ARP是一个介于数据链路层和网络层之间的协议;ARP协议建立了IP地址与MAC地址的映射关系,在数据链路层,寻找下一跳设备MAC地址的过程,称为ARP寻址:
这个过程类似于QQ群喊话:张三(下一跳设备IP地址),我要给你发快递(发送数据报),请告诉我你的收货地址(MAC地址)。参见以下流程:
路由器主要有两个作用:
公网是指连接全球范围的互联网,它由各种网络设备和基础设施组成,用于在全球范围内实现信息传输和数据交换。公网可以被任何人访问和使用,例如访问网站、发送电子邮件、视频通话等。
子网是指在一个大的网络中划分出来的较小网络。子网允许对大型网络进行细分管理,并提供更高效的数据传输和资源分配。
路由器作为网关,可以划分公网和局域网,某些路由器还可以将局域网划分为多个子网
公网端口即WAN口,为单独的网卡,具有公网IP地址和公网MAC地址。划分的多个子网,是由局域网端口即LAN口划分,每个端口都有单独的网卡,具有该网段IP地址和MAC地址。
路由器作为网关:
局域网IP+端口需要转换为公网IP+端口的原因是:接收端返回的响应数据报,目的IP和目的端口无法使用局域网IP和端口需要使用公网IP+端口。
所谓路由,即在复杂的网络结构中,找出一条通往终点的路线;网络通信(网络数据传输),路由器中的路由功能,就类似于规划路线,往哪个方向行进能更快到达目的地。
主机之间通过网络设备、网线相连时,两个主机在同一时刻同时发送数据报,如果存在冲突,则该网络范围为一个冲突域(Collision Domain),同一时刻,网络设备只能接收并转发一个数据报
冲突域基于第一层物理层,又称为碰撞域。
所谓的冲突,类似两个人(主机)在一个房间(网络范围)同时说话,导致房间内其他人无法听清讲话的内容,即产生了冲突。
冲突域中的网络通信,要解决冲突,就得按时间顺序来发送多个数据报:同一时刻,网络设备只能接收并转发一个数据报,多余的会丢弃,让发送端主机重新发送。
集线器接收到数据报后,是将数据报简单的复制、转发到其他所有端口,如果有两个数据报要同时转发,就会出现冲突。整个集线器,即集线器的所有端口为一个冲突域。
交换机接收到数据报后,是将数据报转发到对应的一个端口:两个数据报同时转发到不同端口不存在冲突,但同时转发到一个端口就出现冲突。即交换机可以分割冲突域,分割后,一个端口为一个冲突域。
广播是指某个网络中的主机同时向网络中其它所有主机发送数据(IP、MAC地址设置为广播地址),这个数据所能传播到的范围即为广播域(Broadcast Domain)。
广播域基于第二层数据链路层。
路由器某个LAN口网卡接收到广播数据报,如果发现是同网段,则丢弃,即广播数据不会扩散到路由器以外。
使用集线器网络互联的情况下,发送端主机发送数据包时,需要先从上到下封装数据报。但封装时,目的MAC可能并不知道,需要先进行ARP寻址:
如果本机ARP缓存表中找不到目的MAC,则需要先发送广播请求: