网络编程基础概述

news2024/9/22 11:45:39

文章目录

  • 协议
  • 网络协议栈(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.coloradmin.cn/o/2139151.html

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

相关文章

AtCoder ABC369 A-D题解

比赛链接:ABC369 省流&#xff1a;A<B<D<C&#xff08;题解是按照该顺序写的&#xff09; Problem A: #include <bist/stdc.h> using namespace std; int main(){int A,B;cin>>A>>B;if(AB)cout<<1<<endl;else if(abs(A-B)%20)cout&l…

织物缺陷检测系统源码分享

织物缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

1405 问题 E: 世界杯

废话 这个题&#xff0c;我估计 22 22 22 年的时候写过一次&#xff0c;当时应该是搞明白了&#xff0c;现在重新写还是不会写&#xff0c;有点无奈 题目 问题 E: 世界杯&#xff1a;现在的 OJ 把题目加到一个活动里面去之后&#xff0c;感觉之后这个链接就访问不了了。题目…

伙房食堂电气安全新挑战:油烟潮湿环境下,如何筑起电气火灾“防火墙”?

近几年&#xff0c;随着我国经济的飞速发展&#xff0c;食堂餐饮也经历了一场变革&#xff0c;越来越多的电器走进了伙房食堂中&#xff0c;实现了电气化&#xff0c;为人们提供了高效便利的饮食服务&#xff0c;但同时也增加了火灾负荷。目前我国非常严重的电气火灾危害&#…

【STM32】DAC数字模拟转换

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 DAC简介 DAC配置 DAC时钟使能 GPIO初始化 DAC配置 DAC使能 读写DAC值 驱动代码 MyDAC.h MyDAC.c main.c 前言 大容量的STM32F101xx和STM32F103xx产品才有DAC外设 大容量…

几种mfc140u.dll常见错误情况,以及mfc140u.dll文件修复的方法

如果你遇到与mfc140u.dll 文件相关的错误&#xff0c;这通常指的是该mfc140u.dll文件可能丢失、损坏或与您的应用程序不兼容。详细分析关于mfc140u.dll文件错误会对系统有什么影响&#xff0c;mfc140u.dll文件处于什么样的位置&#xff1f;以下是几种常见的错误情况及其修复方法…

R语言统计分析——功效分析(作图)

参考资料&#xff1a;R语言实验【第2版】 假设对于相关系数统计显著性检验&#xff0c;我们想计算一系列效应值和功效水平下所需的样本量&#xff0c;此时可用pwr.r.test()函数和for循环来完成任务。 # 加载pwr包 library(pwr) # 设置各效应值 r<-seq(0.1,0.5,0.01) # 计算…

基于JAVA的实验室智慧管理平台的设计与实现

大型管理系统用传统的手工操作方式进行信息管理容易出现数据丢失&#xff0c;统计错误等问题&#xff0c;而且劳动强度高&#xff0c;速度慢&#xff0c;耗费人力&#xff0c;物力。使用计算机可以高效、准确地完成以上工作。因此&#xff0c;用计算机的高速度和自动化来替代手…

蓝牙模块—BLE-CC41-A

1. 蓝牙的特点 蓝牙模块采用的 TI 公司设计的 CC2541芯片&#xff0c;主要面向低功耗蓝牙通信方案&#xff0c;该模块的工作频段为 2.4Ghz&#xff0c;这个频段属于国际通用频段 注意&#xff1a;蓝牙集成了一个状态指示灯&#xff0c;LED灯如果均匀慢速闪烁&#xff0c;就表示…

接口测试从入门到精通项目实战

视频网址&#xff1a;2024最新接口测试从入门到精通项目实战&#xff08;全套接口测试教程&#xff09;_哔哩哔哩_bilibili 接口架构设计分析 http协议详解 JMeter 目录介绍 常用组件 执行接口测试 接口文档&#xff1a;tlias智能学习辅助系统接口文档-V1.0-CSDN博客 实战 前…

HTB-Lame(msf利用)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解 初学者渗透路径 第一个靶机Lame 渗透过程 信息搜集 服务器开放了21FTP端口、22SSH端口、445SMB端口 利用MSF模块 登录主机 工具介绍&#xff1a;Metasploit Framework&#xff08;简称 MSF&#xf…

RK3562/3588系列之6—yolov5模型的部署

RK3562/3588系列之6—yolov5模型的部署 1.yolov5模型训练2.训练好的模型转成onnx格式3.模型从onnx格式转RKNN3.1 onnx2rknn.py3.2 onnx2rknn.py3.3 直接使用rknn.api3.4 rknn_model_zoo中的转换代码3.5 LubanCat-RK系列板卡官方资料4.RK NPU c++推理4.1交叉编译4.2 开发板执行编…

校园失物招领小程序

校园失物招领小程序 weixin167校园失物招领小程序ssm 目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 JSP技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系…

清理C盘缓存,如何针对Windows10系统,专业地调整和优化C盘缓存设置

在Windows10系统中&#xff0c;合理地管理C盘&#xff08;通常是系统盘&#xff09;的缓存设置&#xff0c;对于保持系统性能、提升响应速度以及避免磁盘空间不足等问题至关重要。缓存主要涉及到系统文件、临时文件、应用程序缓存等多个方面。下面将详细介绍如何针对Windows10系…

【webpack4系列】webpack进阶用法(三)

文章目录 自动清理构建目录产物PostCSS插件autoprefixer自动补齐CSS3前缀移动端CSS px自动转换成rem静态资源内联多页面应用打包通用方案使用sourcemap提取页面公共资源基础库分离利⽤ SplitChunksPlugin 进⾏公共脚本分离利⽤ SplitChunksPlugin 分离基础包利⽤ SplitChunksPl…

UVA1395 Slim Span(最小生成树)

*原题链接*(洛谷) 非常水的一道题。看见让求最小边权差值的生成树&#xff0c;很容易想到kruskal。 一个暴力的想法是以每条边为最小边跑一遍kruskal&#xff0c;然后统计答案。时间复杂度&#xff0c;再看题中很小的数据范围和3s的时限。最后还真就过了。 不过我天真的想了…

【机器学习】11——矩阵求导

机器学习11——矩阵求导 打公式不太好标注&#xff0c;全图警告&#xff01;&#xff01;&#xff01; 文章目录 机器学习11——矩阵求导1.1标量对向量1.2标量对矩阵2.1向量对标量2.2向量对向量2.3向量对矩阵 1.1标量对向量 1.2标量对矩阵 X是m*n的矩阵&#xff0c;不严谨&am…

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

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

【白话树】之 二叉树

快速导航 一、二叉树的基本概念1、 二叉树定义2、常见术语3、基本操作1&#xff09;创建&#xff1a;2&#xff09;插入与删除&#xff1a; 4、常见类型1&#xff09;满二叉树&#xff08;完美二叉树&#xff09;2&#xff09;完全二叉树3&#xff09;完满二叉树4&#xff09;平…

Mysql InnoDB 存储引擎简介

InnoDB 存储引擎是 Mysql 的默认存储引擎&#xff0c;它是由 Innobase Oy 公司开发的 Mysql 为什么默认使用 InnoDB 存储引擎 InnoDB 是一款兼顾高可靠性和高性能的通用存储引擎 在 Mysql 5.5 版本之前&#xff0c;默认是使用 MyISAM 存储引擎&#xff0c;在 5.5 及其之后版…