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,那么这个时候就靠端口号

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 与 Linux 下 Ping IPv6 地址 | 常用网络命令

注:本文为网络命令相关文章合辑。 未整理去重。 一、IPv6 概述 IPv6 即 “Internet 协议版本 6”,因 IPv4 地址资源面临耗尽问题而被引入以替代 IPv4。IPv6 则提供了理论上多达 2 128 2^{128} 2128 个地址,有效解决地址不足困境。 IPv6 具…

关卡选择与布局器

unity布局管理器 使用unity布局管理器轻松对关卡选择进行布局。 实现过程 准备普通按钮button设置字体和对应的sprite设置父gameobject(levelbase) 再创建UI.image(selectbackground)布局背景和大小gameobject(grid…

python学opencv|读取图像(十三)BGR图像和HSV图像互相转换深入

【1】引言 前序学习过程中,我们偶然发现:如果原始图像是png格式,将其从BGR转向HSV,再从HSV转回BGR后,图像的效果要好于JPG格式。 文章链接为: python学opencv|读取图像(十二)BGR图…

程序算术题-2

程序算术题-2 输出所有组合逻辑实例代码 输出所有排列逻辑实例代码 输出所有组合 计算一组数字按n位数组合的所有组合。 逻辑 /*** param stringBuilder 用于组合的拼接* param list 组合数序列* param level 目前位数* param exceptedLevel 组合期待位数*/…

VQ-VAE和VAE 的区别是什么?

第一行所展示的就是普通的VAE,它的核心是通过encoder和decoder,将像素空间的图像压缩到一个提取了核心特征的隐变量向量。VQ-VAE的思想是,即使VAE中压缩的这个隐变量中的向量提取了图片中的核心特征信息,但是这些信息仍然可能存在冗余&#x…

使用Qt Creator设计可视化窗体(一)

一、创建项目 打开 Qt Creator ,在菜单栏中选中: “文件” --------> “新建文件或项目” ;或者使用快捷键:Ctrl n;或者直接点击:“new” Qt 中的构建工具有三种可供选择,分别是&#…

Python3 爬虫 Scrapy 与 Redis

Scrapy是一个分布式爬虫的框架,如果把它像普通的爬虫一样单机运行,它的优势将不会被体现出来。因此,要让Scrapy往分布式爬虫方向发展,就需要学习Scrapy与Redis的结合使用。Redis在Scrapy的爬虫中作为一个队列存在。 一、Scrapy_r…

Docker 学习

Docker 学习 Docker 概念 Docker 安装 一般是在服务器里 Docker阿里云镜像加速 配置主要是Linux命令 Docker命令大纲及帮助文档的使用 docker帮助文档 查看docker命令 docker --help查看某个命令,例如ps的详细文档 docker ps --help也可查阅 [docker官方帮助手…

超牛免费 机械臂模型、工业机器人模型下载网站集合

‌机械臂是一种高精度、多输入多输出的复杂系统,能够模仿人手的动作,按照给定程序、轨迹和要求实现自动抓取、搬运等功能‌。它通常由执行机构、驱动装置、控制系统以及传感器等组成,能够完成各种复杂的动作。‌ 机械臂在工业、医学、娱乐、…

【Python技术】同花顺wencai涨停分析基础上增加连板分析

周末,有读者加我, 说 之前的涨停分析 是否可以增加连板分析。 这个可以加上。 先看效果 这里附上完整代码: import streamlit as st import pywencai import pandas as pd from datetime import datetime, timedelta import plotly.graph_o…

小程序子组件调用父组件方法、父组件调用子组件方法

1、子组件调用父组件方法 子组件this.triggerEvent(finish); startShare(e) {let url config.apiUrl "/business/lzShare/edit";let data this.data.currentData;util.httpPut(url, data).then((res) > {this.triggerEvent(finish);console.log(res.result);})…

怎样使用Eclipse创建Maven的Java WEB 项目

文章目录 1、第一种方式(选择 archetype 方式) 1.1、第一步:创建项目1.2、第二步:配置jre1.3、第三步:配置tomcat1.4、第四步:设置为WEB3.11.5、第五步:配置Maven的编译级别 1.5.1、第一种方法…

C语言刷题

1. 题目描述 根据给出的三角形3条边a:b.c(a.b,c<100.000)&#xff0c;计算三角形的周长和面积。 输入描述: 一行&#xff0c;三角形3条边(能构成三角形)&#xff0c;中间用一个空格隔开. 输出描述: 一行&#xff0c;三角形周长和面积保留两位小数&#xff0c;中问用一个空…

C语言动态内存管理【进阶--5--】

文章目录 [toc] 动态内存管理一、作用即意义二、动态内存函数的介绍Ⅰ、malloc()函数、free()函数Ⅱ、calloc()函数Ⅲ、realloc()函数 三、常见的动态内存错误Ⅰ、对NULL指针的解引用操作Ⅱ、对动态开辟空间的越界访问Ⅲ、对非动态开辟的内存使用free释放Ⅳ、使用free释放动态开…

Python学习(三)—— 基础语法(下)

目录 一&#xff0c;函数 二&#xff0c;列表和元组 2.1 列表基础操作 2.2 切片 2.3 列表的增删查改 2.4 连接链表 2.5 元组 三&#xff0c;字典 3.1 关于字典 3.2 字典的增删查改操作 3.3 遍历字典元素 3.4 合法的key类型 四&#xff0c;文件操作 4.1 打开关闭…

【数据分享】2014-2024年我国POI兴趣点数据(免费获取/来源于OSM地图)

POI是Point of Interest的简称&#xff0c;意为“兴趣点”&#xff0c;是互联网电子地图中用于表示特定位置的地理实体的核心数据类型。POI通常用于标注具体地点&#xff0c;例如餐厅、商场、学校、医院、景点等。这些数据以点的形式呈现&#xff0c;并附带详细属性信息&#x…

执行python时报错SyntaxError: Non-UTF-8 code

执行python时报错SyntaxError: Non-UTF-8 code starting with ‘\xb4’ in file sqlite_insert.py on line 3, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details 通过对文件增加编码格式进行解决。 codingutf-8 codingutf-8 import sqlite…

三、前端学习——HTML表格创建与编辑

1 先看一段代码 css代码如下所示&#xff1a; /* 定义表格整体的宽度、边框样式和间距 */ table {width: 100%; /* 设置表格占据100%宽度 */border-collapse: collapse; /* 合并表格边框 */margin-top: 30px; /* 设置表格与上方元素的间距 */ }/* 定…

电子应用设计方案-52:智能电子相框系统方案设计

智能电子相框系统方案设计 一、引言 智能电子相框作为一种能够展示数字照片和多媒体内容的设备&#xff0c;为用户提供了便捷、个性化的照片展示方式。本方案旨在设计一款功能丰富、用户体验良好的智能电子相框系统。 二、系统概述 1. 系统目标 - 高质量显示照片和视频&#…

tomcat优化和动静分离

tomcat的优化和动静分离 tomcat的优化&#xff1a; 默认的安装情况下&#xff0c;tomcat经常会假死的情况 tomcat需要进行优化 优化的三个方面&#xff1a; 1、tomcat的配置优化2、操作系统的内核优化3、jvm调优 tomcat自身的优化&#xff1a; 8080&#xff1a;tomcat对外提供…