当前位置: 首页 > 后端技术 > Java

【Java专访】TCP协议为什么要设计三次握手?

时间:2023-04-01 23:51:42 Java

一位工作5年的粉丝,最近去多家公司面试,每次都被各种技术问题问得语无伦次。由于找工作快一个月了,有些着急,所以才来找我帮忙。“我能做的就是保证每天更新一个面试题,然后问他印象最深的面试题是什么,”他说。《为什么TCP协议要设计三次握手》。好了,关于这个问题,我们来看看普通人和专家的回答。普通人:我觉得是因为TCP是双工协议,也就是说可以双向传输数据。那么既然是双向数据传输,就说明我在两端都建立了通信连接。两端相互建立双向连接。all相当于说A要像B一样建立连接,B也要像A一样建立连接,两者之间有两次。另外,在连接建立过程中,我还需要确认连接是否建立成功。所以当客户端向服务器发送建立连接的消息时,需要给出响应。师父:关于这个问题,我从以下三个方面来回答。TCP协议是一种可靠的、基于字节流的、面向连接的传输层协议。可靠性体现在TCP协议通信的两端数据传输稳定。即使在网络不好的情况下,TCP也能保证数据传输到目标端,而这种可靠性是基于报文确认机制实现的。TCP通信双方之间的数据传输是通过字节流进行面向连接的传输,也就是说在数据传输之前,必须建立一个连接,然后基于这个连接进行数据传输。因为TCP是面向连接的协议,进行数据通信。之前,需要建立可靠的连接,TCP使用三次握手来建立连接。所谓三次握手,就是通信双方一共需要发送三次请求,才能保证连接的建立。客户端向服务器发送连接请求,携带同步序号SYN。服务器收到请求后,发送SYN和ACK。这里的SYN是服务器的同步序号,ACK是对之前收到的请求的确认,意思是告诉客户端我已经收到你的请求了。客户端收到服务器的请求后,再次发送ACK。这个ACK是对服务器连接的确认,意思是告诉服务器我已经收到你的请求了。TCP之所以要设计三次握手,我认为有以下三个原因:TCP是一种可靠的通信协议,所以TCP协议通信的双方都必须维护一个序号来标记已经发送过的数据包。发送出去,哪些已经发送给对方接收。三向握手是通信双方告知对方的序号初值。为了确保收到序列号,双方都需要进行确认操作。TCP协议需要在不可靠的网络环境中实现可靠的数据传输,这意味着双方必须使用某种手段来实现可靠的数据传输通道,而三次通信是建立这种通道的最小值。当然也可以做四五次,但是没必要浪费这个资源。防止历史上重复连接初始化造成的混乱。比如在网络不好的情况下,客户端连续发送多个请求建立连接。假设只有两次握手,服务器只能选择接受或者拒绝连接请求,但是服务器不知道这个请求是否是之前因为网络拥塞而过期的请求,也就是说服务器不知道当前的客户端连接是有效的还是无效的。以上是我对这个问题的理解。总结网络传播的内容是相当重要的。在面对一些在线网络故障排查时,它可以快速帮助我们定位问题并找到解决方案。有什么面试问题,职业发展问题,学习问题可以私信我。此外,免费提供Java面试资料和简历模板。版权声明:除特别声明外,本博客所有文章均采用CCBY-NC-SA4.0许可协议。转载请注明来自Mic带你学建筑!如果本文对您有帮助,请给个关注和点赞。您的坚持是我不断创作的动力。欢迎关注同名微信公众号获取更多技术干货!