2015/12/22

传输层TCP数据报


TCP数据报格式

/blog/img/tcp_01.jpg


源端口:占16位,它标识源主机的一个应用进程。


目标端口:占16位,它标识目的主机的一个应用进程。


序号:占32位,Seq(Sequence Number),用来标识从计算机A发送到计算机B的数据包的序号,计算机发送数据时对此进行标记。


确认号:占32位,Ack(Acknowledge Number),客户端和服务器端都可以发送,Ack = Seq + 1。


TCP报头长度:占4位,单位为 32bit,如1111就表示:15*32/8 = 60字节。因此TCP最多有60个字节的首部。在没有任何选项和填充情况下,正常的长度为20个字节。


保留位:占6位,保留将来使用,目前必须置为0。


标志位:每个标志位占用1bit,共有6个,分别为 URG、ACK、PSH、RST、SYN、FIN,具体含义如下:

URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。
PSH:为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
RST:重置连接,由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题。
SYN:建立一个新连接。
FIN:断开一个连接。
对英文字母缩写的总结:
Seq 是 Sequence 的缩写,表示序列;
Ack(ACK) 是 Acknowledge 的缩写,表示确认;
SYN 是 Synchronous 的缩写,愿意是“同步的”,这里表示建立同步连接;
FIN 是 Finish 的缩写,表示完成。

窗口大小:占16位,数据字节数,表示从确认号(Ack)开始,本报文的源方可以接收的字节数,即源方接收窗口大小。窗口大小是一个 16bit 字段,因而窗口大小最大为 65535。


校验和:占16位,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。