当前位置: 首页 > news >正文

深入理解网络原理1

文章目录

  • 前言
  • 一、网络初识
    • 1.1 IP地址
    • 1.2 端口号
    • 1.3 协议
    • 1.4 五元组
    • 1.5 协议分层
  • 二、TCP/IP五层协议
  • 三、封装和分用
  • 四、客户端vs服务端
    • 4.1 交互模式
    • 4.2 常见的客户端服务端模型


前言

随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同⼯作来完 成业务,就有了⽹络互连。


一、网络初识

1.1 IP地址

IP地址主要⽤于标识⽹络主机、其他⽹络设备(如路由器)的⽹络地址。简单说,IP地址⽤于定位主机的⽹络地址。
就像我们发送快递⼀样,需要知道对⽅的收货地址,快递员才能将包裹送到⽬的地。

IP地址是⼀个32位的⼆进制数,通常被分割为4个“8位⼆进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110。
通常⽤“点分⼗进制”的⽅式来表⽰,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的⼗进制整数)。
如:100.4.5.6。

1.2 端口号

在⽹络通信中,IP地址⽤于标识主机⽹络地址,端⼝号可以标识主机中发送数据、接收数据的进程。 简单说:端⼝号⽤于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)。

端⼝号是0~65535范围的数字,在⽹络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收⽹络数据。

1.3 协议

协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在⽹络上传输的数据包的格式。

1.4 五元组

在TCP/IP协议中,⽤五元组来标识⼀个⽹络通信:

  1. 源IP:标识源主机
  2. 源端⼝号:标识源主机中该次通信发送数据的进程
  3. ⽬的IP:标识⽬的主机
  4. ⽬的端⼝号:标识⽬的主机中该次通信接收数据的进程
  5. 协议号:标识发送进程和接收进程双⽅约定的数据格式

可以在cmd中,输⼊ netstat -ano 查看⽹络数据传输中的五元组信息

1.5 协议分层

协议分层是指将通信协议根据其功能和作用分为若干层次,每一层都有特定的功能和责任。通信协议的分层主要是为了提高系统的可扩展性、可维护性和可管理性。

分层的作⽤——
为什么需要⽹络协议的分层?
分层最⼤的好处,类似于⾯向接⼝编程:定义好两层间的接⼝规范,让双⽅遵循这个规范来对接。
在代码中,类似于定义好⼀个接⼝,⼀⽅为接⼝的实现类(提供⽅,提供服务),⼀⽅为接⼝的使⽤类(使⽤⽅,使⽤服务):
• 对于使⽤⽅来说,并不关⼼提供⽅是如何实现的,只需要使⽤接⼝即可
• 对于提供⽅来说,利⽤封装的特性,隐藏了实现的细节,只需要开放接⼝即可。
这样能更好的扩展和维护,如下图:
在这里插入图片描述

二、TCP/IP五层协议

• 应⽤层:负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远
程访问协议(Telnet)等。我们的⽹络编程主要就是针对应⽤层。
• 传输层:负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发 送到⽬标主机。
• ⽹络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表
的⽅式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)⼯作在⽹络层。
•数据链路层:负责设备之间的数据帧的传送和识别。例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等⼯作。
有以太⽹、令牌环⽹,⽆线LAN等标准。交换机(Switch)⼯作在数据链路层。
•物理层:负责光/电信号的传递⽅式。⽐如现在以太⽹通⽤的⽹线(双绞 线)、早期以太⽹采⽤的的同
轴电缆(现在主要⽤于有线电视)、光纤,现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理
层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等。集线器(Hub)⼯作在物理层。

在这里插入图片描述

通俗的理解为:
在这里插入图片描述

三、封装和分用

• 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在⽹络层叫做数据报
(datagram),在链路层叫做帧(frame)。
• 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header),称为封装
(Encapsulation)。
• ⾸部信息中包含了⼀些类似于⾸部有多⻓,载荷(payload)有多⻓,上层协议是什么等信息。
• 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部,根据⾸部中的 “上层协议字段” 将数据交给对应的上层协议处理。

eg.A通过QQ发送hello给B,封装过程如下:
①应用层(应用程序QQ)
QQ从消息输入框获取到用户输入的hello,就需要把这个字符串构造成一个应用层的数据包,QQ这样的程序内部就设置了一个应用层协议,应用层数据包就是按照这个应用层协议约定的格式来构造的。
在这里插入图片描述
应用程序会调用操作系统提供的api,把这个数据包交给传输层。

②传输层
把上述数据作为一个整体,再构造一个传输层的数据包(传输层涉及到的协议最主要的是TCP和UDP)。此处假定是使用UDP来进行通信,就会构造成一个UDP数据包。

在这里插入图片描述
拼好传输数据包之后,就要把这个数据包进一步的交给下层,网络层继续进行封装了。(交给下层,指的是下层协议提供一组api(函数),上层调用这个api,并且把刚才构造好的数据通过参数传过去,下层协议就可以来处理这个数据了)。

③网络层
这里涉及到的最核心的协议是IP协议。网络层IP协议,把刚才的传输层的UDP数据包作为一个整体,再拼上IP协议的报头,构造成一个IP数据包。
在这里插入图片描述

构造完成完整的IP数据包之后,IP协议继续调用数据链路层的api,把数据再交给数据链路层这里的协议进行处理。

④数据链路层
这里涉及到的核心协议,以太网(此处“以太”用来表示数据传输的介质)。
以太网数据帧,也是以IP数据包为一个整体,在这个基础上添加上帧头和帧尾。
在这里插入图片描述
这样的数据还需要交给物理层。

⑤物理层
硬件设备,把上述这样的以太网数据帧,二进制结构(一串0101为数据),转换成光信号(光纤,通过光的频谱进行编码)/电信号(网线,高电平/低电平)/电磁波(无线wifi),然后进行发送。

经过上述一系列的操作,数据终于从你的电脑上发送出去了。

--------------------------------------------------------------------------------------------------------------------------------------

暂时不考虑中间过程,假定数据包已经到达B的网卡了,B的处理过程就称为“分用”。
①B的物理层收到了光信号/电信号/电磁波,就会把这些物理信号转换成数字信号(二进制的0101),得到一个以太网数据帧,进一步的把这个数据帧交给数据链路层处理。
②数据链路层
按照以太网数据帧的格式来解析,取出其中的载荷,再交给上层协议。
在这里插入图片描述
③网络层
按照IP协议的格式进行解析,取出其中的载荷,再交给上层协议。
在这里插入图片描述
④传输层
按照UDP协议格式来解析,取出其中的载荷,再交给上层协议。
在这里插入图片描述
⑤应用层
按照QQ应用程序内部的应用层协议格式来解析数据。
在这里插入图片描述
QQ程序拿到这些信息之后,就会在窗口中给你弹出提示,并且把消息/消息的发送者/发送时间都显示到聊天窗口上。

真实情况下,两个主机不太会是通过网线直连的,而是通过一系列的交换机或者路由器来进行数据转发的。上述的封装分用过程同样适用,只不过,封装分用的程度不一定是到应用层(五层都有)。
对于交换机来说,就只需要封装分用到数据链路层即可;经典的路由器来说,就只需要封装分用到网络层即可。

描述一个网络上传输的数据“单位”可能会用到下面的术语:
在这里插入图片描述
网络编程本质上就是学习传输层给应用层提供的api,就可以写代码,把数据交给传输层,进一步的通过层层封装,就可以把数据通过网卡发送出去了。

交换机和路由器的区别? (经典面试题)
工作层次不同。交换机工作在数据链路层,而路由器工作在网络层。
数据转发所依据的对象不同。交换机是利用MAC地址来确定转发数据的目的地址,而路由器是基于路由表转发数据包。

传统的交换机只能分割冲突域,不能分割广播域;而路由器可以分割广播域。 路由器提供了防火墙的服务,可以防止广播风暴(具有更高级别的安全性)。
交换机主要用于局域网内部的数据交换,而路由器则主要用于不同网络之间的数据传输。

四、客户端vs服务端

在网络中,主动发起通信的一方,称为“客户端”,被动接受的一方,称为“服务器”。同一个程序在不同的场景中,可能是客户端也可能是服务器。
客户端给服务器发送的数据,称为“请求”(request);
服务器给客户端返回的数据,称为“响应”(response)。

4.1 交互模式

  • “一问一答”:一个请求对应一个响应,常见于”网站开发“(web开发)。
  • ”一问多答“:一个请求对应多个响应,这个场景主要涉及到”下载“场景。
  • “多问一答”:多个请求对应一个响应,这个场景主要涉及到“上传”场景。
  • “多问多答”:一个请求对应多个响应,一个响应也可能对应多个请求,这个场景主要涉及到“远程控制/远程桌面",进行的鼠标键盘操作,都会作为一个个请求发送过去,所看到的画面作为响应。

4.2 常见的客户端服务端模型

最常见的场景,客户端是指给⽤⼾使⽤的程序,服务端是提供用户服务的程序:

  1. 客户端先发送请求到服务端
  2. 服务端根据请求数据,执⾏相应的业务处理
  3. 服务端返回响应:发送业务处理结果
  4. 客户端根据响应数据,展示处理结果(展示获取的资源,或提示保存资源的处理结果)

客户端与服务器通信——
在这里插入图片描述


最后,码字不易,如果觉得对你有帮助的话请点个赞吧,关注我,一起学习,一起进步!

相关文章:

深入理解网络原理1

文章目录 前言一、网络初识1.1 IP地址1.2 端口号1.3 协议1.4 五元组1.5 协议分层 二、TCP/IP五层协议三、封装和分用四、客户端vs服务端4.1 交互模式4.2 常见的客户端服务端模型 前言 随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据&…...

为什么感觉没有效果

以前在辅导小儿作业的时候,我会在常用的搜索引擎里去寻找答案,一般情况下都能解决问题。 但是最近一段时间,我发现,搜索引擎搜出来的结果还没有利用短视频搜出来的答案更全面,短视频软件不仅可以显示AI整理出来的答案…...

C++中的指针详解

C中的指针详解 在C编程中,指针是一个非常重要且基础的概念。它允许程序员直接访问和操作内存地址,为高级数据结构和算法的实现提供了基础。本文将详细讲解C中指针的概念、用法和注意事项,帮助读者深入理解并掌握指针的相关知识。 一、指针的…...

视频改字祝福 豪车装X系统源码uniapp前端小程序源码

视频改字祝福 豪车装X系统源码uniapp前端小程序源码,创意无限!AI视频改字祝福,豪车装X系统源码开源,打造个性化祝 福视频不再难! 想要为你的朋友或家人送上一份特别的祝福,让他们感受到你的真诚与关怀吗&am…...

google chromeDriver 地址

#chrome driver 下载地址 https://getwebdriver.com/chromedriver #chrome brower下载地址 https://googlechromelabs.github.io/chrome-for-testing/ centos 安装的dockerFile的部分命令: #安装browser wget https://dl.google.com/linux/chrome/rpm/stable/x86_…...

分布式与一致性协议之Raft算法(一)

Raft算法 概述 Raft算法属于Multi-Paxos算法,它在兰伯特Multi-Paxos思想的基础上做了一些简化和限制,比如日志必须是连续的,只支持领导者(Leader)、跟随者(Follwer)和候选人(Candidate)3种状态。在理解和算法实现上,Raft算法相对…...

从自定义一个作用域开始来了解SpringBean的作用域

你好,这里是codetrend专栏“Spring6全攻略”。 在 Spring 框架中,Bean 的作用域(Scope)定义了 Bean 实例在容器中如何创建、管理和销毁的策略。 Spring 提供了多种 Bean 作用域,每种作用域都有其特定的生命周期和适用…...

Android 编译文件简述(Android.mk)

Android 编译文件简述(Android.mk) Android.mk 文件是 Android 构建系统中的一种构建配置文件,使用 GNU Make 语法,用于定义 Android 项目中的模块、库、应用程序、JNI 代码等的编译和链接方式。每个 Android.mk 文件通常对应一个目录,代表构建系统应该如何处理该目录下的源…...

[React] 手动实现CountTo 数字滚动效果

这个CountTo组件npmjs里当然有大把的依赖存在,不过今天我们不需要借助任何三方依赖,造个轮子来手动实现这个组件。 通过研究其他count to插件我们可以发现,数字滚动效果主要依赖于requestAnimationFrame 通过js帧来让数字动起来,…...

9.Admin后台系统

9. Admin后台系统 Admin后台系统也称为网站后台管理系统, 主要对网站的信息进行管理, 如文字, 图片, 影音和其他日常使用的文件的发布, 更新, 删除等操作, 也包括功能信息的统计和管理, 如用户信息, 订单信息和访客信息等. 简单来说, 它是对网站数据库和文件进行快速操作和管…...

redis之集群

一.redis主从模式和redis集群模式的区别 redis主从模式:所有节点上的数据一致,但是key过多会影响性能 redis集群模式:将数据分散到多个redis节点,数据分片存储,提高了redis的吞吐量 二.redis cluster集群的特点 数据分片 多个存储入…...

#9松桑前端后花园周刊-React19beta、TS5.5beta、Node22.1.0、const滥用、jsDelivr、douyin-vue

行业动态 Mozilla 提供 Firefox 的 ARM64 Linux二进制文件 此前一直由发行版开发者或其他第三方提供,目前Mozilla提供了nightly版本,正式版仍需要全面测试后再推出。 发布 React 19 Beta 此测试版用于为 React 19 做准备的库。React团队概述React 19…...

STM32中UART通信的完整C语言代码范例

UART(通用异步收发器)是STM32微控制器中常用的外设,用于与其他设备进行串行通信。本文将提供一个完整的C语言代码范例,演示如何在STM32中使用UART进行数据传输。 硬件配置 在开始编写代码之前,需要确保以下硬件配置&…...

【ITK统计】第一期 分类器

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK中的分类器及其使用情况,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~YO 在统计分…...

51单片机两个中断及中断嵌套

文章目录 前言一、中断嵌套是什么?二、两个同级别中断2.1 中断运行关系2.2 测试程序 三、两个不同级别中断实现中断嵌套3.1 中断运行关系3.2 测试程序 总结 前言 提示:这里可以添加本文要记录的大概内容: 课程需要: 提示&#x…...

VUE 监视数据原理

1、如何监测对象中的数据? 通过setter实现监视,且要在new vue时就传入监测的数据 (1)对象中后加的属性,vue默认不做响应式处理 (2)如需给后添加的属性做响应式,请使用如下API&#x…...

Thinkphp使用dd()函数

用过Laravel框架的同学都知道在调试代码的时候使用dd()函数打印变量非常方便,在ThinkPHP6及以上的版本框架中也默认加上了这个函数。但是在ThinkPHP5或更低版本的框架中,dd 并不是一个内置的方法,不过我们可以手动添加这个函数,步…...

Git使用指北

目录 创建一个Git仓库本地仓库添加文件文件提交到本地仓库缓冲区添加远程仓库地址本地仓库推送到远程仓库创建新的分支拉取代码同步删除缓冲区的文件,远程仓库的文件.gitignore文件 创建一个Git仓库 Git仓库分为远程和本地两种,远程仓库如Githu上创建的…...

STM32G030F6P6TR 芯片TSSOP20 MCU单片机微控制器芯片

STM32G030F6P6TR 在物联网(IoT)设备中的典型应用案例包括但不限于以下几个方面: 1. 环境监测系统: 使用传感器来监测温度、湿度、气压等环境因素,并通过无线通信模块将数据发送到中央服务器或云端平台进行分析和监控。…...

零基础入门学习Python第二阶01生成式(推导式),数据结构

Python语言进阶 重要知识点 生成式(推导式)的用法 prices {AAPL: 191.88,GOOG: 1186.96,IBM: 149.24,ORCL: 48.44,ACN: 166.89,FB: 208.09,SYMC: 21.29}# 用股票价格大于100元的股票构造一个新的字典prices2 {key: value for key, value in prices.i…...

Java面试题:多线程3

CAS Compare and Swap(比较再交换) 体现了一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性. 线程A和线程B对主内存中的变量c同时进行修改 在线程A中存在预期值a,修改后的更新值a1 在线程B中存在预期值b,修改后的更新值b1 当且仅当预期值和主内存中的变量值相等…...

【QEMU系统分析之实例篇(十八)】

系列文章目录 第十八章 QEMU系统仿真的机器创建分析实例 文章目录 系列文章目录第十八章 QEMU系统仿真的机器创建分析实例 前言一、QEMU是什么?二、QEMU系统仿真的机器创建分析实例1.系统仿真的命令行参数2.创建后期后端驱动qemu_create_late_backends()qtest_serv…...

pyside6的调色板QPalette的简单应用

使用调色板需要先导入:from PySide6.QtGui import QPalette 调色板QPalette的源代码: class QPalette(Shiboken.Object):class ColorGroup(enum.Enum):Active : QPalette.ColorGroup ... # 0x0Normal : QPalette.ColorGrou…...

苍穹外卖项目

Day01 收获 补习git Git学习之路-CSDN博客 nginx 作用:反向代理和负载均衡 swagger Swagger 与 Yapi Swagger: 可以自动的帮助开发人员生成接口文档,并对接口进行测试。 项目接口文档网址: http://localhost:8080/doc.html Da…...

error: Execution was interrupted, reason: signal SIGABRT

c json解析时&#xff0c; error: Execution was interrupted, reason: signal SIGABRT const Json::Value points root["shapes"]; if (points.isArray()) { for (unsigned int i 0; i < points.size(); i) { std::cout << " - [" <<…...

HarmaonyOS鸿蒙应用科普课

一、什么是鸿蒙OS&#xff1f; 1.概念&#xff1a; 先给大家讲讲今天讲课的主题&#xff0c;鸿蒙OS是什么&#xff1f;鸿蒙系统大家都知道&#xff0c;就是一个操作系统&#xff0c;我们未来是为的成为鸿蒙程序员。所以我们不要将鸿蒙os完全等同于手机操作系统&#xff0c;太…...

数码管的显示

静态数码管显示 数码管有两种一种的负电压促发,一种是正电压促发,上图是单数码管的引脚 上图是数码管模组的引脚,采用了引脚复用技术 咱们这个单片机由8个单数码管,所以要用上38译码器,如下图 74138使能端,单片机上电直接就默认接通了 74HC245的作用是稳定输入输出,数据缓冲作…...

关于海康相机和镜头参数的记录

对比MV-CS020-10UC和大家用的最多的MV-CS016-10UC 其实前者适合雷达站使用&#xff0c;后者适合自瞄使用 一&#xff1a;MV-CS020-10UC的参数 二&#xff1a;对比 三&#xff1a;海康镜头选型工具...

【JavaScript】运算符

算术运算符 1. 加法运算符&#xff08;&#xff09; 加法运算符用于将两个值相加。如果两个操作数都是数字&#xff0c;则它们将被加在一起。如果其中一个操作数是字符串&#xff0c;则另一个操作数将被转换为字符串&#xff0c;然后执行字符串连接。 运算子不同&#xff0c…...

LabVIEW航空发动机主轴承试验器数据采集与监测

LabVIEW航空发动机主轴承试验器数据采集与监测 随着航空技术的迅速发展&#xff0c;对航空发动机性能的测试与监测提出了更高的要求。传统的数据采集与监测方法已难以满足当前高精度和高可靠性的需求&#xff0c;特别是在主轴承试验方面。基于LabVIEW的航空发动机主轴承试验器…...

java网站建设/seo是干嘛的

当用户进程操作字符设备驱动&#xff0c;内核会根据设备号找到对应的cdev对象。 open/read/write这些接口就是组成VFS(虚拟文件系统)。 在Linux内核&#xff0c;用一个inode节点对象描述一个要操作的文件/设备文件&#xff0c;包括权限 &#xff0c;设备号等信息&#xff0c;就…...

公司网站建设的基本流程/今天刚刚发生的新闻

黑客技术点击右侧关注&#xff0c;了解黑客的世界&#xff01;推荐↓↓↓ 长按关注?【16个技术公众号】都在这里&#xff01;涵盖&#xff1a;程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Andr…...

江西建设网官方网站/在线外链发布工具

jsp基础知识详解 简介&#xff1a; JSP全称是JavaServer Pages&#xff0c;它和servle技术一样&#xff0c;都是SUN公司定义的一种用于开发动态web资源的技术。 JSP这门技术的最大的特点在于&#xff0c;写jsp就像在写html&#xff0c;但&#xff1a; 它相比html而言&#xff…...

网站制作案例效果/站长工具如何使用

目录 1 绪论 1.1 课题研究背景 1.2 课题研究目的与意义 1.3 创新思路 1.4 论文组织结构...

互联科技 行业网站/抖音关键词用户搜索排名靠前

扩展rhel5.9下使用lvm管理的根分区 核心步骤&#xff1a; 添加sdb----->pvcreate----->vgextend----->lvextend----->resize2fs 文件系统信息如下&#xff1a; [rootrhel59 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/VolGr…...

做网站编程语言/seo优化的优点

Artisan // 在版本 5.1.11 新添加&#xff0c;见 http://d.laravel-china.org/docs/5.1/authorization#creating-policiesphp artisan make:policy PostPolicy // 针对命令显示帮助信息php artisan --help OR -h // 抑制输出信息php artisan --quiet OR -q // 打印 Laravel 的…...