TCP报文结构

TCP报文结构

在这里插入图片描述

TCP报文由俩部分组成:TCP报头和TCP数据
TCP报文是TCP传输的数据单元

  • 端口号:用来标识一台主机的不同进程

1) 源端端口号:源端口和IP层解析出来的IP地址标识报文的发送地,同时也确定了报文的返回地址
2) 对端端口号:表明了该数据报是发送给接收方计算机的具体的一个应用程序

  • 序号和确定序号:TCP可靠传输的保障

1) 序号:文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。例如:一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性
2) 确认序号:即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如收到一个报文段的序号为300,报文段数据部分共有100字节,回复的ACK的确认序号就是400

  • 数据偏移:也叫做首部长度,以32位比特位为长度单位

1) 使用4个比特位,因为报头数据中含有可选项字段,所以TCP报头的长度是不确定的,除去可选项字段TCP的长度为20字节,4bit最大表示的数据为15,15 * (32 / 8)= 60 ,故。TCP报头最大长度为60字节

  • 保留:为将来定义新的用途保留,现在一般置0
  • 标志位:UGR ACK PSH RST SYN FIN ,六个标志位代表六个不同的功能

1) UGR: 紧急指针标志,为 1 时表示紧急指针有效,为 0 则忽略紧急指针
2) ACK: 确认序号标志,为 1 时表示确认序号有效,为 0 则表示报文中不含有确认信息,忽略确认字段号
3) PSH: push标志,为 1 表示是带有push标志的数据,指示接收方在接收到数据以后,应尽快的将这个报文交付到应用程序,而不是在缓冲区缓冲
4) RST: 重置连接标志,用于由主机崩溃或者其他原因而出现错误的连接,或者用于拒绝非法的报文段和拒绝连接请求
5) SYN: 同步序号,用于连接建立过程,在请求连接的时候,SYN=1和ACK=0表示该数据段没有捎带确认域,而连接应答捎带一个确认,表示为SYN=1和ACK=1
6) FIN: 断开连接标志,用于释放连接,为 1 表示发送方已经没有数据发送,即关闭数据流

  • 窗口:滑动窗口大小,用来告知发送端接收端的缓存大小,以此来控制发送端的发送速率,从而达到流量控制。窗口大小是一个16比特位的字段,因而窗口大小最大为65535字节
  • 校验和: 奇偶校验,此校验和是对整个TCP报文段,包括TCP头部和TCP数据,以16位字进行计算所得,由发送端计算和存储,并由接收端进行验证
  • 紧急指针: 只有当URG标志置为1的时候,紧急指针才有效,紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式
  • 选项和填充: 最常见的可选字段是最长报文的大小,又称为MSS,每个连接方通常在通信的第一个报文段(也就是第一次握手的SYN报文的时候)中指明这个选项,表示本端所能接受的最大报文段的长度。提示:选项长度不一定是32位的整倍数,所以要有填充位,即在这个字段中加入额外的零,以保证TCP头是32的整倍数
  • 数据部分: TCP报文段中的数据部分是可选的,在一个建立连接和断开连接的时候,双方交换的报文段只有TCP的首部。如果一方没有数据要发送,也灭幼使用任何数据的首部俩确认收到的数据,在处理超时的许多情况中,也会发送不带你任何数据的报文段。

转载:TCP报文格式详解_杜Xinyu的博客-CSDN博客_tcp格式

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FINS(Factory Interface Network Service)是一种基于TCP/IP的通信协议,用于PLC(Programmable Logic Controller,可编程逻辑控制器)与上位机之间的通信。FINS协议采用了TCP作为传输层协议,并使用了自定义的应用层协议。 FINS协议的TCP报文结构如下: | 字段 | 长度(字节) | 描述 | | :----------: | :------------: | :---------------------------------------------------------: | | 代码 | 1 | 协议版本、数据类型和数据长度 | | 目标节点 | 1 | 目标节点地址 | | 目标单元 | 1 | 目标单元地址 | | 源节点 | 1 | 源节点地址 | | 源单元 | 1 | 源单元地址 | | 服务代码 | 2 | 请求或响应服务代码 | | 命令码 | 2 | 请求或响应命令 | | 数据长度 | 2 | 数据长度 | | 数据 | 数据长度(可变) | 请求或响应数据 | | FCS(校验码) | 2 | 用于检验数据的完整性,由数据段的每个字节按位异或得到的16位值 | 其中,代码字段包括协议版本、数据类型和数据长度。协议版本指FINS协议的版本号,数据类型指请求或响应数据类型,数据长度指数据段的长度。目标节点和目标单元字段指目标PLC的节点地址和单元地址,源节点和源单元字段指本PLC的节点地址和单元地址。服务代码和命令码字段指服务请求或响应的类型和具体命令,数据长度字段指数据段的长度,数据字段存储请求或响应的具体数据。最后,FCS字段是用于检验数据的完整性的校验码,由数据段的每个字节按位异或得到的16位值。 以上是FINS协议的TCP报文结构解析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值