TCP协议为什么需要三次握手和四次挥手?

文章目录

  • 前言
  • TCP 协议的三次握手
    • 三次握手的过程
    • 为什么需要三次握手
    • 为什么要回传 SYN
    • 传了 SYN,为啥还要传 ACK
  • TCP 协议的四次挥手
  • 后记

前言

号外号外,笔者最近在系统整理一些 Java 后台方面的面试题和参考解答,有找工作需求的童鞋,欢迎关注我的 Github 仓库,如果觉得不错可以点个 star 关注 :

  • 1、awesome-java-interview
  • 2、awesome-java-notes

TCP 协议的三次握手

TCP协议为什么需要三次握手和四次挥手?_第1张图片

TCP协议简单示意图

三次握手的过程

为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。其中三次握手的过程如下:

  • 第一次握手:客户端发送带有SYN标志的数据包到服务端;
  • 第二次握手:服务端发送带有SYN/ACK标志的数据包到客户端;
  • 第三次握手:客户端发送带有带有ACK标志的数据包到服务端。

为什么需要三次握手

三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发信与收信能力是正常的。

  • 第一次握手:服务端确认了客户端发信能力正常,自己收信能力正常;
  • 第二次握手:客户端确认了自己的发信和收信能力正常,服务端的发信和收信能力也正常,但服务端不知道自己的发信能力和客户端的收信能力如何;
  • 第三次握手:消除了服务端对自己的发信能力和客户端的收信能力的担忧。

所以三次握手就能确认双发收发功能都正常,缺一不可。

为什么要回传 SYN

接收端(服务端)传回发送端(客户端)所发送的 SYN 是为了告诉发送端(客户端),我接收到的信息确实就是你所发送的信号了。

SYN 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以ACK(Acknowledgement[汉译:确认字符 ,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。 ])消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

传了 SYN,为啥还要传 ACK

双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方(主动关闭方)到接收方(被动关闭方)的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

TCP 协议的四次挥手

TODO

后记

如果你同我一样想要努力学好数据结构与算法、想要刷 LeetCode 和剑指 offer,欢迎关注我 GitHub 上的 LeetCode 题解:awesome-java-notes

你可能感兴趣的:(计算机基础)