网络编程基础概述

文章目录

  • 协议
  • 网络协议栈(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.mfbz.cn/a/877398.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cesium 计算3d凸包(ConvexHull)

Cesium 计算3d凸包(ConvexHull) Cesium 计算3d凸包(ConvexHull)

【Android 13源码分析】WindowContainer窗口层级-2-构建流程

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

InputDispatcher的调试日志isLoggable动态开放logcat实战使用

背景: 在学习input专题课程后,那么就可以正常对所有和input相关的问题进行分析,经常分析的类就是InputDispatcher,平时如果看正常的logcat输出,发现InputDispatcher相关的日志非常少,基本上没办法进行有价…

用Python打造互动式中秋节庆祝小程序

中秋节,这个充满传统韵味的节日,不仅是家人团聚的时刻,也是程序员展示创意的好机会。本文将引导您使用Python创建一个互动式中秋节庆祝小程序,它不仅能够展示节日祝福,还能通过一些简单的特效增加节日气氛。 文章目录 …

TCP socket

TCP的socket和UDP大同小异,基本的代码结构都是相同的。一些相同的接口本文就不赘述了,例如,socket,bind,有需要看这篇文章UDP socket 服务端server 两步:初始化服务端,运行服务端 初始化服务端 创建soc…

ML4T:把机器学习驱动交易做成标准的pipeline(流)的​模式

原创内容第652篇,专注量化投资、个人成长与财富自由。 量化的刚需是策略,策略的核心是因子。 ML4T(Machine Learning for Trading),把机器学习驱动交易做成标准的pipeline(流)的模式。 对于机器而言,多数…

JDBC API详解一

DriverManager 驱动管理类,作用:1,注册驱动;2,获取数据库连接 1,注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); 查看Driver类源码 static{try{DriverManager.registerDriver(newDrive…

【目标检测数据集】锯子数据集1107张VOC+YOLO格式

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1107 标注数量(xml文件个数):1107 标注数量(txt文件个数):1107 标注…

AI donotpay平台介绍

AI donotpay平台介绍 DoNotPay 是一个基于人工智能的在线法律服务平台,旨在帮助用户解决与大公司和政府机构的各种问题。以下是对 DoNotPay 平台的详细介绍: 1. 平台概述 创始人: DoNotPay 由 Joshua Browder 于 2015 年创立,最初是一个用于…

店群合一模式下的社区团购新发展——结合链动 2+1 模式、AI 智能名片与 S2B2C 商城小程序源码

摘要:本文探讨了店群合一的社区团购平台在当今商业环境中的重要性和优势。通过分析店群合一模式如何将互联网社群与线下终端紧密结合,阐述了链动 21 模式、AI 智能名片和 S2B2C 商城小程序源码在这一模式中的应用价值。这些创新元素的结合为社区团购带来…

【0基础】制作HTML网页小游戏——贪吃蛇(附详细解析)

我在昨天的文章(贪吃蛇HTML源码)里面分享了网页版贪吃蛇小游戏的源码,今天就来给大家详细讲解一下每部分代码是如何运作的,以及以后要如何美化贪吃蛇的UI界面,在哪里修改等。 目录 一、代码运作 1、HTML结构: 2、C…

【有啥问啥】深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法

深入浅出马尔可夫链蒙特卡罗(Markov Chain Monte Carlo, MCMC)算法 0. 引言 Markov Chain Monte Carlo(MCMC)是一类用于从复杂分布中采样的强大算法,特别是在难以直接计算分布的情况下。它广泛应用于统计学、机器学习…

rtems 5.3 qemu realview_pbx_a9 环境搭建:生成 rtems arm 工具链

前言 rtems 是一款比较优秀的 RTOS,官方网址 https://www.rtems.org/ 当前 rtems 最新发布的版本:rtems-5.3 版本, 下载地址 https://ftp.rtems.org/pub/rtems/releases/5/5.3/ rtems 支持的 平台也是比较多的,当前支持 STM32F4…

CSS 响应式设计(补充)——WEB开发系列36

随着移动设备的普及,网页设计的焦点逐渐转向了响应式设计。响应式设计不仅要求网页在各种屏幕尺寸上良好展示,还要适应不同设备的特性。 一、响应式设计之前的灵活布局 在响应式设计流行之前,网页布局通常是固定的或流动的。固定布局使用固定…

PMP–一、二、三模–分类–14.敏捷–技巧–项目生命周期

文章目录 技巧项目生命周期 一模14.敏捷--项目生命周期--原型法--迭代型生命周期,通过连续的原型或概念验证来改进产品或成果。每个新的原型都能带来新的干系人新的反馈和团队见解。题目中明确提到需要反馈,因此原型法比较好用。23、 [单选] 一个敏捷团队…

异常冲突行为和危险识别系统源码分享

异常冲突行为和危险识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Co…

Github 2024-09-16 开源项目周报 Top14

根据Github Trendings的统计,本周(2024-09-16统计)共有14个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4TypeScript项目2Go项目2JavaScript项目2Shell项目2Rust项目2C++项目2Jupyter Notebook项目1C#项目1React: 用于构建用户界面的JavaS…

linux第二课(docker的安装使用)

目录 一.关于docker (1)背景引入 (2)docker介绍 (3)功能 (4)Docker架构 二.docker的安装及相关的命令 (1)docker的安装 (2)docker的配置 (3)docker镜像命令 (4)容器命令 三.docker安装myaql ​编辑 四.数据卷挂载 1.数据卷挂载引入 2.数据卷挂载图解 3.数据卷的安装…

1. 运动控制指令概要(omron 机器自动化控制器)

机器自动化控制器——第一章 运动控制指令概要 1-1 运动控制指令PLCopen运动控制用功能块运动控制指令概要▶ 运动控制指令的种类▶ 状态变化▶ 运动控制指令的启动和状态▶ 异常处理▶ 执行运动控制指令时输入变量的变更(指令重启)▶ 通过选择缓存模式执行指令多重启动▶ 通过…

20Kg载重30分钟续航多旋翼无人机技术详解

一、机架与结构设计 1. 材料选择:为了确保无人机能够承载20Kg的负载,同时实现30分钟的续航,其机架材料需选用轻质高强度的材料,如碳纤维或铝合金。这些材料不仅具有良好的承重能力,还能有效减轻无人机的整体重量&…