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

news2024/12/24 2:23:32

文章目录

  • 前言
  • 一、网络协议分层
  • 二、数据的网络传输
    • 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/514897.html

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

相关文章

Python+Selenium入门级自动化测试脚本编写

一、安装Selenium 安装selenium有三种方式,主要有python下的pip命令安装或者是直接下载安装包进行安装本地文件夹以及直接用pycharm直接安装相应的selenium版本。推荐使用pycharm直接配置安装相应selenium版本(此办法比pip更好用,且不用担心报…

大数据 | (六)Hadoop集群启停脚本

知识目录 一、前言二、Hadoop集群启停脚本2.1 启停脚本及其背景2.2 使用方法 三、jps脚本四、关机脚本五、结语 一、前言 hello,大家好!这篇文章是我在使用Hadoop集群时使用到的启停脚本的详细内容与感想,希望能帮助到大家! 本篇…

【ENVI】SEBS模型计算蒸散发

详细内容请关注微信公众号:夫也的笔记 #01. ENVI软件SEBS插件介绍 ENVI是利用一种能够提供完整图像处理的功能强大的结构性程序设计语言,ENVI的运行需要IDL的支持,IDL可以为数据的交互式分析和可视化提供一个计算环境,在IDL开发环…

【数据库】SQL Server2022安装教程

大家好,我是雷工! 最近需要安装SQLServer数据库,此次安装的是sql_server_2022_developer版本,以下记录安装及配置过程。大家可以参考指正。 一、安装SQL Server步骤: 1、官网下载 SQL Server 2022 Developer。 2、打…

【逆向】PE文件解析

文章目录 PE文件DOS头部PE/NT头解析区段头/区块表解析数据目录表(存放在某个区段)1. 导出表2. 导入表3. 重定位表 PE文件 PE文件:PE文件是在windows平台可执行的文件。包括:.exe(可执行程序),.…

20230511干掉CV1826的buildroot系统的串口用户名和密码root

20230511干掉CV1826的buildroot系统的串口用户名和密码root 2023/5/11 11:56 https://blog.csdn.net/u011342132/article/details/126116391 buildroot跳过密码登录 1、全新原始编译: rootrootrootroot-X99-Turbo:~$ rootrootrootroot-X99-Turbo:~$ cd smartpen/ r…

【集群模式】执行MapReduce程序-wordcount

因为是在hadoop集群下通过jar包的方式运行我们自己写的wordcount案例,所以需要传递的是 HDFS中的文件路径,所以我们需要修改上一节【本地模式】中 WordCountRunner类 的代码: //5.设置统计文件输入的路径,将命令行的第一个参数作为输入文件的…

超细详解MyBatis操作数据库(1)

文章目录 1.MyBatis 是什么?2.回顾 JDBC 的操作流程3.MyBatis 在整个框架中的定位4.MyBatis的使用4.1创建数据库和表4.2 添加MyBatis框架支持4.2.1 老项目添加MyBatis4.2.2 新项目添加MyBatis 4.3 配置连接字符串和MyBatis4.3.1 配置连接字符串4.3.2 配置 MyBatis 中…

【一】设计模式~~~创建型模式~~~简单工厂模式(Java)

【学习难度:★★☆☆☆,使用频率:★★★☆☆】 1.1. 模式动机 考虑一个简单的软件应用场景,一个软件系统可以提供多个外观不同的按钮(如圆形按钮、矩形按钮、菱形按钮等), 这些按钮都源自同一个…

学习之-spring cache缓存框架应用Redis

本文章用于个人学习记录 一、前言 1、SpringCache是Spring提供的一个缓存框架,在Spring3.1版本开始支持将缓存添加到现有的spring应用程序中,在4.1开始,缓存已支持JSR-107注释和更多自定义的选项。Spring 从 3.1 开始定义了 org.springframe…

设备树dtb文件的格式分析

设备树dtb文件的格式分析 文章目录 设备树dtb文件的格式分析DTB文件格式1.header头部1.magic2.totalsize3.off_dt_struct4.off_dt_strings字符串的偏移量5.off_mem_rsvmap 内存保留映射的偏移量6.version 格式版本7.last_comp_version最后兼容版本8.boot_cpuid_phys 我们正在启…

SpringBoot ( 五 ) 封装响应数据

2.6.业务处理 这是通过 Spring 在 Controller中注入Service模型层 而在 Service模型层 结合 Mybatis / Mybatis-Plus 进行数据加工, 数据持久化 2.7.封装响应值 将 业务处理得到数据封装到 Model作用域中, 伴随着转页将信息传递到页面 2.7.1.传值容器 2.7.1.1.Model 在Cont…

【Qt编程之Widgets模块】-001:QButtonGroup抽象容器

1.QButtonGroup简介 QButtonGroup提供了一个抽象容器,可以将按钮小部件放入其中。它不提供此容器的可视化表示,而是管理组中每个按钮的状态。 互斥按钮组,将关闭除已单击的按钮外的所有可选中(可切换)按钮。默认情况下…

七个合法学习黑客技术的网站,让你从萌新成为大佬

合法的学习网站,以下这些网站,虽说不上全方位的满足你的需求,但是大部分也都能。能带你了解到黑客有关的技术,视频,电子书,实践,工具,数据库等等相关学习内容。以上这些网站我都是用…

项目调研 | Loopring研究报告

一、项目简介及愿景 Loopring协议是一个专为应用程序开发的 zkRollup 协议、一个中继器、一个 L2 非托管交易所、一个智能钱包。用户可以在其中使用、交易和存储资产,同时让资产获得增长。 上述Loopring这些Title具体详情如下: 作为协议,Loop…

latex论文写作实用工具

从pdf定位到latex:ctrl 鼠标左键从latex定位到pdf:ctrl alt jVscode写latex时如何自动换行 最简单的方法就是使用快捷 Alt z 公式识别 SiimpleTex latex格式化 下载链接 在VSCode用户Json文件中添加如下: 表格转换工具 链接 Excel…

YOLOv5改进系列(3)——添加CA注意力机制

【YOLOv5改进系列】前期回顾: YOLOv5改进系列(0)——重要性能指标与训练结果评价及分析 YOLOv5改进系列(1)——添加SE注意力机制 YOLOv5改进系列(2)——添加CBAM注意力机制 目录 &#x1f68…

【Linux】Redis高可用概述1(RDB和AOF的备份恢复)

在web服务器中,高可用是指服务器可以正常访问的时间,衡量的标准是在多长时间内可以提供正常服务 (99.9%、99.99%、99.999% 等等)。 但是在Redis语境中,高可用的含义似乎要宽泛一些,除了保证提供正常服 务(如…

优惠卷秒杀——分布式锁

在集群的模式下,有多个jvm,每个jvm内部有他自己的锁,导致并行执行存在线程安全问题 分布式锁:满足分布式系统或集群模式下多线程可见并且互斥的锁 基于Redis实现分布式锁 基于redis锁的初级版本 public interface ILock {/*** …

第十四届蓝桥杯C++--A组题解(更新中)

本来考场上做完想着这回图一乐,打打暴力混个省奖得了,看完民间题解感觉跟自己估计的差不多,应该挺寄的,没想到出分捡了个省一,喜提弱省省一倒数 这篇博客把自己会的题先放上来,其他的题慢慢补,好…