什么是tcp三次握手

看图 三次握手的过程

第一次:客户端C向服务端S发送连接请求报文,该报文首部中的SYN=1,ACK=0,随机选取一个序列号seq=i作为初始序列号。此时,客户端进入SYN_SEND同步已发送状态。

第二次:服务端收到客户端的连接请求报文,如果同意建立连接,则发送确认报文。确认报文首部中SYN=1、ACK=1、ack=i+1、seq=j(服务端的初始序列号)。此时,服务器进入SYN_RCVD同步收到状态。

注:为什么ack=i+1?

答:服务器对客户端的数据进行确认,因为已经收到序列号为i的数据包,准备接受序列号为i+1的数据包,所以确认号ack=i+1。

第三次:客户端收到服务端的确认报文之后,会向服务器发送确认报文,告诉服务器收到了它的确认报文并准备建立连接。确认报文首部中SYN=0、ACK=1、ack=j+1、seq=i+1。服务端收到客户端确认报文,此时,服务端进入ESTABLISHED已建立连接状态。

注:为什么seq=i+1?

答:ACK报文段可以携带数据,因此如果不携带数据,不消耗序列号,则下一个报文的序列号仍然是seq=i+1;如果携带数据,则序列号为在i+1的基础上增加携带数据的大小。此处默认第三次握手客户端不发送携带数据的报文段。

赞(1) 打赏
特别声明:除特殊标注,本站文章均为原创,遵循CC BY-NC 3.0,转载请注明出处。三伏磨 » 什么是tcp三次握手

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏