开发者社区> 问答> 正文

讲⼀下三次握⼿?✨

展开
收起
前端问答 2019-12-11 07:52:30 813 0
1 条回答
写回答
取消 提交回答
  • 前端问答小助手

    所谓三次握⼿(Three-way Handshake),是指建⽴⼀个 TCP 连接时,需要客户端和服务器总共发送3个包。

    三次握⼿的⽬的是连接服务器指定端⼝,建⽴ TCP 连接,并同步连接双⽅的序列号和确认号,交换 TCP 窗⼝⼤⼩信 息。在 socket 编程中,客户端执⾏ connect() 时。将触发三次握⼿。

    • 第⼀次握⼿(SYN=1, seq=x): 客户端发送⼀个 TCP 的 SYN 标志位置1的包,指明客户端打算连接的服务器的端⼝,以及初始序号 X,保存在包头的序列号(Sequence Number)字段⾥。

      发送完毕后,客户端进⼊ SYN_SEND 状态。

    • 第⼆次握⼿(SYN=1, ACK=1, seq=y, ACKnum=x+1): 服务器发回确认包(ACK)应答。即 SYN 标志位和 ACK 标志位均为1。服务器端选择⾃⼰ ISN 序列号,放到 Seq 域⾥,同时将确认序号(Acknowledgement Number)设置为客户的 ISN 加1,即X+1。 发送完毕后,服务器端进⼊SYN_RCVD 状态。
    • 第三次握⼿(ACK=1,ACKnum=y+1) 客户端再次发送确认包(ACK),SYN 标志位为0,ACK 标志位为1,并且把服务器发来 ACK 的序号字段+1,放在确定字段中发送给对⽅,并且在数据段放写ISN的+1发送完毕后,客户端进⼊ ESTABLISHED 状态,当服务器端接收到这个包时,也进⼊ ESTABLISHED 状态,TCP 握⼿结束。

    三次握⼿的过程的示意图如下:

    image.png

    2019-12-11 07:54:20
    赞同 1 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
数据市场⼤数据⽣态的滋养地 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载