封装与解封装(TCP头部格式)

article/2025/4/26 0:20:35

封装和解封装:

应用层---HTTP --超文本传输协议--- TCP 80

HTTPS --- TCP 443

FTP ---文件传输协议---TCP 20/21

ITFTP ---简单文件传输协议--- UDP 69

TELNET---远程控制协议---TCP23

SSH ---TCP 22

DNS---域名解析协议---UDP和TCP  53

HDCP---动态主机配置协议---UDP 67/68

传输层----(端口号)---TCP UDP

网络层----(IP地址)---IP

数据链路层----(MAC地址)---以太网协议---早期局域网的方案,现在应用于广域网中,可以理解为交换机组件的二层协议。

物理层----(不需要封装)

封装过程:

应用层:原始数据被转换成二进制数据

传输层:二进制数据被分割成小的数据段,并封装TCP头部 (数据段)(TCP头部的关键信息–端口号)

网络层:传输层传来的数据被封装上IP头部 (数据包)

(IP头部的关键信息–IP地址)

数据链路层:网络层传来的数据被封装上MAC头部 (数据帧)

(MAC头部的关键信息–MAC地址)

物理层:二进制数据组成的比特流转化为电信号在网络中传输 (比特流)

注:主机在封装数据包之前,必须要知道目的端IP地址,在封装数据帧之前,必须要知道去往目的网络的路由以及下一跳的MAC地址。

封装的必要参数

传输层:源端口号 目标端口号

网络层:源IP地址 目标IP地址

数据链路层:源MAC地址 目标MAC地址

解封装 :封装的逆过程,数据从比特流还原为数据的过程

动作:从底层往高层依次解封装,每解封装一层,会将该层的忒点那个协议报头去掉

解封过程:

物理层:将电号转化为二进制数据,并将其送至数据链路层

数据链路层:查看MAC地址,地址是自己,就拆掉MAC头部,继续传输

地址不是自己,就丢弃数据

网络层:查看IP地址,地址是自己,就拆掉IP头部,继续传输

地址不是自己,就丢弃数据

传输层:查看TCP头部,判断应该传到哪里,然后重组数据,传输到应用层

应用层:二进制转化为原始数据

 

以太网的帧结构:

   (前导符(标记),MAC地址,类型(表示上层使用的协议))---数据---(fcs帧数据校验)    (以太网2型帧)

TCP协议:(更适合应用在对效率要求不高,但对准确性有较高要求的场景)

UDP协议:(更适于对效率要求较高,对准确性要求不高的场景)

面向连接:在传输数据之前先使用预备的协议建立点到点的连接,在进行数据的传输。

会话:(有方向之分)

TCP的封装:封装在头部

 

(1)4位首部长度

标准TCP报头宽度为4个字节,总计4×5=20个字节,所以在收到一个TCP报头后首先会读取20个字节(也就是报头信息)

(2)16位端口号:包括了源端口号和目的端口号。进行TCP通信时,客户端通常使用系统自动选择的临时端口号(一般都很大),而服务器则使用知服务端口号或服务器管理员自定义的端口号。

(3)32位序号:一次TCP通信过程中对一个传输方向上的字节流的每个字节的编号(从这个方向第一个报文段依次排列)。假设主机A和主机B进行TCP通信,A发送给B的第一个TCP报文段中的序号值是系统初始化的一个随机值ISN(初始序号值)。那么之后在A到B的方向上发送的TCP报文段中的序号值将会被系统设置为ISN加上该报文段所携带数据的第一个字节在整个数据字节流中的偏移。

(4)32位确认号:用作对另一方发送来的TCP报文段做出相应。其值是收到对方的报文段的序号值加1。

(5)4位头部长度:标识该TCP头部有多少个32bit字(4字节)。一共有4位,所以最大能表示TCP头部大小为60字节。

(6)6位标志位包含如下几项:

URG标志,表示紧急指针是否有效。

ACK标志,表示确认号是否有效。一般称携带ACK标志的报文段是确认报文段

PSH标志,提示接收端应用程序立即从TCP接受缓冲区读走数据。

RST标志,表示要求对方重新建立连接。称携带RST标志的TCP报文段为复位报文段。

SYN标志,表示请求建立一个连接。称携带SYN标志的TCP报文段为同步报文段。

FIN标志,表示通知对方本端将关闭连接。称携带FIN标志的TCP报文段为结束报文段。

伪头部校验:除了将传输层头部及数据部分的内容进行校验外,还会将网络层中的12个字节的数据进行校验---32位源IP,32位目标IP,8位保留,8位的协议,16位的总长度(反码相加法)


http://chatgpt.dhexx.cn/article/CPgJNXsK.shtml

相关文章

TCP头部信息与UDP头部信息

TCP头部信息 源端口号以及目的端口号: 各占2个字节,端口是传输层和应用层的服务接口,用于寻找发送端和接收端的进程,通过这两个端口号和IP头部的ip发送和接收号,可以唯一的确定一个连接。    一般来讲,通…

TCP协议--TCP头部

《Linux高性能服务器编程》阅读笔记: 1. TCP协议的概念 TCP和UDP是传输层的两个主要协议。TCP相对于UDP来说,是面向连接、字节流和可靠传输。 (1) 面向连接   使用TCP通信的双方必须先建立起连接,然后才能开始数据的读写。建立连接后双方…

#TCP/IP# TCP头部选项功能详解

简单回顾下TCP报文格式 1)TCP报文:由 TCP首部 和 TCP数据 组成。2)TCP首部:由 20字节的固定长度 和 可变长字段(选项和填充)组成。3)TCP首部总长度:由TCP头中的“数据偏移”字段决定…

TCP头部格式的了解

tcp头部格式如下图所示: 1.源端口号,16位,发送方的端口号。 2.目标端口号,16位,发送方的目标端口号。 3. 32为序列号,sequence number,保证网络传输数据的顺序性。 4. 32位确认号,acknowledgment num…

TCP头部结构信息

TCP 头部结构信息 tcp头部信息出现在每个tcp报文段中,用于指定通信的源端端口,目的端口,管理tcp连接等。tcp头部结构如下图所示: tcp头部结构 1、16位端口号:告知主机该报文段来自哪里(源端口)以及传给…

计算机网络—IP头部结构,TCP头部结构,UDP头部结构

文章目录 IP头部结构TCP头部结构UDP头部结构TCP和UDP的区别MAC地址、IP地址、端口号数据传输过程图解 IP头部结构 IP头部结构图如下 注意:一行32bit为4字节,扩展的时候总是一行一行的拓展,也就是4个字节4个字节的扩展 版本号(Ve…

TCP的头部格式,详细信息都在这

重要的TCP头部格式来啦: 序列号:在建立连接时,由计算机生成的随机数作为初始值,通过SYN包传给接收方主机,每发送一次数据,就会累加一次这个数据字节数的大小,用来解决网络包乱序问题。确认应答号…

tcp 头部格式是怎样的?都有哪些字段?TCP 与 UDP 的区别

传输控制协议(Transmission Control Protocol,TCP)是一种传输层协议。TCP使数据包从源到目的地的传输更加顺畅。它是一种面向连接的端到端协议。每个数据包由TCP包裹在一个报头中,该报头由10个强制字段共20个字节和一个0到40 字节的可选数据字段组成 1…

【网络】TCP报文头部

目录 源端口、目的端口 序号()Seq 确认号 数据偏移(头部长度) URG ACK PSH RST SYN FIN 窗口大小 校验和 紧急指针 选项部分 最大报文段长度 MSS 窗口扩大 时间戳 最大报文段长度(MSS) 窗口…

TCP头部结构详解

tcp头部信息出现在每个tcp报文段中,用于指定通信的源端端口,目的端口,管理tcp连接等。tcp头部结构如下图所示: tcp头部结构 1、16位端口号:告知主机该报文段来自哪里(源端口)以及传给哪个上层协议或应用程…

TCP头部详解

1. TCP的定义 TCP提供一种面向连接的、可靠的字节流服务。 面向连接: 两个使用TCP的应用(通常是一个客户和一个服务)在彼此交换数据之前必须建立一个TCP连接。 TCP提供可靠性的方式: 1)应用数据被分割成TCP认为最适合发送的数据块; 2)当…

TCP协议详解(一):TCP头部结构

TCP字节流服务 网络传输层中,TCP是面向连接、可靠的、字节流传输。 TCP协议通信双方必须先建立连接,通信双方必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP是全双工的,即双方的数据读写可通过一个连接…

Python 变量的命名规范

引言 混乱或错误的命名不仅让我们对代码难以理解,更糟糕的是,会误导我们的思维,导致对代码的理解完全错误。相反,良好的命名,则可以让我们的代码非常容易读懂,也能向读者正确表达事物以及逻辑的本质&#x…

matlab中变量命名规则,Matlab变量及命名规则

Matlab变量及命名规则 Matlab变量及命名规则 Matlab中所有的变量都是用矩阵形式来表示的,即所有的变量都表示一个矩阵或者一个向量。其命名规则如下: (1)变量名对大小写敏感; (2)变量名的第一个字符必须为英文字母,其长度不能超过…

matlab变量名的命名规则

简述Java中变量的命名的规则? 首字母只能是字母下划线‘_’‘$’符号(变量名首字母不能是数字!!!) 其余部分任意多的:数字字母下划线‘_’‘$’符号 Java命名规则 局部变量和成员变量 我说我知道的约定俗成&#xff1a…

vb变量名的命名规则

求十分详细的的java变量命名规范 您好,提问者: 在java编程中命名规范是统一的,而且老外发明的东西是没有中文的,严格区分大小写。 规范:以字母、下划线、$符号组成,不能以数字开头,声明类跟变量…

python变量名有哪些_python变量名命名规则

原博文 2020-03-21 11:07 − 一.python变量名命名规则: 1.变量名通常由字母,数字,下划线组成; 2.数字不能作为变量名开头; 3.不能以python中的关键字命名; 4.变量名要有意义; 5.不要用汉字和拼音去命名; 6.变量名要区分大小写; 7.推荐使用驼峰型(GuessAge或guessAge)和…

Tips:一个字符占几个字节?

《JAVA啃骨头》之 Javascript 章节 Tips:一个字符占几个字节? ASCII码:   一个英文字母(不分大小写)占一个字节的空间,一个中文汉字占两个字节的空间。一个二进制数字序列,在计算机中作为一个数字单元,…

字节与字符的区别 一个字母占一个字节(学习记录)

字节(Byte):字节是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位。 字符(Character):计算机中使用的字母、数字、字和符号,比如’A’、‘B’、‘$’、…

一个指针占几个字节?原理是什么呢?

一个指针占几个字节的问题,感觉会C语言的同学都知道。但是在面试过程中,面了几个同学,不是答忘记了,就是两个、四个的瞎蒙。。。 那么,一个指针到底占几个字节呢? 其实,这个问题很简单&#x…