TCP协议报头详解

news2024/10/6 0:29:34

目录

前言

TCP特点

TCP报头

1.源端口和目的端口

2.序号

3.确认号

4.数据偏移

5.保留

6.控制位

        ① 紧急URG(URGent)

        ② 确认ACK(ACKnowledgment)

        ③ 推送PSH(PuSH)

        ④复位RST(ReSeT)

        ⑤ 同步SYN(SYNchronization)

        ⑥ 终止FIN(FINish)

7.窗口

8.检验和

9.紧急指针

10.选项

参考

共勉


前言

        总结了一下TCP报头中各个字段的作用,希望可以帮到你呀。


TCP特点

        面向连接:在使用TCP协议进行通讯时,必须先进行TCP连接,传送数据完毕后,必须释放用于传输数据的TCP连接。

        可靠性:通过TCP连接传送的数据,无差错、不丢失、不重复、并且按需到达。

        面向字节流:TCP中的“流(stream)”指的是流入到进程火铳进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。TCP并不知道所传送的字节流的含义。

        全双工通信:TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存。


TCP报头

1.源端口和目的端口

        各占两个字节,分别写入源端口号和目的端口号。


2.序号

        占4字节,序号范围是[0, 2^32 - 1],共2^32(4294 967 296)个序号。序号增加到2^32 - 1后,下一个序号又会回到0。在一个TCP连接中传送的每个字节流中的每个字节都按顺序编号。整个要传送的字节流的起始序号必须在连接建立时设置。首部中的序号字段值则指的是本报文段所发送的数据的抵押给字节的序号。例如,一报文段的序号字段是301,则携带的数据共有100字节。下一个报文段(如果存在)的数据序号以当从301开始,即下一个报文段的序号字段应为401。这个字段的名称也叫做“报文段序号”。


3.确认号

        占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。例如,B正确收到了A发送过来的一个报文段,其序号字段值是501,而数据长度是200字节(序号501~700),着表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号是701,于是B在发送给A的确认报文段中把确认号置为701。

若确认号 = N,则表明:到序号N - 1为止的所有数据都已正确收到


4.数据偏移

        占4位,它指出TCP报文段的首部长度的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。由于首部中还有长度不确定的选项字段,因此数据偏移字段是有必要的。但应注意,“数据偏移”的单位是32位字(即4字节的字位计算单位)。由于4位二进制数能够表示的最大十进制数字位15,因此数据偏移的最大值位60字节,这也是TCP首部的最大长度(即选项长度不能超过40字节)。


5.保留

        占6位,保留为今后使用,目前应该置为0。


6.控制位

        总共六位,每位说明一个性质,6位一起说明本报文段的性质。

        ① 紧急URG(URGent)

                当URG置为1时,表明紧急指针字段有效。它告诉系统此报文段中由紧急数据,应尽快传送(相当于高优先级的数据),而不是按照原来的排队顺序传送,紧急数据后面的数据仍然是普通数据。

        ② 确认ACK(ACKnowledgment)

                仅当ACK=1时,确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1。

        ③ 推送PSH(PuSH)

                当两个应用进程进行交互式通信时,有时在一端的应用进程希望在键入一个命令后立即就能够收到对方的响应。这种情况下,TCP就可以使用推送操作。这时,发送方TCP把PSH置1,并立即创建一个报文段发送出去。接收方TCP收到PSH=1的报文段,就尽快地交付为应用进程,而不再等到整个缓存都填满了后再向上交付。

        ④复位RST(ReSeT)

                当RST=1时,表明TCP连接中出现严重差错(如主机崩溃),必须释放连接,然后再重新建立连接。将RST置为1还用来拒绝一个非法报文段或拒绝打开一个连接。RST也称为重置位。

        ⑤ 同步SYN(SYNchronization)

                在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文段。对方若同意建立连接,则应当响应的报文段中使用SYN=1和ACK=1。因此,SYN置为1就表示这是一个连接请求或者同意连接报文。

        ⑥ 终止FIN(FINish)

                用来释放一个连接。当FIN=1时,表明此报文段的发送方的数据已经发送完毕,并要求释放运输连接。


7.窗口

        占2字节。窗口值是[0, 2^16 - 1]之间的整数。窗口指的是发送本报文段的一方接收窗口(而不是自己的发送窗口)。窗口值告诉对方:从本报文首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。总之,窗口值作为接收方让发送方设置其发送窗口的依据。

窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化着。

8.检验和

        占2字节,检验和字段检验的范围包括首部和数据这两部分。

9.紧急指针

        占2字节,紧急指针仅在URG=1时才有意义,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此,紧急指针指出了紧急数据的末尾在报文段中的位置。当所有紧急数据都处理完时,TCP就高数应用程序恢复到正常操作 。注意:即使窗口为零时也可发送紧急数据。

10.选项

        长度可变,最长40字节。填充字段仅仅是为了使整个TCP首部长度是4字节的整数倍。
 


参考

        《计算机网络》第八版 谢希仁编著 

        RFC 793

共勉

        以上就是我对TCP报头的全部理解。有什么问题和疑问欢迎在评论区讨论,或者私信我呀。后面还有出拥塞控制、三次握手和四次挥手相关的文章,关注可以第一时间看到呀。

感谢阅读

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

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

相关文章

【数据结构】初识集合深入剖析顺序表(Arraylist)

【数据结构】初识集合&深入剖析顺序表(Arraylist) 集合体系结构集合的遍历迭代器增强for遍历lambda表达式 List接口中的增删查改List的5种遍历ArrayList详解ArrayList的创建ArrayList的增删查改ArrayList的遍历ArrayList的底层原理 🚀所属…

UnityAPI学习之 播放游戏音频的类(AudioSource)

播放游戏音频的类(AudioSource) using System.Collections; using System.Collections.Generic; using UnityEngine;public class NO17AudioSource : MonoBehaviour {private AudioSource audioSource;//音频组件public AudioClip clip;//音频文件public…

预编译、函数变量提升

函数声明会覆盖变量的声明,也就是会提升到最前面。 形参传进来相当于变量声明,所以当有函数声明时,会被覆盖。

情绪管理:大我则定,小我则乱(王阳明)

学了很多知识,却还是感物易动?如何让心回归中正?王阳明一言以蔽之: —— 大我,大我则定,小我则乱 保持心静的方法:有大爱,为大局着想

Spark-Shuffle阶段优化-Bypass机制详解

Spark概述 Spark-Shuffle阶段优化-Bypass机制详解 Spark的Bypass机制是一种特定情况下的优化策略,目的是减少Shuffle过程中不必要的排序开销,从而提升性能。当Shuffle分区数较少且数据量不大时,Bypass机制可以显著加快Shuffle速度。 1.什么…

使用 Nginx 和 SSL 访问 Python Flask 应用的教程

在本教程中,我们将介绍如何使用 Nginx 和 SSL 来访问 Python Flask 应用。通过这种方式,你可以在提高安全性的同时,也能利用 Nginx 的反向代理功能来优化应用的性能和稳定性。 环境准备 在开始之前,请确保你的系统已经安装了以…

准备离职了 电脑怎么清理?离职最干净的电脑清理办法

准备离职了 电脑怎么清理?离职最干净的电脑清理办法 人在江湖身不由己,离职这个事情,所有人都要面对。无论是出于个人发展、工作环境、薪资待遇还是其他原因,离职都是人生和职业道路上的一种常态。离职是一个残酷的事实&#xff…

【每日刷题】Day66

【每日刷题】Day66 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 小乐乐改数字_牛客题霸_牛客网 (nowcoder.com) 2. 牛牛的递增之旅_牛客题霸_牛客网 (nowcoder.com)…

Zabbix Centos8 安装笔记

Zabbix 安装笔记 安装环境 Centos 8 正常发行版 安装版本 Zabbix 7 (LTS) 安装步骤 1、关闭防火墙 systemctl stop firewalld && systemctl disable firewalld && setenforce 0 && sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/c…

Elasticsearch 认证模拟题 - 22

一、题目 索引 task 索引中文档的 fielda 字段内容包括了 hello & world,索引后,要求使用 match_phrase query 查询 hello & world 或者 hello and world 都能匹配该文档 1.1 考点 分词器 1.2 答案 # 创建符合条件的 task 索引,…

诊断丢帧:发送端连续帧发送过快,导致接收端丢帧

项目场景: 在项目开发过程中,对于报文的接收/发送,一般来说,通信量大,选择Polling(轮询)处理模式;通信量小,选择Interrupt(中断)处理模式。具体选择没有优劣之分。结合项目的实际情况,选择适合项目的方式就好。小编将分享一个Polling模式下出现的丢帧现象。 1576…

Ps:脚本事件管理器

Ps菜单:文件/脚本/脚本事件管理器 Scripts/Script Events Manager 脚本事件管理器 Script Events Manager允许用户将特定的事件(如打开、存储或导出文件)与 JavaScript 脚本或 Photoshop 动作关联起来,以便在这些事件发生时自动触…

exfat文件系统无法NFS导出的问题

最近项目中移植了exfat-linux驱动,但发现exfat格式的U盘无法用exportfs命令在NFS上导出。这篇文章记录了分析、解决方法。 一、问题现象 问题描述:exfat驱动更新后,exfat格式的U盘用exportfs命令NFS导出会报错 $ exportfs -o ro,fsid0,no_ro…

用飞书写博客,并自动部署

feishu-vitepress 用飞书写博客,并自动部署 目前的静态博客如vitepress,主要是用markdown来写内容。markdown虽然可读性比较好,但是在文章中贴图片有点麻烦,需要先保存图片到asset目录下,再在markdown中写图片地址。 平时工作主要…

软件方案评审与模块优化:从FOC模块出发的电控平台建设

一、背景 洞悉模块发展趋势,定制行业应用特点,明确优化方向与阶段性目标 随着科技进步的飞速发展,模块化设计已成为众多行业产品开发的核心理念。无论是软件系统、硬件组件,还是复杂系统中的功能模块,都需要对其发展…

STM32学习 BKP

BKP就是备份寄存器的意思,听名字就知道它的作用就是用来备份数据的。下面是手册当中的描述。备份寄存器是42个16位的寄存器,可用来存储84个字节的用户应用程序数据。他们处在备份域 里,当VDD电源被切断,他们仍然由VBAT维持供电。当…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串分隔(二)(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串分隔(二)(100分) 🌍 评测功能需要订阅专栏后私信联系…

【推荐】Perl入门教程特点功能文本处理读取文件替换文本写入文件分割字符数据库处理环境准备安装(包含示咧)

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

WSL Ubuntu安装TensorFlow-GPU、PyTorch-GPU

在Windows 11的WSL Ubuntu中安装TensorFlow-GPU、PyTorch-GPU 0、WSL Ubuntu安装 在Windows 11的商店中下载即可,此处以Ubuntu22.04.3为例 1、CUDA Toolkit安装 参考公孙启的文章Windows11 WSL Ubuntu Pycharm Conda for deeplearning前往nVidia官网下载CUDA …