Java【网络原理1】什么是 TCP/IP 五层模型? 数据传输的封装和分用?

news2024/11/28 15:53:39

文章目录

  • 前言
  • 一、网络协议分层
  • 二、数据的网络传输
    • 1, 封装
    • 2, 分用
    • 3, 实际情况
  • 总结


前言

📕各位读者好, 我是小陈, 这是我的个人主页
📗小陈还在持续努力学习编程, 努力通过博客输出所学知识
📘如果本篇对你有帮助, 烦请点赞关注支持一波, 感激不尽
📙 希望我的专栏能够帮助到你:
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 五层网络模型, 其中各层都有各层协议的分工, 也简单介绍了数据在网络上传输的方式 : 封装 和分用

很多细节将会在后续的文章中补充介绍

如果本篇对你有帮助,请点赞收藏支持一下,小手一抖就是对作者莫大的鼓励啦😋😋😋~


上山总比下山辛苦
下篇文章见

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

文本三剑客:sed编辑器

sed编辑器 sed是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中。 工作流程 sed 的工作流程主要…

Python时间模块:time和datetime的区别与用法

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 目录标题 前言一. Python中表示时间的两种方式:二. time三. datetime1. datetime.datetime2.datetime.timedelta 尾语 💝 一. Python中表示时间的两种方式: 时间戳:相对于197…

Java PECS(Producer Extends Consumer Super)原则

在看 Alibaba 开发手册时遇到 PECS 原则,刚开始阅读时感觉比较绕,也搜索了一些博文参考,个人觉得 Stackoverflow 的这篇文章比较实用 —— What is PECS (Producer Extends Consumer Super)? 后面结合 JDK 源码梳理了下 // java/util/List…

电脑压缩包文件不见了怎么办?2种办法轻松找回电脑丢失文件!

一般情况下,为了节省磁盘空间或者传送文件时能够更快点,我们都会选择把文件进行压缩,这样会更加方便。 但时间一长,由于各种各样的原因,比如: 清理积累下来的压缩包时不小心把需要的压缩文件删除了&#x…

Angular与PDF之三: 服务器端渲染PDF

一、Angular PDf server 端渲染 1. 环境准备 _ _ ____ _ ___/ \ _ __ __ _ _ _| | __ _ _ __ / ___| | |_ _|/ △ \ | _ \ / _ | | | | |/ _ | __| | | | | | | / ___ \| | | | (_| | |_| | | (_| | | | |___|…

RK 平台MIPI 点屏注意事项

转自:https://www.cnblogs.com/chorm590/p/11658360.html rk 平台关于 MIPI 屏幕的点屏流程已经非常完善了,基本上只要确定了硬件没问题、接线没问题、屏幕没问题,再稍稍配置一下 dtsi 里的参数就可以的了。 MIPI 点屏流程大致可以概括为以下…

一步一步教你写kubernetes sidecar

什么是sidecar? sidecar,直译为边车。 如上图所示,边车就是加装在摩托车旁来达到拓展功能的目的,比如行驶更加稳定,可以拉更多的人和货物,坐在边车上的人可以给驾驶员指路等。边车模式通过给应用服务加装一…

Python命名空间和作用域

命名空间定义了在某个作用域内变量名和绑定值之间的对应关系,命名空间是键值对的集合,变量名与值是一一对应关系。作用域定义了命名空间中的变量能够在多大范围内起作用。 命名空间在python解释器中是以字典的形式存在的,是以一种可以看得见…

OCPC系列三 - 展开说说广告业务及算法介绍

系列分享: OCPC系列 - OCPC介绍扫盲贴来啦_高阳很捷迅的博客-CSDN博客 OCPC系列 - PID算法(理解PID算法)-比例控制算法、积分控制算法、微分控制算法_高阳很捷迅的博客-CSDN博客 名词解释 先简单介绍下以下名称解释,方便下面阅…

Flink基础介绍-1 概述

Flink基础介绍-1 概述 一、Flink介绍1.1 批处理计算引擎1.2 流式计算引擎1.3 批处理和流处理 一、Flink介绍 Flink 是为分布式、高性能、随时可用以及准确的流处理应用程序打造的开源流处理框架。Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状…

PDF转HTML格式怎么弄?将PDF转换为HTML的三种简便方法

PDF和HTML是两种常见的文档格式,它们在用途和外观上有很大的差异。然而,令人惊讶的是,这两种看似毫不相关的格式实际上可以相互转换。 一些网页编辑人员在更新网站内容时,通常会先将内容保存为PDF文件,然后在发布时将…

软件测试——性能测试

性能测试基础 为什么要进行性能测试(WHY)(最重要) 应用程序是否能够很快的响应用户的要求?应用程序是否能处理预期的用户负载并有盈余能力?应用程序是否能处理业务所需要的事务数量?在预期和非…

全网最详细,性能测试各种测试场景分析+性能测试基准测(超细总结)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 面对日益复杂的业…

【JAVA程序设计】(C00135)基于Servlet+jsp的旅游管理系统

基于Servletjsp的旅游管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 本项目为基于Servletjsp的旅游管理系统:本项目分为二种角色: 管理员: 用户管理(增删改查)、线路管理(增删改查)、景点管…

对SRC并发漏洞挖掘的思考

对SRC并发漏洞挖掘的思考 1.burpsuite Turbo插件使用2.并发点赞测试3.并发验证码测试4.某代金券逻辑测试5.有限制的并发验证码绕过6.对于并发漏洞的思考 1.burpsuite Turbo插件使用 Turbo Intruder是一个用于发送大量HTTP请求并会分析其结果的Burp Suite扩展。它旨在补充Burp …

实景三维浪潮翻涌,新技术“席卷”石家庄!

5月11日,“全自主、全流程、全覆盖”2023实景三维新技术研讨会石家庄站暨航测与遥感学术交流会在石家庄凯旋金悦大酒店圆满举行。 本次会议由中国测绘学会、中国地理信息产业协会指导,河北省测绘学会、河北省地理信息产业协会主办,武汉大势智…

Grafana安装、升级与备份(02)

一、安装Grafana软件包 Grafana部署非常简单,直接使用yum命令从官网拉到安装再启动就可以了,本次使用的grafana版本为9.5.0 官网下载地址:Download Grafana | Grafana Labs # wget yum install -y https://dl.grafana.com/oss/release/grafana-9.5.0-1.x86_64.rpm # yum …

js:正则表达式常用方法总结test、exec、match、matchAll、replace、replaceAll、search

文章目录 正则使用testmatch/matchAll不加g加ggroup 的使用 matchAll不加g加g exec不加g加g searchreplace 正则使用 常用的几种方法有:test、exec、match、matchAll、replace、replaceAll、search test // 匹配返回true,不匹配false /e/.test("…

高通摄像头打不开报错SOF Freeze!

目录 报错日志 代码分析 报错日志 E/mm-camera( 647): <MCT ><ERROR> 95: mct_bus_sof_thread_run: Session 3: Hinting SOF freeze to happen. Sending event to dump infoE/mm-camera( 647): <MCT ><ERROR> 57: server_debug_dump_dat…

大模型来了,自动驾驶还远吗?关键看“眼睛”

感知系统是自动驾驶最重要的模块之一&#xff0c;被视为智能车的“眼睛”&#xff0c;对理解周围环境起到至关重要的作用。随着深度学习以及传感器技术的发展&#xff0c;感知系统呈现出迅猛的发展趋势&#xff0c;涌现出各种新技术&#xff0c;性能指标不断提升。本文将围绕感…