【计算机网络基础】TCP的三次握手与四次挥手

139 阅读2分钟

TCP的三次握手与四次挥手

三次握手

image-20220220175234960

  1. 客户端发送链接请求携带SYN询问是否能够建立连接
  2. 服务端收到后发送SYN包和ACK包确认连接。
  3. 客户端收到服务端的确认连接后,发送ACK包到服务端,连接建立
三次握手而不是两次握手的原因

客户端发送一次SYN1包给服务端,因为网络原因没有发送到服务端。这时客户端再次发送一个SYN包给予服务端,服务端收到后返回ACK包。

如果此时第一次发送的SYN1包网络突然回复发送到了服务端,此时如果是两次握手就建立连接的情况下,会多建立一个网络连接。所以采用三次握手,就是为了解决网络信道连接不可靠的问题

如何保证可靠连接

image-20220220180246220

  1. 每个连接都有一个发送缓冲区
  2. 发送时从发送时从发送缓冲区取一部分报文,加上序列号和长度。
  3. 回复确认需要携带的ACK包需要通过序列号的长度确认:ACK = 序列号 + 长度 = 下一包起始序列号
  4. 接收端可以根据序列号的长度重组数据,如果此时发生丢包,接收端还可以根据序列号,要求发送端再次发送该数据包到接收端。

TCP的四次挥手

image-20220220180335420

  1. 第一次握手:客户端发起FIN包表示关闭连接
  2. 第二次挥手:服务端发送ACK包到客户端进入关闭等待状态
  3. 第三次挥手:服务端发送FIN包到客户端进入发送等待
  4. 第四次挥手:客户端接收后发送ACK包到服务端客户端进入超时等待状态,超时后关闭连接。服务端立即关闭连接

此时客户端有一个超时等待状态,是因为如果当ACK包发送因为网络原因如果未被服务端接收到时,服务端再次尝试发送FIN包请求关闭客户端仍可以收到请求,进入正常关闭流程。

TCP与UDP的差异与使用场景

  1. TCP:稳定可靠,但是比较消耗资源。

    • 📁 文件发送
    • ✉️ 邮件发送
    • 🌐 浏览网页等场景
  2. UDP:无状态,速度快但是不可靠的网络传输。适用于对信息实时要求较高的场景。

    • 🔗 域名查询
    • 📴 语音通话
    • 📺 视频直播等

\