TCP 协议为什么要设计三次握手——2023最新面试精简版本

原理:TCP协议中三次握手和四次挥手机制

面试:

        好的,面试官。关于这个问题,我会从下面 3 个方面来回答。

         1. TCP 协议,是一种可靠的,基于字节流的,面向连接的传输层协议。 可靠性体现在 TCP 协议通信双方的数据传输是稳定的,即便是在网络不好的情 况下,TCP 都能够保证数据传输到目标端,而这个可靠性是基于数据包确认机 制来实现的。 TCP 通信双方的数据传输是通过字节流来实现传输的 面向连接,是说数据传输之前,必须要建立一个连接,然后基于这个连接进行 数据传输。

        2. 因为 TCP 是面向连接的协议,所以在进行数据通信之前,需要建立一个 可靠的连接,TCP 采用了三次握手的方式来实现连接的建立。 所谓的三次握手,就是通信双方一共需要发送三次请求,才能确保这个连接的建立。 客户端向服务端发送连接请求并携带同步序列号 SYN。 服务端收到请求后,发送 SYN 和 ACK, 这里的 SYN 表示服务端的同步序列 号,ACK 表示对前面收到请求的一个确认,表示告诉客户端,我收到了你的请 求。 客户端收到服务端的请求后,再次发送 ACK,这个 ACK 是针对服务端连接的 一个确认,表示告诉服务端,我收到了你的请求。

        3. 之所以 TCP 要设计三次握手,我认为有三个方面的原因:TCP 是可靠性通信协议,所以 TCP 协议的通信双方都必须要维护一个序列号, 去标记已经发送出去的数据包,哪些是已经被对方签收的。而三次握手就是通 信双方相互告知序列号的起始值,为了确保这个序列号被收到,所以双方都需 要有一个确认的操作。 TCP 协议需要在一个不可靠的网络环境下实现可靠的数据传输,意味着通信双 方必须要通过某种手段来实现一个可靠的数据传输通道,而三次通信是建立这 样一个通道的最小值。当然还可以四次、五次,只是没必要浪费这个资源。 防止历史的重复连接初始化造成的混乱问题,比如说在网络比较差的情况下, 客户端连续多次发送建立连接的请求,假设只有两次握手,那么服务端只能选 择接受或者拒绝这个连接请求,但是服务端不知道这次请求是不是之前因为网 络堵塞而过期的请求,也就是说服务端不知道当前客户端的连接是有效还是无 效。 以上就是我对这个问题的理解。 

         网络通信这块内容还是比较重要的,面对一些线上网络故障排查的时候, 可以快速的去帮助我们定位问题。

猜你喜欢

转载自blog.csdn.net/weixin_49171365/article/details/130470432