三次握手与四次挥手

- 三次握手
三次握手是客户端与服务端建立连接的过程。
目的:解决网络信道不可靠的问题。

第一次握手:客户端向服务端发送一个SYN包,目的为询问是否同意链接。
第二次握手:若对端同意连接,则回复一个SYN+ACK包。
第三次握手:若客户端收到,则回复一个ACK包。
连接建立。
客户端与服务端进入数据传输状态。
问题:为什么需要三次握手而不是两次?
三次握手可用防止已失效的请求报文突然传到服务器引起错误,导致两端状态不一致的问题,而二两次握手不能。
- 四次挥手
目的:在不可靠的网络链路中,进行可靠的连接断开。
处于连接状态的服务端和客户端都可以发起关闭连接请求。此时需要四次挥手来进行连接关闭

假设客户端要发起关闭连接请求则:
第一次挥手:向客户端发送一个FIN包,表示要关闭连接。客户端进入终止等待一状态(FIN-WAIT-1)。
第二次挥手:当服务端接收到FIN包,发送一个ACK包表示自己进入关闭等待状态(CLOSE-WIAIT),客户端进入终止等待二状态(FIN-WAIT-2)。
此时服务端还可以发送未发送的数据,客户端还能接收数据。
第三次挥手:当服务端发送完数据后,发送一个FIN包,进入最后确认状态(LAST-ACK)。
第四次挥手:客户端收到FIN包后,回复一个ACK包进入超时等待状态(TIMEE-WAIT),经过超时等待之后关闭连接。当服务端收到ACK包的时候立即关闭连接。
客户端需要超时等待的原因:
保证对端收到ACK包,若没有超时等待且ACK包丢失,服务端将一直处于最后确认状态。
若有超时等待,当ACK包丢失服务端未收到,则服务端将重发FIN包,客户端相应FIN包后将重发ACK包并刷新超时时间。
TCP三次握手与四次挥手详解
1325

被折叠的 条评论
为什么被折叠?



