您的位置:首页 > 理论基础 > 计算机网络

TCP三次挥手四次握手

2018-11-01 16:31 183 查看

这个知识点是面试出现的高频考点
三次握手

TCP的三次握手
第一次握手:
客户端发送信息到服务器,(确认号)seq = x (请求)SYN=1。完成后客户端的状态改变为发送状态(SYN-SENT)
第二次握手:
服务器接收客户端的请求,并回复给客户端收到请求,(初始序号)seq = y
(确认号 )ack= x+1 SYN =1 ACK=1 。此时客户端由listen状态转变为可接收状态(SYN-RECV)
第三次握手:
客户端接到服务器可接收请求,再次回复服务器信息,ACK=1 ,
(序列值)seq=x+1,ack(确认号)=y+1.客户端接到请求后,客户端先建立连接,分配资源。随后服务器接到请求后,服务器建立连接分配资源。

四次挥手

第一次挥手
(1)A发送关闭报文到B,A由连接状态变为FIN-WAIT1
第二次挥手
(2)B接到A的报文后,B由连接状态变为CLOSE-WAIT
第三次挥手
(3)A接到B的报文后,A由FIN-WAIT1变为FIN-WATI2
(4)此时A不回复给B报文,而是等待B发送连接释放报文(且不发送数据)B进入LAST-ACK
第四次挥手
(5)A接到B的释放报文后,最后A发送报文给B确认报文,但是此时A的TCP没有直接进入CLOSED状态,而是等待2MSL时间后A才进入CLOSED状态
(6)接到确认回复后B进入CLOSED状态

[注1]等待2MSL时间后,A才进入CLOSED状态的原因是:
考虑到网络延迟等原因造成处于LAST-ACK状态B没有收到A最好发的确认请求,A会重新发送确认报文。而2MSL(是两个报文最长寿命)足够B收到确认报文变为CLOSED状态。
[注2]为什么是4次挥手而不是3次挥手:
第二次挥手的目的是回复A的请求。此时服务器解堵塞但是没有调用close()
第三次挥手的目的是请求进入LAST-ACK状态。这次挥手的开启要素是服务器端口调用了close()关闭TCP套接字。
两次挥手的时间并不是同时进行的,因此不能像三次握手那样合成一次

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: