C++网络编程基础

文章目录

    • 协议
    • 局域网通信
    • IP 地址
    • 网络通信的本质
    • tcp 和 udp 协议
    • 网络字节序
    • 网络主机数据转化接口

协议

在这里插入图片描述
协议:收到数据后,多出来的那一部分,也叫一种 “约定”,一整套的自硬件到软件,都有协议,需要有人定制,也需要有人实现

当通信距离边长后,如何保证将数据交给下一跳主机,如何定位目标主机,如何处理报文出错,如何使用送达的数据等问题,都需要对应的协议

网络的层协议:和软件的层状结构一样,实现了各个部分代码的解耦,更容易维护,只需要考虑各个子问题即可。

![[Pasted image 20240603094511.png]]

网络协议一般叫:TCP/IP 协议,是在内核中实现的
网络编程:用户在操作系统的用户层使用系统调用,来实现网络层的功能
网络库:对网络层的系统调用进行封装,简化开发流程

任何操作系统都必须基于 OSI 标准实现网络协议栈,所以在不同的系统中,网络调用接口大同小异

报头使用C语言描述的结构体,client 和 server 之间是,都是可以识别这个报头的,因为client 和 server 描述报头的源代码都是一样的。

局域网通信

局域网通信:在同一个局域网中,两台主机是可以直接通信的,(局域网中建房间,玩游戏)
原理:两台主机在局域网中通信,局域网中所有主机都能收到消息,只不过通过 Mac 地址(网卡地址)来区分谁接受,其他不接收的主机会选择将消息直接丢弃掉
但有可能同一时刻,局域网中由多台主机在同时发消息,就可能会形成数据碰撞(丢包),那么发送方主机就会执行碰撞避免算法(休息一会再重发)

ifconfig:可查 Linux 主机的 Mac 地址(Mac只在局域网内部有效)

要正确的发送消息,再同一时刻,只允许一台主机在局域网中发消息,因此,局域网中的设备少,越安全,局域网中消息是否能发送成功是基于概率的,因此也叫 以太网(例如运动会操场上,消息发不出去一直丢包,就是因为几千人都访问的是附近同一个基站,而当操场上只有几个人的时候,消息特别流畅)

用系统的观点:局域网就是一个临界资源,主机在局域网出往另一台主机发送消息就是访问临界区代码,碰撞检测和碰撞避免、重发就是完成互斥访问,维护临界资源,单独发送,就是独占网络资源

用户之间通信时,消息在双方两台主机上,都要贯穿协议栈(软件->硬件 ——> 硬件->软件)

在这里插入图片描述

封装报头:在自己拿到的报文的基础上,添加同层协议的报头
每层协议都会封装自己对应的报头,也要考虑如何将收到的报文中,报头和有效载荷进行分离,如何将自己的有效载荷,交给上层的协议。

IP 地址

Linux 查看 ip 地址:ifconfig

在这里插入图片描述

windows 查看 ip 地址:ipconfig

在这里插入图片描述

整个ip 地址的范围:[0,255].[0,255].[0,255].[0,255] ,也叫点分十进制

在语言视角,这种点分十进制的 ip 地址,C++种可以使用字符串来表示

IP 地址分为公网ip内网ip,两个 ip 地址加起来,才是所有的 ip 地址,一般在 Linux 或 windows 上直接见到或查到的 ip 地址,都是内网ip,但如果要使自己的服务被别人看到,就要使这个服务或对用的服务器具备公网ip

一般来说,ip地址表示公网 ip,用来表示互联网种唯一的一台主机,也可以表示局域网种唯一的一台主机
实际网络通信时只需要4个字节即可表示一个网络 ip,8* 4 = 32,32个比特位就能表示任意一个网络 ip,占用的字节数较少

那么如何将整形存储的ip地址转化为便以阅读的点分十进制这种字符串风格的ip地址呢?
在这里插入图片描述

ip地址Mac地址 的区别:

ip 地址是永远不变的,在互联网中唯一,而 Mac地址是在局域网中不变的,但出了局域网后会变

Mac 地址意义:标识主机唯一性,用于局域网通信
IP 地址意义:帮助用于路径选择,目标ip

![[Pasted image 20240603163120.png]]

同层协议要发的,就是同层协议要收的!!

在 ip 层往下,报头在变,而ip层往上是一样的,因此也叫网咯ip地址
相当于在全球所有主机层面上,搭建了一层软件层,通过ip地址,就可以屏蔽底层所有局域网通信的网络差异了

网络通信的示意图:

在这里插入图片描述

网络通信的本质

网络之间的通信,本质上就是进程间通信

对双方主机的两个进程而言,需要先将数据发送到对方的主机(ip地址),再找到指定的进程(port:端口号),就能实现通信

ip地址用来标识互联网中唯一的一台主机;port端口号用来标识该指定机器中进程的唯一性

那么(ip, port) 则可以用来表示互联网中唯一一个进程,ip + port 也叫网络套接字 socket

如何理解port:
一个端口号和一个进程相绑定,一个进程可以绑定多个端口号,反之则不可以。
那么为什么不用进程pid来表示网络中进程的唯一性呢?
为了其他的进程模块和网络进行解耦(万一pid的规则变化,网络部分也不受影响),port是专门用于网络通信的

tcp 和 udp 协议

tcp 协议常用于可靠通信,适用于对数据要求比较高的场景(如游戏,传输重要文件等),复杂
udp 协议用于不可靠通信,适用于允许数据偶尔出现差错的场景(如体育赛事直播等),简单,快

这两个协议没有好坏之分,只是应用场景不同,如果不确定使用哪个的时候,就要 tcp,毕竟复杂一点比丢包好

网络字节序

机器有大小端之分,大小端机器存储数据方式不同。大端是“正着存储”的,可读性较好,因此在网络传输时规定,所以到达网络的数据,必须时大端存储的,因此,如果是小端机,收发数据到网络时需要先转化为大端

网络主机数据转化接口

ip 地址为4个字节,使用 uint32_t,port 为2个字节,使用 uint_16

htonl、htons 是转网络,ntohl、ntohs 是转主机数据,使用这些接口可以自动识别机器的大小端,并将数据转化为需要的大小端数据。

#include <arpa/inet.h>
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uintl6_t ntohs(uint16_t netshort);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Python在word文档中创建表格

如何使用Python在word文档中创建表格 介绍效果代码 介绍 本文将介绍如何使用Python库python-docx在Word文档中创建表格。 效果 插入表格前的word文档&#xff1a; 插入表格后的word文档&#xff1a; 代码 from docx import Document# 加载现有的Word文档 doc Document(…

【护网简历模版】改了10个在校大学生的简历的感想

护网简历模版 吉祥学安全知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 在上篇文章中&#xff1a;如何面试…

前端JS必用工具【js-tool-big-box】学习,获取当前浏览器向上滚动还是向下滚动,获取当前距离顶部和底部的距离

这一小节&#xff0c;我们说一下 js-tool-big-box 添加的最新工具方法&#xff0c;在日常前端开发工作中&#xff0c;如果网页很长&#xff0c;我们就需要获取当前浏览器是在向上滚动&#xff0c;还是向下滚动。如果向上滚动&#xff0c;滚动到0的时候呢&#xff0c;需要做一些…

建筑二建考试试题及答案,分享几个实用搜题和学习工具 #微信#经验分享

大学生必备的搜题工具&#xff0c;专业课本习题、电子版教材、考研资料、英语四六级等考试题目也能一并搜索&#xff0c;每道题目都有详细的讲解&#xff0c;每个都堪称大学神器。 1.掌上识别王 一个可以快速纸质书籍上内容扫描成电子档的工具&#xff0c;为了方便大家快速搜…

好用的Web数据库管理工具SQLynx

SQLynx 是一款功能强大且用户友好的 Web 数据库管理工具&#xff0c;原生支持个人和企业用户&#xff0c;专为简化数据库管理和操作而设计。 目录 1 主要特点 2 优势 3 典型使用场景 4 示例 5 结论 SQLynx原名SQL Studio&#xff0c;产品100%自主研发&#xff0c;无任何开…

OSI七层网络参考模型

一、物理层 我们要发送出去的数据在计算机里只不过是无数的0和1&#xff0c;0或1就叫做比特&#xff0c;物理层就是把这些比特用不同的媒介传输出去&#xff0c;可以用电、光或者其他形式的电磁波来表示和传输信号&#xff0c;数据从网络接口出去以后&#xff0c;会经过不同的网…

dat.gui图形用户页面

一、导入 1.npm安装 npm install --save dat.gui 引入&#xff1a; // CommonJS: const dat require(dat.gui); // ES6: import * as dat from dat.gui; const gui new dat.GUI(); 二、控制器 <!DOCTYPE html> <html lang"en"> <head><…

【重磅开源】MapleBoot权限控制使用介绍(菜单权限、按钮权限、数据权限)

基于SpringBootVue3开发的轻量级快速开发脚手架 ## &#x1f341;项目简介 一个通用的前、后端项目模板 一个快速开发管理系统的项目 一个可以生成SpringBootVue代码的项目 一个持续迭代的开源项目 一个程序员的心血合集 度过严寒&#xff0c;终有春日&#…

【深度学习】Loss为Nan的可能原因

文章目录 1. 问题情境2. 原因分析3. 导致Loss为Nan的其他可能原因 1. 问题情境 在某个网络架构下&#xff0c;我为某个数据项引入了一个损失函数。 这个数据项是nn.Embedding类型的&#xff0c;我加入的损失函数是对nn.Embedding空间做约束。 因为我在没加入优化loss前&#x…

C# WPF入门学习主线篇(八)—— ListBox常见属性和事件

C# WPF入门学习主线篇&#xff08;八&#xff09;—— ListBox常见属性和事件 欢迎来到C# WPF入门学习系列的第八篇。在前面的文章中&#xff0c;我们已经探讨了WPF中的Button、TextBox和Label控件的使用。今天&#xff0c;我们将深入了解WPF中的另一个常用控件——ListBox。本…

Pulsar 社区周报 | No.2024-06-07 | Apache Pulsar 新分支 3.3 版本发布

“ 各位热爱 Pulsar 的小伙伴们&#xff0c;Pulsar 社区周报更新啦&#xff01;这里将记录 Pulsar 社区每周的重要更新&#xff0c;每周发布。 ” 本期主题&#xff1a;Apache Pulsar 新分支 3.3 版本发布 Apache Pulsar 新分支 3.3 版本发布&#xff1a;Apache Pulsar 3.3.0[1…

必备:产品经理工作文档大全

产品经理&#xff08;英文&#xff1a;Product manager&#xff0c;缩写&#xff1a;PM&#xff09;也称产品企划&#xff0c;是指在公司中针对某项或某类的产品进行规划和管理的人员&#xff0c;主要负责产品的研发、制造、营销、渠道等工作。 产品经理是很难定义的一个角色&a…

DeepSORT(目标跟踪算法)中的数值表格与调参的关系

DeepSORT&#xff08;目标跟踪算法&#xff09;中的数值表格与调参的关系 flyfish DeepSORT&#xff08;目标跟踪算法&#xff09;中的马氏距离详解&#xff08;很详细&#xff09; DeepSORT&#xff08;目标跟踪算法&#xff09;中 可以设置阈值进行异常检测或目标跟踪的原…

问题:在信息点统计表中,对于没有信息点的工作区或者房间填写,表明已经分析过该区域 #微信#职场发展#职场发展

问题&#xff1a;在信息点统计表中,对于没有信息点的工作区或者房间填写,表明已经分析过该区域 参考答案如图所示

学历还算能力的一部分吗(机器人方向)

前篇 在人工智能时代&#xff0c;学历还算是能力的一部分吗&#xff1f; 之前写过一篇&#xff0c;现在感觉应该是不严谨&#xff0c;不准确的。 AI如何看待能力&#xff0c;学历&#xff0c;文凭-CSDN博客 那一篇讨论了&#xff1a;{文凭}⊂{学历}⊂{能力} 本篇 不合格且…

【Echarts系列】带图片的饼图

【Echarts系列】带图片的饼图 序前提说明示例数据格式代码动态旋转图片 序 为了节省后续开发学习成本&#xff0c;这个系列将记录我工作所用到的一些echarts图表。 前提说明 因为饼图中间需要添加图片&#xff0c;所以比较特殊&#xff0c;对于饼图中间数据的对齐很容易出现…

正大国际期货:原油投资出现亏损的五种心理弱点

在原油投资当中&#xff0c;有五种心理弱点最容易导致投资者失败&#xff0c;必须注意加以克服! 盲目胆大心理。 有些投资者从未认真系统地学习过投资理论技巧&#xff0c;也没有经过任何模拟训练&#xff0c;甚至连最起码的投资基础知识都不明白&#xff0c;就贸然的进入原油…

企业管理/市场经营/自我管理,500+个经典职场工具 . rar

​500N个实用管理工具包&#xff0c;精选人力资源从业者必备之132项工具、40个管理者实效管理工具、成功自我管理的29个工具、常见的9种营销分析工具等&#xff0c;成功自我管理必备工具。 与班主任联系&#xff0c;即可获得完整资料包&#xff01; 1.PEST分析 2.五力分析 3.…

哈尔滨等保如何做?

哈尔滨等保测评是确保信息系统安全稳定运行的重要一环&#xff0c;它涉及到对业务、资产、安全技术和安全管理的全面调研和评估。本文将详细阐述哈尔滨等保测评的实施步骤和注意事项&#xff0c;帮助读者更好地理解和执行等保测评工作。 首先&#xff0c;我们需要明确等保测评的…

Hexo+Github搭建个人博客教程

hexo官网&#xff1a;https://hexo.io/zh-cn/ butterfly 主题设置&#xff1a;https://butterfly.js.org/ GitHub地址&#xff1a;https://github.com/jerryc127/hexo-theme-butterfly 基础命令 初始化博客命令&#xff1a;hexo init “文件名” 开启本地服务&#xff08;本…