TCP包主要是由TCP首部和TCP报文数据部分组成。
-
源端口号和目标端口号:这两个字段分别占用16位,用于标识发送方和接收方的端口。
-
序列号:这个32位的字段记录了数据段的第一个字节的序号。通过序列号,接收方可以重新组装收到的数据段,这对于保证数据的顺序性至关重要。
-
确认号:这个32位的字段包含了发送方期望的下一个序列号。也即希望下一个接收的字节的序列号。这是确认所收到的数据正确无误。
-
数据偏移:这个4位的字段指示了头部的长度,由于TCP头部包含可选字段,所以需要这个字段指出头部和数据部分的边界。
-
保留:这个字段占6位,为未来的使用预留。
-
控制位:这个字段占用6位,这六个二进制比特位分别是URG(紧急),ACK(确认),PSH(推送),RST(复位),SYN(同步)和FIN(结束)。
-
窗口大小:接收端通过这个16位字段告诉发送端自己的接收窗口大小。
-
校验和:这个16位的字段用于检测数据传输中的错误。
-
紧急指针:当URG位设置时,这个16位的字段才有意义,表示紧急数据在数据流中的结束位置。
-
选项字段:这个字段是可选的,常见的选项有最大段长度(MSS),窗口缩放系数(Window scale factor)等。