源端口(Source Port) : 16bits, 标识数据发送方对应的应用层程序
目的端口(Destination Port) : 16bits, 标识数据接收方对应的应用层程序
端口号的取值范围: 0~65535,详情见后面的知识点。
序列号(Sequence Number) : 32bits, 标识数据发送方所发出数据的编号,序列号以字节为单位。
确认号(Acknowledgment Number) : 32bits, 标识数据接收方期望下次收到的数据编号。
报头长度(Header Length) : 4bits, 标识TCP报头的长度,单位是32bits (即4个字节)
也就是说TCP的报头长度最大值为: 154=60字节,最小是20字节。
保留位(Reserved) : 3bits, 保留,暂未使用(可能将来会用于其他的标志位)。
标志位(Flags) : 9bits
①Nonce:详细见RFC 3540,同样是关于ECN相关的一个参数。
②Congestion Window Reduced (CWR):拥塞窗门减少,CWR= 1表示链路拥塞,会减少TCP窗口。
③ECN-Echo (ECE) : Explicit Congestion Notification显式拥塞通告。
④Urgent (URG) :紧急,标识高优先级的紧急数据,URG=1表示报文中包含紧急数据,需要优先处理。
并且只有URG= 1时,TCP报头中的紧急指针字段才会生效。
⑤Acknowledgment (ACK) :确认,表示TCP报头中的确认号是否有效,ACK=1代表有效。
⑥Push (PSH) : 推送,PSH=1,表示需要把接收到的数据推送给上层应用程序,而不是缓存起来。
⑦Reset (RST) : 重置,复位。RST=1,表示TCP连接出现异常,需要重新建立。
⑧Syn (SYN) :同步,SYN=1,表示请求建立连接,并同步双方的序列号。
⑨Fin (FIN) :结束,FIN=1, 表示数据已经发送完成,请求关闭连接。
窗口大小(Window Size) : 16bits, 表示数据接收方当前可以接收的最大数据量,单位是字节。窗口大小其实代表了数据接收方当前的接收缓存池的大小,告知发送方不要一次性发送过量的数据。
校验和(Checksum) :16bits,用于[TCP头部+应用层数据]的差错校验。
紧急指针(Urgent Pointer) : 16bits, 标明紧急数据的字节数,与序列号搭配使用,单位是字节。
*可选项&填充项(Options & Padding) : 0~40字节,用于协商一-些其他参数。
最常用的可选项就是协商MSS (最大分段长度)参数。
序列号是随即生成的,确认号是序列号+数据字节大小
特殊情况,syn置位为1的时候,视为数据字节大小为1.