Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[2018-08-15]: 简单说说TCP的三次握手和四次挥手 #4

Open
Lemonreds opened this issue Aug 15, 2018 · 0 comments
Open

[2018-08-15]: 简单说说TCP的三次握手和四次挥手 #4

Lemonreds opened this issue Aug 15, 2018 · 0 comments
Labels

Comments

@Lemonreds
Copy link
Owner

Lemonreds commented Aug 15, 2018

TCP

TCP是面向连接的协议,在传输数据之前必须要建立连接,同样,在断开连接之前,客户端和服务端要相互确认,不再收、发数据。而TCP的三次握手和四次挥手正是基于此。

三次握手 - 传输数据之前要建立连接

  • 握手的过程
    • 第一次握手 客户端 向 服务器发送SYN包
    • 第二次握手 服务器 向 客户端发送ACK包 和S YN包
    • 第三次握手 客户端 向 服务器发送ACK包

SYN包和ACK包
这两个包都是包含在TCP报文中的,详情可以查询TCP的报文组成,这里说一下两个包的作用,SYN包:可以理解包的内容为 发送,SYN包的发出,代表一端具有发送数据的能力,ACK包:同理,可以理解为 收到,ACK包的发出,是在接收到SYN包后,对发送方的应答,代表一端具有接受数据的能力。

  • 为什么需要三次握手?
    为了 达到 传输数据之前要建立连接 这个要求
    需要确认 客户端和服务端 都同时具有发送和接收的能力,完成这样的要求恰好需要3次发包确认.

    • 为了保证服务端能正确接受客户端的请求做出正确应答
      进行了第一次和第二次握手

    • 为了保证客户端能正确接收服务端的信息做出正确应答
      进行了第二次和第三次握手

四次握手 - 客户端和服务端要相互确认,不再收、发数据。

  • 为什么需要四次挥手
    当一方发送FIN包时,表示这一方没有新的数据再发送给对方了,但是仍然可以接受到对方发过来的数据包,一直到对方也发送了FIN包,也就是对方也不再发送数据的时候,双方断开连接。

  • 所以
    TCP断开连接需要双方都发送给对方FIN包表示自己没有新的数据发给你了,这样才会断开连接。当只有一方发送了FIN包时,仍然可以接收对方的数据,保持TCP连接。

@Lemonreds Lemonreds added the TCP label Aug 15, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant