TCP三次握手的过程?为什么要三次握手?
TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。TCP运输连接就有三个阶段:连接建立、数据传送和连接释放。
连接建立的过程需要解决以下三个问题:
①要使每一方能够确知对方的存在。
②要允许双方协商一些参数(如最大窗口值、服务质量等)。
③能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。
TCP连接的建立采用客户服务器方式。主动发起连接的建立的引用进程叫做客户,而被动等待连接建立的应用进程叫做服务器。
TCP的连接建立
A的TCP向B发出连接请求报文段,其首部的中的同部位SYN=1,并选择序号seq=x,表明传送数据时的第一个数据字节的序号是x. |
---|
B的TCP收到连接请求报文段后,如同意,则发回确认。B在确认报文段中应使SYN=1,ACK=1,其确认号ack=x+1,自己选择的序号seq=y。 |
---|
A收到次报文段后向B给出确认,其ACKA=1,确认号ack=y+1。A的TCP通知上层应用进程,连接已经建立。 |
---|
B的TCP收到主机A的确认后,也通知其上层应用进程:TCP连接已经建立。 |
---|
上面给出的l连接建立的过程叫做三次握手。
为什么需要三次握手?
- 从信息对等角度看,两端分别要确认自己与对方的发送、接受能力均正常。(第二次握手后,B还不能确定自己的发送和A的接受能力)
- A的超时连接请求可能会在双方释放连接后到达B,B会误以为是A发送了新的连接请求,从而创建连接,造成服务器资源被浪费。