大厂面试题-TCP协议为什么要设计三次握手?

news/2024/10/20 5:22:10/

从下面三个方面来回答

1.TCP议,是一种可靠的,基于字节流的,面向连接的传输层协议。

        a.可靠性体现在TCP协议通信双方的数据传输是稳定的,即便是在网络不好的情况下,TCP都能够保证数据传输到目标端,而这个可靠性是基于数据包确认机制来实现的。

        b.TCP通信双方的数据传输是通过字节流来实现传输的

        c.面向连接,是说数据传输之前,必须要建立一个连接,然后基于这个连接进行

数据传输

2.(如图)因为TCP是面向连接的协议,所以在进行数据通信之前,需要建立一个可靠的连接,TCP了三次握手的方式来实现连接的建立。

所谓的三次手,就是通信双方一共需要发送三次请求,才能确保这个连接的建立。

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

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

        c.客户端收到服务端的请求后,再次发送ACK,这个ACK是针对服务端连接的一个认,表示告诉服务端,我收到了你的请求。

3.之所以TCP要设计三次握手,有三个方面的原因:

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

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

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


http://www.ppmy.cn/news/1192177.html

相关文章

代码训练营第58天:动态规划part16|leetcode583两个字符串的删除操作|leetcode72编辑距离。

leetcode583:两个字符串的删除操作 文章讲解:leetcode583 leetcode72:编辑距离 文章讲解:leetcode72 目录 1,leetcode583 两个字符串的删除操作: 2,leetcode72 编辑距离: 1&#x…

VR虚拟仿真教学在建筑学课堂中的应用

1. 增强真实感:VR技术能创造出近乎真实的虚拟环境,使学生仿佛置身其中,增强他们的感官体验。 2. 打破空间限制:VR教学可以打破时间和空间的限制,学生可以在任何时间、任何地点进行学习,无需担心课堂位置的…

安防监控系统EasyCVR视频汇聚平台,如何实现视频汇聚?

关注我们的朋友都知道,EasyCVR平台最初就是以汇聚为核心而进行打造的,那到底什么是汇聚平台呢?又如何进行视频资源汇聚?简单来说,视频汇聚平台是指能够从不同的视频源(例如直播、点播等)收集、整…

我的云栖大会之旅:见证云计算创新的15年

云栖大会,曾经是一次不可思议的科技之旅,却如今已见证了我对云计算世界的15年关注和发展。第一次踏上云栖大会之旅,我记得是在2009年。那时的云计算还是一个新生事物,而云栖大会正是其中的奠基石。 我清楚地记得那个炎热的夏天&am…

vue3的ref源码解析

ref的实现原理 一句话总结: ref本身是个函数,该函数返回一个createRef函数,createRef函数又返回一个“经过类RefImpl实例化”的对象。 详情介绍: ref函数接收我们传入的一个简单类型或复杂类型value,后又将value传递给createRef函数&#xf…

日常踩坑-[sass]Error: Expected newline

在学习sass的时候,运行时发现报错 经过网上冲浪知道,原来在声明语言的时候 lang 不能声明为 sass ,而是 scss ,这就有点坑了 原因: scss是sass3引入进来的,scss语法有"{}“,”;"而sass没有,所以…

iptables 与 firewalld

iptables 一、主机型(包过滤防火墙) 1、简介: 包过滤型防火墙是一种网络安全设备或软件,它工作在 2、3、4 层,通过检查网络数据包的源地址、目标地址、协议、端口等信息,根据预定义的规则来决定是否允许…

Proxysql读写分离

Proxysql读写分离 主从配置 # /etc/my.cnf 主节点 [mysqld] log-binmysql-bin server-id1从节点 [mysqld] server-id2 read_only1#初始化以及创建主从复制用户 mysql> alter user rootlocalhost identified with mysql_native_password by Jianren123; Query OK, 0 rows …