说一说三次握手

PS:这个问的太多了,大家要先理解 =》背诵,防止突然忘了也能说个大概。这道题在问的时候,可深可浅,看面试官自己的掌握力度。

参考回答

三次握手是建立TCP连接的过程,目的是确保通信双方能够可靠地建立连接。它的基本过程如下:

  1. 第一次握手:客户端发送一个SYN报文给服务器,表示请求建立连接。
  2. 第二次握手:服务器收到SYN后,发送SYN+ACK报文给客户端,表示确认收到请求,并同意建立连接。
  3. 第三次握手:客户端收到SYN+ACK后,发送ACK报文给服务器,确认连接建立。

当这三步完成后,TCP连接正式建立,双方可以开始通信。


详细讲解与拓展

1. 为什么需要三次握手?

三次握手的主要目的是防止已失效的连接请求报文被误接收,从而引发错误。例如:
– 如果没有三次握手,假设客户端第一次发送的SYN报文因网络延迟滞留很久,服务器收到后误以为是新的连接请求,发送SYN+ACK,而客户端实际上已经关闭或不需要连接了。这样,服务器就会白白等待,浪费资源。

三次握手通过让客户端确认服务器的响应,确保双方都明确知道对方的通信能力,从而建立可靠的连接。


2. 握手过程中每一步的具体作用

  • 第一次握手(SYN):
    客户端主动发送一个SYN报文,标志着它想要建立连接,同时携带一个序列号(Sequence Number,简写为Seq)。
    作用:客户端告诉服务器,“我想和你建立连接,同时我的序列号是X。”

  • 第二次握手(SYN+ACK):
    服务器收到SYN报文后,会回复一个SYN+ACK报文,表示同意连接,并告知客户端它的初始序列号。
    作用:服务器告诉客户端,“我同意你的请求,我的序列号是Y,同时我收到你的序列号X。”

  • 第三次握手(ACK):
    客户端收到SYN+ACK后,再发送一个ACK报文,确认连接已建立。
    作用:客户端告诉服务器,“我确认收到你的序列号Y,同时你也收到了我的序列号X,我们可以正式通信了。”


3. 举个例子帮助理解

假设一个日常场景:你和朋友约好电话联系。

  • 第一次握手: 你拨通朋友的号码,电话响了(客户端发送SYN)。

    作用:表示你希望和朋友建立通话。

  • 第二次握手: 朋友接起电话并回应:“喂,你好”(服务器发送SYN+ACK)。

    作用:朋友同意与你通话,并向你确认他可以正常接收你的声音。

  • 第三次握手: 你说:“你好,我能听到你,我们可以聊天了。”(客户端发送ACK)。

    作用:确认双方的通信能力正常,通话开始。


4. 扩展:为什么是三次握手,而不是两次或四次?

  • 两次握手的问题:
    如果仅用两次握手,服务器在收到客户端的第一次SYN后就认为连接已经建立,这可能导致服务器被无效连接请求拖累。三次握手让客户端确认了服务器的响应,避免了这种情况。

  • 为什么不需要四次握手?
    四次握手会浪费一次额外的交互,在双方都已确认的情况下没有必要。三次握手已经足够确保双方的通信能力和连接的可靠性。


5. 拓展:三次握手中的序列号有什么作用?

序列号用于保证数据传输的有序性和可靠性。在握手中,双方交换初始序列号,后续传输中,数据会按照序列号排列并校验,以避免丢包、乱序等问题。
比如,客户端的初始序列号是100,服务器的初始序列号是200,那么双方的后续数据传输会以这两个值为起点,确保数据能被正确接收。


总结

三次握手的精妙之处在于:既确保了双方的通信能力,又避免了不必要的资源浪费,同时为后续可靠通信奠定了基础。掌握它的过程和原理,不仅能应对面试,也能更好地理解TCP协议的可靠性设计。

发表评论

后才能评论