TCP三次握手和四次挥手全解析 面试必备

传输控制协议(TCP,Transmission Control Protocol)是互联网协议族中的核心协议之一,属于传输层。它的主要功能是在网络中提供可靠、面向连接的字节流服务。TCP确保数据在网络中的完整性、顺序性和有效性,是大多数互联网应用的基础。

概念解释
  1. seq(sequencenumber)序列号是TCP连接中每个字节流的唯一标识,通常在连接建立时随机生成。这一序列号用于确保数据包的顺序和完整性。
  2. ack(acknowledgement number)确认号是用来指示下一个期望接收的序列号。如果客户端发送的序列号为seq,则服务器的确认号为ack = seq + 1,表示服务器已经成功接收到seq号的数据,并期待接收到seq + 1号的数据。
  3. ACK(acknowledgement)这是一个标志位,用于指示确认号有效。当ACK位被设置时,表明该报文段是对之前数据的确认。TCP使用这个机制来确认数据的接收,确保可靠传输。
  4. SYN(Synchronize) 这是用于发起新连接的标志位。当客户端希望与服务器建立连接时,会发送带有SYN标志的报文段。SYN用于同步序列号,以便双方能够在连接建立后进行数据传输。
  5. FIN(Finish):完成标志用于优雅地终止TCP连接。当一方发送带有FIN标志的报文段时,表示它已经完成数据传输,并希望关闭连接。接收方在确认后也会发送一个FIN来完成连接的关闭过程。

TCP三次握手

三次握手是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个报文。
第一次握手: 在吗?我要和你建立连接(发送SYN)。客户端向服务器发出连接请求,附带客户端序列号seq,然后进入 SYN_SENT(同步已发送) 状态,等待服务器的确认。
第二次握手: 我在,来吧,确认要连接吗(发送SYN+ACK) 服务器收到连接请求,同意建立连接,然后向客户段发送确认连接信息,附带向客户端连接请求,此时服务器进入 SYN_RCVD(同步收到) 状态。
第三次握手:确认!咱们建立连接吧(发送ACK)客户端收到服务器的确认连接信息,向服务器发送确认连接,此时TCP连接已经建立,客户端进入ESTABLISHED 状态。当服务器收到客户端发送的确认报文后也会进入 ESTABLISHED 状态,完成三次握手。

学到这会有一个疑问🤔️ 为什么TCP是三次握手而不是两次呢

客户端发送连接请求(SYN)给服务器。如果由于网络延迟,这个请求没有到达服务器,客户端可能会因为没有收到确认而重新发送请求。

假设服务器收到第二个请求并发送确认(SYN-ACK)。如果之前的请求由于网络恢复而到达服务器,服务器会再次发送确认,并认为这是一个新的连接请求,从而建立多条连接,这可能导致资源浪费和数据混乱。
三次握手可以防止旧的连接请求干扰新的连接,确保在网络不稳定的情况下,连接建立过程的清晰性。
请添加图片描述

TCP四次挥手

四次挥手是指断开一个TCP连接时,需要客户端和服务端总共发送4个报文以确认连接的断开。
客户端和服务器都可主动断开链接 所以这里分为主动方和被动方
这里将客户端作为主动方
第一次挥手(发送FIN)我的数据已经传完了,我想和你断开连接。 当通信的一方完成数据发送任务,需要关闭连接时,它会发送一个FIN(结束)报文段,进入FIN_WAIT_1 状态。
第二次挥手(发送ACK):==我知道了,但是我这边还有数据给你,你先不要和我断开。==服务端收到FIN报文段后,发送一个ACK报文段作为回应,并进入CLOSE-WAIT状态。客户端收到ACK后,进入FIN-WAIT-2状态。这时候已经断开了客户端与服务端的连接,服务端依然可以继续向客户端发送数据。
第三次挥手(发送FIN):==我的数据已经传完了,你可以和我断开连接了!==服务器端完成数据传输后,发送一个FIN报文段,请求关闭连接,进入LAST-ACK状态。
第四次挥手(发送ACK)收到让我断开连接的信息了,可以断开了客户端收到服务器的 FIN 包后,发送ACK报文段作为回应,并进入TIME-WAIT状态。经过 2MSL 后,客户端才进入 CLOSED 状态。服务器端收到客户端的确认包 ACK 后进入CLOSED 状态,连接被最终关闭。

请添加图片描述

本篇文章如果对你有所帮助,可以点下关注,会持续更新技术文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值