TCP报文段(segment)首部格式

TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment)。

IP传给链路层的数据单元称作IP数据报(IP datagram)。

通过以太网传输的比特流称作(Frame)。

逐层封装:

TCP报文段(segment)首部格式_第1张图片

TCP报文段(segment)首部格式_第2张图片

  • 源端口号

发送端端口号,字段长16位(2字节)

  • 目标端口号

目标端端口号,字段长16位(2字节)

  • 序列号(sequence number)

指发送数据的第一个字节的编号,字段长度为32位。

TCP是面向字节流的,每个字节都按顺序编号,由于该字段为32位,即序列号可表示2^32(4294967296个字节,4G字节)的数据,序列号到达最大值后,从0重新开始编号。

注意:一个连接的序列号不是从0或者1开始的,而是建立连接时由计算机生成的随机数作为其初始值。

  • 确认应答号(acknowledge number)

指期望收到下一个报文段的第一个数据字节的序列号。该字段段长度也是32位。

ack = seq + 数据长度(单位字节)。

若收到的确认号为N,则表明:到N-1个字节的所有的数据均已被收到。

比如:A往B发送数据,B收到了A发过来的序列号为501的报文段,该报文长200字节,则表名B收到了(501~700序列号的数据,所以B往A发送的确认号应该是701。

  • 数据偏移(data offset,也表示tcp首部长度)

表示tcp报文段的数据距离tcp报文段的起始处有多远。(实际就表示tcp首部的长度)。

该字段长4位,可表示0101~1111 个数,单位:"4字节"。所以tcp首部的长度范围:20字节~60字节

  • 保留位(reserved)

该字段长4位,主要为以后tcp扩展使用。一般都为0。

  • 控制位(control flag)

该字段长8位。分别如下:

  • CWR(Congestion Window Reduced)

CWR标志和ECE标志都是用于IP首部的ECN字段。

  • ECE(ECN-Echo)

ECE标志表示ECN-Echo,为1时会通知通信对方,从对方到这边的网络有拥塞。

如果在收到数据包的IP首部(IP协议)中ECN为1,则会将TCP首部中的ECE设置为1.

CWR和ECE控制位是tcp/ip协议随着发展增加的功能:拥塞控制通知(Explict Congestion Notification,简称“ECN".

"ECN"是一个对IP协议和TCP协议的扩展,定义于RFC 3168(2001)。ECN允许拥塞控制的端对端通知而避免丢包。

  • URG

为1时,表示有紧急数据需要处理。发送方会将紧急数据插入到报文段的最前面,而在紧急数据后面的数据仍是普通数据。需要与tcp首部的紧急指针(urgent pointer)配合使用。

  • ACK

仅当ACK=1时,确认好字段才有效。当ACK=0时,确认号无效。tcp规定,在建立连接后所有传送的报文段都必须将ACK置为1

  • PSH

当PSH=1时,发送方会立即创建一个报文段发送出去。接收方在收到PSH=1的报文段,就尽快地交付给接收方应用进程,而不用等到整个缓存填满了再交付。

  • RST

当RST=1时,表示tcp连接出现严重差错,必须释放连接,然后重新建立连接。RST=1还用来拒绝非法的报文段或者拒绝打开一个连接。

  • SYN

当SYN=1时,表明这是一个连接请求或者连接接受报文。

  • FIN

用来关闭连接。当FIN=1时,表明此报文段的发送方的数据已发送完毕,请求释放该tcp连接。

  • 窗口大小(window size)

占2字节。表示发送方的通信对方(即接收方)允许发送方发送的数据量(字节为单位)。发送方的发送窗口大小也是依据于此。因为接收方的数据缓存空间是有限的,应用进程也在动态处理数据缓存空间的数据,所以该窗口值经常是动态变化着。

  • 校验和(checksum)

占2字节,检验首部和数据两部分。

  • 紧急指针(urgent pointer)

占2字节。紧急指针仅当URG=1时才有意义。它支出本报文段中的紧急数据的字节数(紧急数据结束后仍是普通数据)。注意:即使窗口为0时,也可发送紧急数据。

  • tcp选项(tcp option)

长度可变,最大40字节。只有"data offset">5时,才会有tcp选项。

tcp选项格式有两种:

1)1字节长的选项(也就是8位),只有Kind。比如:

2)4字节长的选项(也就是32位),有1字节Kind + 1字节Length + 选项数据 + [padding]。比如:

TCP报文段(segment)首部格式_第3张图片

  • 填充(padding)

"tcp选项"不足4字节的整数倍时,尾部填充的数据。

抓包样例明细:

TCP报文段(segment)首部格式_第4张图片

参考:

RFC 9293: Transmission Control Protocol (TCP)

你可能感兴趣的:(运维大桶,网络,tcp/ip,服务器)