使用三次握手的原因:
为什么要使用“三次握手的方式”,目的是为了防止报文段在传输连接建立的过程当中出现差错,通过3次报文段的交互之后,能够建立一条安全的传输连接,然后可以使用全双工的方式在此基础之上正常的传输报文段了。
首先了解三次握手之前需要了解几个专用词的概念(很重要):
握手:链接定义和建立的过程则称为握手。
同步比特(SYN):SYN设置为1的时候,表示这是一个请求,或者一个链接接受报文。
确认比特(ACK):只有当ACK=1时,确认号字段才有效,当ACK设置为0的时候,确认号无效,建立起链接之后,所有传送的报文段都必须把ACK设置为1。
TCP三次握手的过程:
如上图所示,下面进行详细解释:
第一次:首先A向B发送一个同步比特(SYN),因为SYN报文段不能够携带数据,但是需要消耗一个序号,所以选择序号seq=x
第二次:服务器B收到数据报,得到的SYN=1,B服务器知道这是一个建立链接的请求。同意建立链接则发回确认。B的确认报文段也是用来建立链接的所以,SYN=1,因为是确认A的消息,所以ACK=1,确认号就为ack=x+1,自己选择seq=y。(因为SYN=1,所以不能带数据)
第三次:A收到了B发送的报文段后,向B发送确认。因为还是建立链接,所以ACK=1,确认号ack=y+1,A的TCP通知上层的应用进程,此时链接已经建立。B在收到A的确认之后,也会通知其上曾的应用进程,此时TCP连接已经建立。ACK报文能够携带没有SYN的数据,不携带数据则不会消耗序号。
而TCP的四次挥手是怎么样的呢?