TCP
在了解tcp三次握手和四次挥手前,先了解下如下TCP报文

SYN: 用于建立连接。发送方发送SYN到接收方,用于向服务端请求建立连接
ACK:接收方成功收到发送发发送消息
FIN:用于终止TCP连接标志,表示发送方已经没有数据要发送了,希望能够关闭这个 TCP 连接。
tcp 三次握手

如上图所示:
第一次握手:客户端尝试向服务端建立连接,发送SYN=1 和seq=x 其中seq是客户端的初始序列号,序列号主要用于标识连接的初始化阶段,确保双方都知道从哪个点开始传输数据。
第二次握手:这次握手其实包含两部分,第一部分服务端成功响应客户端表示其以成功接收客户端发送建立连接请求并给与响应ACK ack;第二部分,服务端向客户端尝试建立连接SYN seq
第三次握手:客户端成功接收服务端发送建立连接请求,并给与响应ACK ack
完成以上三次握手,客户端和服务端便可以互相发送数据
tcp四次挥手
tcp解除连接较建立连接多一部主要体现在第二次上,在第二次握手阶段,服务端除了响应客户端请求建立连接外还同时向客户端发送建立连接请求;但是在挥手阶段,当客户端发送FIN请求后,服务端只是给予客户端响应,但并不同时向客户端发送FIN请求,这是因为客户端没有数据发送给服务端时才会说解除连接请求,但此时并不代表服务端没有数据发送给客户端了;

如上图所示:
第一次挥手:如果客户端已经没有数据要发送给服务端,客户端向服务端发送一个tcp报文段,这个报文包含FIN=1以及seq=u。此时客户端便不在向服务端发送数据,主动关闭tcp连接,进入FIN_WAIT1阶段,等待服务端响应
第二次挥手:服务端收到客户端FIN报文段,给与客户端响应ACK=1和ack=u+1
第三次挥手:如果服务端也已经没有数据发送给客户端,服务端会向客户端发送FIN报文段,这个报文包含FIN=1 seq=w,等待客户端确认
第四次挥手:客户端收到服务端FIN报文段,给与服务端响应ACK=1 ack=w+1.此时客户端进入 TIME_WAIT 状态,这时的TCP并未释放掉,需要一段时间(一般设置2MSL)以确保服务端收到自己的 ACK 报文段之后才会进入 CLOSED 状态。服务端收到 ACK 报文之后,就进入 CLOSED 状态。
为什么要四次分手
TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。
HTTPS握手过程
https握手过程由于要额外有安全认证,所以要比普通tcp三次握手要复杂一些,除了tcp三次握手中正常的请求和相应外还有额外的一些证书验证以及密钥生成过程。
基于下图将https贴合tcp三次握手总结为
step1可以理解为tcp第一次握手
step2可以理解为tcp第二次握手,只是在server向client响应中额外新增了证书信息
step3 、4、5可以理解成tcp第三次握手,只是在https这次握手中新增了预主密钥生成、会话密钥生成等过程

客户端和服务器交互
客户端:ClientHello → 服务器
服务器:ServerHello + 证书 → 客户端
客户端:加密的预主密钥 → 服务器
客户端和服务器:生成会话密钥
客户端和服务器:Finished 消息
客户端和服务器:开始加密通信
密钥生成
Client Random + Server Random + Pre-Master Secret → 会话密钥
TCP vs UDP
连接性与可靠性
- TCP:
- 通过三次握手建立连接、四次挥手断开连接,确保通信双方状态同步。
- 提供数据校验、重传机制及流量控制,保证数据按序到达且无丢失。
- 通过三次握手建立连接、四次挥手断开连接,确保通信双方状态同步。
- UDP:
- 无连接过程,直接发送数据报,降低延迟但无法验证接收状态。
- 不保证数据可靠性,可能发生丢包或乱序。
- 无连接过程,直接发送数据报,降低延迟但无法验证接收状态。
数据传输特性
- TCP面向字节流:数据无明确边界,接收方通过序列号重组字节流,需处理“粘包”问题。
- UDP面向数据报:每个数据包独立传输且保留边界,接收方需自行解析。
性能与开销

浙公网安备 33010602011771号