网络编程基础概述

文章目录

  • 协议
  • 网络协议栈(osi)
  • 局域网
  • IP
  • IP和Mac地址
  • 端口号
  • TCP和UDP
  • 网络字节序

协议

(网络协议的)意义:为了让计算机传输之间将信息正确传输给目标机器

不同系统之间能接入网络是因为定制了一套通用的协议以便支持不同系统间的网络通信
1.网络通信的问题:
将数据可靠的从A传给B

a.保证将数据交给下一个主机
b.在转发过程中保证目标主机的定位问题,路径选择问题
c.如果报文出现错误,或者丢失
d.传达的数据还要解决如何处理使用数据的问题

2.网络的解决方案-------网络的层状结果(软件也是如此,如:继承)
在这里插入图片描述
好处:完成软件的解耦合,方便后续进行维护

网络协议栈(osi)

在这里插入图片描述
在这里插入图片描述

实际在正常通信中的实现是TCP/IP的五层协议用于解决网络通信的问题

操作系统不同,但是网络大同小异
在这里插入图片描述在这里插入图片描述

局域网

1.重谈协议
2.局域网中,多台主机能直接通信吗?如何通信?

以快递包裹为例:
快递单本身就是一种约定,本身就是一种协议
长距离发送时:
快递=快递单+信息
快递单== 报头
报头本质:结构化字段创建的对象,叫做协议报头

同一个局域网中,两台主机之间能直接通信,为什么:

每一张网卡,mac地址是唯一的(可通过一些虚拟手段,虚拟出来),48个bit,8个bytes
局域网通信原理:
数据在传输时有报头,A->B时,报头中携带谁发给谁,B,C,D…所有人都能收到,
B在收到信息后,根据报头确认是发给他的,所以要接受
其他人收到信息后,根据报头不是发给他的,所以会丢弃

在局域网中,A向B发送,B向A发送,D向B发送,E向D发送........这样的信息多了之后,如果发生信息碰撞,消息就废除了所以有了碰撞避免的操作,A向B发送,B向A发送,C向A发送,此时某一步操作就会先让步,来避免碰撞在一个碰撞域(局域网)中,要正确的发送消息,任何时刻.只允许一台主机在局域网中发送消息(如何破坏一个局域网:不断向一个局域网内发送垃圾报文)主机越多,发生碰撞的概率会越来越大,所以交换机在这时就会发生作用,这种基于碰撞概率的局域网叫做以太网,手机上类似(运动会网差,丢包就是这个原因)

在这里插入图片描述
在这里插入图片描述
封装一定要考虑解包的问题:

每层协议都要理解:

1.如何将报文中,报头和有效载荷分离;
2.任何协议,都要解决如何将自己的有效载荷交付给上层的那个协议

共性,即:每层协议都要解决这两个问题

IP

win下查看ip:

ipconfig:
在这里插入图片描述
实际是:[0,255],[0,255],[0,255],[0,255]
点分十进制,c/c++视角来看,都是字符串

在这里插入图片描述

如果我们想让我们写的服务让别人看到,必须要"具备公网IP"(后续理解)
云服务器的公网IP,是由运营商虚拟出来的

IP地址,用来表示互联网中的一台主机都是指公网IP(先这么理解以便更好的学习)

对于一个IP地址4个字节表示网络IP即可:
4*8=32(在实际网络传输中用的就是这种)

进行举例说明一下:
在这里插入图片描述

IP和Mac地址

以送快递为例:

从哪来-----到哪去—终极目标 ----->IP地址
上一战从哪来-----下一站到哪去-------当下目标(一直在变)-------->Mac地址

在这里插入图片描述
局域网的标准不统一,所以还存在其他的一些
在这里插入图片描述
以往了解即可(这个令牌相当于一把锁,令牌环的报头…了解即可)

在这里插入图片描述
现象:
某一层要发的就是另对应的一层要收的
mac报头是一直在变换,但是IP报头(目的IP)不变
源IP可能变(以后说)

端口号

对网络通信而言,本质都是进程间的通信对于双方而言,1.先把数据能达到自己的机器(通过IP),2.找到指定的进程(port:端口号)

ip用来识别网络中的唯一一台机器
端口号用来识别指定机器中进程的唯一性
通过{ip,port}就能确定互联网中的唯一一个进程

在这里插入图片描述
如何理解端口号?:

本质:uint16_t port; 16个bit的一个无符号整数 16bit==2byte
意义:1.用于标识当前主机上的唯一的一个网络进程
2.在发送信息时,网络进程和port进行绑定关联,这样就能让双方时间进行相互交流
按照上层理解,进程有了pid,为什么还有port?
1.其他模块(进程管理)和网络进行解耦
2.port专用来进行网络通信

例如:

一般而言,一个进程和一个端口号相关联:
一个进程可以和多个端口号关联,但是
一个端口号不能和多个进程进行关联

eg:

欠费时:10086+转人工(工号)
IP + port

TCP和UDP

关系如下:

在这里插入图片描述

网络字节序

数据的存储有:大端存储,小端存储
不同的机器,存储方案不同

发送主机在发送数据时,会将缓冲区的数据按照内存地址的从低到高的顺序发送
接受主机在接受数据时,会将数据从网上接受的字节以此保存在接收缓冲区,也是按照内存地址的从低到高的顺序进行保存

eg:

数据
0xaa bb cc dd
大:aa bb cc dd
小:dd cc bb aa

但是存在的问题是
在这里插入图片描述

因此,网络规定,发送的数据到达网络必须是大端
同时这样可读性较好

C语言下的网络字节序相关函数
在这里插入图片描述

喜欢不妨三连再走~~~

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

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

相关文章

什么是 SMB 服务器以及它如何工作?

在本文中,您将了解 SMB 服务器以及它们如何促进网络文件共享。 我们将介绍它们的基本功能、主要特性以及如何安全地设置它们。无论您是新手还是需要复习,本指南都将帮助您更好地了解 SMB 服务器。 什么是 SMB 服务器? SMB(服务器…

线性代数 第七讲 二次型_标准型_规范型_坐标变换_合同_正定二次型详细讲解_重难点题型总结

文章目录 1.二次型1.1 二次型、标准型、规范型、正负惯性指数、二次型的秩1.2 坐标变换1.3 合同1.4 正交变换化为标准型 2.二次型的主要定理3.正定二次型与正定矩阵4.重难点题型总结4.1 配方法将二次型化为标准型4.2 正交变换法将二次型化为标准型4.3 规范型确定取值范围问题4.…

基于HPLC的低压电力采集方案

1. 组网部署 2. 组网部件 3. 原理

【03】深度学习——神经网络原理 | 多层感知机 | 前向传播和反向传播 | 多层感知机代码实现 | 回归问题、分类问题 | 多分类问题代码实现

深度学习 1.神经网络原理1.1神经元模型1.2神经网络结构1.3隐藏层1.3.1激活函数层1.4输出层1.4.1softmax层1.5损失函数1.6反向传播2.多层感知机2.1线性网络的局限性2.2引入非线性2.3多层感知机(Multi-Layer Perceptron,MLP)2.4激活函数(Activation Function)2.4.1Sigmoid函…

SpringCloud入门(一)SpringCloud简介

一、为什么要学SpringCloud? 企业开发都使用微服务,面试必问微服务 要学会微服务开发的问题和解决方案。应对用户的增长和并发需求。 要应对用户需求变化; 单点式架构无法应对高并发; 服务之间的错综复杂调用&…

C++多态讲解

多态 多态的概念 通俗来说,就是多种形态。多态分为编译时多态(静态多态)和运行时多态(动态多态)这里重点讲运行时多态。 运行时多态 运行时多态,具体点就是去完成某个行为(函数),可以传不同的对象就会完成不同的行为,就达到多种形…

【数学建模】2024年国赛成绩公布时间预测

经过三天三夜的奋战,2024年数学建模国赛也宣告结束,相信这几天超高强度的比赛也让大家精疲力竭了,所以经过几天的调整,大家都恢复过来了吧。能够在高强度的压力下坚持这么久,大家都超级厉害的! 当然完整提交…

基于R语言的统计分析基础:使用键盘输入数据

在R语言中,键盘输入数据是一种灵活且直接的数据获取方式,适用于处理小数据集或需要即时用户交互的场景。通常用于交互式数据探索和分析、临时数据处理、交互式图形绘制、脚本自动化中的用户交互、特定应用场景下的数据录入中。 比如利用readline()函数根…

秋韵虫趣.

文章目录 虫鸣概览虫坛文化蟀种纷呈中华蟋蟀宁阳蟋蟀刻点铁蟋长颚斗蟋 油葫芦棺头蟋中华灶蟋小素蟋树皮蟋蟀 花生大蟋斑腿针蟋其他鸣虫树蟋,又名竹蛉、邯郸梨片蟋,又名金钟、天蛉、绿蛣蛉、银琵琶凯纳奥蟋,又名石蛉,鳞蟋黄蛉蟋&am…

数据湖-方案对比

数据湖架构结合了数据湖和数据仓库。虽然它不仅仅是两者之间的简单集成,但其理念是充分发挥两种架构的优势:数据仓库的可靠交易以及数据湖的可扩展性和低成本。 Lakehouse 架构支持管理各种数据类型,例如结构化、半结构化和非结构化数据&…

Git+Jenkins 基本使用(Basic Usage of Git+Jenkins)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

【HarmonyOS】鸿蒙头像上传-(编辑个人信息页- 头像上传)+实时数据更新

#效果图 #思路 ##步骤: ###一、利用picker api选择1张图片 实例化选择器参数(使用new PhotoSelectOptions())实例化图片选择器 (使用newPhotoViewPicker() )调用图片选择器的select方法传入选择器参数完成图片选取获得结果 利用picker api选择1张图片 async sele…

监控系列之-prometheus部署说明

一、Prometheus介绍 Prometheus是一款开源的监控系统,主要用于收集、存储和查询时间序列数据,以便于对系统进行监控和分析Prometheus的架构由四个主要组件组成: 1、Prometheus Server :Prometheus Server是Prometheus的核心组件&a…

C到C++入门基础知识

一:命名空间:namespace (一):命名空间的定义 注:命名空间只能定义在全局,不能定义在函数内部。 (1)类似于C语言的结构体,C语言的命名空间定义为&#xff1…

OpenCV和Tesseract OCR识别复杂验证码喽~~

目录 代码实现思路 流程: 主要流程: 整体代码 效果展示 原图 处理之后的图 总结 流程图 代码实现思路 使用 OpenCV 进行图像预处理,并通过 Tesseract OCR 来识别验证码中的字符。以下是其实现思路的详细讲解: 流程&…

代码随想录Day 44|leetcode题目:1143.最长公共子序列、1035.不相交的线、53. 最大子序和、392.判断子序列

提示:DDU,供自己复习使用。欢迎大家前来讨论~ 文章目录 题目题目一:1143.最长公共子序列解题思路: 题目二: 1035.不相交的线解题思路: 题目三:53. 最大子序和解题思路 题目四:392.判…

【Android 13源码分析】WindowContainer窗口层级-3-实例分析

在安卓源码的设计中,将将屏幕分为了37层,不同的窗口将在不同的层级中显示。 对这一块的概念以及相关源码做了详细分析,整理出以下几篇。 【Android 13源码分析】WindowContainer窗口层级-1-初识窗口层级树 【Android 13源码分析】WindowCon…

优化 TCP 以提高网络性能

本页面简要介绍了计算正确设置的方法,以缩短 Google Cloud 和混合场景中 TCP 连接的延迟时间。本页面还可帮助您了解如何缩短 Google Cloud 中流程之间的连接延迟时间。 现代微服务架构主张,开发者应该构建处理单一任务的小型服务。服务应根据系统的可靠…

【iOS】dismiss多级的方法

前言 上次笔者总结过push和pop推入和推出界面的方法,这里对于dismiss多级的方法进行一个总结,推入推出方法可以看看笔者这篇博客:【iOS】UI学习——界面切换 dismiss推出多级的原理 当我们使用pop推入新的界面的时候,连续pop推…

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef 1. AOSPXRef1.1. http://aospxref.com/android-14.0.0_r2/1.2. build/envsetup.sh 2. AndroidXRef2.1. http://androidxref.com/9.0.0_r3/2.2. build/envsetup.sh 3. HELLO AndroidReferences 1. AOSPXRef http://aospx…