TCP报头字段分析
- Source Port(16位)
- 源端口号,范围为 0 ∼ 2 16 − 1 0\sim2^{16}-1 0∼216−1
- Destination Port(16位)
- 目的端口号,范围为 0 ∼ 2 16 − 1 0\sim2^{16}-1 0∼216−1
- Sequence Number(32位)
- 包的序列号,用于解决网络包乱序的问题,保证接收者接收的顺序性
- Acknowledge Number(32位)
- 确认序列号,向消息的发送者通知消息已经收到了
- 一般为Sequence Number+1
- 确认序列号,向消息的发送者通知消息已经收到了
- Offset(4位)
- 偏移量,用于计算整个TCP报头的长度
- 因为TCP报头中TCP Options字段的长度是可变的,所以需要一个方法来计算整个TCP报头的长度
- Offset表示的是整个TCP报头的长度
- Offset最小值为5,最大值为15
- Offset字段每增加1,TCP报头的长度增加4字节,所以TCP报头的最小长度是20字节,最大长度为60字节
- 偏移量,用于计算整个TCP报头的长度
- Reserved(4位)
- 保留位,保留着为今后使用,目前应置为0
- TCP Flags(8位)
- CWR(Congestion Window Reduced)(1位)
- CWR 标志与后面的 ECE 标志都用于IP首部的ECN字段
- ECE标志为1时,则通知对方已将拥塞窗口缩小
- CWR 标志与后面的 ECE 标志都用于IP首部的ECN字段
- ECE(ECN-Echo)(1位)
- 若其值为1则会通知对方,从对方到这边的网络有阻塞
- 在收到数据包的IP首部中ECN为1时,将TCP首部中的ECE设为1
- URG(1位)
- 该位设为1,表示包中有需要紧急处理的数据
- 需要紧急处理的数据与后面的紧急指针有关
- 该位设为1,表示包中有需要紧急处理的数据
- ACK(1位)
- 该位设为1,表示确认应答的字段有效
- TCP规定除了最初建立连接时的 SYN 包之外,其余的数据包的该位必须设为1
- PSH(1位)
- 该位设为1,表示需要将收到的数据立刻传给上层应用协议
- 若设为0,则先将数据进行缓存
- RST(1位)
- 该位设为1,表示 TCP 连接出现异常必须强制断开连接
- SYN(1位)
- 该位设为 1,表示希望建立连接,并在其序列号的字段进行序列号初值设定
- FIN(1位)
- 该位设为 1,表示今后不再有数据发送,希望断开连接。
- 当通信结束希望断开连接时,通信双方的主机之间就可以相互交换 FIN 位置为 1 的 TCP 段。每个主机又对对方的 FIN 包进行确认应答之后可以断开连接。
- 不过,主机收到 FIN 设置为 1 的 TCP 段之后不必马上回复一个 FIN 包,而是可以等到缓冲区中的所有数据都因为已成功发送而被自动删除之后再发 FIN 包;
- 该位设为 1,表示今后不再有数据发送,希望断开连接。
- Window(16位)
- 表示该TCP报文发送方目前本身有的缓冲器容量(Receive Buffer),单位为字节
- 当 Window=0 时,代表缓冲器已经额满,应暂停传输数据
- TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限,这个值是本机期望一次接收的字节数。
- Checksum(16位)
- 校验和,用于校验TCP报文头和被封装的数据是否出错
- Urgent Pointer(16位)
- 只有在 URG 控制位为 1 时有效
- 该字段的数值表示本报文段中紧急数据的指针
- 从数据部分的首位到紧急指针所在的位置为止是紧急数据
- TCP Options(长度为32位的整数倍)
- 用于传输附加信息
- 为了保证TCP报头的长度为32位的整数倍,需要用0来进行填充TCP Options的剩余部位,使其为32位的整数倍
- CWR(Congestion Window Reduced)(1位)