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

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
简介: 一位5年工作经验的小伙伴面试被问到这样一道面试题,说,TCP协议为什么要设计三次握手。当时这位小伙伴被问得哑口无言。后来,他找到我,说希望做一期视频分享一下。今天,我给大家分享一下我的理解。

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

1 TCP协议

f78012721d6c27f81f47a5fcc302b168.jpg

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


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


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


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

2 什么是三次握手

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

b680b6d622a841299f32bc03da570104.png

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


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


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

2 为什么要三次握手

b641c37cb6b3a1f3af8b84483d0e4315.jpg

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


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


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


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


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


我是被编程耽误的文艺Tom,关注我,面试不再难!

3c2047b0ee454886b4e6edf75f6c98c3.gif

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
4月前
|
自然语言处理 Dubbo Java
【面试问题】Dubbo 推荐用什么协议?
【1月更文挑战第27天】【面试问题】Dubbo 推荐用什么协议?
|
6月前
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
7月前
|
XML 存储 JSON
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
|
8月前
|
网络协议 算法 安全
Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)
Android 面试必备 - 计算机网络基本知识(TCP,UDP,Http,https)
|
2月前
|
网络协议 网络性能优化
网络面试题:TCP和UDP的区别
网络面试题:TCP和UDP的区别
25 0
|
2月前
|
网络协议 编译器 调度
【Qt 面试题】深入剖析QT TCP通讯流程及应用实例
【Qt 面试题】深入剖析QT TCP通讯流程及应用实例
31 0
|
2月前
|
网络协议
跟着动画学习TCP三次握手和四次挥手,及全部面试题
跟着动画学习TCP三次握手和四次挥手,及全部面试题
35 0
|
7月前
|
XML JSON JavaScript
【面试题精讲】常见序列化协议有哪些?
【面试题精讲】常见序列化协议有哪些?
|
7月前
|
Web App开发 应用服务中间件 nginx
【面试】HTTP 协议报文详细说明
【面试】HTTP 协议报文详细说明
29 1
|
4月前
|
负载均衡 网络协议 网络安全
TCP/IP协议:面试焦点及其解答
TCP/IP协议:面试焦点及其解答
43 2