Skip to content

TCP的握手、挥手。为什么是三次握手而不是两次?为什么是四次挥手而不是三次 #158

Open

Description

@sisterAn
No description provided.

Activity

  1. xdyz commented on Mar 12, 2021

    @xdyz

    握手三次 确保通信双方的接收和发送能力都是正常的

  2. Upting commented on Mar 12, 2021

    @Upting

    三次握手 确保客户端和服务端都有接受数据和发送数据的能力。
    四次挥手 确保服务端把客户端请求的数据资源全部处理完毕再关闭连接。

  3. huangchucai commented on Mar 12, 2021

    @huangchucai

    由于tcp是双工连接,三次握手保证了双方的接受和发送能力,四次挥手是因为在客户端发送资源完成给服务端后,服务端必须返回ack确认,但是服务端关闭资源处理需要时间,所以会再次发送关闭。

  4. xiuyuan66 commented on Mar 12, 2021

    @xiuyuan66

    三次握手其实就是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。进行三次握手的主要作用就是为了确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。实质上其实就是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。
    四次挥手这是因为 TCP 不允许连接处于半打开状态时就单向传输数据,所以在三次握手建立连接时,服务器会把 ACK 和 SYN 放在一起发给客户端,其中,ACK 用来打开客户端的发送通道,SYN 用来打开服务器的发送通道。这样,原本的四次握手就降为三次握手了。
    但是当连接处于半关闭状态时,TCP 是允许单向传输数据的。为便于理解,我们把先关闭连接的一方叫做主动方,后关闭连接的一方叫做被动方。当主动方关闭连接时,被动方仍然可以在不调用 close 函数的状态下,长时间发送数据,此时连接处于半关闭状态。这一特性是 TCP 的双向通道互相独立所致,却也使得关闭连接必须通过四次挥手才能做到。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions