TCP协议:传输控制协议,顾名思义,就是对数据的传输进行一定的控制。在传送数据之前必须先建立连接,数据传送完成后要释放连接。因此TCP是一种可靠的运输服务,今天我们来讲讲如何建立连接。
三次握手过程
TCP在建立连接时主要解决三个层面问题:
- 是连接的每一方都能知道对方的存在
- 协商连接参数
- 各位对运输资源如缓存大小,连接表等
我们都知道TCP连接采用的是C/S模式,主动发起连接的叫客户端client,被动等待连接的是服务器Server。那TCP建立连接的过程是什么样的呢
默认情况下客户端client和服务器server的TCP进程都处于close状态。服务器TCP服务进程先建立传输控制块TCB,然后服务端进入listen状态等待连接请求。
- 第一次握手:客户端TCP进程先建立控制块TCB,然后向服务端发送连接请求报文段,此时SYN=1,随机选定一个初始序号seq=x,此报文不携带数据,但要消耗一个序列号,发送完毕后客户端进入SYN-SENT状态(同步已发送)
- 第二次握手:服务端收到客户端请求连接报文段后,若同意建立连接,则发送确认报文,确认报文中SYN=1,ACK=1,确认号ack=k+1,同时随机选定一个自己的序列号seq=y,确认报文段也不携带数据,但要消耗一个序列号,发送完毕后服务端进入SYN-RCVD状态(同步接受)。
- 第三次握手:客户端收到确认报文后,检查ACK=1,ack=x+1是否正确,若正确,则向服务端发送确认报文,确认报文中ACK=1,ack=y+1,seq=x+1,发送后进入ESTAB-LISHED状态,服务端收到确认报文后也进入ESTAB-LISHED状态,此时TCP连接建立成功。
小结:三次握手的关键主要是为了确认对方收到了自己的数据包,这个目标就是通过“确认号(ack)”字段实现的。计算机会记录自己发送的数据包序号seq,等收到对方传过来的数据包后,检测“确认号”字段,看ack=seq+1是否成立,如果成立说明对方收到了自己的数据包。