您现在的位置是:首页 >技术杂谈 >Java【网络编程1】什么是 TCP/IP 五层模型? 数据传输的封装和分用?网站首页技术杂谈
Java【网络编程1】什么是 TCP/IP 五层模型? 数据传输的封装和分用?
前言
?各位读者好, 我是小陈, 这是我的个人主页
?小陈还在持续努力学习编程, 努力通过博客输出所学知识
?如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽
? 希望我的专栏能够帮助到你:
JavaSE基础: 从数据类型 到 类和对象, 封装继承多态, 接口, 综合小练习图书管理系统等
Java数据结构: 顺序表, 链表, 二叉树, 堆, 哈希表等 (正在持续更新)
JavaEE初阶: 多线程, 网络编程, html, css, js, severlet, http协议, linux等(正在持续更新)
之前几篇文章陆续介绍了 Java 多线程的相关知识, 从本篇开始陆续分享网络原理, 网络编程的相关知识
提示:是正在努力进步的小菜鸟一只,如有大佬发现文章欠佳之处欢迎批评指点~ 废话不多说,直接上干货!
什么是协议?
协议 是网络通信中非常核心的部分, 协议规定了发送方和接送方之间的通信"规则", 最终体现为网络上传输的数据包格式
为什么需要协议?
计算机之间的传输媒介是通过光信号或电信号, 有高低电平来表示0,1这两个二进制数, 要想让对方知道自己发的一串二进制想表达什么意思, 就得约定好数据的格式
由于网络环境十分复杂, 那么相应的, 网络协议就非常复杂, 于是就有了“协议分层”, 把功能和作用类似的协议归为一类, 然后再根据类别分层
分层有什么作用?
定义好了两层之间的接口规范, 相当于约定好了层级之间的关系, 双方遵循各层的协议来对接
上层协议调用下层协议, 所以上层相当于接口的使用类, 下层为上层提供服务, 所以下层相当于接口的实现类. 使得上下层不需要关心相互之间的细节, 降低耦合度
注意上下层必须是紧邻的, 不能跨层
实际应用最广泛的就是 TCP/IP 五层网络模型
一、网络协议分层
TCP/IP 是一组协议的代名词, 其中还包含很多协议
应用层 : 负责应用程序之间的沟通
这一层关注 : 传输的数据要干啥用
传输层 : 负责两台主机之间的数据传输, 传输层协议主要是 TCP 和 UDP 协议
这一层关注 : 传输的数据是否有丢失
网络层 : 负责地址管理和路由选择, 网络层协议主要是 IP 协议
在IP协议中, 通过IP地址标识一台主机, 通过路由表的方式规划处两台主机数据传输的路线
这一层关注 : 发送方通过哪个路由传递到接收方
数据链路层 : 负责设备之间的数据帧的传输和识别, 数据链路层协议主要是以太网
这一层关注 : 数据传输路径上相邻节点(通过网线, 光纤…)链接的设备之间的数据传输
物理层 : 负责光信号电信号的传输
其实就是规范网络通信的基础硬件设备(网线, 光纤, 网络接口等等)的规格, 标准
操作系统内核封装已经封装好了下四层, 我们Java程序员当然改变不了操作系统内核, 那么我们只需要重点关注应用层, 由于传输层是给应用层提供网络编程接口的, 所以也需要对传输层协议有一定的了解
随着现在网络设备技术的不断发展, 也出现了很多 3 层或 4 层交换机, 4 层路由器
二、数据的网络传输
有了协议分层的认识, 数据如何在网络上进行传输的呢? 封装 和 分用
发送方 : 发送数据, 按层次从上到下, 把数据交给下层, 依次封装
接收方 : 接收数据, 按层次从下到上, 把数据交给上层, 依次分用(解析)
就像订外卖, 商家出餐要逐步打包, 客户拿到外卖要逐步拆包装
相关概念补充 :
数据包 == 数据报 == 数据帧, 只是不同的协议层对数据包有不同的称谓,
封装 : 应用层数据通过协议栈发到网络上时, 每层协议都要加上一个数据首部称为首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息
分用 : 数据封装成帧后发到传输介质上, 到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
下面以 vx 发消息为例, 先不考虑交换转发, 简单介绍封装和分用的过程, 细节在后续的文章中介绍
1, 封装
1, 应用层(vx应用程序) 拿到数据(发送的消息)
, 把这条消息封装成应用层数据包
应用层数据包中存在很多字段, 包含发送方信息, 接收方信息, 发送时间等等, (这个数据包的格式是由vx的程序员规定的)
2, 传输层拿到应用层数据包
, 要加上一个报头, 以 UDP 协议为例, 就是 UDP 报头, 封装成 UDP 数据报
应用层数据包作为 UDP 数据报的载荷(数据部分)
UDP 报头中有很多重要属性, 最关键的是源端口号和目的端口号, 其他细节暂不讨论
3, 网络层拿到UDP 数据报
, 要加上一个报头, 以 IP 协议为例, 就是 IP 报头, 封装成 IP 数据报
UDP 数据报作为 IP 数据报的载荷(数据部分)
IP 报头中有很多重要属性, 最关键的是源 IP 和目的 IP , 其他细节暂不讨论
4, 数据链路层拿到IP数据报
, 要加上一个帧头, 以以太网协议为例, 就是以太网帧头, 封装成 以太网数据帧
(其实还有帧尾, 图中没画, 暂不讨论)
IP 数据报作为以太网数据帧的载荷(数据部分)
以太网帧头中包含很多重要属性, 最关键的是源 mac 地址和目的 mac地址, 其他细节暂不讨论
5, 物理层拿到以太网数据帧, 字符串本质也是 0, 1 组成的二进制序列, 把这个二进制序列转化成光信号/电信号进行传输
以上就是封装的大致过程, 可以看到数据从上层到下层依次进行了"加工包装"
2, 分用
分用的过程和封装正好相反, 是从下层到上层依次"拆掉包装"
1, 物理层接收光信号/电信号, 进行解析, 得到 0, 1 组成的二进制序列
2, 数据链路层接收物理层传递的数据, 通过以太网协议解析, 去掉帧头帧尾, 取出载荷
3, 网络层接收数据链路层传递的数据, 通过 IP 协议解析, 去掉报头, 取出载荷
4, 传输层接收到网络层传递的数据, 通过 UDP 协议解析, 去掉报头, 取出载荷
5, 应用层接收到传输层传递的数据, 由 vx 这个应用程序解析, 取出发送方发送的消息这个字段
3, 实际情况
网络环境十分复杂, 数据的传输可能不是"直达"的, 会经历很多结点来转发
发送方的主机是从应用层封装到物理层
如果数据传输途中由交换机接收信息, 交换机会从物理层分用到数据链路层, 然后从数据链路层再封装到物理层, 继续转发
由于以太网帧头中包含源 mac 地址 和目的 mac 地址, 所以交换机会在封装时, 更改源 mac 地址 和目的 mac 地址
如果数据传输途中由路由器收到信息, 路由器会从物理层分用到网络层, 然后从物理层再封装到网络层, 继续转发
由于 IP 报头中包含源 IP 地址和目的 IP 地址, 路由器会根据 IP 协议的寻路操作规划路径, 更改源 IP 地址和目的 IP 地址, 源 mac 地址 和目的 mac 地址
最后由接收方主机从物理层分用到应用层
总结
以上就是本篇的全部内容, 主要介绍了 TCP/IP 五层网络模型, 其中各层都有各层协议的分工, 也简单介绍了数据在网络上传输的方式 : 封装 和分用
很多细节将会在后续的文章中补充介绍
如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦???~
上山总比下山辛苦
下篇文章见