HCIP——TCP三次握手详解

1.什么是TCP三次握手

所谓TCP三次握手是为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤销联系,并建立虚连接。                         

其实就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包。进行握手的主要作用是为了确认双方接受能力和确认能力是否正常,指定自己的初始序列号为后面的可靠性传输做准备。就是连接服务器指定端口,建立可靠的连接,同步双方的序列号和确认号。

 2.TCP三次握手的传输过程

 准备工作:TCP服务器先创建传输控制块TCB,时刻准备接收客户进程的连接请求,此时服务器处于LISTEN(监听)状态,客户端处于CLOSE(关闭)状态。

  • 第一次握手:第一次握手:建立连接时,
    客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers).                                                                        首部的同步位SYN=1,初始序号为seq=a,确认号ack=0,SYN=1的报文端不能携带数据,但会消耗一个序号。
  • 第二次握手:服务器收到syn包,必须确认客户端的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_REC状态。                                    确认报文段中SYN=1,ACK=1,确认号ack=a+1,初始序号seq=b。
  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。        确认报文段ACK=1,确认号ack=b+1,序号seq=a+1(初始为seq=a,每次发送需要消耗一个序号,所以第二个报文段要加1),ACK报文段可以携带数据,不携带数据则不消耗序号。                                                                                                                                       

 3.为什么要三次握手

 三次握手的原因:

  • 第一次握手:客户端发送网络包,服务端收到后,确认客户端的发送能力、服务端的接收能力正常。
  • 第二次握手:服务端发送网络包,客户端收到后,客户端就能确认服务端的接收能力和发送能力均正常,客户端的接收和发送能力是正常的。但服务器确不确定自己发送的网络包客户端是否成功接收。
  • 第三次握手:客户段发送网络包,服务端收到后,服务端能确认客户端的接收和发送能力均正常,服务器自己的接收能力和发送能力也正常,本次握手结束后,客户端和服务端建立了互相确认的关系,在实现数据交互时具有很强的可靠性。

如果只握手两次:服务端无法确定客户端的接收能力是否正常,服务端会等待客户端发送数据,浪费资源。 

猜你喜欢

转载自blog.csdn.net/qq_63099085/article/details/128500422