我们都知道TCP协议是面向连接的, 建立连接时需要三次握手, 断开连接时需要四次挥手, 那三次握手和四次挥手的具体流程是怎样的呢? 为什么建立连接时需要三次握手, 两次行不行? 为什么断开连接时需要四次挥手, 三次行不行? 下面我们就一起来了解下.
TCP协议格式
我们先来了解下TCP报文中一些重要的字段.
- 源端口和目的端口
客户端和服务端的端口号. - 序列号
序列号是报文段发送的数据中第一个字节的序列号, 比如序列号为100, 数据有300个字节, 那下一个报文段的序列号为400. 序列号确保了TCP传输的有序性. - 确认号
指下一个期待收到的字节序列号, 表明该序列号之前的所有数据已经正确无误的收到. 确认号只有当ACK标识位为1时才有效, 比如TCP连接第二次握手时ACK标识位为1. - 标识位
- SYN
同步序列号, 用于建立连接过程. 在连接请求中SYN=1和ACK=0表示没有确认号. SYN=1和ACK=1表示有确认号. - ACK
同步确认号, 为1表示确认号有效, 为0表示确认号无效. - FIN
释放连接, 为1表示发送方已经没有数据发送了.
- SYN
- 窗口
滑动窗口大小(TCP缓冲区大小), 用来控制发送端发送数据的速率, 从而达到流量控制. - 数据
TCP 报文段中的数据部分是可选的.