#加粗样式 三次握手协议中的面试题
三次握手是指客户端和服务器端之间建立一个TCP连接时,需要客户端和服务器总共发送三个包。
进行三次握手的主要作用就是为了确认通信双方的接收能力和发送能力是否正常,指定自己的初始化序列号,为后面的可靠性传送做准备。
实质上就是连接服务器的指定端口,建立TCP连接,并同步连接双方的序列号的确认号,交换TCP窗口大小信息。
三次握手过程:
-
第一次握手:客户端给服务端发送一个SYN报文,并指明客户端的初始化序列号ISN。此时客户端处于SYN_SENT状态
首部的同步位SYN=1,初始序列号seq = x, SYN = 1 的报文段不能懈怠数据,但要消耗掉一个程序号
-
第二次握手:服务器端接收到客户端的SYN报文之后,会以自己的SYN报文作为应答,并且也是指定了自己的初始化序列号ISN(s)。同时会把客户端的ISN+1作为ACK的值,表示自己已经收到了客户端的SYN,此时度武器处于SYN_RCVD的状态。
在确认报文段中SYN = 1,ACK = 1, 确认号ack = x+1, 初始序号seq = y。
-
第三次握手:客户端收到SYN报文之后,会发送一个ACK报文,当然,也是一样把服务器的ISN+1作为ACK的值,表示已经收到了服务器端的SYN报文,此时客户端处于ESTABLISHED状态,服务器端收到ACK报文之后