8位标志位: (TCP支持ECN功能时在Resv增加两个标志位:CWR、ECE,称为ECN域)
ECE(ECN ECHO):网络拥塞一般出现在路由交换时,在支持ECN功能情况下,发生拥塞时路由会设置IP中该标志位,接收端收到IP头中标志了ECN的报文后,在返回的数据ACK中设置ECE标志,表示链路发生拥塞,将拥塞消息通知发送端;CWR(Congestion Window Reduce):发送端收到ECE置位的数据后进行设置,用来通知接收端已收到ECE标志的数据,了解了拥塞情况,接收端收到CWR置位消息后,不再设置ECE标志,同时发送端发送CWR信息时,将开始减小拥塞窗口,以此减小数据发送量,避免拥塞; (引用:http://www.cnblogs.com/hadis-yuki/p/5467787.html)URG:紧急标志,置位后不需要按照正常报文按序处理,执行优先处理;ACK:确认标志;PSH:将缓存中的数据以及当前psh报文一起执行推送,从缓存区发出去;RST:强行复位标志;SYN:请求建链时置位该标志,第一个握手报文携带;FIN:请求连接关闭时置位该标志;Window Size:窗口大小,表示接收端接收缓存剩余大小,16bit;TCP Chechsum:校验和,包括TCP协议头与数据整体的校验字段,16bit;Urgent Pointer:标志位URG置位后使用,为一个正的偏移量,表示当前报文中起始字节开始需要偏移的长度,这个偏移到的字节就是紧急数据的结束字节,也就是通过偏移量确定了数据中需要紧急发送的字节个数,16bit;Option:一般用于握手时接收端,发送端信息的交互,以及数据交互过程中;最大40Byte;(当kind为0、1时,length为0)
kind = 2:MSS(Max Segment Size):握手报文中使用,表示可支持的TCP净荷长度(TCP默认MSS为536Byte,MSS+TCP_HdrLen+IP_HdrLen = MTU,一般MTU设置1500,IP头,TCP头最小各20Byte,因此净荷最小有576Byte,最大有1460Byte);kind = 3:WSOPT:窗口扩大系数,握手过程中确定,之后不再改变,且只有双方都支持时才有用;设置原因:协议头中窗口只有16bit,在实际发送中,为提高流量,16bit不能满足需求,只能增加窗口缓存,然而16bit无法表示,通过设置窗口因子,来偏移16bit窗口值显示大窗口;kind = 4:SACK_Permitted:是否支持选择确认(Select Acknowledgeable)开关,握手时设置;kind = 5:SACK:TCP通过ACK向发送端回复已确认接收顺序数据,通过SACK向发送端通知乱序收到的报文字节SN,发送端通过检查SACK自己判断需要重传哪些字节,因此接收端只需要向发送端通知自己的接收情况即可,SACK实现中采用“LeftEdge~RightEdge”的形式,LeftEdge、RightEdge表示接收到的乱序报文起始与结束字节SN; 如:接收端当前ExpAck为1501,表示1500及以前都已接收,期望接收1501开始的字节,此时乱序收到3001-4460,则接收端ACK报文中SACK设置为“3001-4461”;发送端收到该ACK后,检查SACK,判断出3001-4460已接收,1500及以前也接收,只需重传1501-3000即可; Option总长40Byte,Length占2Byte,所以8n+2 = 40,n最大4,最大可有4个SACK块; 通过SACK机制,将一个RTT中只能重传一个报文变为多个,可提高吞吐量;kind = 8:TSOPT:时间戳信息,以(TSecr+TSval)的形式表示,TSval=发送时时间戳,发送ACK时将TSval值写入TSecr,以新的时间戳写入TSval,因此发送端可通过该字段判断RTT,且该方式相对精确,总长8Byte;(参考:https://blog.csdn.net/atomzhong/article/details/78981505)
kind = 19:TCP-MD5:加密相关;kind = 28:UTO:用户超时时间,表示发送端在未收到ACK情况下等待ack的最长时间,计算方式如下: UTO=min(U_LIMIT, max(ADV_UTO, REMOTE_UTO, L_LIMIT)); ADV_UTO:本端通知远端的数值; REMOTE_UTO:远端通知本端的数值; U_LIMIT:本地系统为超时设置的额上边界,L_LIMIT为下边界; L_LIMIT:该数值一般大于连接的重传时间RTO;kind = 29:TCP-AO:认证选项,目的为替换早期的ND5;kind = 253/254:Experimental:实验预留位。