深入解析TCP协议:三次握手四次挥手全过程及相关面试题

1、概念

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议。它在互联网上被广泛应用,包括Web浏览器、电子邮件、文件传输协议(FTP)和许多其他应用程序中。

TCP使用三次握手来建立连接,并使用数据包确认和重传机制来确保数据的可靠性。在传输过程中,发送方会给每个数据包分配一个唯一的序列号,而接收方会使用确认号来确认已经成功接收到数据。如果发送方没有收到确认,它会重传这个数据包。如果接收方没有收到特定的数据包,它可以使用序列号来指示需要重传哪个数据包。

2、三次握手

在使用TCP进行通信时,发送方和接收方需要先建立一个连接,这个过程称为三次握手。以下是建立TCP连接的过程:

  1. 客户端向服务器发送SYN(同步)数据包。
  2. 服务器回复ACK(确认)数据包以确认收到客户端的SYN数据包。
  3. 服务器向客户端发送SYN-ACK数据包以确认其可以与客户端通信。
  4. 客户端回复ACK数据包,表示已收到服务器的SYN-ACK数据包并愿意与服务器通信。

通过这个过程,客户端和服务器建立了一个 TCP 连接,可以开始传输数据。

3、四次挥手

TCP四次挥手是指TCP连接中,当一方主动关闭连接时,需要经过四个步骤才能完全关闭连接的过程。具体步骤如下:

  1. 主动关闭方发送FIN报文给被动关闭方。
  2. 被动关闭方收到FIN报文后,发送ACK报文确认,进入CLOSE_WAIT状态,等待关闭方发送FIN报文。
  3. 关闭方接收到ACK报文后,进入FIN_WAIT_2状态,等待被动关闭方发送FIN报文。
  4. 被动关闭方发送FIN报文给关闭方,关闭方收到FIN报文后发送ACK报文确认,进入TIME_WAIT状态,等待2MSL后彻底关闭连接。

以上即为TCP四次挥手的完整流程。

5、相关问题

【问题1】为什么需要三次握手?

相对UDP,TCP是可靠的通讯协议,是全双工通信。TCP三次握手的关键在于,序列号seq的交换确认,因为对于客户端和服务端来说,双方序列号的确认是可靠传输的关键。1、2步握手只能确定发送方收、发正常,并不能确定接收方也是收、发正常,增加了第3次握手,才能保证接收方也是收、发都正常。

【问题2】为什么连接的时候是三次握手,关闭的时候却是四次挥手?

服务端收到客户端发来的关闭请求并不是立刻就关闭,还需要处理数据。详细见四次挥手的全过程。

  • 客户端打算关闭连接,此时会发送一个 TCP 首部 FIN 标志位被置为 1 的报文,也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。
  • 服务端收到该报文后,就向客户端发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态。
  • 客户端收到服务端的 ACK 应答报文后,之后进入 FIN_WAIT_2 状态。
  • 等待服务端处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。
  • 客户端收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT 状态
  • 服务器收到了 ACK 应答报文后,就进入了 CLOSE 状态,至此服务端已经完成连接的关闭。
  • 客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭。

【问题3】怎么简单描述三次握手?

就像是小明与小红发微信一样

小明:我要给你发数据了

小红:好的,我准备好了,你发吧

小明:好的,收到

【问题4】为什么是四次挥手?

小红:我的数据发完了。

小明:好的,收到,我看看收完了没。

小明:好的,已经收完了,你关闭吧。

小红:好的,我关闭了。

【问题5】TCP与UDP区别?

TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)是互联网传输层常用的两个协议,它们的主要区别如下:

  1. 建立连接方式:TCP需要进行三次握手建立连接,而UDP则不需要建立连接,直接发送数据包。
  2. 可靠性:TCP提供可靠的数据传输机制,能够保证数据的完整性和顺序性;而UDP不提供可靠性保证,数据传输可能出现丢包或乱序的情况。
  3. 数据量:TCP对数据量的限制较小(最大传输单元为64KB),而UDP对数据量的限制较大(最大传输单元为65535字节)。
  4. 速度:UDP传输效率较高,因为它没有TCP那样复杂的握手、确认等过程。
  5. 流量控制:TCP有流量控制机制,可以根据网络情况调整传输速度,避免网络拥塞;而UDP没有流量控制机制,可能会导致网络拥塞。

综上所述,TCP适用于要求可靠性、数据量较小、带宽较少的场景,如HTTP、SMTP等应用层协议;而UDP适用于要求速度快、数据量较大、带宽充足的场景,如实时视频、音频等应用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

栈江湖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值