TCP为什么需要建立连接? 为什么需要3次握手, 2次不行吗?

TCP为什么需要建立连接? 为什么需要3次握手, 2次不行吗?

  • 首先,TCP是双向且可靠的连接, 那么在数据的发送前, 必须要保证数据能够到达对方, 这就是建立连接的目的。如果都不能保证两者建立连接, 那么所谓的可靠的就没有意义了。

  • 其次, 既然TCP是双向且可靠的连接, 那么就必须要做到 客户端发送的数据服务端能够收到, 服务端发送的消息客户端也能够收到,将TCP的三次握手的按照发送顺序分别编号为1、2 和 3,接下来分别看它们的作用:

    • 第1条报文:客户端向服务端发问 (SYN = 1)

      “ 我向你发起连接请求, 你能不能收到 ? ”,

    • 第2条报文: 服务端回答 (ACK = 1)客户端的这个问题:

      “ 你发的连接请求我能够收到。”

      • 如果只有这两条报文的话,服务端不确定客户端是否能够收到他的消息

      该条报文还有一个作用:服务端向客户端发问 (SYN = 1)

      “ 我发的回复请求, 你能不能收到 ? ”

      • 该条报文有着承上启下的作用

  • 第3条报文: 客户端回答 (ACK = 1)服务端的这个问题:

    “ 你发的回复请求, 我能收到。 “

  • 经过这三条报文, 不仅客户端和服务端都能够收到对方的消息, 而且还有一个很有意思的现象,即 客户端知道服务端能收到客户端的消息(因为客户端收到了第二条报文), 服务端也知道客户端能收到服务端的消息(因为服务端收到了第三条报文), 通俗来讲就是你和我彼此知道,也知道彼此知道,这能保证双向和可靠,当然保证TCP可靠的机制有很多,但毫无疑问三次握手是最基本的。

  • 最后, 看一下双方状态的转换:

    • 首先服务端进入LISTEN状态, 等待客户端的连接请求;

    • 然后客户端发送第一个报文进入SYN_SENT状态, 等待服务端的回应;

    • 服务端收到第一条报文时, 发送第二条报文以进入SYN_RECV状态;

    • 当客户端收到第二条报文时, 发送第三条报文以进入ESTABLISHED状态, 注意这里的已连接。只是单方面的表示客户端能够收到服务端的消息(相当于半连接), 只有当服务端收到第三条报文并进入ESTABLISHED状态时, 双方才建立了真正的连接。

抄袭 转载请说明文章来源:TCP为什么需要建立连接? 为什么需要3次握手, 2次不行吗?

  • 12
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值