一起学习交流~

TCP报文详解

路由 jsq 10个月前 (11-28) 465次浏览 已收录 0个评论

TCP报文是TCP层传输的数据单元,也称为报文段(segment)

源端口和目的端口字段

  • Source port:源端口,标识哪个应用程序发送。长度为16bit。
  • Destination port:目的端口,标识哪个应用程序接受。长度为16bit。

序列号字段

Sequence Number:序号字段。TCP连接中传输的数据流每个字节都编上一个序号。当SYN标记不为1时,这是当前数据分段第一个字母的序列号;如果SYN的值是1时,这个字段的值就是初始序列值(ISN),用于对序列号进行同步。这时,第一个字节的序列号比这个字段的值大1,也就是ISN加1。长度为32bit。

确认号字段

Acknowledgement number:确认序列号。确认序列号,是期望收到对方下一个报文段数据的第1
个字节的序号,即上次已成功接收到的数据段的最后一个字节数据的序号加1。只有
Ack标识为1,此字段有效。长度为32bit。

数据偏移字段

Header length:头部长度,指出TCP报文头部长度,以32比特(4字节)为计算单位。
若无选项内容,则该字段为5,即头部为20字节。因为4位最大能表示15,所以TCP头部最大为60字节。

保留字段

Reserved:保留,必须填0,长度为6bit。

控制字段

Control bits:控制位,代表不同状态下的TCP数据段,长度为6bit。

  • URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
  • ACK:表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
  • PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
  • RST:表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
  • SYN:在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
  • FIN:标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。

窗口大小字段

Windows:窗口大小,这个值表明当前接收端可接受的最大的数据总数
(以字节为单位)。窗口最大为65535字节。长度为16bit。

TCP校验和字段

checksum:校验字段,是一个强制性的字段,由发端计算和存储,并由收端进行验
证。在计算检验和时,要包括TCP头部和TCP数据,同时在TCP报文段的前面加上12
字节的伪头部。长度为16bit。

紧急指针字段

Urgent:紧急指针字段,仅当前面的 URG 控制位为 1 时才有意义。它指出本数据段中为紧急数据的字节数,当所有紧急数据处理完后,TCP 就会告诉应用程序恢复到正常操作。即使当前窗口大小为 0,也是可以发送紧急数据的,因为紧急数据无须缓存。长度为16bit。

可选字段

Options:长度不定,但长度必须是 32bits 的整数倍。

喜欢 (0)
订阅评论
提醒
guest
0 评论
内联反馈
查看所有评论