前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >十人面试只有我通过,只因我答对了这题TCP协议为什么需要三次握手

十人面试只有我通过,只因我答对了这题TCP协议为什么需要三次握手

作者头像
Tom弹架构
发布2023-04-28 11:08:48
1640
发布2023-04-28 11:08:48
举报
文章被收录于专栏:Tom弹架构Tom弹架构

一位5年工作经验的小伙伴面试被问到这样一道面试题,说,TCP协议为什么要设计三次握手。当时这位小伙伴被问得哑口无言。后来,他找到我,说希望做一期视频分享一下。今天,我给大家分享一下我的理解。

另外,5/6/7月份资料文档已打包,包含如下↓(还在持续更新中!):

①100道最新大厂经典面试题解析资料文档!

②20万+字Java面试题解析和配套答案!

③从应届生到高级开发都使适用的简历模板!

④从入门到精通的架构师学习路线图!

1 TCP协议

ENTER TITLE

TCP协议是一种可靠的,基于字节流的,面向连接的传输层双工协议。它有以下三个特征:

1、通信双方的数据传输是稳定的,即便是在网络不好的情况下,也能够保证数据传输到目标端。

2、TCP通信双方的数据包传输是通过字节流来实现传输的

3、数据传输之前,必须要建立一个连接,然后基于这个连接进行数据传输

2 什么是三次握手

因为,TCP是面向连接的协议,在进行数据通信之前需要建立一个可靠的连接。所以,TCP协议采用了三次握手的方式来实现连接的建立。所谓的三次握手,就是通信双方一共需要发送三次请求,才能确保这个连接的建立,具体的执行流程如图所示:

ENTER TITLE

1)客户端向服务端发送连接请求并携带同步序列号SYN。

2)服务端收到请求后,发送SYN和ACK, 这里的SYN表示服务端的同步序列号,ACK表示对前面收到请求的一个确认,表示告诉客户端,请求已收到。

3)客户端收到服务端的请求后,再次发送ACK,这个ACK是针对服务端连接的一个确认,表示告诉服务端,请求已收到。

2 为什么要三次握手

ENTER TITLE

协议之所以要设计三次握手,我认为有以下三个原因:

1、TCP是可靠性通信协议,所以通信双方都必须要维护一个序列号,去标记已经发送出去的数据包,哪些是已经被对方签收的。而三次握手就是通信双方相互告知序列号的起始值,为了确保这个序列号被收到,所以双方都需要有一个确认的操作。

2、TCP协议需要在一个不可靠的网络环境下实现可靠的数据传输,意味着通信双方必须要通过某种手段来实现一个可靠的数据传输通道,而三次通信是建立这样一个通道的最小值。当然还可以四次、五次,只是没必要浪费这个资源。

3、防止历史的重复连接初始化造成的混乱问题,比如说在网络比较差的情况下,客户端连续多次发送建立连接的请求,假设只有两次握手,那么服务端只能选择接受或者拒绝这个连接请求,但是服务端不知道这次请求是不是之前因为网络堵塞而过期的请求,也就是说服务端不知道当前客户端的连接是有效还是无效。

好了,以上就是我对TCP为什么需要三次握手的理解。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-08-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tom弹架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档