学过计算机网络的同学都知道 TCP 协议是计算机网络课程里面最复杂的协议之一, 还没有通信就要搞个什么三次握手, 断开还要什么四次分手, 中间还要什么流量控制啦, 拥塞控制, 滑动窗口什么的, 初学者看了就会头晕. 我们这篇短文先对三次握手和四次挥手做个介绍, 然后对 TCP 协议的其他内容在后面的文章陆续介绍.
通信基本流程
我们都知道 TCP 协议是面向连接的协议, 可以保证数据不丢失, 不重复, 不乱序的到达接收方. TCP 的通信过程大概是下图所示.
上图为 TCP 整个完整的通信过程, 首先经过三次握手建立连接 (绿色部分), 连接建立后可以正常通信 (蓝色部分), 通信完毕需要四次挥手断开连接 (红色部分).
三次握手
三次握手可以这么理解:
TCP 客户端是男孩子, TCP 服务器是女孩子, 男孩子要追女孩子, 首先要建立恋爱关系. 需要一个建立恋爱关系的过程.
男孩: 我们可以恋爱吗?(客户端请求服务器建立连接)
女孩: 你想追我? 想清楚了!(服务器要求客户端确认连接)
男孩: 没错, 你就是我的梦中情人!(客户端确认连接)
三次握手确立了 TCP 服务器和客户端的 "恋爱关系". 为什么需要三次握手, 两次握手不行吗? 从通信角度看, 对于客户端两次就够了, 但对于服务器不够, 因为, 两次握手服务器仅仅知道客户端和服务器之间的信道是通的, 但服务器和客户端之间还未知, 所以需要收到客户端发来的确认消息双方才能确认双方的消息通路都是 ok 的.
三次握手
四次挥手
对于连接的断开需要四次挥手, 可以理解为男孩和女孩要分手, 需要经过一番如下商量.
男孩: 我们不合适, 我们分手吧.(客户端已经没有数据可以传输)
女孩: 什么? 这么快就分手了, 不能这么快完, 我要给你算总账!(服务器这端还有未发送完的数据)
女孩给男孩算账中......(没有发送完的数据继续传输)
女孩: 算好了, 分手!(服务器这端数据传输完毕)
男孩: 好的, 我们从今后还是朋友......(等待 Time_Wait 时间到, 恢复单身)
这里有个注意的点是, 客户端在收到服务器发送的数据传输完毕的消息后 (第三次挥手), 不能立即关闭连接 (恢复单身, 寻找新欢), 必须等待 2MSL 时间才能关闭, 因为这期间最后一次挥手服务器未必能收到, 如果没有收到, 服务器会重新发送第三次挥手的消息, 这时候如果客户端关闭, 将无法回应第四次挥手消息, 使得四次挥手过程无法完成.
来源: http://network.51cto.com/art/201906/597795.htm