java——网络原理初识

在这里插入图片描述

T04BF

👋专栏: 算法|JAVA|MySQL|C语言

🫵 小比特 大梦想

目录

    • 1.网络通信概念初识
      • 1.1 IP地址
      • 1.2端口号
      • 1.3协议
        • 1.3.1协议分层
          • 协议分层带来的好处主要有两个方面
        • 1.3.2 TCP/IP五层 (或四层模型)
        • 1.3.3 协议的层和层之间是怎么配合工作的

1.网络通信概念初识

1.1 IP地址

网络互联的目的就是进行网络通信,也就是从网络获取数据,说具体一点,就是网络主机中不同进程之间进行通信
那么,在组件的网络里,到底是怎么判断是从哪台主机,将数据传输到哪台主机的呢??
这就需要使用IP地址来标识
IP地址用来标识网络上一个设备的位置,通过位置找到这个设备进行进一步的通信
IP地址实际上是一个32位的整数(针对IPV4),也就是 4个字节的数
但是我们在平常见到的往往是使用"点分十进制" 的方式 来表示IP地址
所谓"点分十进制" 就是将上述的IP地址分成4个部分,每个部分一个字节,并且每个部分表示的范围在 0 - 255

1.2端口号

IP地址是用来标识不同主机的
而端口号就是用来标识一个主机上的不同程序
要求在每个程序启动的时候,就需要关联上一个和别的程序不一样的端口号

1.3协议

协议就是"约定",是通信双方对通信规则的约定
这个约定一定是双方都认可的,就是约定在通信的时候,哪一部分该怎么做
进行网络通信的时候,是一定要有通信协议的
就是为了保证,在不同的主机,不同的设备上,即使是不同的硬件,不同的操作系统,不同的应用程序,也能保证通信的正常进行
在网络通信过程里面,通信协议是非常重要的环节

1.3.1协议分层

网络通信是一个非常复杂的事情,涉及到很多的细节问题
如果是仅仅只是通过一个协议就约定了上述所有的细节该怎么实现,那么这个协议将会非常庞大
最好的办法就是 将上面庞大的协议,进行拆分
拆分就是为了更好的管理,不要让这个东西太复杂,让拆分完后的每一部分,复杂一个功能模块
此时,就可以将一个功能复杂的协议,拆分成多功能单一的协议的

拆分是拆分了,但是拆出来的协议太多了,就要对协议进行分类分层
就类似于在公司:
在这里插入图片描述
虽然整体的人多,分出来的组别也多,但是不会乱

而分层,不乱的前提是,不能分级汇报工作

协议分层也就是类似上面的效果,将很多协议,按照不同的功能分层不同的层级,每一个层级都有对应的主线任务(目标,要解决的问题)

上层协议会调用下层协议的功能,下层协议会给上层协议提供服务(不能越级调用)

协议分层带来的好处主要有两个方面

(1)封装的效果
即某一层协议不必知道其他层协议的细节,降低学习成本
在这里插入图片描述
按照如图所示的类似封装效果,那么此时会汉语的两个人,不必知道电话通信的原理,就能打电话

而设计电话的人,也可能不懂汉语,但是也不影响他开发电话

(2)任意协议之间,都是可以灵活替换的 即方便进行解耦合
在这里插入图片描述
即使层级内部的协议变了

站在使用者的角度,完全感知不到,电话机有任何区别

站在电话开发者的角度,也不必对针对英语做出任何的修改

此时引入协议分层就对 整个网络升级迭代,带来了很大的便利

我们当前的网络现状,就是有很多协议,这些协议就是按照一定的分层规则,组织起来的

有两种分层规则:OSI七层模型 和 TCP/IP五层(或四层)模型

但是OSI七层模型只是存在于教科书上,是一种理想化的模型,客观世界是不存在的(搞得太复杂了)

因此我们主要来看 TCP/IP五层(或四层)模型

1.3.2 TCP/IP五层 (或四层模型)

TCP/IP五层(或四层)模型实际上是 OSI七层模型的简化版

我们目前接触到的网络,大部分都是TCP/IP五层(或四层)模型,电脑上网基本都是,至于手机上网的 4G 5G通信,就是一套专门的协议

(1)物理层

就是硬件层面上的相关约定,比如网口,网线…

(2)数据链层,网络层,传输层,应用层

举个例子:
我们在淘宝上买衣服,下单的时候,就需要填写收件人信息,同时商家也需要填写发件人的信息

此时我和商家就只是关注收件人信息和 发件人信息 ,即终点和起点

这就类似于传输层,只关注 通信双方的起点和终点
即"端"到"端"的传输(endPoint)

接下来商家发货,就会把快递交给快递小哥拿到快递公司,此时快递公司就会对这些快递进行分拣,根据不同的目的地,安置到不同的传输路线上

例如有的是"上海 - > 重庆" ,有的是"上海 -> 广东",而即使是"上海 - > 重庆",中间也有不同的中转站

快递公司就会把路线规划好,包裹就会按照这样的既定路线进行传输

这就类似于网络层,关注的是通信中,通信路线的规划
规划出的路径,就决定了数据要经过哪些节点,即"点到点的传输"

此时具体到运输层面上,即具体咋运输,就要有快递员自行确定了

例如上海到 ->苏州是大卡车,苏州到 南京是火车…

这就类似于数据链路层,关注的是通信过程中,相邻两个点之间的运输

当我买家拿到快递后,此时我们拿到快递后具体需要干什么,就是我自己关心的事情,商家 / 快递公司不关心

这就类似于应用层,和具体应用直接相关,传输的数据干啥用,如何使用,有啥意义

这就是TCP / IP五层

而有一些资料把上述的五层称为四层,实际上就是 不单独算物理层(实际上物理层数据链层可以合并)
在这里插入图片描述
如图所示,实际上两种模型的区别就在于,TCP/IP模型,将应用层,表示层,会话层合并成一个应用层了

至于其他层,都是同一个东西,只是不同的叫法

1.3.3 协议的层和层之间是怎么配合工作的

上层协议会调用下层协议的功能,下层协议会给上层协议提供服务

我们通过一个实际场景来解释:

A 通过 QQ 给 B 发送 hello消息

QQ应用程序就要负责实现上述的逻辑

(1)应用层

QQ应用程序首先就需要把上述要传递的内容,组织成 “应用层数据包”

QQ里会有一个应用层网络协,协议就是规定了,数据按照怎么样的格式来组织

而网络上传输的数据本质上就是二进制字符串

因此发送人 接收人 消息时间,消息内容 就要组织到一个字符串里面,组织的时候,就要按照一定的格式来组织

不同协议,数据组织的格式是不同的

此时我们假设,QQ应用层协议是这样的:发送人的QQ号,接受人的QQ号,发送时间,消息正文\n(即使事实上的QQ应用层协议更加复杂,但是本质上也是把各个属性信息,组织成一个字符串,即将结构化的数据,转化为字符串 / 二进制字符串 -> 序列化)

假设此时的应用层数据包是:

在这里插入图片描述

(2)传输层

此时应用层数据已经有了,QQ应用程序就要调用系统的API来进行传输,就要将数据交给传输层(传输层(操作系统内核提供了API),让应用程序去调用 -> 称为 socket api)

调用这样的api,就能交给数据交给传输层(进入到系统内核了)

传输层拿到应用层数据包后,就要对应用层数据包进行进一步的封装,构造成"传输层数据包"

在传输层里有两个典型的协议,TCP,UDP(此处假设使用UDP来作为传输层协议)

在这里插入图片描述

而报头里面放的是一些UDP相关的属性(比如发件人和收件人的端口号,就在UDP中)

报头后面的数据就称为UDP数据包的载荷(payLoad)

这种过程就类似于包装快递

(3)网络层

传输层构造好数据包后,就会继续把数据包交给网络层(传输层会调用网络层提供的API,这个调用的过程是系统内核自己负责的)

在网络层,典型的协议就是IP协议

在这里插入图片描述

IP数据包不关心后面的载荷是啥,只关心IP报头里的数据(发件人的IP地址和收件人的IP地址)

(4)数据链层

网络层又进一步调用 数据链层的API,把上述IP数据包进一步交给数据链层

这里同样也是操作系统内核完成的工作

而这里调用的API往往是网卡驱动程序提供的

数据链层的典型协议就是以太网

电脑通过有线网传输数据,走的就是以太网协议,我们电脑上插的网线就是 (以太网线)

在这里插入图片描述

此时上述数据就已经进入到网卡驱动里了,接下来就要真正发送出去了

(5)物理层

上述数据本质上还是0101这样的二进制数据

硬件设备就要把上述数据转化成光信号 / 电信号 / 电磁波 ,才会真正发射

上述层层包装数据,不停的加数据报头的过程,就是 “封装”

而上述数据实际上不是直接到达B,而是先到达和A连接的交换机 / 路由器

而数据到达B之后,要做的事情就是 上述过程的逆过程

(1)物理层

收到一系列光信号后,把这些信号转成0101这样的二进制数据,交给数据链路层

(2)数据链路层对数据进行解析(解析报头里的关键信息,为后续的传输 / 转发 打下基础,还要拿到载荷数据)

此时解析出来的数据是要交给上层的

(3)网络层

IP协议按照协议对从数据链路拿到的数据进行进一步解析,解析报头中的关键信息,取出载荷

进一步将解析出来的数据交给 传输层

(4)传输层

拿着传输过来的UDP数据包,按照UDP格式进一步解析,解析出关键信息(要给哪个端口号使用),以及解析出载荷

再进一步将载荷交给对应的应用程序

(5)应用层

QQ拿到应用数据包

按照自己的协议格式进行解析,将前面拿到的结构化数据,显示到页面上

注意:这样的网络数据在发送之后,实际上再中间会经过很多路由器 / 交换机进行转发,此时路由器和交换机也会进行封装分用

但是与上面不同的是,路由器只是封装到网络层即可,而交换机封装到数据链路层



感谢您的访问!!期待您的关注!!!

在这里插入图片描述

T04BF

🫵 小比特 大梦想

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

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

相关文章

RLC防孤岛保护装置如何工作的?

什么是RLC防孤岛保护装置? 孤岛保护装置是电力系统中一道强大的守护利器,它以敏锐的感知和迅速的反应,守护着电网的平稳运行。当电网遭遇故障或意外脱离主网时,孤岛保护装置如同一位机警的守门人,立刻做出决断&#xf…

算法(七)插入排序

文章目录 插入排序简介代码实现 插入排序简介 插入排序(insertion sort)是从第一个元素开始,该元素就认为已经被排序过了。然后取出下一个元素,从该元素的前一个索引下标开始往前扫描,比该值大的元素往后移动。直到遇到比它小的元…

MySQL 索引的使用

本篇主要介绍MySQL中索引使用的相关内容。 目录 一、最左前缀法则 二、索引失效的场景 索引列运算 字符串无引号 模糊查询 or连接条件 数据分布 一、最左前缀法则 当我们在使用多个字段构成的索引时(联合索引),需要考虑最左前缀法则…

【VTKExamples::Utilities】第十七期 ZBuffer

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例ZBuffer,并解析接口vtkWindowToImageFilter,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ…

【面试八股总结】MySQL事务:事务特性、事务并行、事务的隔离级别

参考资料:小林coding 一、事务的特性ACID 原子性(Atomicity) 一个事务是一个不可分割的工作单位,事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。原子性是通过 undo …

Arm发布Cortex X925、A725、A520,Armv9.2架构

随着半导体行业的不断发展,Arm 通过突破技术界限,为终端用户提供尖端解决方案,在核心和 IP 架构创新方面处于领先地位,尤其是在移动领域。2024 年,Arm 的年度战略进步重点是增强去年的 Armv9.2 架构,并带来…

Windows系统安装openvino(2024.1.0)

一、openvino下载: 下载地址:下载英特尔发行版 OpenVINO 工具套件 (intel.cn) 下载完之后将压缩包解压,然后重命名文件夹为openvino_2024.1.0。 二、环境配置 以python环境为例:(建议使用moniconda虚拟环境来安装&am…

鸿蒙ArkTS声明式开发:跨平台支持列表【背景设置】 通用属性

背景设置 设置组件的背景样式。 说明: 开发前请熟悉鸿蒙开发指导文档: gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md点击或者复制转到。 从API Version 7开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版…

【免费Web系列】JavaWeb实战项目案例五

这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r 新增员工 前面我们已经实现了员工信息的条件分页查询。 那今天我们要实现的是新增员工的功能实现,页面原型如下: ​ 首先我们先完成"新增员工"的功能开发&#xff0…

ODBC访问达梦数据库Ubuntu18.04 x86-x64(亲测有效)

ODBC访问达梦数据库Ubuntu18.04 x86-x64 第1步:安装unixodbc驱动,使用下面命令。第2步:拷贝已经安装好的达梦数据库驱动程序第3步:配置ODBC必要的参数文件,如下图第4步:设置环境变量第5步:连接测试 说明&am…

Github单个文件或者单个文件夹下载插件

有时候我们在github上备份了一些资料,比如pdf,ppt,md之类的,需要用到的时候只要某个文件即可,又不要把整个仓库的zip包下载下来,毕竟有时文件太多,下载慢,我们也不需要所有资料,那么就可以使用到…

docker安装Mysql5.7版本

首先Linux系统已经安装好了docker应用。 1.搜索镜像 docker search mysql 2.拉取5.7的镜像 总之,选starts最多的那个就对了。 docker pull mysql:5.7 ~ docker pull mysql:5.7 5.7: Pulling from library/mysql fc7181108d40: Downloading [============> …

C语言数据结构(超详细讲解)| 二叉树的实现

二叉树 引言 在计算机科学中,数据结构是算法设计的基石,而二叉树(Binary Tree)作为一种基础且广泛应用的数据结构,具有重要的地位。无论是在数据库索引、内存管理,还是在编译器实现中,二叉树都…

Github 如何配置 PNPM 的 CI 环境

最近出于兴趣在写一个前端框架 echox,然后在 Github 上给它配置了最简单的 CI 环境,这里简单记录一下。 特殊目录 首先需要在项目根目录里面创建 Github 仓库中的一个特殊目录:.github/workflows,用于存放 Github Actions 的工作…

MyBatis基础理解教程,详细分步基础查询表数据练习(通俗易懂、实时更新)

一、MyBatis是什么 MyBatis 是一个持久层框架,简化JDBC开发,它提供了一个从 Java 应用程序到 SQL 数据库的桥梁,用于数据的存储、检索和映射。MyBatis 支持基本的 SQL 操作、高级映射特性以及与 Maven 等构建工具的集成。 二、持久层是什么…

matlab GUI界面设计

【实验内容】 用MATLAB的GUI程序设计一个具备图像边缘检测功能的用户界面,该设计程序有以下基本功能: (1)图像的读取和保存。 (2)设计图形用户界面,让用户对图像进行彩色图像到灰度图像的转换…

力扣2965. 找出缺失和重复的数字

题目: 给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n * n ,其中的值在 [1, n] 范围内。除了 a 出现两次,b 缺失 之外,每个整数都恰好出现一次 。 任务是找出重复的数字a 和缺失的数字 b 。 返回一个下标从 0 开始…

【面结构光三维重建】0.基于openCV实现相机的标定

1.标定结果 2.相机标定原理 相机标定是计算机视觉和机器视觉领域中的重要技术,用于确定相机成像的几何关系和畸变特性,以提高成像的精度和稳定性。该技术广泛应用于三维重建、机器人视觉、自动驾驶等领域。 世界坐标系:由用户定义的三维世界坐标系,描述物体和相机在真实世…

C++的第一道门坎:类与对象(三)

目录 一.再谈构造函数 1.1构造函数体赋值 1.2初始化列表 1.3explicit关键字 二.static成员 2.1概念 ​编辑 2.2特性 三.友元 3.1友元函数 3.2友元类 4.内部类 一.再谈构造函数 1.1构造函数体赋值 class Date { public:Date(int year,int month,int day){_year ye…

32. 【Java教程】集合

在前面的小节中,我们学习了数组,本小节学习的集合同样用于存放一组数据,我们将学习什么是集合、集合的应用场景 ,在应用场景部分我们将对比 Java 数组与集合的区别,还将系统介绍 Java 集合的架构,也将结合实…