【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…,挨个发送给各个成员

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


目录
相关文章
|
测试技术
手机验证码的测试用例梳理
手机验证码的测试用例梳理
1217 0
手机验证码的测试用例梳理
|
Java Serverless
Serverless 实战 —— 快速搭建 SpringBoot 应用
前言 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute): 函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计算资源,并以弹性伸缩的方式运行用户代码,而用户只需根据实际代码运行所消耗的资源进行付费。
14347 0
|
存储 编解码 自然语言处理
谈谈元数据和数据字典的区别
今天在群里有朋友讨论元数据和数据字典的问题,元数据是解释数据的数据,数据字典也能解释数据,不都是解释数据的吗,怎们不同呢?接下来咱们就简单的讨论下这个问题,希望读完本文再没有这种困惑。
谈谈元数据和数据字典的区别
|
存储 设计模式 测试技术
浅谈UI自动化必备的PO模式
PO模式的全名叫做page Object:页面-对象模式。简单的说就是:一个页面是一个类,元素在页面中,所以每个元素的定位信息是这个类中的一个变量;这个页面的常规业务操作是这个类中的一个个成员方法。PO模式是自动化测试框架中很重要的一种设计模式。
1850 1
浅谈UI自动化必备的PO模式
|
Linux 开发工具 git
Linux源码下载
Linux源码下载
Linux源码下载
|
Web App开发 JavaScript 前端开发
Win + R 便捷打开常用网站
根据上一篇 Win + R 打开常用软件及文件夹 可以让电脑桌面非常简洁、干净,便捷指令快速开启应用程序、常用文件夹。这篇就介绍 `Win + R` 便捷打开常用网站。
|
人工智能 算法 5G
High&NewTech:元宇宙(metaverse)的简介(多角度理解与探讨)、发展历史、现状与未来
High&NewTech:元宇宙(metaverse)的简介(多角度理解与探讨)、发展历史、现状与未来
High&NewTech:元宇宙(metaverse)的简介(多角度理解与探讨)、发展历史、现状与未来
|
Kubernetes Linux Docker
K8s使用kubeadm搭建测试单master节点案例(含整套部署流程)
K8s使用kubeadm搭建测试单master节点案例(含整套部署流程)
K8s使用kubeadm搭建测试单master节点案例(含整套部署流程)
|
Python
Python在高等数学中的运用
高等数学应用非常广,基本上涉及到函数的地方都要用到微积分,还有在几何方面也是如此,计算机的应用让我们能简单快速处理各种高等数学中的计算,比如极限、导数、积分、微分方程等的计算。
581 0
Python在高等数学中的运用