当前位置: 首页 > article >正文

Python——计算机网络

一.ip

1.ip的定义

        IP是“Internet Protocol”的缩写,即“互联网协议”。它是用于计算机网络通信的基础协议之一,属于TCP/IP协议族中的网络层协议。IP协议的主要功能是负责将数据包从源主机传输到目标主机,并确保数据能够在复杂的网络环境中正确地路由和转发。

2.ip地址

        IP地址是IP协议的核心组成部分,它是一个用于唯一标识网络设备(如计算机、服务器、路由器等)的地址。IP地址分为两种主要版本:

(1)IPv4(Internet Protocol version 4)

  • 格式:IPv4地址是一个32位的二进制数,通常以点分十进制格式表示,例如:192.168.1.1

  • 地址范围:IPv4地址的范围是从0.0.0.0255.255.255.255

  • 分类

    • A类地址:范围是1.0.0.0126.0.0.0,默认子网掩码为255.0.0.0

    • B类地址:范围是128.0.0.0191.255.0.0,默认子网掩码为255.255.0.0

    • C类地址:范围是192.0.0.0223.255.255.0,默认子网掩码为255.255.255.0

    • D类地址:范围是224.0.0.0239.255.255.255,用于多播(组播)。

    • E类地址:范围是240.0.0.0255.255.255.255,目前保留未使用。

  • 特点:IPv4地址数量有限(约43亿个),随着互联网的快速发展,IPv4地址逐渐耗尽。


ip4里面的子网掩码是什么?

子网掩码将ip地址划分为网络部分和本地部分,帮网络设备确定ip地址所属的子网。子网通过其二进制形式中的“1”和“0”来区分这两个部分。

  • 网络部分:子网掩码中为“1”的部分表示IP地址的网络部分,用于标识网络。

  • 主机部分:子网掩码中为“0”的部分表示IP地址的主机部分,用于标识网络中的设备。

子网掩码的分类

根据IPv4地址的分类(A、B、C类),默认子网掩码如下:

  • A类地址:默认子网掩码为 255.0.0.0,表示前8位为网络部分,后24位为主机部分。

  • B类地址:默认子网掩码为 255.255.0.0,表示前16位为网络部分,后16位为主机部分。

  • C类地址:默认子网掩码为 255.255.255.0,表示前24位为网络部分,后8位为主机部分。

(2)IPv6(Internet Protocol version 6)

  • 格式:IPv6地址是一个128位的二进制数,通常以冒号分隔的十六进制格式表示,例如:2001:0db8:85a3:0000:0000:8a2e:0370:7334

  • 特点

    • 提供了几乎无限的地址空间(约3.4×10³⁸个地址),解决了IPv4地址不足的问题。

    • 支持更高效的路由和自动配置功能。

    • 内置了更好的安全性(如IPsec)。

  • 推广现状:尽管IPv6已经存在多年,但由于兼容性和成本问题,目前全球范围内的IPv6普及率仍在逐步提高。

(3)特殊的地址 127.0.0.01

  127.0.0.1是IPv4协议中保留的本地回环地址(Loopback Address)。它被用于标识本机上的网络服务,主要用于测试和调试网络程序。


那么为什么我一定要用这个ip地址呢?用别的地址不行吗?

        使用127.0.0.1有其特定的优势和必要性。127.0.0.1是一个特殊的回环地址,用于本地通信,可以避免网络冲突和配置问题,确保测试环境的一致性和隔离性。因此,推荐使用127.0.0.1进行本地调试和测试。

二. 端口

1.端口的定义

        端口是一个16位的数字,范围从0到65535。它用于标识应用程序或服务在某个IP地址上的具体位置。每个IP地址可以有多个端口,每个端口可以运行不同的应用程序或服务。

2.端口的分类

端口可以分为以下几类:

(1)系统端口(0-1023)

这些端口通常由系统或操作系统保留,用于运行系统服务和关键应用程序。例如:

  • 端口80:用于HTTP协议,提供网页访问服务。

  • 端口443:用于HTTPS协议,提供安全的网页访问服务。

  • 端口21:用于FTP协议,提供文件传输服务。

  • 端口25:用于SMTP协议,提供电子邮件服务。

(2) 用户端口(1024-49151)

这些端口可以由用户自定义或由应用程序使用。许多应用程序会使用这些端口进行网络通信。例如:

  • 端口3306:用于MySQL数据库服务。

  • 端口5432:用于PostgreSQL数据库服务。

(3)动态端口(49152-65535)

这些端口通常由操作系统动态分配,用于临时通信。例如,当你使用浏览器访问一个网页时,浏览器会从这些端口中选择一个临时端口作为通信的源端口。

三.通讯接口

1.通讯接口的定义

  • 通讯接口是一个实现通讯协议的接口,使得不同设备或应用程序能够按照协议的规定进行通信。

  • 通讯接口可以是软件接口(如API、库)或硬件接口(如USB、RS-232)。

软件接口和硬件接口之间有什么关系呢?

为什么会有软件接口和硬件接口?-CSDN博客

 2.通讯接口分类

  • 软件接口:如Socket、Snap7、Modbus-TCP等。

  • 硬件接口:如USB、RS-232、RS-485等。

3.接口Snap7和Socket

(1)Snap7

  • 定义

    • Snap7 是一个用于与西门子 S7 系列 PLC(可编程逻辑控制器)进行通信的开源库。它提供了与 PLC 设备进行数据交换的接口。

  • 接口类型

    • PLC 接口:Snap7 主要用于与 PLC 设备进行通信,因此可以被视为一种 PLC 接口。

    • 软件接口:Snap7 提供了软件接口,允许开发者通过编程与 PLC 设备进行通信。

  • 作用

    • 提供了与西门子 PLC 设备进行高效、可靠通信的接口,适用于工业自动化领域。

(2)Socket

  • 定义

    • Socket 是计算机网络中的一种通用通信接口,可以用于实现网络通信。它提供了与网络中其他设备或应用程序进行数据交换的接口。

  • 接口类型

    • 计算机软件接口:Socket 是计算机网络中的一种通用接口,适用于各种网络应用。

  • 作用

    • 提供了网络通信的接口,使得不同设备或应用程序之间可以进行数据传输,适用于多种网络通信场景。

四.通讯协议

1.通讯协议的定义

  • 通讯协议是一组规则和标准,用于定义两个或多个通信实体(如设备、应用程序)之间如何进行信息交换

  • 协议规定了通信的内容、格式、顺序以及错误处理等细节。

2.通讯协议分类

  • 网络协议:如TCP/IP、UDP、HTTP、FTP等。

  • 工业协议:如Modbus、Profibus、Profinet、S7等。

  • 应用层协议:如HTTP、HTTPS、SMTP、POP3等。

可是为什么会有这么多通讯协议的分类呢?

因为通讯协议的多样性是由于不同的应用场景、历史背景和技术发展导致的。

通讯协议的分类及原因-CSDN博客

五.UDP和TCP

  • UDP

    • 定义:UDP是一种无连接的传输层协议,它不提供可靠的数据传输服务,也不保证数据能够成功到达接收方。它在发送数据前不需要与接收方建立连接,发送数据后也不会等待接收方的确认。

    • 特点:UDP协议简单高效,适用于实时性要求较高的应用场景,如视频会议、在线游戏等。

  • TCP

    • 定义:TCP是一种面向连接的传输层协议,它在发送数据前需要与接收方建立可靠的连接。TCP通过三次握手(SYN、ACK、SYN-ACK)来建立连接,通过四次挥手(FIN、ACK、FIN-ACK)来断开连接。

    • 特点:TCP提供可靠的数据传输服务,能够保证数据的按序到达和完整性。它适用于对数据可靠性要求较高的场景,如文件传输、电子邮件等。


协议的比较与区别

协议UDPTCP
连接类型无连接面向连接
可靠性不可靠,不保证数据到达可靠,保证数据按序到达
速度较快,无连接开销较慢,有连接和确认开销
头部开销较小,8字节较大,通常20-60字节
应用场景实时性要求高的场景(如视频会议、在线游戏)数据可靠性要求高的场景(如文件传输、电子邮件)
传输方式以数据报为单位,无连接以字节流为单位,面向连接
拥塞控制无拥塞控制有拥塞控制

协议的报文格式和字段含义

  • UDP 报文格式

    • 首部:8字节,包含以下字段:

      • 源端口:2字节,发送方的端口号。

      • 目的端口:2字节,接收方的端口号。

      • 长度:2字节,UDP用户数据报的总长度(包括首部和数据)。

      • 校验和:2字节,用于检测UDP用户数据报在传输过程中是否有错误。

    • 数据区:存放实际要传输的数据。

  • TCP 报文格式

    • 首部:通常20-60字节,包含以下字段:

      • 源端口:2字节,发送方的端口号。

      • 目的端口:2字节,接收方的端口号。

      • 序号:4字节,用于标识TCP报文段的顺序。

      • 确认号:4字节,用于确认接收到的报文段。

      • 首部长度:1字节,标识TCP首部的长度。

      • 标志位:6位,用于控制TCP连接的状态(如SYN、ACK、FIN等)。

      • 窗口大小:2字节,用于流量控制。

      • 校验和:2字节,用于检测TCP报文段在传输过程中是否有错误。

      • 紧急指针:2字节,用于紧急数据的传输。

    • 数据区:存放实际要传输的数据。


协议的使用方式和编程示例

  • UDP 编程示例

    Python复制

    import socket# 创建UDP套接字
    udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)# 绑定端口
    udp_socket.bind(('localhost', 12345))# 发送数据
    udp_socket.sendto(b'Hello, UDP!', ('localhost', 12346))# 接收数据
    data, addr = udp_socket.recvfrom(1024)
    print(f"Received from {addr}: {data.decode()}")# 关闭套接字
    udp_socket.close()
  • TCP 编程示例

    Python复制

    import socket# 创建TCP套接字
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定端口
    tcp_socket.bind(('localhost', 12345))# 监听连接
    tcp_socket.listen(5)# 接受连接
    conn, addr = tcp_socket.accept()
    print(f"Connected by {addr}")# 发送数据
    conn.sendall(b'Hello, TCP!')# 接收数据
    data = conn.recv(1024)
    print(f"Received from {addr}: {data.decode()}")# 关闭连接
    conn.close()
    tcp_socket.close()

相关文章:

Python——计算机网络

一.ip 1.ip的定义 IP是“Internet Protocol”的缩写,即“互联网协议”。它是用于计算机网络通信的基础协议之一,属于TCP/IP协议族中的网络层协议。IP协议的主要功能是负责将数据包从源主机传输到目标主机,并确保数据能够在复杂的网络环境中正…...

一招解决Pytorch GPU版本安装慢的问题

Pytorch是一个流行的深度学习框架,广泛应用于计算机视觉、自然语言处理等领域。安装Pytorch GPU版本可以充分利用GPU的并行计算能力,加速模型的训练和推理过程。接下来,我们将详细介绍如何在Windows操作系统上安装Pytorch GPU版本。 查看是否…...

股票交易所官方api接口有哪些?获取和使用需要满足什么条件

炒股自动化:申请官方API接口,散户也可以 python炒股自动化(0),申请券商API接口 python炒股自动化(1),量化交易接口区别 Python炒股自动化(2):获取…...

MoonSharp 文档五

目录 13.Coroutines(协程) Lua中的协程 从CLR代码中的协程 从CLR代码中的协程作为CLR迭代器 注意事项 抢占式协程 14.Hardwire descriptors(硬编码描述符) 为什么需要“硬编码” 什么是“硬编码” 如何进行硬编码 硬编…...

框架源码私享笔记(02)Mybatis核心框架原理 | 一条SQL透析核心组件功能特性

最近在思考一个问题:如何能够更好的分享主流框架源码学习笔记(主要是源码部分)?让有缘刷到的同学既可以有所收获,还能保持对相关技术架构探讨学习热情和兴趣。以及自己也保持较高的分享热情和动力。 今天尝试用一个SQL查询作为引…...

如何重置 MySQL root 用户的登录密码?

重置 MySQL root 密码的核心步骤是绕过权限验证登录数据库并更新密码字段。以下是具体方法: 方法一:通过 --SKIP-GRANT-TABLES 模式修改密码 停止 MySQL 服务 Windows:在命令行执行 net stop mysql(服务名可能为 mysql80 或 mysql…...

ArrayList底层结构和源码分析笔记

参考视频:韩顺平Java集合 ArrayList特点 ArrayList 可以加入 null,包括多个。 ArrayList 是由数组来实现数据存储的 ArrayList 基本等同于 Vector,除了 ArrayList 是线程不安全(执行效率高)。在多线程情况下&#xf…...

Centos离线安装gcc

文章目录 Centos离线安装gcc1. gcc是什么?2. gcc下载地址3. gcc的安装4. 安装结果验证 Centos离线安装gcc 1. gcc是什么? GCC(GNU Compiler Collection)是 GNU 项目下的开源编译器套件,主要用于将 C、C 等编程语言的源…...

flutter 图片资源路径管理

1. 创建统一资源管理类 创建一个单独的 Dart 文件(比如 manager.dart),将所有图片路径集中管理。这样在引用图片时,不需要每次都手动输入完整路径,只需通过常量引用即可。 //manager.dartclass Manager { static co…...

[内网渗透] 红日靶场2

环境配置 靶场地址: http://vulnstack.qiyuanxuetang.net/vuln/wiki/ 环境配置可以看这个: https://www.bilibili.com/video/BV1De4y1a7Ps/?spm_id_from333.337.search-card.all.click&vd_sourcecf73ac8de9b7c0322b1bccf77de91c5dNAT模式分配111段, DHCP也要更改 再添加…...

【cocos creator】游戏优化,内存,性能,包体积大小,加载,drawcall优化

参考: https://blog.csdn.net/qq_47012987/article/details/140169024 内存泄露排查 使用chrome测试cocos creator内存泄漏问题手游内存优化cocos creator优化Creator资源自动释放逻辑:所有 cc.Asset 实例都拥有成员函数 addRef 和 decRef,分…...

MySQL 企业版 TDE加密后 测试和问题汇总

一、测试keyring file 1.1 当keyring file文件丢失或者被篡改 结论:不影响当前正在运行的数据库,但是在重启服务后会启动失败出现报错。 tail -n 100 /var/log/mysql/error.log 报错信息如下: 2025-03-12T08:04:54.668847Z 1 [ERROR] [M…...

Unity 封装一个依赖于MonoBehaviour的计时器(下) 链式调用

[Unity] 封装一个依赖于MonoBehaviour的计时器(上)-CSDN博客 目录 1.加入等待间隔时间"永远执行方法 2.修改为支持链式调用 实现链式调用 管理"链式"调度顺序 3.测试 即时方法​编辑 "永久"方法 链式调用 ​4.总结 1.加入等待间隔时间&qu…...

petalinux环境下给linux-xlnx源码打补丁

在调试88e1512芯片时官方驱动无法满足我的应用方式,因此修改了marvell.c源码,但是在做bsp包重新创建新工程时发现之前的修改没有生效,因此查找了一下资料发现可以通过打补丁的方式添加到工程文件中,便于管理。 操作步骤 一、获取…...

套接字缓冲区以及Net_device

基础网络模型图 一般网络设计分为三层架构和五层设计: 一、三层架构 用户空间的应用层 位于最上层,是用户直接使用的网络应用程序,如浏览器、邮件客户端、即时通讯软件等。这些程序通过系统调用(如 socket 接口)向内核…...

2024下半年真题 系统架构设计师 案例分析

案例一 软件架构 关于人工智能系统的需求分析,给出十几个需求。 a.系统发生业务故障时,3秒内启动 XXX,属于可靠性 b.系统中的数据进行导出,要求在3秒内完成,属于可用性 c.质量属性描述,XXX,属…...

AI学习——深度学习核心技术深度解析

一、深度学习的本质与核心思想 定义:通过多层非线性变换,自动学习数据层次化表征的机器学习方法 核心突破: ​表征学习:自动发现数据的内在规律,无需人工设计特征​端到端学习:直接从原始输入到最终输出&…...

c++介绍智能指针 十二(2)

智能指针share_ptr,与unique_ptr不同&#xff0c;多个shar_ptr对象可以共同管理一个指针&#xff0c;它们通过一个共同的引用计数器来管理指针。当一个智能指针对象销毁时&#xff0c;计数器减一。当计数器为0时&#xff0c;会将所指向的内存对象释放。 #include<memory>…...

西门子S7-1200 PLC远程调试技术方案(巨控GRM532模块)

三步快速实现远程调试 硬件部署 准备西门子S7-1200 PLC、巨控GRM552YW-C模块及编程电脑。GRM552YW-C通过网口与PLC连接&#xff0c;支持4G/5G/Wi-Fi/有线网络接入&#xff0c;无需复杂布线。 软件配置 安装GVCOM3配置软件&#xff0c;注册模块&#xff08;输入唯一序列号与密…...

vue启动 localhost无法访问

1. localhost 和 127.0.0.1 虽然都指向本机&#xff0c;但它们有细微的区别&#xff1a; - localhost 是一个域名&#xff0c;需要通过 DNS 解析或本地 hosts 文件解析为 IP 地址 - 127.0.0.1 是直接的 IP 地址&#xff0c;不需要解析过程 2. 无法访问 localhost 的可…...

Mac上更改默认应用程序

Mac上为某些文件设置默认打开应用的时候&#xff0c;刚开始是通过打开方式&#xff0c;其他里面&#xff0c;勾选始终以此方式打开&#xff0c;但实际上这个功能并不太好用&#xff0c;经常会让人误以为已经设置好了。但是实际上只是在当前目录起作用。真正解决这个问题可以按照…...

【开源+代码解读】Search-R1:基于强化学习的检索增强大语言模型框架3小时即可打造个人AI-search

大语言模型(LLMs)在处理复杂推理和实时信息检索时面临两大挑战:知识局限性(无法获取最新外部知识)和检索灵活性不足(传统方法依赖固定检索流程)。现有方法如检索增强生成(RAG)和工具调用(Tool-Use)存在以下问题: RAG:单轮检索导致上下文不足,无法适应多轮交互场景…...

贪心算法和遗传算法优劣对比——c#

项目背景&#xff1a;某钢管厂的钢筋原材料为 55米&#xff0c;工作需要需切割 40 米&#xff08;1段&#xff09;、11 米&#xff08;15 段&#xff09;等 4 种规格 &#xff0c;现用贪心算法和遗传算法两种算法进行计算&#xff1a; 第一局&#xff1a;{ 40, 1 }, { 11, 15…...

网络安全防护总体架构 网络安全防护工作机制

1 实践内容 1.1 安全防范 为了保障"信息安全金三角"的CIA属性、即机密性、完整性、可用性&#xff0c;信息安全领域提出了一系列安全模型。其中动态可适应网络安全模型基于闭环控制理论&#xff0c;典型的有PDR和P^2DR模型。 1.1.1 PDR模型 信息系统的防御机制能…...

SpringCloud带你走进微服务的世界

认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打成一个包部…...

Python设计模式 - 建造者模式

定义 建造者模式是一种创建型设计模式&#xff0c;主要用于构建包含多个组成部分的复杂对象。它将对象的构建过程与表示分离&#xff0c;使得同样的构建过程可以创建不同的对象表示。 结构 抽象建造者&#xff08;Builder&#xff09;&#xff1a;声明创建产品的各个部件的方…...

在 Ubuntu 上安装和配置 Docker 的完整指南

Docker 是一个开源的平台&#xff0c;旨在简化应用程序的开发、部署和运行。通过将应用程序及其依赖项打包到容器中&#xff0c;Docker 确保应用程序可以在任何环境中一致地运行。 目录 前言安装前的准备安装 Docker 步骤 1&#xff1a;更新包索引步骤 2&#xff1a;安装必要…...

网络安全之数据加密(DES、AES、RSA、MD5)

刚到公司时&#xff0c;我的工作就是为app端提供相应的接口。之前app使用的是PHP接口&#xff0c;对数据加密方面做得比较少。到使用java接口时&#xff0c;老大开始让我们使用DES加密&#xff0c;进行数据传输&#xff0c;但是后来觉得DES是对称加密&#xff0c;密钥存在客户端…...

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园周边美食探索及分享平台”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 校园周边美食探索及分享平台结构图…...

vscode关闭仓库后如何打开

vscode源代码管理->更改->代码 关闭仓库后如何打开。 关闭仓库操作 打开仓库操作 1.按下 Ctrl Shift P&#xff08;Windows/Linux&#xff09;或 Cmd Shift P&#xff08;Mac&#xff09;打开命令面板。 2.在命令面板中输入 Git: Open Repository&#xff0c;然后选…...