网络初识-
网络的相关概念
一、局域网和广域网
将各种计算机、外部设备等相互连接起来,实现在这个范围内数据通信和资源共享的计算机网络。它的覆盖范围通常在几百米到几公里之内。例如,一个小型企业的办公室,通过交换机将多台电脑连接在一起,这些电脑可以共享打印机、文件等资源,这个网络就是一个局域网。就像是一个网吧,就是一个局域网
是一种覆盖范围很广的网络,它可以跨越城市、国家甚至全球。广域网是通过电信运营商的网络设施,如电话线、光纤电缆、卫星通信等来连接不同地理位置的网络或计算机系统。像互联网就是最大的广域网,它连接了全球各个国家和地区数以亿计的计算机和网络设备,使得人们可以在世界各地访问网站、发送电子邮件等。
二、路由器和交换机
更多组建局域网的方式是通过路由器和交换机
交换机是一种常见的 网络设备 ,它主要用于局域网内的设备通信
路由器是一种用于连接多个网络的设备,它在网络之间起到了桥梁的作用.
路由器上的接口分为LAN口和WAN口,WAN口用来接运行商的网线.LAN口用来接入设备.路由器的LAN口也可以接入交换机,交换机还可以接交换机,基于上述结构就构成了庞大的网络结构.
路由器和交换机的区别:
每一台路由器,他实现了网络层到物理层,也就是TCP/IP的下三层,路由器工作在网络层
每一台交换机,实现了从数据链路层到物理层,也就是TCPP/IP的下两层,交换机工作在数据链路层
IP地址
IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址。简单说,IP地址⽤于定位主机的⽹络地址。
就像是我们发快递一样,必须要知道对方的收货地址,快递员才能将包裹送达
计算机上则是通过数字来描述一个设备的地址
为了方便表示,往往IP地址采用"点分十进制"的方式,用三个 . 把这4个字节分为4个部分,每部分一个字节,取值为0-255.
端口号
具体描述了一个主机上的哪个应用程序.
有了IP可以确定主机,但是主机上有很多程序都在使用网络,主机收到网络数据后就要分辨是交给哪个程序使用数据.
每个程序在进行网络通信中都有一个端口号(可以自己定义,也可以系统分配).同一个主机上端口号不能重复.
网络通信中的IP和端口号
网络通信中的IP地址和端口号其实是有两个的
其实和快递一样,记录了收发地址,以及收发人的联系方式
源IP:相当于发件人地址
源端口:发件人手机号
目的IP:收件人地址
目的端口:收件人手机号
描述了"从哪里来,到哪里去"的问题.
协议[重要]
协议就是一种通信过程中的约定.
通信双方需要制定好数据的格式,才能确保双方进行正常沟通.
通信双方的计算机可能来源于不同的厂商,为了确保两个计算机中的网络通信,就需要计算机遵守相同的网络协议.
网络通信过程中,其实有很多的细节需要注意,如果只是靠一个协议来完成的话,就需要面面俱到,这样就导致了协议非常复杂不利于维护.
于是我们把协议拆分成了很多层,把功能定位相似的放在同义词,上层协议调用下层功能,下层协议为上层服务.
只有相邻层次之间可以进行沟通,不能越级沟通.
就像是在公司中,我们完成任务只需要向自己的上一级交代,不需要直接向老板汇报.
协议分层的其他好处
1.上层协议可以直接调用下层协议,而不用关心具体的实现细节.
就像打电话,我们不用关心电话是怎样实现双方沟通的
2.某一层协议进行替换时,对其他应用也不会有什么影响.
OSI七层网络协议
我们并不常用OSI七层网络协议,这里只是给大家简单介绍,有兴趣的可以在挖掘~~
接下里我们重点介绍下TCP/IP五层网络协议.
TCP/IP五层网络协议
网络编程主要就是针对应用层,因为剩下的都是操作系统内核封装好的,我们没办法干预.
应用层:程序拿到数据之后,要解决什么问题,用来做什么
传输层:传输层执行进程到进程的端到端通信,关注的是数据的起点和终点(类似关注收件人发件人以及他们的信息).
网络层:网络层负责将数据从一个节点传输到另一个节点,主要进行寻址.将数据从源机器传送至目的机器的数据路径
数据链路层:相邻节点的之间的传输.通过检测、纠正数据包错误来建立可靠的邻接网络节点之间的数据传输
物理层:网络通信的硬件设备.
封装和分用(网络传输数据最核心的流程)
假设A给B在QQ上发了一个hello的消息.
封装
1.应用层
QQ从输入框获取到这个消息,就要把这个字符串封装成一个应用层的数据包.
QQ这样的程序就内置了一个应用层协议,用来构造应用层数据包.(就是利用字符串拼接的方式)
假定约定的格式是:
发送方QQ号;接收方QQ号;发送时间;消息正文
构造成数据包:
构造完成之后应用层就会调用系统的api,将数据包传给传输层
2.传输层
传输层就会把上述数据作为一个整体,构造成一个传输层数据包
传输层涉及到最主要的两个协议:TCP,UDP
这里我们假定使用UDP进行通信,就会构成一个UDP数据包
形如上述,添加报头的过程就叫封装,其实就是字符串的拼接,但是报头有一定的数据结构
对于UDP报头来说,承载的最重要的信息就是记录了源端口和目的端口
UDP报头虽然不能起到保护数据的作用但是能用来承载关键的用来转发的信息
拼接好传输层数据包后,就可以将他传给下层(网络层)继续封装
3.网络层(涉及到最核心的IP协议)
网络层IP协议,将传输层的UDP数据包作为一个整体再次进行封装,再拼上IP协议的报头,构成了IP数据包
IP协议,就是把整个UDP数据包视为一个整体.
IP报头也会保存一些关键的信息,这里保存的就是源IP和目的IP
网络层封装完成之后会继续调用api,将IP数据包传输到 数据链路层.
4.数据链路层 涉及到的核心协议:以太网
以太网数据帧.就是把IP数据包作为一个整体,在这个基础上加上帧头和帧尾
封装好后继续往下走交给物理层.
5.物理层
把上面的以太网数据帧,二进制结构(一串0101),转换成光信号/电信号/电磁波.发送出去.
经过上述过程,就算是把消息发送出去
分用
假设数据包已经到达了B的网卡,B的处理过程就叫分用
1.物理层
B的物理层接收到了信号并且将他转换成数字信号,得到一个以太网数据帧,进一步将以太网数据帧传输给数据链路层.
2.数据链路层
按照以太网数据帧的格式来解析,取出其中的载荷,交给上层协议
3.网络层
按照IP协议的格式来解析,取出其中的载荷,交给上层协议
4.传输层
按照UDP协议的格式来解析,取出其中的载荷,交给上层协议
5.应用层
根据 应用层协议来解析数据
路由器和交换机对上述封装分用同样适用
对于交换机来说,只需要封装到数据链路层即可
而对于路由器来说则是要封装到,网络层.
下一篇我们分享下网络编程,这里介绍一些前置知识.
网络编程中的一些概念
客户端/服务器
在网络中,主动发起请求的一方就是客户端,被动接受的一方就是服务器.
客户端发送给服务器的数据,叫做请求(request)
服务器返回给客户端的数据,叫做响应(response)
客户端-服务器之间的交互:
1.一问一答
2.一问多答
3.多问一答
4.多问多答
TCP/UDP
进行网络通信,需要调用系统的api,本质上是传输层提供的
传输层涉及到的协议主要是TCP和UDP
TCP和UDP区别:
连接:网络上的连接是抽象的,本质上就是通信双方保存了对方的相关信息.
就像客户端,有一些数据结构,记录了谁是他的服务器.
服务器,有一些数据结构,记录了谁是他的客户端.
可靠传输:这里的可靠传输就是发的数据到没到,发送方能够清楚的感知到
面向字节流:网络中传输的数据的基本单位是字节
面向数据报:每次传输的基本单位是数据报
全双工:一个信道可以双向通信,就像公路一样是双向车道
半双工:只能单向通信,就像过独木桥
相关文章:

网络初识-
网络的相关概念 一、局域网和广域网 将各种计算机、外部设备等相互连接起来,实现在这个范围内数据通信和资源共享的计算机网络。它的覆盖范围通常在几百米到几公里之内。例如,一个小型企业的办公室,通过交换机将多台电脑连接在一起…...
DNS污染:网络世界的“隐形劫持”与防御
在互联网的底层架构中,DNS(域名系统)如同数字世界的“导航员”,将用户输入的域名翻译成机器可读的IP地址。然而,DNS污染(DNS Poisoning)正像一场无声的“地址篡改”危机,威胁着全球网…...

MQTT(Message Queuing Telemetry Transport)协议(三)
主题是什么 2. TCP 协议封装 tcp.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <arpa/inet.h> #include <sys/socket.h>// 建立 TCP 连接 int tcp_connect(const char *server_ip, int s…...
多核cpu与时间片多线程的问题
在多核处理器中,每个核心可以独立运行一个线程。操作系统负责管理和调度这些线程,以确保高效利用处理器资源。下面详细解释如何获取时间片以及四个线程如何在四个核心上同时工作。 ### 时间片和调度 #### 1. 时间片(Time Slice)…...

电脑出现蓝屏英文怎么办?查看修复过程
电脑出现蓝屏英文是一种常见的电脑故障,它通常表示电脑遇到了严重的错误,需要停止运行以防止进一步的损坏。电脑蓝屏英文的原因可能有很多,比如硬件故障、驱动程序错误、系统文件损坏、病毒感染等。那么,当电脑出现蓝屏英文时&…...
安卓基础(第一集)
SharedPreferences(本地存储简单数据) 在 Android 中,SharedPreferences 用于存储小型数据。 (1)存储数据 // 获取 SharedPreferences 对象 SharedPreferences sharedPreferences getSharedPreferences("MyPre…...
【从零开始入门unity游戏开发之——C#篇56】C#补充知识点——模式匹配
考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...

【数据可视化-16】珍爱网上海注册者情况分析
🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...
c/c++蓝桥杯经典编程题100道(21)背包问题
背包问题 ->返回c/c蓝桥杯经典编程题100道-目录 目录 背包问题 一、题型解释 二、例题问题描述 三、C语言实现 解法1:0-1背包(基础动态规划,难度★) 解法2:0-1背包(空间优化版,难度★…...
电赛DEEPSEEK
以下是针对竞赛题目的深度优化方案,重点解决频率接近时的滤波难题和相位测量精度问题: 以下是使用NI Multisim 14.3实现本项目的详细解决方案: 一、基础要求实现方案(模块化设计) 1. 双频信号发生电路 电路结构&…...
VSOMEIP ROUTING应用和CLIENT应用之间交互的消息
#define VSOMEIP_ASSIGN_CLIENT 0x00 // client应用请求分配client_id #define VSOMEIP_ASSIGN_CLIENT_ACK 0x01 // routing应用返回分配的client_id #define VSOMEIP_REGISTER_APPLICATION 0x02 // client应用注册someip应用 #…...
HTML之基本布局div|span
HTML基本布局使用 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"width<device-width>, initial-scale1.0"><title>布局</title> <…...

Linux下学【MySQL】常用函数助你成为数据库大师~(配sql+实操图+案例巩固 通俗易懂版~)
绪论 每日激励:“唯有努力,才能进步” 绪论: 本章是MySQL中常见的函数,利用好函数能很大的帮助我们提高MySQL使用效率,也能很好处理一些情况,如字符串的拼接,字符串的获取,进制…...

【Rabbitmq篇】高级特性----TTL,死信队列,延迟队列
目录 一.TTL ???1.设置消息的TTL 2.设置队列的TTL 3.俩者区别? 二.死信队列 定义: 消息成为死信的原因: 1.消息被拒绝(basic.reject 或 basic.nack) 2.消息过期(TTL) 3.队列达到最大长度? …...
机器学习赋能的智能光子学器件系统研究与应用
机器学习赋能的智能光子学器件系统研究与应用 时间: 2025年03月29日-03月30日 2025年04月05日-04月06日 机器学习赋能的光子学器件与系统:从创新设计到前沿应用 课程针对光子学方面的从业科研人员及开发者,希望了解和实践在集成光学/空间…...

尚硅谷课程【笔记】——大数据之Linux【三】
课程视频链接:尚硅谷大数据Linux课程 七、定时任务调度 任务调度:指系统在某个时间执行的特定的命令或程序。 1)系统工作:有些重要的工作必须周而复始地执行。 2)个别用户工作:用户可能希望在某些特定的时…...

Visual Studio踩过的坑
统计Unity项目代码行数 编辑-查找和替换-在文件中查找 查找内容输入 b*[^:b#/].*$ 勾选“使用正则表达式” 文件类型留空 也有网友做了指定,供参考 !*\bin\*;!*\obj\*;!*\.*\*!*.meta;!*.prefab;!*.unity 打开Unity的项目 注意:只是看࿰…...
教程 | MySQL 基本指令指南(附MySQL软件包)
此前已经发布了安装教程安装教程,现在让我们来学习一下MySQL的基本指令。 一、数据库连接与退出 连接本地数据库 mysql -uroot -p # 输入后回车,按提示输入密码(密码输入不可见)若需隐藏密码显示,可使用࿱…...

企业数据集成案例:吉客云销售渠道到MySQL
测试-查询销售渠道信息-dange:吉客云数据集成到MySQL的技术案例分享 在企业的数据管理过程中,如何高效、可靠地实现不同系统之间的数据对接是一个关键问题。本次我们将分享一个具体的技术案例——通过轻易云数据集成平台,将吉客云中的销售渠…...

网络编程 day3
思维导图 以select函数模型为例 思维导图2 对应 epoll模型 应使用的函数 题目 使用epoll函数实现 两个客户端 通过服务器 实现聊天 思路 在原先代码基础上 实现 服务器 发向 客户端 使用客户端在服务器上的 套接字描述符 实现 客户端 接收 服务器…...
设计模式和设计原则回顾
设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...