返回
HTTP 面试题:三次握手与四次挥手之谜
前端
2023-11-28 10:10:01
三次握手
三次握手是 TCP 协议中建立连接的标准过程,它由客户端和服务器共同完成。其目的在于确保双方都已准备好进行数据传输,并为可靠的数据传输打下基础。
三次握手的具体步骤如下:
- 客户端发送一个 SYN(Synchronize)报文段,其中包含一个随机生成的序列号 seq1。
- 服务器收到 SYN 报文段后,发送一个 SYN+ACK(Synchronize + Acknowledgment)报文段,其中包含一个随机生成的序列号 seq2 和对客户端 seq1 的确认号 ack1。
- 客户端收到 SYN+ACK 报文段后,发送一个 ACK(Acknowledgment)报文段,其中包含对服务器 seq2 的确认号 ack2。
至此,三次握手过程完成,客户端和服务器都已准备好进行数据传输。
四次挥手
四次挥手是 TCP 协议中断开连接的标准过程,它同样由客户端和服务器共同完成。其目的在于确保双方都已准备好终止连接,并释放占用的资源。
四次挥手的具体步骤如下:
- 客户端发送一个 FIN(Finish)报文段,表示希望终止连接。
- 服务器收到 FIN 报文段后,发送一个 ACK 报文段,表示已收到 FIN 报文段。
- 服务器发送一个 FIN 报文段,表示也希望终止连接。
- 客户端收到 FIN 报文段后,发送一个 ACK 报文段,表示已收到 FIN 报文段。
至此,四次挥手过程完成,客户端和服务器都已断开连接,并释放了占用的资源。
为什么需要三次握手和四次挥手?
三次握手
三次握手之所以是必要的,原因如下:
- 保证连接的可靠性:三次握手可以确保客户端和服务器都已准备好进行数据传输,并为可靠的数据传输打下基础。
- 防止网络延迟导致的错误:在网络延迟的情况下,三次握手可以防止客户端和服务器在没有建立连接的情况下就开始发送数据,从而导致数据丢失或错误。
四次挥手
四次挥手之所以是必要的,原因如下:
- 保证连接的可靠性:四次挥手可以确保客户端和服务器都已准备好终止连接,并释放占用的资源。
- 防止网络延迟导致的错误:在网络延迟的情况下,四次挥手可以防止客户端和服务器在没有释放资源的情况下就终止连接,从而导致资源泄漏或错误。
为什么不能减少或增加次数?
减少次数
如果减少三次握手或四次挥手的次数,将可能导致连接的不稳定或错误。例如,如果减少三次握手为两次握手,那么客户端和服务器可能无法确定对方是否已准备好进行数据传输,从而导致数据丢失或错误。
增加次数
如果增加三次握手或四次挥手的次数,将增加网络开销和延迟。例如,如果增加三次握手为四次握手,那么客户端和服务器需要发送额外的报文段,从而增加网络开销和延迟。
面试官常问的高频问题
1. 说一说 HTTP 建立连接的过程
答案:HTTP 建立连接的过程包括三次握手,具体步骤如下:
- 客户端发送一个 SYN 报文段,其中包含一个随机生成的序列号 seq1。
- 服务器收到 SYN 报文段后,发送一个 SYN+ACK 报文段,其中包含一个随机生成的序列号 seq2 和对客户端 seq1 的确认号 ack1。
- 客户端收到 SYN+ACK 报文段后,发送一个 ACK 报文段,其中包含对服务器 seq2 的确认号 ack2。
2. 你刚讲到了三次握手,为什么是三次,2 次不行吗?
答案:三次握手是必要的,原因如下:
- 保证连接的可靠性:三次握手可以确保客户端和服务器都已准备好进行数据传输,并为可靠的数据传输打下基础。
- 防止网络延迟导致的错误:在网络延迟的情况下,三次握手可以防止客户端和服务器在没有建立连接的情况下就开始发送数据,从而导致数据丢失或错误。
结语
本文详细剖析了 HTTP 协议中三次握手与四次挥手过程,并深入探究了为什么需要三次握手和四次挥手,以及为什么不能减少或增加次数。文中还提供了一些面试官常问的关于 HTTP 建立连接的高频问题,以及相应的解答,帮助读者更好地理解和掌握 HTTP 协议的运作原理。