TCP三次握手与四次挥手

Posted yunxiaofei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP三次握手与四次挥手相关的知识,希望对你有一定的参考价值。

最近在了解web服务器方面的一些基本知识,看到了TCP的三次握手与四次挥手,在此记录以下。

1. TCP协议

TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

TCP通信需要经过创建连接、数据传送、终止连接三个步骤。

2. 三次握手与四次挥手

三次握手发生在创建连接阶段。客户端和服务器总共需要发送三个包。

第一次握手:客户端发送连接请求

第二次握手:服务器端选择自己 ISN 序列号,放到 Seq 域里,并将客户端的ISN加1发送确认应答。

第三次握手:客户端把服务器发来的ISN加1,发送确认包。


 四次挥手发生在终止连接阶段。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。

第一次挥手:假如客户端想关闭连接,发送FIN标志为1的包,表明自己不再发送数据,但还可以接收数据。

第二次挥手:服务器发送一个确认包,确认收到了客户端的终止请求。发送完确认包后,服务器进入等待状态,等待自己的数据发送完,客户端也进入等待状态,等待服务器发送关闭信号。

第三次挥手:服务器准备关闭连接,向客户端发送FIN标志为1的包,然后进入LAST-ACK状态,等待客户端的确认。

第四次挥手:客户端接收到服务器的关闭请求,发送确认包,然后进入等待状态,等待服务器可能发送的要求重传ACK包。服务器接收到确认包后就关闭连接,如果没有接收到,一段时间后就会重新发送关闭连接。客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接

技术图片

3. 为什么连接需要三次关闭需要四次

因为连接时只需要互相确认,没有数据传送,所以服务器端的发送和确认可以合并为一次;结束时服务器端可能还在传送数据,不能直接发送关闭信号,需要等待服务器发送完数据,才发送关闭信号。

参考链接:

[1] https://hit-alibaba.github.io/interview/basic/network/TCP.html

以上是关于TCP三次握手与四次挥手的主要内容,如果未能解决你的问题,请参考以下文章

TCP 与 UDP 三次握手与四次挥手 -----学习日志

TCP三次握手与四次挥手详解

三次握手与四次挥手

TCP协议的三次握手与四次挥手

图解tcp三次握手与四次挥手——北杨

TCP/IP三次握手与四次挥手的正确姿势