TCP协议
TCP(Transmission Control Protocol)协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 定义。 TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。
1. TCP协议格式
如图1所示为TCP协议格式。
- 源端口
表示发送端端口号,字段长16位
- 目的端口
表示接收端端口号,字段长16位
- 序列号
序列号是指发送数据的位置。每发送一次数据,就累加一次该数据字节数的大小,字段长32位
- 确认应答号
是指下一次应该收到的数据的序列号。实际上,它是指已收到确认应答号前一位为止的数据。发送端收到这个确认应答号以后可以认为在这个序号以前的数据都已经被正常接收,字段长32位
- 数据偏移
该字段表示TCP所传输的数据部分应该从TCP包的哪个位开始计算,当然也可以把它看做TCP首部的长度。该字段长4位,单位为4字节(32位)。不包括选项字段的话,如图1所示TCP首部为20字节长,因此数据偏移字段可以设置为5。反之,如果该字段的值是5,那说明从TCP包的最一开始到20字节为止都是TCP首部,余下的部分为TCP数据。
- 保留
该字段主要是为了以后扩展时使用,其长度为4位。一般设置为0,但即使受到的包在该字段不为0,此包也不会被丢弃
- 控制位
字段长为8位,每一位从左到右分别为CWR、ECE、URG、ACK、PSH、RST、SYN、FIN。这些控制标志也叫控制位。当它们对应的位上值为1时,则表达含义。
- CWR(Congestion Window Reduced)
CWR Flag与后面的ECE Flag都用于IP首部的ECN字段。ECE flag为1时,则通知对方已经将拥塞窗口缩小。
- ECE(ECN-Echo)
ECE flag表示ECN-Echo。值为1会通知通信对方,从对方到这边的网络有拥塞。在收到数据包的IP首部中ECN为1时,将TCP首部中的ECE设置为1
- URG(Urgent Flag)
该位为1时,表示包中有需要紧急处理的数据。对于需要紧急处理的数据,会在后面的紧急指针中再进行解释。
- ACK(Acknowledge Flag)
该位为1时,确认应答的字段变为有效。TCP规定除了最初建立连接时的SYN包之外该位必须设置为1
- PSH(Push Flag)
该位为1时,表示需要将收到的数据立刻传给上层应用协议。PSH为0时,则不需要立即传而是先进性缓存
- RST(Reset Flag)
该位为1时,则表示TCP连接中出现异常必须强制断开连接。例如一个没有被使用的端口即使发来连接请求,也无法进行通信。此时就可以返回一个RST设置为1的包。此外,程序宕掉或切断电源等原因导致主机重启的情况下,由于所有的连接信息将全部被初始化,所以原有的TCP通信也将不能继续进行。这种情况下,如果通信对方发送一个设置为1的RST包,就会使通信强制断开连接
- SYN(Synchronize Flag)
用于建立连接。SYN为1表示希望建立连接,并在其序列号的字段进行序列号初始值的设定
- FIN(Fin Flag)
该位为1时,表示今后不会再有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为1的TCP段。每个主机又对对方的FIN包进行确认应答以后就可以断开连接。不过主机收到FIN设置为1的TCP段以后不必马上回复一个FIN包,而是可以等到缓冲区中的所有数据都因已成功发送而被自动删除之后再发。
- 窗口大小(Window Size)
该字段长为16位。用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小(8位字节)。
- 校验和(Checksum)
- 紧急指针(Urgent Pointer)
- 选项(Options)
图1:TCP协议格式
标签:协议,ECE,数据,段长,TCP,Flag,FIN From: https://www.cnblogs.com/bonne-chance/p/16630292.html