【JavaEE】协议-信息是如何在一个机器传到另一个机器的(理论)

简介: JavaEE & 协议 & 信息是如何在一个机器传到另一个机器的

JavaEE & 协议 & 信息是如何在一个机器传到另一个机器的

1. 局域网

以机房为例,多个机器之间可以进行联机,这就相当于一个局域网


b9d34ca1138b46ac8e894836c16b5cfe.png


通过网线直接连接实现的联机也是局域网


通过交换机也能进行联机,这也是局域网


1aa811a8475647c38f6cdd526ad46d3a.png

电脑越多,用网线直连就越复杂~

区别于集线器:集线器是将一条网线转变成多条网线,多条网线转变成一条网线,这是交换机原始的版本,有很大弊端,如信息同时汇集时会冲突!

0b60786826a84153851e124a834722ee.png


这里的交换机也可以换成路由器:


194dc77aed784178a31b06429bc45c68.png

不难看出,局域网顾名思义就是局部的区域可以进行联机。


一个学校的机房的机器必然无法联机到另一个学校的机房的机器

2. 广域网

现在的传奇被我们嘲笑,但是初期的传奇却席卷全国。那是因为,这个游戏在那个年代实现里不同地区的玩家进行多人联机!那个时候的网吧火爆了。


3_115-9-368-572_2003061914387.jpg

而实现的方式就是:广域网的网络组建 — 规模大


即通过一些交换机路由器搭建一个网络环境,这需要一些拥有强大的专业知识和技能的人:网管


不是网吧管理员,而是网络管理员!

如果你学习开发,一般也会接触到,可能也需要学习如何组网~


之后又进入了移动互联网阶段,无线联网~


手机…


df6882b5bad043df9cd5816a344ad73c.png

3. IP与端口号(初识)

IP地址:标识一台主机的位置,即主机在互联网上的具体位置


本质上是一个4字节的32位整数

往往协程“点分十进制”的形式

如:192.168.137.1

四个部分,每个部分一个字节

命令行输入ipconfig:

bac4456716b846e08ae602206924d997.png



端口号:标识主机上的哪个程序 ,区别一个主机上的应用程序


4. 协议

协议即约定

发送方发送的信息,有特定的格式,而接收方应如何解读这些信息呢,就是通过协议

发送方发出的信息不仅仅要包含“核心数据”,还要包含IP,端口号…等等很多信息,那么这些信息的组织格式是必要存在的!

网络的传输本质上是通过 网线/光纤/无线(电磁波) 以电信号/光信号来进行传输的


光信号也是要转化为电信号

不同频率来代表1与0

电信号就是高低电平(高低电压)表示的010101…

好的,现在我们知道怎么传输这些010101…了,那么我们要怎么处理这些信息呢?

5ba4968f90d3461797993a980e482cb1.png


我们需要约定好,“你传过来的信息是什么什么格式,我就以什么什么格式来理解”


这就是协议

4.1 协议分类分层

一个大的协议非常复杂,我们可以拆分为多个协议

那么就有一些协议功能类似,一些协议功能不同


分类

而对于不同功能的协议,就安排在不同信息处理的不同阶段


分层

而分层,也需要约定层级与层级之间的调用关系


要求不能跨层级调用

也就是说,一个小协议其实就只是大协议“这条流水线”的一个小工程罢了

而流水线的工程之间是不能越级的

上层调用下层

下层给上层提供支持

调用的时候,格式就会发生改变


信息传到下层,加工成下层协议格式

信息传到上层,解析下层协议格式为上层协议格式

例如来自历史课本的一张图:


一般也不会跨级管理,这样管理成本大


1954db7f03ca6eeb1967f69f5bb2f52d.jpg

4.2 协议分层的好处


1f9bbb7c638147ee9cd9937991ece662.png

分层后,上层协议不需要了解下层协议的细节,下层协议不需要了解上层协议的细节

换协议后,只需要搞定层级间的信息加工/解析的细节就好

4.3 真实的网络协议分层,TCP/IP五层网络模型

重点:


应用层

传输层

网络层

数据链路层

物理层

(四层是因为没考虑物理层,软件方面看)


现在了解大概就好,后续深度学习!


4.3.1 应用层

关注数据要怎么用:


礼物拿来自己用还是送人

书本拿来看还是拿来盖泡面

cf0a7978cb3a4152951c1f82d7d2641e.png


4.3.2 传输层

不考虑中间的路径规划,只关注起点是什么,终点是什么


相当于买东西,发货地址与收货地址


我和卖家只关心起点终点,中间怎么传输就交给快递公司就好


37530552cfa5454bb1db532248fa8fba.png


4.3.3 网络层

主要负责两个遥远节点之间的路径规划


例如快递从汕头到北京有很多路线可以走

汕头 -> 深圳 -> 北京

汕头-> 福建 -> 杭州 -> 北京

汕头-> 深圳 -> 杭州 -> 无锡 -> 北京

在众多路径中找一个合适的路径,一般走几步后要重新规划一下


7ba61472044946dca47a740d5bfd8642.png


4.3.4 数据链路层

主要关注的是两个相邻节之间的传输


例如快递在两个相邻地址之间是怎么传输的

飞机,火车,卡车,电瓶…

网络上的相邻节点,就是通过网线/光纤/无线直接连接的设备


8027ee14312a4e9381379bc3b4b38f71.png

4.3.5 物理层

网络通信的基础设施,网线光纤网络接口


网络物件咋组织的约定

网络物件类别的约定

网络上的高速公路:数据的传输硬件上的规定



bcf570d0d69841ec92eac5f9ead6ad24.png

4.3.6 总结


e56e5e680b1f4a3fa1046b58565f0635.png

跟程序员密切相关的是应用层和传输层!

网络编程重点!

4.4 网络分层后,数据的变化 — 封装 & 分用

发送方发送数据,数据从上到下,依次交给对应的协议,进行封装加工

接收方接受数据,数据从下到上,依次交给对应的协议,进行分用解析

在传输层和应用层之间,调用一些协议的API即可


调用下层协议(传输层)


那么就可以将上层协议格式(应用层协议格式)转化为传输层协议的格式


或者将传输层协议格式转化为上层协议格式(应用层协议格式)


4.4.1 图解

94ef0c76ba2a4bdaa1361fc3434d6548.png


4.4.2 例子

简单粗糙的例子,实际上会更复杂细节


小马要通过QQ给远方的老马发一条信息,这条信息在图中发生了什么事情呢?

应用层到传输层:

小马发送给老马“吃饭了没?”,并且打包成应用层数据包


字符串拼接

c9ce14f7041b45dcb39333df1facb0dd.png

应用层调用传输层(API):封装成传输层数据报


与UDP为例:(报头 + 载荷的形式)


字符串拼接

4252d7a22dcf438f99f366f7391d0871.png


为了区分不同字段,引入分隔符~

当然,现实中会更加复杂,如json,xml…

传输层到网络层:

以IP协议为例:


不是代码层面的了,后续会细节讲解!

544d11c24a504cdea3be8b9338f3274c.png


网络层到数据链路层:

以 “以太网” 为例:


要把网络层数据包封装成以太网数据帧


55a777d288954a1eb7df64cbb79016fa.png

mac地址:也叫做物理地址


主机在网络上的位置

mac ==> 描述数据链路层两个相邻节点

IP ==> 描述网络层的路径规划

传输的过程中,mac地址随之变化为对应的相邻节点~


理论上,每个网卡设备都会有一个自己唯一的mac地址,而IP地址不是


数据链路层到物理层

物理层将二进制数据转换为电信号/光信号…进行传输~


8828d811b4384d77b64363463e41b5a9.png


物理层到物理层

物理层之间就通过同一协议直接沟通的,直接解析

物理层到数据链路层

数据链路层调用物理层,将信号转换为二进制序列(以太网数据帧)

ca81294c12ff40c1b6b5c6233f896065.png



数据链路层到网络层

网络层调用数据链路层,将以太网数据帧转换为网络层数据包


去掉帧头帧尾

ac800d396e5d41f49ad0b420314a2653.png

网络层到传输层

传输层调用网络层,将以网络层数据包转换为传输层数据包


去掉报头


24c8012647ed4f98976bfcfef95e9451.png

传输层到应用层

应用层调用传输层API,将传输层数据包转换为应用层数据包


去掉报头

160264f2b6554b058e00c1dd166ed99b.png


应用层数据处理

通过数据包格式(应用层协议内部使用)提取信息

应用层协议没有API,是程序员自己规定的数据格式

当然,一些公司内部使用的API也是会有的

994c4cb3be324ca7be2aee312bb7b71a.png


以上去掉报头过程当然是会采取一些“动作”的


之后是什么协议,对应报头是有标识的

宏观看:


c35cb17f0ba041e4bca22b078620501d.png


这也是交换机和路由器的特点:


交换机:二层转发

路由器:三层转发

有一些特殊交换机可以三层转发,特殊路由器可以二层转发


甚至有更深!


对于群聊,也是类似,我将信息在群聊里


信息(我的qq号,群成员的qq号)发给qq服务器

qq服务器通过这些信息查到对应的ip…,挨个发送给各个成员

(区别于私聊,它经过服务器后转发向多个对象罢了)


目录
相关文章
|
7月前
|
存储 消息中间件 人工智能
对话 TDengine 解决方案中心总经理陈肃:构建技术与市场的桥梁
他是大数据领域的杰出专家,拥有超过十项一作发明专利,是中国通信行业标准《大数据 消息中间件技术要求与测试方法》的重要编写者,并凭借数据中间件领域的突出成就荣获 2019 年“CJK OSS Award”。他是腾讯云 TVP 专家和 TGO 鲲鹏会北京分会会长,以深厚的技术底蕴和领导力推动行业发展。他曾带领团队攻克一个又一个技术难关,从中国移动到亿瑞互动,再到 DataPipeline,无数成功案例背后都有他的身影。如今,他又多了一个新身份——北京涛思数据科技有限公司高级副总裁兼解决方案中心总经理,他就是陈肃。本次采访将带领大家走近陈肃,深入了解他对解决方案创新与技术发展的独到见解。
221 13
|
Web App开发 移动开发 前端开发
技术经验分享:canvas+howler.js解决同页面视频、音频同时播放问题
技术经验分享:canvas+howler.js解决同页面视频、音频同时播放问题
399 0
|
11月前
|
数据挖掘 UED
ClkLog埋点分析系统支持漏斗分析
漏斗分析是基于事件的一种分析模型。 漏斗分析主要是对一个多步骤的场景进行的每一步的转化数据分析。可以理解为是从顶部(广泛数据)到底部(目标数据)逐步筛选和转化分析的过程。
ClkLog埋点分析系统支持漏斗分析
|
10月前
|
移动开发 前端开发 JavaScript
React框架
React是一个用于构建用户界面的JavaScript库,由Facebook开发并于2013年开源,目前在前端开发领域得到了广泛的应用。
|
算法 数据挖掘 数据库
表格存储低成本向量检索服务助力 AI 检索
本文阐述了阿里云表格存储(Tablestore)如何通过其向量检索服务应对大规模数据检索的需求,尤其是在成本、规模和召回率这三个关键挑战方面。
294 13
|
监控 容灾 关系型数据库
Hologres 的高可用性与容灾解决方案
【9月更文第1天】随着企业对实时数据分析的需求不断增加,数据仓库不仅要具备高性能的查询能力,还需要具备高可用性和灾难恢复的能力。Hologres 作为一款基于 PostgreSQL 的实时数仓服务,不仅提供了强大的在线分析处理(OLAP)功能,还内置了一系列高可用性和容灾机制。本文将详细介绍 Hologres 的高可用架构,并提供实现容灾备份的具体方案。
246 7
|
机器学习/深度学习 人工智能 TensorFlow
神经网络入门到精通:Python带你搭建AI思维,解锁机器学习的无限可能
【9月更文挑战第10天】神经网络是开启人工智能大门的钥匙,不仅是一种技术,更是模仿人脑思考的奇迹。本文从基础概念入手,通过Python和TensorFlow搭建手写数字识别的神经网络,逐步解析数据加载、模型定义、训练及评估的全过程。随着学习深入,我们将探索深度神经网络、卷积神经网络等高级话题,并掌握优化模型性能的方法。通过不断实践,你将能构建自己的AI系统,解锁机器学习的无限潜能。
228 0
经验大分享:Sched_Boost小结
经验大分享:Sched_Boost小结
280 0
cxa
|
存储 消息中间件 NoSQL
分布式队列Celery入门
Celery 是一个简单、灵活且可靠的,处理大量消息的分布式系统,并且提供维护这样一个系统的必需工具。它是一个专注于实时处理的任务队列,同时也支持任务调度。Celery 是语言无关的,虽然它是用 Python 实现的,但他提供了其他常见语言的接口支持。
cxa
7101 0
|
物联网 开发工具 开发者
玄铁RISC-V处理器入门与实战-平头哥RISC-V 工具链-剑池CDK开发工具
玄铁RISC-V处理器入门与实战-平头哥RISC-V 工具链
651 1

热门文章

最新文章