抓住你了!
JavaEE & 协议 & 信息是如何在一个机器传到另一个机器的
1. 局域网
以机房为例,多个机器之间可以进行联机,这就相当于一个局域网
-
通过网线直接连接实现的联机也是局域网
-
通过交换机也能进行联机,这也是局域网
电脑越多,用网线直连就越复杂~- 区别于集线器:集线器是将一条网线转变成多条网线,多条网线转变成一条网线,这是交换机原始的版本,有很大弊端,如信息同时汇集时会冲突!
- 这里的交换机也可以换成路由器:
不难看出,局域网顾名思义就是局部的区域可以进行联机。
- 一个学校的机房的机器必然无法联机到另一个学校的机房的机器
2. 广域网
现在的传奇被我们嘲笑,但是初期的传奇却席卷全国。那是因为,这个游戏在那个年代实现里不同地区的玩家进行多人联机!那个时候的网吧火爆了。
而实现的方式就是:广域网的网络组建 — 规模大
-
即通过一些交换机路由器搭建一个网络环境,这需要一些拥有强大的专业知识和技能的人:网管
- 不是网吧管理员,而是网络管理员!
-
如果你学习开发,一般也会接触到,可能也需要学习如何组网~
之后又进入了移动互联网阶段,无线联网~
- 手机…
3. IP与端口号(初识)
IP地址:标识一台主机的位置,即主机在互联网上的具体位置
- 本质上是一个4字节的32位整数
- 往往写成“点分十进制”的形式
- 如:192.168.137.1
- 四个部分,每个部分一个字节
命令行输入ipconfig:
端口号:标识主机上的哪个程序 ,区别一个主机上的应用程序
4. 协议
- 协议即约定
- 发送方发送的信息,有特定的格式,而接收方应如何解读这些信息呢,就是通过协议
- 发送方发出的信息不仅仅要包含“核心数据”,还要包含IP,端口号…等等很多信息,那么这些信息的组织格式是必要存在的!
网络的传输本质上是通过 网线/光纤/无线(电磁波) 以电信号/光信号来进行传输的
- 光信号也是要转化为电信号
- 不同频率来代表1与0
- 电信号就是高低电平(高低电压)表示的010101…
好的,现在我们知道怎么传输这些010101…了,那么我们要怎么处理这些信息呢?
我们需要约定好,“你传过来的信息是什么什么格式,我就以什么什么格式来理解”
- 这就是协议
4.1 协议分类分层
- 一个大的协议非常复杂,我们可以拆分为多个协议
那么就有一些协议功能类似,一些协议功能不同
- 分类
而对于不同功能的协议,就安排在不同信息处理的不同阶段
- 分层
而分层,也需要约定层级与层级之间的调用关系
- 要求不能跨层级调用
- 也就是说,一个小协议其实就只是大协议“这条流水线”的一个小工程罢了
- 而流水线的工程之间是不能越级的
- 上层调用下层
- 下层给上层提供支持
调用的时候,格式就会发生改变
- 信息传到下层,加工成下层协议格式
- 信息传到上层,解析下层协议格式为上层协议格式
例如来自历史课本的一张图:
- 一般也不会跨级管理,这样管理成本大
4.2 协议分层的好处
- 分层后,上层协议不需要了解下层协议的细节,下层协议不需要了解上层协议的细节
- 换协议后,只需要搞定层级间的信息加工/解析的细节就好
4.3 真实的网络协议分层,TCP/IP五层网络模型
重点:
- 应用层
- 传输层
- 网络层
- 数据链路层
- 物理层
(四层是因为没考虑物理层,软件方面看)
现在了解大概就好,后续深度学习!
4.3.1 应用层
关注数据要怎么用:
- 礼物拿来自己用还是送人
- 书本拿来看还是拿来盖泡面
- …
4.3.2 传输层
不考虑中间的路径规划,只关注起点是什么,终点是什么
-
相当于买东西,发货地址与收货地址
-
我和卖家只关心起点终点,中间怎么传输就交给快递公司就好
4.3.3 网络层
主要负责两个遥远节点之间的路径规划
- 例如快递从汕头到北京有很多路线可以走
- 汕头 -> 深圳 -> 北京
- 汕头-> 福建 -> 杭州 -> 北京
- 汕头-> 深圳 -> 杭州 -> 无锡 -> 北京
- …
在众多路径中找一个合适的路径,一般走几步后要重新规划一下
4.3.4 数据链路层
主要关注的是两个相邻节之间的传输
- 例如快递在两个相邻地址之间是怎么传输的
- 飞机,火车,卡车,电瓶…
网络上的相邻节点,就是通过网线/光纤/无线直接连接的设备
4.3.5 物理层
网络通信的基础设施,网线光纤网络接口
- 网络物件咋组织的约定
- 网络物件类别的约定
网络上的高速公路:数据的传输硬件上的规定
4.3.6 总结
- 跟程序员密切相关的是应用层和传输层!
- 网络编程重点!
4.4 网络分层后,数据的变化 — 封装 & 分用
- 发送方发送数据,数据从上到下,依次交给对应的协议,进行封装加工
- 接收方接受数据,数据从下到上,依次交给对应的协议,进行分用解析
在传输层和应用层之间,调用一些协议的API即可
-
调用下层协议(传输层)
-
那么就可以将上层协议格式(应用层协议格式)转化为传输层协议的格式
-
或者将传输层协议格式转化为上层协议格式(应用层协议格式)
4.4.1 图解
4.4.2 例子
简单粗糙的例子,实际上会更复杂细节
- 小马要通过QQ给远方的老马发一条信息,这条信息在图中发生了什么事情呢?
- 应用层到传输层:
-
小马发送给老马“吃饭了没?”,并且打包成应用层数据包
- 字符串拼接
- 字符串拼接
-
应用层调用传输层(API):封装成传输层数据报
与UDP为例:(报头 + 载荷的形式)
- 字符串拼接
- 为了区分不同字段,引入分隔符~
- 当然,现实中会更加复杂,如json,xml…
- 传输层到网络层:
以IP协议为例:
- 不是代码层面的了,后续会细节讲解!
- 网络层到数据链路层:
以 “以太网” 为例:
- 要把网络层数据包封装成以太网数据帧
mac地址:也叫做物理地址
- 主机在网络上的位置
- mac ==> 描述数据链路层两个相邻节点
- IP ==> 描述网络层的路径规划
传输的过程中,mac地址随之变化为对应的相邻节点~
理论上,每个网卡设备都会有一个自己唯一的mac地址,而IP地址不是
- 数据链路层到物理层
物理层将二进制数据转换为电信号/光信号…进行传输~
- 物理层到物理层
- 物理层之间就通过同一协议直接沟通的,直接解析
- 物理层到数据链路层
数据链路层调用物理层,将信号转换为二进制序列(以太网数据帧)
- 数据链路层到网络层
网络层调用数据链路层,将以太网数据帧转换为网络层数据包
- 去掉帧头帧尾
- 网络层到传输层
传输层调用网络层,将以网络层数据包转换为传输层数据包
- 去掉报头
- 传输层到应用层
应用层调用传输层API,将传输层数据包转换为应用层数据包
- 去掉报头
- 应用层数据处理
- 通过数据包格式(应用层协议内部使用)提取信息
- 应用层协议没有API,是程序员自己规定的数据格式
- 当然,一些公司内部使用的API也是会有的
以上去掉报头过程当然是会采取一些“动作”的
- 之后是什么协议,对应报头是有标识的
宏观看:
这也是交换机和路由器的特点:
- 交换机:二层转发
- 路由器:三层转发
有一些特殊交换机可以三层转发,特殊路由器可以二层转发
甚至有更深!
对于群聊,也是类似,我将信息在群聊里
- 信息(我的qq号,群成员的qq号)发给qq服务器
- qq服务器通过这些信息查到对应的ip…,挨个发送给各个成员
(区别于私聊,它经过服务器后转发向多个对象罢了)
文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆!网络编程已经更完,支持支持呗 ^ V ^
后续将详细讲解一些协议,敬请期待!