TCP三次挥手四次握手
这个知识点是面试出现的高频考点
三次握手
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套接字。
两次挥手的时间并不是同时进行的,因此不能像三次握手那样合成一次
- TCP的三次握手四次挥手
- TCP的三次握手与四次挥手
- TCP三次握手/四次挥手
- UNIX网络编程——SOCKET API和TCP STATE的对应关系_三次握手_四次挥手及TCP延迟确认
- tcp为什么要三次握手四次挥手
- tcp 三次握手和四次挥手
- 【TCP/IP详解 卷一:协议】第十八章 TCP连接 的建立与终止 (1)三次握手,四次挥手
- TCP连接的建立(三次握手)和释放(四次挥手)
- 计算机网络笔记--TCP三次握手与四次挥手过程状态分析
- 详解下TCP的三次握手和四次挥手
- TCP协议中的三次握手和四次挥手(图解)
- TCP三次握手和四次挥手详解
- wireshark抓包图解 TCP三次握手/四次挥手详解
- TCP 三次握手和四次挥手(使用Wireshark进行抓包查看)
- TCP 三次握手/四次挥手
- TCP协议的三次握手与四次挥手
- TCP协议三次握手、四次挥手详解
- TCP协议中的三次握手和四次挥手(图解)
- TCP的三次握手(建立连接)和四次挥手(关闭连接)
- TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释