四次挥手场景
TCP客户端与服务器断开连接的时候,在程序中使用close()函数,会使用TCP协议四次挥手。
客户端和服务端都可以主动发起。
因TCP连接时候是双向的,所以断开的时候也是双向的。
步骤
三次挥手可以吗?可以是可以,和状态有关。
四次挥手是用于客户端和服务器断开连接的时候,可以由客户端或者服务器任一方主动发起断开请求。
第一次挥手主动方发起,如客户端发起断开连接请求,服务器同意请求但还有数据发送的时候,可以继续发送,当服务器想断开连接的时候进行第三次挥手,发送断开连接请求,然后客户端应答。
三次握手为什么是三次不是四次?
三次握手由客户端主动发起,客户端请求连接的时候,服务器若不同意直接拒绝,若同意说明肯定也要请求和客户端建立连接,所以同意和请求连接一起传输,进行第二次握手,然后客户端同意服务器请求进行第三次握手。
TCP状态转换
等2MSL目的是确保另一方收到同意断开请求,被动方发送FIN后没有收到ACK会重传FIN,直到收到ACK。
文章来源:https://www.toymoban.com/news/detail-635222.html
握手与挥手/状态 | Client | Server | |
---|---|---|---|
LISTEN | |||
第一次握手 | SYN_SENT | –> | LISTEN->SYN_RCVD |
第二次握手 | SYN_SENT->ESTABLISHED | <– | SYN_RCVD |
第三次握手 | ESTABLISHED | –> | SYN_RCVD->ESTABLISHED |
数据传输 | |||
第一次挥手 | ->FIN_WAIT_1 | –> | CLOSE_WAIT |
第二次挥手 | FIN_WAIT_1->FIN_WAIT_2 | <– | CLOSE_WAIT |
第三次挥手 | TIME_WAIT | <– | CLOSE_WAIT->LAST_ACK |
第四次挥手 | TIME_WAIT | –> | LAST_ACK |
注意:文章来源地址https://www.toymoban.com/news/detail-635222.html
- 连接三次握手主动发起方需要是客户端。
- 断开连接请求的四次挥手主动发起方可以是客户端或者服务器的任一方。
到了这里,关于TCP的四次挥手与TCP状态转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!