TCP的三次握手,四次挥手
前言
老生常谈的一个知识点,再次总结一下,以更简单,清晰的角度
正文
三次握手
这个过程是客服端的发起方,面向服务器
需要知道两个标识:1,SYN(同步序列编号)2,ACK(确认标志)
第一次握手(SYN)
1,客户端发送一个SYN(同步序列编号)标志位置1的TCP段到服务器,以开始一个新的连接请求
2,这个SYN段可以看作是客户端向服务器说:“我想开始一个新的连接,这是我的初始序列号
第二次握手(SYN-ACK)
1,户端的SYN,同时自己也发送一个SYN请求,然后选择自己的初始序列号,并且在应答中设置ACK标志位置1,以确认客户端的SYN
2,这个步骤可以看作是服务器向客户端说:“我已经收到你的连接请求,这是我的初始序列号,我确认了你的初始序列号,让我们开始连接吧
第三次握手(ACK)
1,客户端收到服务器的SYN-ACK应答后,再次发送一个ACK段
2,这个步骤可以看作是客户端向服务器说:“我已经收到你的确认,我们可以开始传输数据了
四次挥手
挥手是用于终止一个已经建立的TCP连接的过程,所以客服端或者服务端都可以主动发起方
这里也只有两个概念,和握手同理。1,FIN(Finish,结束)2,ACK(确认标志)
第一次挥手(FIN)
1,主动关闭方发送一个FIN(Finish)标志位置1的TCP段到被动关闭方,表示它已经完成发送数据,并希望关闭到对方的数据传输,同时进入FIN_WAIT_1等待状态
第二次挥手(ACK)
1,被动关闭方收到这个FIN请求后,发送一个ACK标志位置1的TCP段作为应答,确认已经收到对方的FIN请求
2,此时被动方只是回复收到你的消息了,还没有同意能关闭。为啥不同意呢?因为我这边可能还有些数据没传完,给点时间等我继续处理完
3,此时主动关闭方收到这个ACK后进入FIN_WAIT_2等待状态
第三次挥手(FIN)
1,被动关闭方完成最后的数据处理后,发送一个自己的FIN段,请求关闭从它到主动关闭方的数据传输
2,被动关闭方进入LAST_ACK状态,等待最后的确认
第四次挥手(ACK)
1,主动关闭方收到这个FIN请求后,发送一个ACK段作为应答,确认已经收到对方的FIN请求。然后我这边就进入到TIME_WAIT状态,有人问了,为啥都收到了被动方的确认关闭,我这主动方还不关,嗯。。。仔细看看,我刚刚才发送了一个ACK过去作为应答,才发就关了,那万一对面没收到咋整,所以我这边会稍微等一会儿
2,被动关闭方收到这个ACK后,立即关闭连接,进入CLOSED状态
3,主动方等一会儿后(通常是2倍的最大段生命周期MSL)也就自己从TIME_WAIT状态转换到CLOSED状态,最终关闭连接