IP地址就是我们的电脑(主机)在网络中的“身份证”,要想上网,与网络中的其他电脑相互通信,你的电脑就得有一个IP地址,这样别的电脑才能在这个“茫茫人海”中找到你。
网络根据覆盖的范围,氛围了广域网,局域网(以前看过的很多书,又把局域网分为了城域网,区域网等等,在我的理解,其实都是局域网,只是范围的大小不一样)。广域网就是我们所称的Internet网络,它可以连接到这个世界的任何角落(只要是接入到这个网络中);而局域网就是针对某个范围的区域组建的一个局部网络(比如企业内部的网络,学校内部的网络等等)。
目前使用最多的IP地址还是IPv4,它由4组数字组成,他们之间使用“点.”相连接,换算成二进制就是 11111111.11111111.11111111.11111111 ,由4组8位二进制组成,根据换算就可以得出这4组数字的范围为0~255。由于目前IPv4的IP地址已经远远不能满足网络地址的需求,所以就出现了IPv6的新的IP地址,由原来几千上万主机使用1个IP地址,扭转成了1台主机可以使用上亿个的IP地址的局面。
我们还是以IPv4来看,IP地址与子网掩码互为“一对情侣”,一个IP地址由网段+主机名组成,在同一网段的主机,就在同一个局域网内,那么网段由什么来决定,就由子网掩码决定,看下图:
子网掩码可以是几种情况:255.0.0.0 / 255.255.0.0 / 255.255.255.0 ,每一类子网掩码下面的IP都是从0~255,由此可以看出,网段越短,IP地址数越多;反之。我们的局域网通常情况下,都只会只用255.255.255.0这种子网掩码网段,如果超过了255个主机的,可以多设置几个不同的网段,比如子网掩码为255.255.255.0,我可以设置192.168.1.1和192.168.2.1两个不同的网段。
当我们的“计算机们”组成了一个局域网络,局域网内的主机能够相互通信,这是一个“闭环”网络,如果这个闭环网络中的计算机想访问internet外网的话,就需要有一个出口通向外面,这里就会设置一个IP地址的主机作为网关(一般是设置主机为1或254,比如192.168.1.1或者192.168.1.254,当然也可以使用其他的IP),这个网关就是通向“外界”的出口,这个出口一般设置在路由器上(路由器也是一台主机,也需要一个IP地址),这就是网关定义的理解。
在一个网段的IP地址范围中,有两个IP地址是不能分配给主机的,一个是主机位为0,还有一个是主机位为255。主机位为255的IP地址称为广播IP,在这个局域网中可以通过向这个IP发送消息,然后通过这个IP广播到这个局域网中的其他主机,下面有个案例可以实现。
import socket
# 定义广播地址和端口
BROADCAST_IP = '192.168.1.255' # 广播地址,这里假设是子网的广播地址,实际情况请根据子网结构调整
PORT_NUMBER = 12345 # 自定义的广播端口
# 创建一个UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) # 允许发送广播
# 准备要发送的消息
message = "你好,这是一个来自于 {} 的广播消息".format(socket.gethostname())
# 向广播地址发送消息
sock.sendto(message.encode('utf-8'), (BROADCAST_IP, PORT_NUMBER))
# 关闭套接字
sock.close()
主机位为0的IP,例如192.168.1.0(子网掩码:255.255.255.0),这个地址称为网络号,它代表了整个网络或子网本身,而非子网中的某个主机。