当前位置: 首页 > news >正文

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

从下面三个方面来回答

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

相关文章:

  • Python selenium驱动下载,模块安装以及基本使用
  • fastadmin笔记,关联查询,下拉框,关联下拉框查询,编辑时下拉框默认值
  • ArcGIS制作土地利用现状图
  • 第5天:基础入门-资产架构amp;端口amp;应用amp;CDNamp;WAFamp;站库分离amp;负载均衡
  • Fabric二进制建链(客户端与节点主机分离)
  • 【MATLAB源码-第65期】基于matlab的OFDM/OTFS通信系统性能对比,输处误码率曲线;对比是否采用LDPC编码。
  • 自动驾驶算法(三):RRT算法讲解与代码实现(基于采样的路径规划)
  • 资源限流 + 本地分布式多重锁——高并发性能挡板,隔绝无效流量请求
  • 【DriveGPT学习笔记】自动驾驶汽车Autonomous Vehicle Planning
  • 决胜ACM算法竞赛:掌握Python编程的基石
  • 【Azure】存储服务:Azure 的存储账户
  • Git 标签(Tag)实战:打标签和删除标签的步骤指南
  • Appium 移动端自动化测试 —— 触摸(TouchAction) 与多点触控(MultiAction)
  • 数据分析面试的一些问题提炼与总结
  • 【2023年MathorCup高校数学建模挑战赛-大数据竞赛】赛道A:基于计算机视觉的坑洼道路检测和识别 python 代码解析
  • 《深入 React 技术栈》
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • CSS 提示工具(Tooltip)
  • ERLANG 网工修炼笔记 ---- UDP
  • JS基础之数据类型、对象、原型、原型链、继承
  • Python十分钟制作属于你自己的个性logo
  • springMvc学习笔记(2)
  • WinRAR存在严重的安全漏洞影响5亿用户
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 程序员该如何有效的找工作?
  • 解析 Webpack中import、require、按需加载的执行过程
  • 你真的知道 == 和 equals 的区别吗?
  • 前端技术周刊 2019-02-11 Serverless
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 学习笔记TF060:图像语音结合,看图说话
  • [Shell 脚本] 备份网站文件至OSS服务(纯shell脚本无sdk) ...
  • 3月7日云栖精选夜读 | RSA 2019安全大会:企业资产管理成行业新风向标,云上安全占绝对优势 ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​MPV,汽车产品里一个特殊品类的进化过程
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (ros//EnvironmentVariables)ros环境变量
  • (黑马C++)L06 重载与继承
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (离散数学)逻辑连接词
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (转)Sublime Text3配置Lua运行环境
  • ./configure,make,make install的作用(转)
  • .gitignore文件设置了忽略但不生效
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .net core 6 redis操作类
  • .NET 反射 Reflect
  • .net对接阿里云CSB服务
  • .NET实现之(自动更新)
  • .NET正则基础之——正则委托
  • ::
  • @Bean, @Component, @Configuration简析
  • @ConditionalOnProperty注解使用说明