C++网络编程之IP地址和端口
概述
IP地址和端口共同定义了网络通信中的源和目标。IP地址负责将数据从源设备正确地传输到目标设备,而端口则确保在目标设备上数据被交付到正确的应用或服务。因此,在网络编程中,IP地址和端口是密不可分的两个概念,共同构成了网络通信的基础。
IP地址
IP地址是互联网协议地址,它为互联网上的每一个网络、每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP地址允许数据在网络上正确路由,确保数据从源设备正确地传输到目标设备。
目前常用的IP地址主要分为IPv4和IPv6两种。
IPv4:采用了32位地址长度,分为四组,每组8位。用点分十进制表示法表示,类似“192.168.50.100”的形式。IPv4地址空间有限,最多只能分配42亿多个地址,在2019年左右已基本分配完毕。
IPv6:为了解决IPv4地址不够用的问题,推出了IPv6。它采用了128位地址长度,分为8组,每组16位。用冒分十六进制表示法表示,即“xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx”的形式。IPv6地址空间极大,几乎可以为地球上的每一粒沙子分配一个地址。
IP地址中存在一些比较特殊的地址,它们具有特殊的含义,具体如下。
0.0.0.0:表示所有网络地址,通常用于默认路由。
255.255.255.255:表示全网的广播地址,用于向同一网络内的所有设备发送数据。
127.0.0.1:表示本机地址,用于本机测试或环回接口。
为了解决IPv4地址空间不足的问题,提出了私有地址的概念。私有地址是指在互联网上不公开使用,而是被保留在私有网络(比如:局域网LAN、企业内网等)内部使用的IP地址范围。这些地址不会被互联网上的路由设备所识别和转发,因此它们不会与全球唯一的公网IP地址发生冲突。
目前,IPv4地址中的私有地址范围主要包括以下三个。
1、A类私有地址。10.0.0.0到10.255.255.255,这是一个连续的A类地址块,共包含约1677万个地址。
2、B类私有地址。172.16.0.0到172.31.255.255,这是一个连续的B类地址块,但是被划分为16个子网,每个子网包含约65534个地址。
3、C类私有地址。192.168.0.0到192.168.255.255,这是一个连续的C类地址块,但是被划分为256个子网(每个子网以.0到.255结尾),每个子网包含约254个地址。
在私有网络中,设备可以使用这些私有地址进行相互通信。当私有网络中的设备需要与互联网上的设备进行通信时,需要使用网络地址转换(即NAT)技术,将私有地址转换为公网IP地址,以实现数据的跨网络通信。NAT技术可以有效地节约公网IP地址资源,同时保护私有网络内部的设备不被外部网络直接访问,提高了网络的安全性。
端口
端口是单个设备上运行多个网络服务时使用的逻辑单位。每个端口都有一个数字标识,范围从0到65535。端口将网络通信划分为不同的应用或服务,确保数据在目标设备上被交付到正确的应用或服务。
端口大致可以分为以下几类。
1、公认端口:从0到1023,被IANA(互联网编号分配机构)分配给特定的服务。这些端口的通讯明确表明了某种服务的协议,比如:HTTP服务通常使用80端口,HTTPS服务使用443端口。
2、注册端口:从1024到49151,它们松散地绑定于一些服务。这些端口同样用于许多其它目的,但通常不会由IANA直接分配。很多应用程序和服务,都使用这些端口号范围内的某个端口。
3、动态/私有端口:从49152到65535,这些端口号通常留给客户端程序使用,以便在客户端和服务器之间建立动态或临时的连接。
4、特殊端口:除了上述的分类外,还有一些特殊的端口。比如:0端口通常用于表示任意端口或无端口,65535端口通常用作广播地址的一部分,但在TCP/IP协议中不用于端口号。
在网络通信中,端口的作用主要体现在以下三个方面。
1、区分服务。不同的服务使用不同的端口号进行区分,确保数据能够被正确地交付到目标服务。
2、安全控制。通过防火墙等安全设备对特定端口的访问进行控制,提高网络安全性。
3、负载均衡。在服务器集群中,通过端口映射等技术实现负载均衡,可提高服务性能和可靠性。
实例解析
在下图的网络拓扑图中,存在两个局域网的网段,分别为:192.168.50.X和192.168.60.X,两个网段通过路由器、网关等设备进行联通。
现在想通过192.168.50.120设备的6666端口发送消息给192.168.60.220设备的6667端口,假设使用TCP协议进行传输,大致的流程如下。
1、应用层请求。在192.168.50.120上运行的应用程序首先生成要发送的数据,并请求通过TCP协议发送这些数据到目标地址192.168.60.220和端口6667。
2、传输层封装。在192.168.50.120的传输层接收到应用层的数据后,会将其封装成一个TCP段。这个TCP段包含了:源端口号6666、目标端口号6667、序列号(用于数据的顺序控制)、确认号(对于应答包)、数据本身等。
3、网络层封装。TCP段被传递给网络层。在网络层,TCP段被封装成IP数据包。IP数据包包含了:源IP地址192.168.50.120、目标IP地址192.168.60.220、用于路由的TTL生存时间等。
路由器根据IP数据包的目的地址192.168.60.220在路由表中查找下一跳地址,并将数据包转发到相应的网络接口。由于两个网段192.168.50.X和192.168.60.X通过路由器连接,数据包将被转发到连接192.168.60.X网段的路由器接口。
4、数据包传输。数据包通过物理网络(比如:以太网)被发送到目标网络192.168.60.X。在这个过程中,数据包可能会经过多个路由器或交换机,但每个节点都会根据IP数据包中的目标地址来转发它。
5、目标机器接收。当数据包到达192.168.60.220时,IP层会解析数据包,并将TCP段传递给相应的TCP端口6667。在192.168.60.220的TCP层,接收到的TCP段会被重新组装成原始的数据流,并传递给上层的应用程序。
6、应用层处理。应用程序在192.168.60.220上接收到数据,进行相应的处理(比如:显示消息、处理请求等)。
相关文章:

C++网络编程之IP地址和端口
概述 IP地址和端口共同定义了网络通信中的源和目标。IP地址负责将数据从源设备正确地传输到目标设备,而端口则确保在目标设备上数据被交付到正确的应用或服务。因此,在网络编程中,IP地址和端口是密不可分的两个概念,共同构成了网络…...

陶瓷4D打印有挑战,水凝胶助力新突破,复杂结构轻松造
大家好!今天要和大家聊聊一项超酷的技术突破——《Direct 4D printing of ceramics driven by hydrogel dehydration》发表于《Nature Communications》。我们都知道4D打印很神奇,能让物体随环境变化而改变形状。但陶瓷因为太脆太硬,4D打印一…...
网络安全的详细学习顺序
网络安全的详细学习顺序可以按照由浅入深、逐步递进的原则进行。以下是一个建议的网络安全学习顺序: 1. 基础知识学习 计算机网络基础:理解网络架构、TCP/IP协议栈、OSI七层模型、数据链路层到应用层的工作原理。 操作系统基础:了解Window…...
人工智能与机器学习原理精解【28】
文章目录 随机森林随机森林详解随机森林的详细解释1. 随机森林的基本概念、原理和应用场景、公式和计算2. 随机森林在机器学习、深度学习等领域的重要性3. 实际应用案例及其优势和局限性4. 随机森林在解决实际问题中的价值和意义 随机森林局限性的详细归纳随机森林主要的应用领…...
StarRocks 中如何做到查询超时(QueryTimeout)
背景 本文基于 StarRocks 3.1.7 主要是分析以下两种超时设置的方式: SESSION 级别 SET query_timeout 10;SELECT sleep(20);SQL 级别 select /* SET_VAR(query_timeout10) */ sleep(20); 通过本文的分析大致可以了解到在Starrocks的FE端是如何进行Command的交互以及数据流走…...
Windows 开发工具使用技巧 Visual Studio使用安装和使用技巧 Visual Studio 快捷键
一、Visual Studio配置详解 1. 安装 Visual Studio 安装时,选择你所需要的组件和工作负载。Visual Studio 提供多种工作负载,例如: ASP.NET 和 Web 开发:用于 Web 应用的开发。 桌面开发(使用 .NET 或 C)…...

计算机网络-系分(5)
目录 计算机网络 DNS解析 DHCP动态主机配置协议 网络规划与设计 层次化网络设计 网络冗余设计 综合布线系统 1. 双栈技术 2. 隧道技术 3. 协议转换技术 其他网络技术 DAS(Direct Attached Storage,直连存储) NAS(Net…...
React Native使用高德地图
在React Native项目中使用高德地图,主要涉及到几个关键步骤:安装高德地图相关的React Native模块、配置项目、申请高德地图API Key、以及在实际组件中使用高德地图功能。以下是一个详细的步骤指南: 一、安装高德地图React Native模块 首先&…...
排序算法的理解
排序算法借鉴了数学里面的不等式的思想 计算机不能直接继承不等式的传递性特征,这个时候才用递归调用去人为的分成不同的部分。或者说,一部分已经大致排序好的数放在一边,另外一边再排。 这是由于计算机只能两两比较数字才会出现的情况。它…...

Yocto - 使用Yocto开发嵌入式Linux系统_04 使用Toaster来创建一个image
Using Toaster to Bake an Image 既然我们已经知道了如何在 Poky 中使用 BitBake 构建图像,那么接下来我们就来学习如何使用 Toaster 构建图像。我们将重点介绍 Toaster 最直接的使用方法,并介绍它的其他功能,让你了解它的能力。 Now that we…...
【C#生态园】后端服务与网络库:选择适合你游戏开发的利器
网络通信不再难题:六种常用游戏开发网络库详解 前言 随着网络游戏行业的蓬勃发展,对于实时多玩家游戏服务和网络通信库的需求也日益增长。在游戏开发中,选择合适的后端服务和网络库可以极大地影响游戏的性能、稳定性和用户体验。本文将介绍…...

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-30目录1. Proof Automation with Large Language Models概览:论文研究背景:技术挑战:如何破局…...

【漏洞复现】JeecgBoot 积木报表 queryFieldBySql sql注入漏洞
》》》产品描述《《《 积木报表,是一款免费的企业级Web报表工具,像搭建积木一样在线设计报表!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! 》》》漏洞描述《《《 JeecgBoot 积木报表 queryFieldBySq| 接口存在一个 SQL 注入漏洞&…...
Qt6 中相对于 Qt5 的新增特性及亮点
Qt 是一个领先的跨平台应用开发框架,涵盖了桌面、移动、嵌入式等多个平台。随着 Qt6 的发布,Qt 框架经历了重大升级和变革,带来了大量新特性和架构上的改进,使开发者可以更高效地开发现代化应用程序。本文将重点讨论 Qt6 相对于 Q…...

超轻巧modbus调试助手使用说明
一、使用说明 1.1 数据格式 和其他的modbus采集工具一样,本组件也支持各种数据格式,其实就是高字节低字节的顺序。一般是2字节表示一个数据,后面又有4字节表示一个数据,目前好像还有8字节表示一个数据的设备。不同厂家的设备对应…...

Percona Monitoring and Management
Percona Monitoring and Management (PMM)是一款开源的专用于管理和监控MySQL、MongoDB、PostgreSQL...
WarehouseController
目录 1、 WarehouseController 1.1、 //仓库信息设置 1.2、 /// 查询 1.3、 /// 删除 WarehouseController using QXQPS.Models; using QXQPS.Vo; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mv…...
基于 STM32 单片机的温室物理无害生长系统
摘要 : 本系统主要由六大部分组成,分别为 STM32单片机控制模块、温湿度检测模块、风扇、臭氧消毒、温室补光灯、水利灌溉通道等基本设施。单片机可以通过 MOS 管这类的电力电子器件来实现对某些大功率设施的控制如温室内风扇通风系统、温室内定时补光、根据土壤温湿检测来进行…...

新版pycharm如何导入自定义环境
我们新的版本的pycharm的ui更改了,但是我不会导入新的环境了 我们先点击右上角的add interpreter 然后点击添加本地编译器 先导入这个bat文件 再点击load 我们就可以选择我们需要的环境了...

一文彻底搞懂多模态 - 多模态理解+视觉大模型+多模态检索
文章目录 技术交流多模态理解一、图像描述1. 基于编码器-解码器的方法2. 基于注意力机制的方法3. 基于生成对抗网络的方法 二、视频描述三、视觉问答 视觉大模型一、通用图像理解模型二、通用图像生成模型 多模态检索一、单模态检索二、多模态检索三、跨模态检索 最近这一两周看…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

蓝桥杯3498 01串的熵
问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798, 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...

视觉slam十四讲实践部分记录——ch2、ch3
ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
comfyui 工作流中 图生视频 如何增加视频的长度到5秒
comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗? 在ComfyUI中实现图生视频并延长到5秒,需要结合多个扩展和技巧。以下是完整解决方案: 核心工作流配置(24fps下5秒120帧) #mermaid-svg-yP…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...