?首部固定部分各字段意义如下:
1 - 源端口和目的端口:各占 2 个字节,分别写入源端口和目的端口。IP 地址 + 端口号就可以确定一个进程地址
2 - 序号/序列号(Sequense Number,SN):占4字节,在一个 TCP 连接中传送的字节流中的每一个字节都按顺序编号。该字段表示本报文段所发送的数据的第一个字节的序号。初始序号称为 Init Sequense Number, ISN,让对方知道接下来接收数据的时候如何按序列号组装数据。
当一端为建立连接而发送它的 SYN 时,它会为连接选择一个初始序号。ISN 随时间而变化,因此每个连接都将具有不同的 ISN。如果 ISN 是固定的,攻击者很容易猜出后续的确认号,因此 ISN 是动态生成的。
3 - 确认号 ACK:占4字节,期望收到对方下一个报文段的第一个数据字节的序号。若确认号为 N,则表明:到序号 N-1 为止的所有数据都已正确收到,把2(8*4)个序号用完后可重复使用。
4 - 数据偏移(首部长度):占4位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。
5 - 保留:占 6 位,应置为 0,保留为今后使用。
? 保留位的右边还有 6 个控制位(重要),用来说明 该TCP报文段性质的:
-
紧急位 URG:当 URG = 1 时,表明此报文段中有紧急数据,是高优先级的数据,应尽快发送,不用在缓存中排队。该控制位需配合紧急指针使用(紧急指针指出本报文段中紧急数据的字节数) 举个例子:我们需要取消一个已经发送了很长程序的运行,因此用户从键盘发出中断命令。如果不使用紧急数据,那么这个指令将存储在接收 TCP 的缓存末尾,只有在所有的数据被处理完毕后这两个字符才被交付接收方的应用进程,这样做就无法实现立即中断。 -
确认 ACK:仅当 ACK = 1 时确认号字段才有效,当 ACK = 0 时确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置为 1。 -
推送 PSH:当两个应用进程进行交互式的通信时,有时在一端的应用进程希望在键入一个命令后立即就能收到对方的响应。在这种情况下,TCP 就可以使用推送(push)操作。这时,发送方 TCP 把 PSH 置为 1,并立即创建一个报文段发送出去。接收方 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程。而不用等到整个缓存都填满了后再向上交付。 -
复位 RST:当 RST = 1 时,表明 TCP 连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。 -
同步 SYN:SYN = 1 表示这是一个连接请求或连接接受报文。 当 SYN = 1 而 ACK = 0 时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使 SYN = 1 且 ACK = 1。 -
终止 FIN:用来释放一个连接。当 FIN = 1时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。 -
窗口:占2字节,发送本报文段的一方的接受窗口,即告诉对方自己还能接受多少个字节数据 -
检验和:占2字节,要加上伪首部把需要校验的数据依次进行二进制反码求和,接收方把重新计算的校验和和数据包的检验和比较,若相同则数据在发送端到接收端之间未发生的任何改动;反之丢弃。 -
紧急指针:占2字节,指出紧急数据在报文段中结束的位置,窗口为0也可以发送紧急数据。 -
选项:长度可变,最长可达4字节,MSS(556字节);窗口扩大(通过左移来扩大);时间戳(计算RTT)
|