TCP/IP 的三次握手有什么用?
三次握手是TCP/IP网络中用于在client和server之间创建连接的方法。这是一个三步法,要求客户端和服务器在实际数据通信开始之前交换SYN和ACK数据包。
如果理解着比较抽象我来举个例子:
比如说你要给某人打电话,你不可能电话接通了就直接说事情。正常逻辑是:
我:请问,是✖️✖️吗?(SYN)
对方:是我,请问你是谁?(SYN+ACK)
我:您好,我是 ✖️✖️。(ACK)
。。。。。。
这就是我们人在沟通之前建立连接的三次握手。如果没有经过确认就直接说事情,假如电话号码拨错了或者接电活的不是本人,岂不是要闹大笑话。
还是言归正传,讲讲什么是TCP/IP 的三次握手。
简单版TCP/IP 的三次握手
如果看完这篇文章你啥也没记住,我希望您能记住下面这张图:
- client 通过IP网络将SYN数据包发送到 server
- 当 server 从 client 接收到 SYN 数据包时,它会响应并返回 SYN / ACK数据包
- client 从服务器接收 SYN / ACK 并用ACK数据包进行响应。
详细版TCP/IP 的三次握手
为了帮助理解流程先上图:
- client 发送具有 SYN = 1,ACK = 0,ISN(Initial Sequence Number)= 1000的TCP段。
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