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

网络编程初识

如果这篇有没接触过的知识点,请转到网络编程先导知识_小梁今天敲代码了吗的博客-CSDN博客

目录

 IPv4和IPv6的概念:

子网掩码

默认网关

ping命令

端口

OSI网络分层模型

TCP/IP四层模型

字节序转换函数

IP地址转换

上一篇介绍了网络编程的先导知识,那我们如何查看当前主机对应的IP地址呢

Windows系统下打开命令提示符,输入ipconfig(linux系统输入ifconfig)

 IPv4和IPv6的概念:

        IPV4和IPV6都是互联网协议中的版本。IPV4是早期的一个版本,采用32位地址表示方式,最多支持42亿个不同的IP地址;而IPV6是新一代的IP协议,采用128位地址表示方式,可支持更多的IP地址,达到了10的28次方个,足以满足未来互联网的需求。

IPV4和IPV6的不同在于:

        1.地址长度:IPV4地址长度为32位,IPV6地址长度为128位。

        2.IP地址数量:IPV4最多支持约42亿个IP地址,而IPV6支持的IP地址数量则大于IPV4几乎无限制,并且可以满足未来互联网的需求。

        3.地址表示方式:IPV4使用点分十进制表示,例如:192.168.1.1;而IPV6采用冒号分隔的16进制数字表示,例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344。

        4.安全性:IPV6比IPV4更安全,因为它有更多的安全性功能和更强的加密,可以更好地保护用户的隐私和数据安全。

总之,IPV6是未来网络发展的方向,将逐步取代IPV4。

子网掩码

        子网掩码是一个32位的二进制数字序列,它用于标识一个IP地址中哪些位用于网络地址,哪些位用于主机地址。它的作用是在一个网络中将一个IP地址分为网络地址和主机地址两部分,以便于实现网络通信和管理。子网掩码与IP地址配合使用,确定了网络号和主机号的界限。在计算机网络中,子网掩码通常表示为四个十进制数,每个数的取值范围为0到255,如255.255.255.0。

默认网关

        默认网关是连接不同网络的设备之间交换数据包的地方。它通常是一个路由器,负责将数据包从本地网络发送到远程网络或互联网。默认网关是必须配置的,因为它允许计算机访问外部网络。

ping命令

         ping命令的作用是测试与目标计算机之间的通信。在命令提示符或终端窗口中运行ping命令并指定目标IP地址或域名时,该命令会发送一个测试数据包到目标计算机。目标计算机收到该数据包后,会发送回一个响应数据包以指示其是否已收到该数据包。根据收到的响应时间和数据包丢失率,可以判断目标计算机与您的计算机之间的连接质量。ping命令通常用于网络故障排除和测试,以确定计算机之间的网络连接是否畅通。

端口

        通过IP地址可以定位到我们的主机设备,那么如果想定位到设备中的某一个进程,应该通过什么呢?答案是通过端口。

        比如:在电脑上同时运行了微信和qq,小明通过客户端给我的微信发消息,为什么我电脑上微信就会收到消息,而不是qq呢?

        因为运行在我电脑上的微信和qq都绑定了不同的端口,通过IP地址定位到我的主机后,再通过端口定位到我的微信进程,通过指定的IP和端口,小明给我们微信发送数据的时候我们微信就能接收到数据了。

        端口是计算机网络通信中的一种逻辑概念,用于标识应用程序与操作系统或其他应用程序之间交换数据的接口。在计算机网络中,每个运行的应用程序都需要使用一个或多个端口与其他应用程序通信。端口号是一个16位的整数,其范围为0~65535,其中0~1023为公认端口,一般用于标准服务,如HTTP、FTP、SSH等;1024~49151为注册端口,用于自定义应用程序或服务;49152~65535为动态端口,这些端口用于临时数据传输,通常由操作系统自动分配。端口号加上IP地址,组成了网络中的套接字,唯一标识了一个应用程序或服务。

OSI网络分层模型

        OSI网络分层模型(Open Systems Interconnection Reference Model),是一种用于计算机网络体系结构设计的通用框架。它由国际标准化组织(ISO)开发,目的是使各种计算机和网络设备能够进行通信而无需了解其他设备的详细信息。

        OSI模型将计算机网络体系结构分成了七个不同的层次,每个层次都执行特定的任务,并且只与它下面和上面的层次进行通信。以下是这七个层次:

- 物理层:负责传输比特流,定义了传输媒介,传输速率等规范。
- 数据链路层:在物理层上建立数据链路,完成数据的传输和接收,进行差错控制和流量控制。
- 网络层:实现源到目的地的逻辑传输,包括寻址、路由选择和拥塞控制等功能。
- 传输层:为两个通信应用程序提供端到端的通信,并控制数据传输的可靠性。
- 会话层:管理不同计算机之间的会话,建立、维护和终止通信。
- 表示层:实现数据格式的转换、数据加密和解密以及数据压缩等功能。
- 应用层:提供各种网络服务,包括文件传输、电子邮件、远程登录、网页浏览等。

这些层次是按照功能划分的,并且每个层次都能够与相邻的层次进行交互,从而实现了数据在网络中的可靠传输。

TCP/IP四层模型

        TCP/IP四层模型是指TCP/IP协议中的四个不同的层次,每个层次都提供了特定的功能,不同的层次之间有着严格的协议规范。以下是这四个层次:

1.应用层: 应用层是TCP/IP协议的最高层,它为应用程序提供通信服务,例如电子邮件、文件上传和下载、Web浏览等。应用层通过特定的协议与下面的传输层通信,例如HTTP、SMTP、FTP等。

2.传输层: 传输层为应用程序提供端到端的通信服务,它使用TCP或UDP协议以及相应的端口号来实现数据的传输。TCP协议提供可靠的数据传输服务,而UDP协议则提供不可靠但是速度更快的数据传输服务。

3.网络层: 网络层负责数据包的路由和转发,它使用IP协议进行通信。此外,网络层还负责对数据包进行分片和重新组装,以便在不同的网络节点进行传输。

4.物理层(或链路层): 物理层是TCP/IP协议中的最底层,负责将数据转换为电子信号并通过物理介质进行传输,例如网线或无线信号。

        TCP/IP四层模型与OSI网络分层模型的层数不同,但它们的基本原理类似。TCP/IP四层模型是TCP/IP协议的基础,各层都有着不同的协议和技术,共同构成了互联网和许多其他网络的基础。

字节序转换函数

        字节序转换函数是一种将整数在不同字节序之间进行转换的函数。字节序指定了一个多字节值在内存中以何种顺序存放。有两种常见的字节序:大端字节序和小端字节序。

        在大端字节序中,最高位字节(即第一个字节)存放在最低的存储地址,而最低位字节(即最后一个字节)存放在最高的存储地址。在小端字节序中,最低位字节存放在最低的存储地址,而最高位字节存放在最高的存储地址。

以下是两个常用的字节序转换函数:

1. htons()和ntohs()函数:

        htons()函数将主机字节序转换为网络字节序,ntohs()函数将网络字节序转换为主机字节序。这两个函数用于16位整数的转换。

例如,将一个16位整数num从主机字节序转换为网络字节序:

unsigned short num = 0x1234; // 假设主机字节序为小端序
unsigned short network_num = htons(num); // 转换为网络字节序

2. htonl()和ntohl()函数:

        htonl()函数将主机字节序转换为网络字节序,ntohl()函数将网络字节序转换为主机字节序。这两个函数用于32位整数的转换。

例如,将一个32位整数num从主机字节序转换为网络字节序:

unsigned int num = 0x12345678; // 假设主机字节序为小端序
unsigned int network_num = htonl(num); // 转换为网络字节序

        需要注意的是,这些函数仅仅是将字节序进行转换,并不改变数据类型或大小。因此,在使用这些函数的时候,要确保数据类型和大小是正确的。

IP地址转换

IP地址转换通常指的是将字符串表示的IP地址转换为整型或二进制格式的IP地址,或者将整型或二进制格式的IP地址转换为字符串表示的IP地址。

下面给出一些常用的IP地址转换函数。

1. `inet_addr()`

该函数可以将一个字符串表示的IP地址转换为二进制格式的IP地址。函数原型如下:

in_addr_t inet_addr(const char* cp);

其中参数`cp`为指向表示IP地址的字符串的指针,函数返回值为转换后的二进制格式IP地址。如果转换失败,则返回`INADDR_NONE`。

2. `inet_ntoa()`

该函数可以将一个二进制格式的IP地址转换为字符串表示的IP地址。函数原型如下:

char* inet_ntoa(struct in_addr addr);

其中参数`addr`为表示IP地址的`struct in_addr`结构体,函数返回值为指向字符串表示的IP地址的指针。注意,该函数返回的指针指向的是静态内存,不应该被多次调用或修改,否则会导致错误。

3. `inet_pton()`

该函数可以将一个字符串表示的IP地址转换为二进制格式的IP地址。与`inet_addr()`不同的是,该函数支持IPv4和IPv6地址的转换。函数原型如下:

int inet_pton(int af, const char* src, void* dst);

其中参数`af`指定地址族,取值可以为`AF_INET`或`AF_INET6`;参数`src`为指向表示IP地址的字符串的指针;参数`dst`为指向存储转换后的二进制格式IP地址的缓冲区的指针。函数返回值为转换是否成功,如果成功则返回1,否则返回0或-1。

4. `inet_ntop()`

该函数可以将一个二进制格式的IP地址转换为字符串表示的IP地址。与`inet_ntoa()`不同的是,该函数支持IPv4和IPv6地址的转换。函数原型如下:

const char* inet_ntop(int af, const void* src, char* dst, socklen_t cnt);

其中参数`af`指定地址族,取值可以为`AF_INET`或`AF_INET6`;参数`src`为指向存储二进制格式IP地址的缓冲区的指针;参数`dst`为指向存储转换后的字符串表示的IP地址的缓冲区的指针;参数`cnt`指定缓冲区的大小。函数返回值为指向字符串表示的IP地址的指针,如果转换失败,则返回`NULL`。

相关文章:

网络编程初识

如果这篇有没接触过的知识点,请转到网络编程先导知识_小梁今天敲代码了吗的博客-CSDN博客 目录 IPv4和IPv6的概念: 子网掩码 默认网关 ping命令 端口 OSI网络分层模型 TCP/IP四层模型 字节序转换函数 IP地址转换 上一篇介绍了网络编程的先导知…...

软考A计划-试题模拟含答案解析-卷十二

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分享&am…...

I.MX RT1170加密启动详解(1):Encrypted Boot image组成

使用RT1170芯片构建的所有平台一般都是高端场合,我们需要考虑软件的安全需求。该芯片集成了一系列安全功能。这些特性中的大多数提供针对特定类型攻击的保护,并且可以根据所需的保护程度配置为不同的级别。这些特性可以协同工作,也可以独立工…...

Linux---用户切换命令(su命令、sudo命令、exit命令)

1. su命令 root用户拥有最大的系统操作权限,而普通用户在许多地方的权限是受限的。 普通用户的权限,一般在其HOME目录内是不受限的。 一旦出了HOME目录,大多数地方,普通用户仅有只读和执行权限,无修改权限。 su 是…...

手机图片怎么提取文字?高效渠道一览

随着智能手机的普及,我们现在可以随时随地使用手机拍照记录生活中的点滴。然而,有时候我们拍照之后可能需要提取图片中的文字,比如拍下的菜谱、公告、名片等等。这时,我们就需要使用手机图片提取文字的功能。 - 采用OCR技术拍照识…...

Elasticsearch 聚合数据结果不精确问题解决方案

Elasticsearch 聚合数据结果不精确 背景 近期我们项目中出现使用ES聚合某个索引的数据取TOP 10的数据和相同条件下查询所有数据然后按数据量排序取的TOP 10的数据不一致的问题。 下面我们简单分析一下这个问题,列出一些常见的解决方案。 问题 Elasticsearch分片…...

Qt经典面试题:Qt开启线程的几种方式

方法一:从QThread类派生 ①创建一个类从QThread类派生 ②在子线程类中重写 run 函数, 将处理操作写入该函数中 ③在主线程中创建子线程对象, 启动子线程,调用start()函数 这种方法涉及到创建一个从QThread类派生的子类,并在该子类中重写run()函数。处理操…...

使用chartgtp写Android代码

<LinearLayout android:layout_width"match_parent" android:layout_height"match_parent" android:orientation"horizontal"> <TextView android:id"id/姓名" …...

【C++】4.jsoncpp库:jsoncpp库安装与使用入门

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍jsoncpp的使用。 学其所用&#xff0c;用其所学。——梁启超 欢迎来到我的博客&#xff0c;一起学习知识&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次更新不迷路&am…...

HTML、CSS、 JavaScript介绍(二)

CSS 指层叠样式表 (Cascading Style Sheets)&#xff0c;CSS定义如何显示 HTML 元素。HTML 标签原本被设计为用于定义文档内容&#xff0c;样式表定义如何显示 HTML 元素&#xff0c;就像 HTML 中的字体标签和颜色属性所起的作用那样。样式通常保存在外部的 .css 文件中。我们只…...

高效益的淘客APP要怎么开发,需要哪些功能

现在各大淘客app都有移动端的app&#xff0c;但是一直不知道如何推广出去。客app想要赚钱&#xff0c;要思考怎么推广淘客app&#xff0c;推广适用于非常执行力的人。淘客app推广首要第一条&#xff0c;产品要好&#xff0c;app要好&#xff0c;返利要高&#xff0c;用户才会使…...

Java基础--->IO流(2)【常见IO模型】

文章目录 计算机角度IO操作系统IO常见的IO模型Java 中 3 种常见 IO 模型BIO&#xff08;BlockingI/O&#xff09;【同步阻塞IO】NIO&#xff08;Non-blocking/New I/O&#xff09;【非阻塞IO】IO多路复用AIO&#xff08;Asynchronous I/O&#xff09;【异步IO】 计算机角度IO 根…...

JavaScript let 和 const

在JavaScript中&#xff0c;let和const是用于声明变量的关键字。 let关键字用于声明一个块级作用域的变量。块级作用域是指在一个代码块&#xff08;通常是在花括号 {} 内部&#xff09;中声明的变量只在该代码块内部有效。例如&#xff1a; javascript function example() {…...

云原生下多集群的监控系统背景、架构设计与实现

随着云原生技术的普及&#xff0c;越来越多的企业开始采用多集群部署方案来提高系统的可用性和灵活性。在这种情况下&#xff0c;如何有效地监控多个集群的运行状态&#xff0c;成为了云原生架构下的一个重要问题。 多集群监控系统需要考虑以下几个方面的问题&#xff1a; 监…...

利用OpenCV处理图像

OpenCV是非常流行的图像处理库&#xff0c;下面介绍一下其对图像的基本操作。 1. 安装与环境 安装还有点儿复杂的&#xff0c;但百度几篇博客基本能解决&#xff0c;这里就不多说了。 安装好后&#xff0c;要在工程中使用OpenCV的头文件和库&#xff0c;需要在CMakeLists.tx…...

【面试实战】SpringIoC、AOP、MVC面试实战

version:1.0 文章目录 SpringSpring基础 / IoC🙎‍♂️面试官:举例Spring的模块?🙎‍♂️面试官:Spring、SpringMVC、Spring Boot关系?🙎‍♂️面试官:说说对SpringIoC的了解?🙎‍♂️面试官:什么是Spring Bean?🙎‍♂️面试官:Bean的作用域?🙎‍♂️面…...

[Redis 分布式锁 ]

目录 前言: 使用场景: 基于 Redis 实现分布式锁的详细示例&#xff1a; 使用示例&#xff1a; 依赖: Redis分布式锁控制并发访问: 前言: 记录一些小笔记 , 如果对你有帮助 那就更好了 使用场景: Redis 实现分布式锁的使用场景包括&#xff1a; 防止重复操作&#xf…...

如何创建Vue实例?Vue实例有哪些属性和方法

Vue实例就是Vue的实例化对象&#xff0c;就像你有一个iPhone&#xff0c;那么iPhone就是你的实例化对象。要创建Vue实例&#xff0c;就像你想拥有一部iPhone一样&#xff0c;首先要有一个设计图。 这个设计图就相当于Vue实例的options对象&#xff0c;你可以设置它的属性&…...

InnoDB Cluster集群Mysql Router代理层最佳实践

InnoDB Cluster 集群 & Mysql-Router 代理层 前言 Mysql是现今最常用的关系型数据库之一&#xff0c;高可用一直是我们对软件服务的要求。常见的Mysql高可用是主从配置&#xff0c;在主节点挂掉后需要依赖监控脚本进行主从切换将从节点升级&#xff0c;后台服务代码层面也…...

RabbitMQ系列-概念及安装

1. 消息队列 消息队列是指利用队列这种数据结构进行消息发送、缓存、接收&#xff0c;使得进程间能相互通信&#xff0c;是点对点的通信 而消息代理是对消息队列的扩展&#xff0c;支持对消息的路由&#xff0c;是发布-订阅模式的通信&#xff0c;消息的发送者并不清楚消息的…...

网络编程(Modbus进阶)

思维导图 Modbus RTU&#xff08;先学一点理论&#xff09; 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议&#xff0c;由 Modicon 公司&#xff08;现施耐德电气&#xff09;于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…...

c++ 面试题(1)-----深度优先搜索(DFS)实现

操作系统&#xff1a;ubuntu22.04 IDE:Visual Studio Code 编程语言&#xff1a;C11 题目描述 地上有一个 m 行 n 列的方格&#xff0c;从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子&#xff0c;但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序

一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点&#xff0c;但无自动故障转移能力&#xff0c;Master宕机后需人工切换&#xff0c;期间消息可能无法读取。Slave仅存储数据&#xff0c;无法主动升级为Master响应请求&#xff…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

MySQL用户和授权

开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务&#xff1a; test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...