一文搞懂网络知识——IP、子网掩码、网关、DNS、DHCP、端口号以及局域网、广域网、WLAN和wifi

本文详细解释了IP地址的构成、子网掩码的作用,强调了子网划分与主机号的关系,讨论了网络规模对子网掩码选择的影响,并比较了局域网、广域网、WLAN和WiFi的区别,特别提到IPv4地址管理中的子网节约策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IP、子网掩码、网关、DNS、端口号

详细内容参考这里
补充说明子网划分与子网掩码的关系:参考这里的子网划分以及之后的内容
在这里插入图片描述
笔记:1.这部分内容为什么32要减去2,原因是主机号不能全部为0或者1,因此每个机房主机号为全0和全1的ip地址都被移除,得到的ip地址范围。
2.ip一般是由网络号和主机号构成,网络号位于前几位,主机号位于后几位,具体是需要子网掩码来进行确定。当两个机器之间想要直接进行通信(不借助网关),则要求两个机器的网络号(ip与子网掩码的&运算)一致才行
3.子网掩码应该根据网络的规模进行设置。如果一个网络的规模不超过254台电脑,采用“255.255.255.0”作为子网掩码就可以了,现在大多数局域网都不会超过这个数字,因此“255.255.255.0”是最常用的IP地址子网掩码;假如在一所大学具有1500多台电脑,这种规模的局域网可以使用“255.255.0.0”。
4.如果子网掩码是四个位置都是255或者000,例如255.255.255.000而不是255.255.255.224这种,则表示没有子网(同一子网(网络号)下的机器能够直接进行通信),但不是代表没有局域网,二者概念不一致

局域网、广域网、WLAN、WiFi的联系与区别

参考文献1
参考文献2
在这里插入图片描述

笔记:设置不同大小的网络原因主要是为了节省ipv4数量的使用,不同局域网下的ip地址可能相同(局域网的ip地址可以通过DHCP进行动态分配),但是每个局域网用来访问外网的ip地址一定是不同的,是需要向网络运营商进行拨号申请的

TCP/IP协议介绍和局部使用

首先,什么是TCP/IP协议,这是一个总称的概念(参考这里对内部众多通信协议的简介),这里主要是介绍我学习过程中遇到的一些代码层面的知识。

下面内容的参考文章
这里使用的是python的zmq包,这个包相比较单一的通信协议py包,功能更加强大,总结以下:

  1. ØMQ (ZeroMQ) 是一个基于消息队列的多线程网络库,它封装了网络通信、消息队列、线程调度等功能,向上层提供简洁的API,应用程序通过加载库文件,调用API函数来实现高性能网络通信。
  2. ZeroMQ是一个高效的消息传输库,支持许多不同的传输协议和消息模式。与像TCP和HTTP等协议不同,ZeroMQ的目标是为应用程序之间的通信提供一种非常简单和快速的方式。它提供了比HTTP或TCP更高层次的抽象,允许开发人员直接在应用程序之间透明地传递消息,而无需自己构建完整的通信协议。
  3. ZeroMQ提供了简单的API,可用于许多流行的编程语言,包括Python。它可以用于构建分布式系统或多线程应用,可以从中获取更高级别的抽象。
  4. zmq包支持三种工作模式,分别为request-reply(请求回应模式),Publish/Subscribe(订阅-发布模式 )和Push/Pull(流水线模式)

这里介绍的是request-reply()(请求响应模式),首先来看两个经典代码示例,由代码示例来开始普及。

Client端(req端)Python代码实现:

#client.py

import zmq

context = zmq.Context()

#  Socket to talk to server
print("Connecting to hello world server…")
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")
socket.send(b"Hello")
#  Get the reply.
message = socket.recv()
print(f"Received reply [ {message} ]")

Server端(rep端)python实现

#server.py
import time
import zmq

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

while True:
    #  Wait for next request from client
    message = socket.recv()
    print("Received request: %s" % message)

    #  Do some 'work'
    time.sleep(1)

    #  Send reply back to client
    socket.send(b"World")

  • 首先是Client端代码,zmq.Context(),.socket()和.connect()是zmq建立通信的初始化函数,其中参数zmq.REQ则是建立request-reply模式。
  • 参数 "tcp://localhost:5555"是Tcp通信地址,由两大部分组成ip地址和端口号(port)组成,接下里这部分内容参考文章1文章2
    • localhost是什么,干什么用如下图所示在这里插入图片描述
    • 端口号是什么,有什么用在这里插入图片描述
  • Server端中代码同理,其中socket.bind()的参数中*的含义是通配符作用,意思也就是服务端监听所有地址下5555端口的请求。因此可以拓展多个客户端,只需要将socket.connect("tcp://localhost:5555")中的地址改成“tcp://127.0.0.2:5555”即可再次建立一个新的地址下的通信(这里的127.系列都属于本地虚拟网口ip地址,上文图片有提及)。
  • 同时运行服务端代码程序和客户端代码程序即可实现本地TCP通信。纵使是多个客户端代码同时运行,只要地址不冲突都是可以的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值