5.9 TCP报文段的首部格式
5.9 TCP报文段的首部格式
- 为了实现可靠传输,TCP采用了面向字节流的方式。
- 但TCP在发送数据时,是从发送缓存取出一部分或全部字节并给其添加一个首部使之成为TCP报文段后进行发送。
- 一个TCP报文段由首部和数据载荷两部分构成;
- TCP的全部功能都体现在它首部中各字段的作用。
字段 | 说明 |
---|---|
源端口 | 占16比特,写入源端口号,用来标识发送该TCP报文段的应用进程 |
目的端口 | 占16比特,写入目的端口号,用来标识接收该TCP报文段的应用进程 |
序号 | 占32比特,取值范围[0,232-1],序号增加到最后一个后,下一个序号就又回到0。 指出本TCP报文段数据载荷的第一个字节的序号。 |
确认号 | 占32比特,取值范围[0,232-1],确认号增加到最后一个后,下一个确认号就又回到0。 指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。 |
确认标志位ACK | 取值为1时确认号字段才有效:取值为0时确认号字段无效 |
数据偏移 | 占4比特,并以4字节为单位。 用来指出TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远。 |
保留 | 占6比特,保留为今后使用,但目前应置为0。 |
窗口 | 占16比特,以字节为单位。指出发送本报文段的一方的接收窗口。 窗口值作为接收方让发送方设置其发送窗口的依据。 这是以接收方的接收能力来控制发送方的发送能力,称为流量控制。 |
校验和 | 占16比特,检查范围包括TCP报文段的首部和数据载荷两部分。 在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。 |
同步标志位SYN | 在TCP连接建立时用来同步序号 |
终止标志位FIN | 用来释放TCP连接。 |
复位标志位RST | 用来复位TCP连接。 当RST=1时,表明TCP连接出现了异常,必须释放连接,然后再重新建立连接。 RST置1还用来拒绝一个非法的报文段或拒绝打开一个TCP连接。 |
推送标志位PSH | 接收方的TCP收到该标志位为1的报文段会尽快上交应用进程。 而不必等到接收缓存都填满后再向上交付。 |
紧急标志位URG | 取值为1时紧急指针字段有效:取值为0时紧急指针字段无效。 |
紧急指针 | 占16比特,以字节为单位,用来指明紧急数据的长度。 |
选项 | 1. 最大报文段长度MSS选项:TCP报文段数据载荷部分的最大长度。 2. 窗口扩大选项:为了扩大窗口(提高吞吐率) 3. 时间戳选项: a. 用来计算往返时间RTT b. 用于处理序号超范围的情况,又称为防止序号绕回PAWS。 4. 选择确认选项 选项的作用是为了扩展TCP报文段首部的功能 |
填充 | 由于选项的长度可变,因此使用填充来确保报文段首部能被4整除 (因为数据偏移字段,也就是首部长度字段,是以4字节为单位的) |
- 紧急数据:
- 当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。
- 紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。
- 接收方将紧急数据部分取出,并直接上交应用程序,而不必在接受缓存中排队。
5.9 TCP报文段的首部格式
http://binbo-zappy.github.io/2024/11/18/计算机网络/5-9-TCP报文段的首部格式/