src port:源端口,2个字节,是一个大于1023的16位数字,由基于TCP应用程序的用户进程随机选择网络
dst port:目的端口,2个字节,指明接收者所用的端口号,通常由应用程序来指定ide
Sequence number:顺序号,4个字节,用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。若是将字节流看做在两个应用程序间的单向流动,则 TCP 用顺序号对每一个字节进行计数。序号是 32bit 的无符号数,序号到达 (2^32) - 1 后又从 0 开始。当创建一个新的链接时, SYN 标志变 1 ,顺序号字段包含由这个主机选择的该链接的初始顺序号 ISN ( Initial Sequence Number )3d
Acknowledgement number:确认号,4个字节,包含发送确认的一端所指望收到的下一个顺序号。所以,确认序号应当是上次已成功收到数据字节顺序号加 1 。只有 ACK 标志为 1 时确认序号字段才有效指针
Offset:报头长度,4位,给出报头中 32bit 字的数目。须要这个值是由于任选字段的长度是可变的。这个字段占 4bit , 即TCP 最多有 60(15*4) 字节的首部code
Resrvd:保留区域,6位,保留给未来使用,目前必须置为 0 blog
Control Flags(6位)控制位包括进程
**URG**:为 1 表示紧急指针有效,为 0 则忽略紧急指针值 **ACK**:为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段 **PSH**:为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满 **RST**:用于复位因为主机崩溃或其余缘由而出现错误的链接。它还能够用于拒绝非法的报文段和拒绝链接请求。通常状况下,若是收到一个 RST 为 1 的报文,那么必定发生了某些问题 **SYN**:同步序号,为 1 表示链接请求,用于创建链接和使顺序号同步( synchronize ) **FIN**:用于释放链接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流
Window Size:窗口大小,2个字节,表示从确认号开始,本报文的源方能够接收的字节数,即源方接收窗口大小。窗口大小是一个 16bit 字段,于是窗口大小最大为 65535(2^16 - 1)同步
Checksum:校验和,2个字节,对整个的 TCP 报文段(包括 TCP 头部和 TCP 数据),以 16 位字进行计算所得。这是一个强制性的字段,要求由发送端计算和存储,并由接收端进行验证it
Urgent Pointer:紧急指针,2个字节,是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另外一端发送紧急数据的一种方式。 只有当URG 标志置 1 时紧急指针才有效io
Option and Pad:选项和填充,n*4字节,常见的可选字段是最长报文大小 MSS(Maximum Segment Size) 。每一个链接方一般都在通讯的第一个报文段(为创建链接而设置 SYN 标志的那个段)中指明这个选项,它指明本端所能接收的最大长度的报文段。选项长度不必定是 32 位字的整数倍,因此要加填充位,使得报头长度成为整字数
Data:数据,不定长度,为上层协议封装好的数据
指明本身指望对方发送TCP报文段时那个数据字段的长度。好比:1460字节。数据字段的长度加上TCP首部的长度才等于整个TCP报文段的长度。MSS不宜设的太大也不宜设的过小。若选择过小,极端状况下,TCP报文段只含有1字节数据,在IP层传输的数据报的开销至少有40字节(包括TCP报文段的首部和IP数据报的首部)。这样,网络的利用率就不会超过1/41。若TCP报文段很是长,那么在IP层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的TCP报文段。当传输出错时还要进行重传,这些也都会使开销增大。所以MSS应尽量大,只要在IP层传输时不须要再分片就行。在链接创建过程当中,双方都把本身可以支持的MSS写入这一字段。MSS只出如今SYN报文中。即:MSS出如今SYN=1的报文段中
MTU和MSS值的关系:MTU=MSS+IP Header+TCPHeader通讯双方最终的MSS值=较小MTU-IP Header-TCP Header