TCP数据包格式(tcp协议报文格式)

要想对TCP有着较为详细的了解的话,那TCP的包格式是一定要了解,有了结构的清楚认识才能真正的理解它的工作过程和各种机制的原理,以下就是TCP的结构图:TCP数据包可分为TCP包头和来自应用层的数据两部分TCP段格式中间的标志位就是用于协议的一些机制的实现的比特位大家可以看到有6比特,它们依次如下:    URG、ACK、PSH、RST、SYN、FIN。

大家好,又见面了,我是你们的朋友全栈君。

TCP数据包格式:

要想对TCP有着较为详细的了解的话,那TCP的包格式是一定要了解,有了结构的清楚认识才能真正的理解它的工作过程和各种机制的原理,以下就是TCP的结构图:

TCP数据包格式(tcp协议报文格式)



TCP数据包可分为TCP包头和来自应用层的数据两部分




TCP段格式




中间的标志位就是用于协议的一些机制的实现的比特位大家可以看到有6比特,它们依次如下:




     URG、ACK、PSH、RST、SYN、FIN。




     URG表示紧急指针字段有效;




     ACK置位表示确认号字段有效;




     PSH表示当前报文需要请求推(push)操作;




     RST置位表示复位TCP连接;




     SYN用于建立TCP连接时同步序号;




     FIN用于释放TCP连接时标识发送方比特流结束。




源端口和目的端口
:各为16比特,用于表示应用层的连接。源端口表示产生数据包的应用层进程,而目的端口则表示数据包所要到达的目的进程。




序列号
:为32比特,表示数据流中的字节数。序列号为首字节在整个数据流中的位置。初始序列号随机产生,并在连接建立阶段予以同步。




确认号
:表示序号为确认号减去1的数据包及其以前的所有数据包已经正确接收,也就是说他相当于下一个准备接收的字节的序号。




头部信息
:4比特,用于指示数据起始位置。由于TCP包头中可选项的长度可变,因此整个包头的长度不固定。如果没有附加字段,则TCP数据包基本长度为20字节。




窗口
:16位,表示源端主机在请求接收端等待确认之前需要接收的字节数。它用于流量控制,窗口大小根据网络拥塞情况和资源可用性进行增减。




校验位
:16位。用于检查TCP数据包头和数据的一致性。




紧急指针
:16位。当URG码有效时只向紧急数据字节。



可选项:存在时表示TCP包头后还有另外的4字节数据。TCP常用的选项为最大数据包(并非整个TCP报文)MSS。每一个TCP段都包含一个固定的20字节的段头。TCP段头由20字节固定头和一些可选项组成。实际数据部分最多可以有65495(65535-20-20=65495)字节。

转载:http://blog.chinaunix.net/uid-26495963-id-3284813.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127986.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • CentOS 7如何配置yum源「建议收藏」

    CentOS 7如何配置yum源「建议收藏」相关说明:      本教程主要讲解配置“本地yum源”、“网络yum源”以及“ELEP源”yum简介:     1.Yum(全称为YellowdogUpdater,Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。        2.基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次…

  • 标准红外遥控的接收程序-松瀚汇编源程序

    标准红外遥控的接收程序-松瀚汇编源程序

  • C++ 中的getline()函数用法详解

    C++ 中的getline()函数用法详解    遇到了要输入一行字符串的操作,我想除了fgets()的方法(fgets()用法链接),getline()也是可以的,但是我对getline的操作不熟悉,便查阅了很多资料,发现都说的很模糊,借这个机会我想彻底理清楚getline的用法;  网上有说getline有两种用法的,我在这总结一下,一、getline()用的比较多的用法 1) istrea…

  • Python中list转成Json字符串

    Python中list转成Json字符串代码:#list转成Json格式数据deflistToJson(lst):importjsonimportnumpyasnpkeys=[str(x)forxinnp.arange(len(lst))]list_json=dict(zip(keys,lst))str_json=json.dumps(l…

    2022年10月17日
  • Spring Cloud的架构[通俗易懂]

    Spring Cloud的架构[通俗易懂]SpringCloud架构图Eureka用于服务注册和发现,利用了客户端的服务发现,所以它内部需要Ribbon作为客户端负载均衡。Hystrix,客户端容错保护,服务熔断、请求缓存、请求合并、依赖隔离。Feign,声明式服务调用。Bus,消息总线,配合Config仓库修改的一种Stream实现,Dashboard,Hystrix仪表盘,监控集群模式和单点模式,其中集群模式…

  • vs中文乱码怎么解决_visual studio code中文乱码

    vs中文乱码怎么解决_visual studio code中文乱码在Windows下使用VSCode编译运行,都出现中文乱码的问题,今天我就遇见了这种情况,上网搜了半天也没有找到正确的解决方法,现将我把我的方法晒一下.中文的windows下的cmd默认使用GBK的编码,每次需要的时候只要在VSCode终端输入命令:chcp65001,切换代码页到使用UTF-8就可以解决中文代码的问题,只不过这种方法太麻烦了,每次进入终端都要输入命令,那有没有永久性解决…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号