
序号和确认号
ACK:TCP 协议规定,只有 ACK=1 时有效,也规定连接建立后所有发送的报文的 ACK 必须为 1SYN:在连接建立时用来同步序号。当 SYN=1 而 ACK=0 时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使 SYN=1 和 ACK=1。因此 SYN 置 1 就表示这是一个连接请求或连接接受报文FIN:用来释放一个连接。当 FIN=1 表明此发送方的数据已经发送完毕并要求释放连接
三次握手和四次挥手
TCP 需要建立一条可靠的连接,那么对于一条可靠的连接来说,最起码的是发出去的请求能收到对方的确认。所以 Client 发送 SYN 并受到 ACK 后,才能确认连接建立,同样 Server 也需要发送 SYN 并受到 ACK 才能确认建立连接,这样最少需要三次请求,也就是 三次握手
TCP 是全双工模式,也就是双方可以同时发送和接收消息。Client 发送 FIN 并收到 ACK 只是确认了 Client 没有更多数据需要传输,此时 Client 不能关闭连接,因为 Server 可能还会有数据传输过来。而当 Server 发送 FIN 并收到 ACK 后,双方都确认没有更多的消息需要传递,于是关闭连接。这样最少需要 四次挥手
四次挥手之所以比三次握手多一次是因为:
SYN 和 ACK 合并为一个报文节省流量ACK 响应 Client 的 FIN 后,Server 依然可以继续发送报文,此时 Client 进入等待状态继续接收 Server 报文直到 Server 发送完毕并发送 FIN,FIN 和 ACK 并不能合并为一个报文