三次握手是TCP/IP网络中用于在client和server之间创建连接的方法。这是一个三步法,要求客户端和服务器在实际数据通信开始之前交换SYN和ACK数据包。
如果理解着比较抽象我来举个例子:
比如说你要给某人打电话,你不可能电话接通了就直接说事情。正常逻辑是:
我:请问,是✖️✖️吗?(SYN)
对方:是我,请问你是谁?(SYN+ACK)
我:您好,我是 ✖️✖️。(ACK)
。。。。。。
这就是我们人在沟通之前建立连接的三次握手。如果没有经过确认就直接说事情,假如电话号码拨错了或者接电活的不是本人,岂不是要闹大笑话。
还是言归正传,讲讲什么是TCP/IP 的三次握手。
如果看完这篇文章你啥也没记住,我希望您能记住下面这张图:
为了帮助理解流程先上图:
ISN(Initial Sequence Number):是一个随机的序列号,用来标记 client 将传输的数据的序列号的开始。server 接收 client 的TCP段并返回一个TCP段,其中SYN = 1,ACK = 1,ISN = 2000(server 的ISN),ACK NUM(Acknowledgment Number ) = 1001(1000 + 1)。client 向 server 发送TCP段,确认收到 server 的ISN,标志设置为SYN = 0,ACK = 1,SEQ NUM (Sequence Number)= 1001,ACK NUM= 2001(2000 + 1)
看似很复杂,其实很简单,关键是对流程的理解。涉及的数学运算只是加法。
四次挥手理解了三次握手,再来看四次挥手就一目了然了,照惯例先上图:
要关闭连接的client发送TCP段,其FIN(Finished)标志设置为1。sever 接收TCP段,并用 ACK 确认 client 的FIN。sever 将FIN标志设置为1的自己的TCP段发送到客户端,以终止连接。client 通过 ACK 确认 server 的FIN,并关闭连接。 三次握手和四次挥手整体认识理解了上面讲的三次握手和四次挥手的底层逻辑,那么我们再从高处俯视TCP/IP数据传输的整体逻辑就显得很清晰了。
注:下面图片来自博客:https://www.cnblogs.com/thrillerz/p/6464203.html