1. TCP报文格式结构
TCP报文是TCP层传输的数据单元,也叫报文段。
2. TCP报文格式各参数解释
2.1 端口号
端口号,用来标识同一台计算机的不同的应用进程。
1)源端口:源端口和IP地址的作用是标识报文的返回地址;
2)目的端口:目的端口指明接收方计算机的应用程序接口;
PS:TCP报文头中的源端口号和目的端口号同IP数据报中的源IP和目的IP唯一确定一条TCP连接。
2.2 序号和确认号
- 序号和确认号,是TCP可靠传输的关键部分。
- 序号是本报文段发送的数据组的第一个字节的序号。
- 在TCP传送的流中,每一个字节一个序号。eg.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400.所以序号确保了TCP传输的有序性。
- 确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志为0.
2.3 数据偏移/首部长度
-
首部长度占4bits,由于首部可能含有可选项内容,因此TCP报文头的长度是不确定的,报文头不包含任何任选字段,则长度为20字节。
-
4位首部长度字段所能表示的最大值为1111,转化为十进制为15,15*32/8=60,故报文头最大长度为60字节。
-
首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。
2.4 保留
为将来定义新的用途保留,一般置为0
2.5 控制位
控制位有:URG,ACK,PSH,RST,SYN,FIN.共6个,每一个标志位表示一个控制功能。
1)URG:紧急指针标志,为1时表示紧急指针有效,为0时忽略紧急指针
2)ACK:确认序号标志,为1时表示确认号有效,为0时表示报文中不含确认信息,忽略确认号字段。
3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接受到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接,或者用于拒绝非法的报文段和拒绝连接请求。
5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1
6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
2.6 窗口
- 滑动窗口大小,用来告知发送端接收端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。
- 窗口大小是一个16bit字段,因而窗口大小最大为65535.
2.7 校验和
奇偶校验,此校验和是对整个TCP报文段,包括TCP头部和TCP数据,以16位进行计算所得。由发送端计算和存储,并由接收端进行验证。
2.8 紧急指针
- 只有当URG标志置1时,紧急指针才有效。
- 紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。
- TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。
2.9 选项和填充
- 最常见的可选字段是:最长报文大小,及MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段中指明这个选项(为了建立连接而设置SYN为1的那个段),表示本端所能接受的最大报文段的长度。
- 选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保障TCP头是32的整数倍。
2.10 数据部分
- TCP报文段中数据部分是可选的,在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP首部。
- 如果一方没有数据发送,也使用没有任何数据的首部来确认收到的数据。
- 在处理超时许多的情况下,会发送不带任何数据的报文段。