当前位置: 首页 > news >正文

HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装

TCP/IP协议栈的封装过程

 用户从应用层发出数据先会交给传输层,传输层会添加TCP或者UDP头部,然后交给网络层,网络层会添加IP头部,然后交给数据链路层,数据链路层会添加以太网头部和以太网尾部,最后变成01这样的比特流之后,通过物理线路传出去,这个就是数据封装的过程,那么TCP头部还有IP头部以及以太网头部里面具体包含哪些内容呢?接下来我们具体看一下TCP头部和IP头部以及以太网头部。

TCP Segment

 图中列举了TCP头部的一部分,主要就是源源目端口号,数据到达用户PC后,就可以通过端口号识别,到底是发给哪一个应用程序的数据,比如前面讲到了21号端口,我就知道应该发给FTP去处理,如果是23号端口号,我就知道是发给Telnet,除此之外还包含了序列号,以及确认序列号,通过这两个参数就可以保证数据的可靠性传输。用户A要和用户B进行通信,它发了三个包,序号号分别是1 2 3,这边是主机A,这边是主机B,那么它发了三个包,第一个报文,它的序列号是1,第二个报文,序列号是2,第三个报文,序列号是3,B收到之后,它也会回包,它回的时候也会写到序列号,它的序列号比如说为A,但是它会回一个确认序列号,确认序列号回的是多少呢?回的是4,4代表什么意思?代表前三个报文我已经收到了,你下次再给我发包的时候,序号号就得发4,所以主机A下次再发包,那么这个时候它在发包的序列号就为4。同样A也会回一个确认序列号,确认序列号,因为B给我发包,它的序列号等于A,所以我在回去的序列号就回的是A+1.就是通过这两个序列号和确认序列号,我们是可以保证数据可靠性传输的。

IP Packet

 IP头部它的长度也是不固定的,20到60个字节,就看有没有底下的IP选项,如果有的话,最大可以达到60字节,没有的话,那么它的固定长度就是20字节。里面包含了第一个就是版本号,到底是V4还是V6的版本,我需要在这边进行标识,首部长度就是指的是IP头部,它到底是20字节,还是40字节,还是60字节呢,我要标识一下。服务类型主要做Qos的处理,总长度就是指IP包的总长度。后面的三个部分,标识符,标志,片偏移,它们主要是用于做分片以及分片后的重组。除此这外还有生存时间,也就是我们的TTL,大家应该都有做过ping包,ping的时候,它就会有一个TTL,那么TTL是用来干嘛的呢?它叫生存时间,主要就是三层防环,每经过一台三层设备,TTL就会减一,如果变为零之后,就直接丢弃。协议号,我们说了,上层有可能是TCP,也有可能是UDP,我们可以通过协议号去标识,上层到底是TCP还是UDP,TCP的话它的协议号是6,UDP的是17。当然IP地址里面最重要的东西就是源目IP地址,所有的设备都需要根据源目IP地址去识别,看一下是不是发给自己的,如果是发给自己的,我才会继续解析TCP头部,然后把数据传给最终用户。

IP分片问题

 什么时候需要做分片处理?

每个设备在发包的时候,它都会将自己的数据长度和MTU值做对比,如果数据长度大于MTU,那么这个时候就需要做分片处理。

主机A在发包的时候,它就会看接口的MTU值到底是多少?如果是数据包的长度大于MTU值,这个时候就会拆包,把它分成两个包,那么这个就是做分片。分片可以是在发送端,也就可以在PC这边做,也可以在中间的路由器做分片的处理。因为每一个接口,它的MTU值都是不一样的,所以如果中间在转发的时候,MTU值变了,就会继续分片,所以可以看到分片是可以在发送端,也可以在中间路由器,便是如果数据要重组,只有在目的地才能重组,也就是数据到了终点之后,我才会把它组合成原来的报文。

 标识符用于标识是不是同一个报文,把一个报文折成三片,三片它的标识符都是一样的,这样的话,我就知道它是否属于同一个报文。

刚才分成三片之后,可能由于网络延迟,它们不会按照顺序到达接收端,那么这个时候到底哪一个是第一片,哪一个是第二片,哪一个是第三片,就会通过片偏移去标识,通过偏移的位置,我去标识谁是第一片,谁是第二片,谁是第三片。

另外到达接收端的时候 ,它肯定不知道你是分成多少片的。所以通过标志去标识一下谁是最后一片,所以通过这三个字段,就可以把数据做分片,以及分片后的重组。

以太网帧

 以太网帧的格式,它有两种,一种就是Ethernet_II,一种是802.3,我们平时发送的数据都是采用这种Ehernet_II的封装方式,而802.3一般主要用于生成树,它发的一些控制帧,一般就会使用这种802.3这种格式。Ethernet_II的这种封装格式的话,这主要的内容就包含了DMAC,SMAC,还有一个两字节的L/T类型,用于标识上层的协议,上层到底是IP,ARP,这个时候就骑过字段去标识,比如说是IP的话,标识的时候填充的就是0800,如果是arp填充的arp填充的就是0806,所以看到这个字段我就可以知道上层交给的是IP,还是ARP,所以可以看到第一层它虽然功能不一样,但是它是有衔接关系的。

比如我们可以看到,这是以太网,那么这个是IP,这个是TCP,然后这是我们的应用层数据,在以太网头部里面,我通过类型,标识上层,可能是IP还是ARP,网络层再通过协议号去标识上层到底是TCP还是UDP,然后TCP再通过端口号去标识应用程序,到底是传给邮箱,还是传给FTP,那么这个时候就靠端口号

相关文章:

HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装

TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层,传输层会添加TCP或者UDP头部,然后交给网络层,网络层会添加IP头部,然后交给数据链路层,数据链路层会添加以太网头部和以太网尾部,最后变成01这样…...

LSTM详解

1. LSTM设计 LSTM(长短期记忆网络)详解 长短期记忆网络(LSTM, Long Short-Term Memory) 是一种特殊的循环神经网络(RNN),特别适合处理和预测序列数据中的长时间依赖关系。LSTM 通过引入“门机制”(如输入门、遗忘门、输出门)来解决标准 RNN 在长时间序列任务中梯度消…...

从零开始搭建Android开发环境:简单易懂的完整教程

前言: 作为安卓开发的入门,搭建开发环境是每个开发者都必须迈出的第一步。虽然这一步看似简单,但如果没有正确的配置,可能会遇到各种问题。本篇文章将为大家详细介绍如何从零开始搭建Android开发环境,确保你能够顺利开…...

大模型运用-Prompt Engineering(提示工程)

什么是提示工程 提示工程 提示工程也叫指令工程,涉及到如何设计、优化和管理这些Prompt,以确保AI模型能够准确、高效地执行用户的指令,如:讲个笑话、java写个排序算法等 使用目的 1.获得具体问题的具体结果。(如&…...

CMake简单使用(二)

目录 五、scope 作用域5.1 作用域的类型5.1.1 全局作用域5.1.2 目录作用域5.1.3 函数作用域 六、宏6.1 基本语法6.2 演示代码 七、CMake构建项目7.1 全局变量7.2 写入源码路径7.3 调用子目录cmake脚本7.4 CMakeLists 嵌套(最常用) 八、CMake 与库8.1 CMake生成动静态库8.1.1 动…...

攻防世界安卓刷题笔记(新手模式)1-4

1.基础android 进入后是这样的页面。查看源代码看看。首先要注意这个软件并没有加壳,所以我们可以直接着手分析。搜索错误提示“Failed”定位到关键代码,看样子就是检验输入的内容 注意到这里有一行关键代码,cond_39对应的正是failed那个地方…...

发现一个对话框中的按钮,全部失效,点击都没有任何反应,已经解决

前端问题,技术vue2,ts。 发现一个对话框中的按钮,全部失效,点击都没有任何反应。 因为我只在template标签中加入下面这个代码,并没有注册。 只要有一个子组件没有注册,就会影响所有的按钮,使当前…...

MyBatisPlus实现多表查询

在MyBatisPlus中实现多表查询,主要有以下几种方法: 使用注解进行多表查询: 你可以在Mapper接口中使用Select注解来编写SQL查询语句,实现多表查询。例如,如果你想根据用户ID查询用户信息和对应的区域名称,可…...

机器学习详解(5):MLP代码详解之MNIST手写数字识别

文章目录 1 MNIST数据集2 代码详解2.1 导入库和GPU2.2 MNIST数据集处理2.2.1 下载和导入2.2.2 张量(Tensors)2.2.3 准备训练数据 2.3 创建模型2.3.1 图像展开2.3.2 输入层2.3.3 隐藏层2.3.4 输出层2.3.5 模型编译 2.4 训练模型2.4.1 损失函数与优化器2.4.2 计算准确率2.4.3 训练…...

如何在vue中实现父子通信

1.需要用到的组件 父组件 <template><div id"app"><BaseCount :count"count" changeCount"cahngeCount"></BaseCount></div> </template><script> import BaseCount from ./components/BaseCount.v…...

PHP实现华为OBS存储

一&#xff1a;华为OBS存储文档地址 官方文档&#xff1a;https://support.huaweicloud.com/obs/index.html github地址&#xff1a;https://github.com/huaweicloud/huaweicloud-sdk-php-obs 二&#xff1a;安装华为OBS拓展 composer require obs/esdk-obs-php 三&#x…...

嵌入式 linux Git常用命令 抽补丁 打补丁

Git常用命令 为什么要学习git呢&#xff1f;我相信刚入门的小伙伴敲打肯定碰到过这种玄学问题&#xff0c;我明明刚刚还能用的代码&#xff0c;后面不知道咋的就不能用了&#xff0c;所以每次你调出一个功能点以后都会手动复制一份代码防止出问题&#xff0c;时间一长发现整个…...

Alan Chhabra:MongoDB AI应用程序计划(MAAP) 为客户提供价值

MongoDB全球合作伙伴执行副总裁 Alan Chhabra 每当有人向我问询MongoDB&#xff0c;我都会说他们很可能在不觉之间已经与MongoDB有过交集。事实上&#xff0c;包括70%财富百强在内的许多世界领先企业公司都在使用MongoDB。我们在MongoDB所做的一切都是为了服务客户&#xff0c…...

【学习笔记】目前市面中手持激光雷达设备及参数汇总

手持激光雷达设备介绍 手持激光雷达设备是一种利用激光时间飞行原理来测量物体距离并构建三维模型的便携式高科技产品。它通过发射激光束并分析反射回来的激光信号&#xff0c;能够精确地获取物体的三维结构信息。这种设备以其高精度、适应各种光照环境的能力和便携性&#xf…...

Burp与小程序梦中情缘

前言 在日常渗透工作中&#xff0c;有时需要对微信小程序进行抓包渗透&#xff0c;通过抓包&#xff0c;我们可以捕获小程序与服务器之间的通信数据&#xff0c;分析这些数据可以帮助我们发现潜在的安全漏洞&#xff0c;本文通过讲述三个方法在PC端来对小程序抓包渗透 文章目…...

数据结构:Win32 API详解

目录 一.Win32 API的介绍 二.控制台程序(Console)与COORD 1..控制台程序(Console): 2.控制台窗口坐标COORD&#xff1a; 3.GetStdHandle函数&#xff1a; &#xff08;1&#xff09;语法&#xff1a; &#xff08;2&#xff09;参数&#xff1a; 4.GetConsoleCursorInf…...

迁移学习中模型训练加速(以mllm模型为例),提速15%以上

根据模型训练过程的显存占用实测的分析,一个1g参数的模型(存储占用4g)训练大约需要20g的显存,其中梯度值占用的显存约一半。博主本意是想实现在迁移学习(冻结部分参数)中模型显存占用的降低,结果不太满意,只能实现训练速度提升,但无法实现显存占用优化。预计是在现有的…...

socket编程UDP-实现停等机制(接收确认、超时重传)

在下面博客中&#xff0c;我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程&#xff0c;并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接&#xff08;进阶篇&#xff09;_udp socket发送-CSDN博客 下面博客实现的是滑动窗口机制&#xff1a; sock…...

前端面试题目 (Node.JS-Express框架)[二]

在 Express 中如何使用 Passport.js 进行身份认证? Passport.js 是一个 Node.js 的身份验证中间件&#xff0c;它可以很容易地与 Express 集成。下面是一个简单的示例&#xff0c;展示了如何使用 Passport.js 进行基本的身份认证。 安装依赖 npm install express passport …...

防范TCP攻击:策略与实践

TCP&#xff08;传输控制协议&#xff09;是互联网通信的核心协议之一&#xff0c;它确保了数据在网络上的可靠传输。然而&#xff0c;TCP也容易成为各种网络攻击的目标&#xff0c;如SYN洪水攻击、TCP连接耗尽攻击等。本文将探讨如何通过配置防火墙规则、优化服务器设置以及采…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

Java如何权衡是使用无序的数组还是有序的数组

在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

LeetCode - 394. 字符串解码

题目 394. 字符串解码 - 力扣&#xff08;LeetCode&#xff09; 思路 使用两个栈&#xff1a;一个存储重复次数&#xff0c;一个存储字符串 遍历输入字符串&#xff1a; 数字处理&#xff1a;遇到数字时&#xff0c;累积计算重复次数左括号处理&#xff1a;保存当前状态&a…...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...