- 源端口和目的端口:各占2个字节。
- 序号:4字节。0~2^31-1,指的是本报文段所发送的数据的第一个字节的序号。比如本次发送的报文从301开始,报文长度是100字节,那么下次发送的报文段序号应该就是401。
- 确认号:4字节。确认到该字节为止之前的报文都正确接收了。确认号=N,那么表明到N-1为止的所有数据都已正确接收。
- 数据偏移:4位,因为有长度不定的选项字节段,因此用数据偏移来表示TCP报文段的数据从哪里开始。前面从源端口到紧急指针是固定的20个字节,数据偏移共有4位,能表达最大的数是15,数据偏移的单位是32位,也就是4字节,因此,tcp首部长度不能超过15*4=60字节,也是意味着选项的长度不能超过40字节。
- 保留:占6位,为今后使用,目前置为0.
- 紧急URG:URG=1时,说明这个报文段是紧急数据,你应该立即上传给应用层,比如中断命令等。
- 确认ACK:ACK=1时,是TCP建立阶段用,以及在连接简历后所有报文段都置1.
- 推送PSH:PSH=1时,需要快速响应的报文,接收方不等缓存填满,直接把目前的缓存都推送上去
- 复位RST:RST=1时,表明TCP连接出现严重差错,必须释放连接,然后重新建立连接。
- 同步SYN:建立连接时用,SYN=1,ACK=0时,代表建立连接报文段,对方的响应是SYN=1,ACK=1。因此SYN=1时就代表这是一个请求连接或连接接受报文。
- 终止FIN:用来释放连接,FIN置1时,就代表要求释放运输连接
- 窗口:2字节,指的是发送该报文段的接收窗口还能接受多少,告诉对方,你还能发送多少。这个是根据缓存大小和缓存内已存储的数据大小决定的
- 校验和:2字节。
- 紧急指针:2字节,配合URG使用,URG置1时,它指出本报文段中的紧急数据的字节数(紧急数据结束以后就是普通数据),窗口为0时也是可以发送紧急数据的
- 选项:长度可变,最大40字节。最大报文段长度(MSS)、窗口扩大、时间戳、选择确认。