【剧前爆米花--爪哇岛寻宝】TCP/IP协议以及在网络传输过程中的封装与分用

news2024/11/18 7:52:58

作者:困了电视剧

专栏:《JavaEE初阶》

文章分布:这是一篇关于网络初识的文章,在这篇文章中讲解了TCP/IP协议的主要内容和砸在网络传输过程中的封装和分用,希望对你有所帮助!

 

目录

TCP/IP五层模型 

应用层

传输层

网络层

数据链路层

物理层

封装和分用

简易的封装过程

应用层

传输层

​编辑传输层到网络层

网络层到数据链路层

数据链路层到物理层

数据的传输过程


TCP/IP五层模型 

TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇。
TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

接下来我将以我在淘宝商家买一件东西来进行举例说明。 

应用层

应用层 :负责应用程序间沟通,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程访问协议(Telnet )等。我们的网络编程主要就是针对应用层。

关注的是传输过来的数据,具体是用来干什么的。 

传输层

传输层 :负责两台主机之间的数据传输。如传输控制协议 (TCP) ,能够确保数据可靠的从源主机发送到目标主机。

这一层负责的内容是,我和淘宝商家并不关心物品从我的位置和商家位置之间是如何传输的,我们只关心起点和终点,中间的过程并不关心,只要在规定时间送到就行。

网络层

网络层 :负责地址管理和路由选择。例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router )工作在网路层。

主要负责的是两个遥远节点之间的路径规划。

举个栗子:比如我的快递是上海到西安,那我可以按照上海-->西安的路线走,也可以上海-->南京-->西安,也可以上海-->苏州-->徐州-->西安等等,这就是这一层负责的内容。 

数据链路层

数据链路层 :负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步 ( 就是说从网线上检测到什么信号算作新帧的开始) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机( Switch )工作在数据链路层。

主要关注的是两个相邻节点之间的传输。

就以上海-->南京-->西安这条路线为例,我可以从上海到南京乘火车,南京到西安乘高铁,这一层主要负责的就是这一问题。 

物理层

物理层 :负责光 / 电信号的传递方式。比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同轴电缆( 现在主要用于有线电视 ) 、光纤,现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub )工作在物理层。

物理层就是网络通信的基础设施,比如网线,光纤,网络接口等,即网络上的高速公路。

封装和分用

在协议分层的背景下,数据是如何通过网络进行传输的?

发送方发送数据,要把数据从上到下依次交给对应的层次的协议,进行封装。

接收方接收数据,要把发来的数据包从下到上依次交给对应的层次的协议,进行解析。

简易的封装过程

比如我现在给我的一个同学用QQ发一个消息,我在2023年4月27日12:00通过聊天框发了一句“哥几个今晚出不出去干饭”这条信息。

应用层

首先,应用层(qq应用程序)拿到用户数据后,进行封装,封装成应用层数据包,这里的应用层数据包是由研发qq这一软件的程序员决定的,在这里我们先假定需要的是我和同学的QQ号,发消息的时间和发的消息,那么此时封装成的数据包就是:

当然,为了区分这些字段,可能会引入分隔符或者长度信息等来进行界定。

应用层完成封装后就把这个数据包发送给传输层。

传输层

传输层会拿到这个数据包,同时如果作为接收端,应用层要调用传输层提供的api来处理这个数据。

传输层有很多协议,最典型的是TCP和UDP,此处以UDP来进行举例,UDP会对上述数据包再进行封装,此时这个协议会在这个载荷的基础上再加一个存储源端口和目的端口的报头(在这里,载荷就是上一层传来的数据包,而我要新添加的端口信息就是报头),所以这一步这个数据包就会变成:

传输层到网络层

UDP数据报已经有了,接下来会将其交给网络层,由网络层的协议对其进行进一步的封装,网络层最常见的协议就是IP协议,上述UDP数据报到达网络层后会添加IP协议的报头。

网络层到数据链路层

这一层用的最典型的协议叫做以太网(数据链路层 + 物理层),这个协议会在由网络层传来的载荷上封装一个以太网帧头和一个以太网帧尾,以太网帧头会放入源mac地址和目的mac地址

mac地址也叫作物理地址,是描述一个主机在网络上的位置,他的功能和ip很相似,但是他们具有不同的作用,ip是用来进行网络层的路径规划,而mac则是用来进行描述数据链路层,即两个即将进行传输的相邻节点。

这个mac地址是和网卡绑定的,全世界的网卡,理论上都会有一个自己唯一的mac地址,但是ip不一样。

数据链路层到物理层

这些封装操作本质上就是字符串的拼接。

数据链路层会把上述以太网数据帧交给物理层,物理层把这些0101的二进制数据转换成光信号,电信号等在进行传输。

分用过程就是将上述操作反着来一次,取每次所需要的内容。

数据的传输过程

从我的电脑将信息传入到目的电脑不是一下子直达的,中间要经过许多交换机和路由器,每次消息的传输都会涉及封装分用,中间的交换机,只需要封装分用到数据链路层,即只需要改变源mac和目的mac,中间的路由器,则需要封装分用到网络层,也需要改变mac,但他的目的ip和源ip不会发生改变,对于这一个过程我们可以这样进行思考:

整个Internet是一个巨大的地图,标记了所有IP地址的地图,网络传输的过程中源ip和目的ip不会发生改变,就像所在地和目的地不会发生改变一样,然后你会有一个路由表的东西,这个东西可以看成记录了任意两个地方之间的所有到达方法,这个到达方法不一定是直达,需要不断地辗转,此时就是mac的不断改变,每一次到路由器就会规划一下接下来的路径,而交换机只负责相邻两个节点之间的传输。

当然,这些只是理论上的东西,实际世界上的具体做法也会有所不同。

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

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

相关文章

渲染和不渲染的区别是什么?

随着计算机技术日新月异不断发展,电脑合成技术图像技术也日益成熟。在三维制作中,经常会提到一个词“渲染”,很多没有接触三维制作的朋友可能不是太清楚它究竟是什么,图像制作后,渲染和不渲染的区别是什么,…

【Admin后台管理】Geodjango后台显示地图并加载空间字段

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 文章目录 前言一、djangoadmin二、geodjangoadmin三、报错处理 前言 在前面的博客中,我们已经介绍了Geodjango的环境搭建和数据库操作&…

网易云音乐开发--前后端交互

前后端交互 首先启动服务器 1. 根目录下执行: npm start 2. 服务器地址: http://localhost:3000 3. 示例: http://localhost:3000/banner 测试接口能不能用 发起请求 看接口说明,在wx的load函数中发起请求 请求成功 封装请求功能函数 …

Django框架之ORM和模型属性

Django对很多数据库都有支持,为这些数据库提供了统一的调用API。可以根据不同的业务需求,选择配置不同的数据库。本篇文章主要介绍ORM和模型属性。 ORM ORM全称Object Relational Mapping,即对象关系映射,是在pymysq之上又进行了…

JAVAWeb11-服务器渲染技术 -JSP-01-JSP基础

1. 现状 1、JSP 使用情况 2、Thymeleaf 使用情况, 通常和 SpringBoot 结合(也会讲) 3、Vue 使用情况 2. 学 JSP 前,老师要说的几句话 目前主流的技术是 前后端分离 (比如: Spring Boot Vue/React), 我们会讲的.[看一下]JSP 技术使用在逐渐减少&#xff…

06 - 4 微内核架构

什么是微内核架构 定义 微内核 核心功能资源封装 插件 可插拔 系统核心 资源封装 硬件接口系统资源访问接口环境/上下文(context)访问接口系统事件接口 定义插件规范 使用场景规则条件 核心功能 支持系统运作的最小功能集 职责分离 通用流程由核心…

音视频八股文(10)-- mp4结构

介绍 mp4⽂件格式⼜被称为MPEG-4 Part 14,出⾃MPEG-4标准第14部分 。它是⼀种多媒体格式容器,⼴泛⽤于包装视频和⾳频数据流、海报、字幕和元数据等。(顺便⼀提,⽬前流⾏的视频编码格式AVC/H264 定义在MPEG-4 Part 10&#xff09…

CTF权威指南 笔记 -第三章汇编基础-3.2-x86/x64汇编基础

这节介绍PC最常见的架构 x86和扩展 x64框架 CPU操作模式 对x86处理器而言 有三个最主要的保护模式 保护模式 实地址模式 系统管理模式还有一个保护模式的子模式 虚拟8086模式 保护模式 保护模式是处理原生状态 这个时候所有指令和特性都是可以使用的 分配给程序的独立内…

好用的原型设计软件有哪些?一次给你推荐12个

原型设计是项目需求可视化的过程,从事产品设计工作必须与产品原型的创建分不开,因此原型设计软件的选择不容忽视,一个好的原型设计软件,不仅能有效输出页面设计,规范产品原型,而且能有效降低开发和设计人员…

debootstrap 构建 RISC-V 64 Ubuntu 根文件系统

debootstrap 构建 Ubuntu RISC-V Linux 根文件系统 flyfish 主机信息 命令 lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 20.04.6 LTS Release: 20.04 Codename: focal制作的根文件系统为 RISC-V 64 Ubuntu 22.04 LTS 1 主机…

Spring框架入门

Spring框架入门 简介开发环境入门案列Spring bean的定义常用属性 Spring IOC (控制反转)简介控制反转(IoC)案例 依赖注入(DI)IoC 容器的两种实现ApplicationContextBeanFactory Spring Bean属性注入构造函数注入setter 注入 Sprin…

洛谷 P2782 友好城市 线性DP 最长上升子序列 二分查找 lower_bound

🍑 算法题解专栏 🍑 洛谷:友好城市 题目描述 有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对…

关于HTTP服务小实验。

请给openlab搭建web网站 ​网站需求: ​1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!! ​2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.openlab.com/student](ht…

充电桩测试设备TK4800充电桩现校仪检定装置

TK4800是一套专用于检定电动汽车非车载充电机现场校验仪和电动汽车交流充电桩现场校验仪的装置,充电桩测试设备装置针对新能源汽车充电动态特性进行设计,支持稳态电能计量(针对恒定负载)和动态电能计量(针对波动性负载…

.NET中mysql 找不到请求的 .Net Framework Data Provider。可能没有安装。

如果你遇到 “找不到请求的 .Net Framework Data Provider。可能没有安装”这个问题,其他方式都试过了还不行,就试试下面这个方法吧,每次遇到同样的报错可能是不同的原因引起的,要具体排查尝试,反正我都遇到了个遍&…

Gitlab自动触发jenkins完成自动化构建

jenkins 首先安装gitlab插件,我已经安装过了,首次请在可选插件中进行搜索。 进入项目配置--构建触发器: Build when a change is pushed to GitLab. GitLab webhook URL: 请复制此处的URL,后续有用。 然后点击高级 “Allowed br…

拨云见日:深入理解 HTML 解析器与有限状态机

文章目录 参考描述状态机状态机有限状态机与无限状态机有限状态机与自动售货机无限状态机与计算器 HTML 解析器HTML 解析器HTML 与有限状态机 HTML 解析器的常见状态初始状态DOCTYPE 状态注释状态标签状态开始标签状态属性状态属性名状态属性值状态 结束标签状态自闭和标签状态…

大象起舞的秘密:深度剖析酒店“航母”时代新战略

4月19日-21日,因疫情阔别近两年的中国酒店投资及酒店产业系列展(简称HFE)在上海世博展览馆盛大举办,作为疫后首个举办的行业领先的酒店业展览会,本届HFE备受关注。 “品牌航母”锦江酒店(中国区&#xff09…

springboot 整合 sharding-jdbc 主从 读写分离

目录 0 课程视频 1 mysql 主从搭建 1.1 docker mysql 主从搭建 1.2 非docker mysql 主从搭建 2 springboot sharding-jdbc 主从 读写分离 2.1 pom 加依赖 2.1 yml 配置文件 2.2 druid数据源冲突解决 -> 视频15:20 秒处 2.3 注入数据源对象 3 测试 -> 直接使用 …

Java使用Milo实现OPC UA客户端,封装spring boot starter

文章目录 一、milo库二、OPC UA服务端三、工具使用3.1 依赖3.2 配置3.3 连接池3.4 写3.4.1 通用类型3.4.2 已提供方法的类型3.4.3 其他类型 3.5 读3.6 遍历节点 一、milo库 由eclipse开源,地址:https://github.com/eclipse/milo,可以基于此开…