首页 > 其他分享 >面试题(TCP/IP协议)详解三次握手

面试题(TCP/IP协议)详解三次握手

时间:2024-06-21 23:00:34浏览次数:14  
标签:面试题 IP 握手 TCP 发送 接收 连接 客户端

TCP/IP协议中的三次握手

我们首先来了解一下TCP

TCP(Transmission Control Protocol,传输控制协议) 是一个面向连接的、可靠的、基于字节流的传输层通信协议。以下是 TCP 的一些主要特点:

面向连接:在数据传输之前,TCP 必须先建立连接(三次握手),在数据传输结束后,还要终止这个连接(四次挥手)。
可靠性:TCP 通过序列号、确认和重传机制来确保数据的可靠传输。如果数据包在传输过程中丢失或损坏,接收方会请求发送方重传该数据包。
流量控制:TCP 使用滑动窗口机制来实现流量控制,确保发送方不会发送过多的数据,以至于接收方无法处理。
拥塞控制:TCP 通过慢开始、拥塞避免、快重传和快恢复等算法来避免网络拥塞。
全双工通信:TCP 允许通信双方的应用程序在任何时候都能发送和接收数据。

TCP 的三次握手机制

  • 最开始,客户端和服务端都处于CLOSE状态,服务端监听客户端的请求,进入LISTEN状态
  • 客户端端发送连接请求, 第一次握手 (SYN=1, seq=x),发送完毕后,客户端就进入 SYN_SENT 状态服务端确认连接, 第二次握手 (SYN=1, ACK=1, seq=y, ACKnum=x+1), 发送完毕后,服务器端就进入 SYN_RCV 状态。
  • 客户端收到服务端的确认之后,再次向服务端确认,这就是 第三次握手 (ACK=1,ACKnum=y+1),发送完毕后,客户端进入ESTABLISHED状态,当服务器端接收到这个包时,也进入 ESTABLISHED 状态.
    在这里插入图片描述

可以这样去理解

  1. 第一次握手,客户端正常去发送信息.服务器确认到了客户端发送能力没有问题.

  2. 第二次握手,当服务器能够接收到了客户端的信息,说明服务器的接受信息没有问题,所以发出消息让客户端知道自己的接受信息能力没有问题,同时也能让客户端知道它的发送能力没有问题.这一步客户端确认了服务器端接收消息和发送消息都没有问题,也确认自己第一次握手发出的消息能够正常发送,说明自己的发送能力没有问题.

  3. 第三次握手,客户端接收到信息,知道服务端发送能力和接受能力都没有问题,但是服务器端还不知道客户端能不能够正常的接受信息.所以此时客户端第三次握手就是为了让服务器端知道,客户端能够正常接受信息.

也就是三次握手的目的是让客户端知道服务器端接收和发送都没有问题,通过服务器的反馈也知道自己的接收和发送没有问题.同样服务器端知道客户端接收和发送没有问题,通过客户端的反馈也知道自己的接收和发送没有问题

那为什么不能是两次呢?

  1. 确认双方的发送和接收能力 :在两次握手的情况下,只有客户端向服务器发送请求建立连接的SYN包,服务器收到后确认即可建立连接。但是这种情况下,客户端无法确认服务器是否能够接收到自己的请求,也无法确认服务器是否具备发送能力。因此,需要进行第三次握手,以确保双方都具备发送和接收数据的能力。

  2. 防止已失效的连接请求建立 :如果客户端发送了连接请求后,由于网络问题或其他原因导致该请求在某个网络节点长时间滞留,而客户端并未收到服务器的响应。此时,客户端可能会再次发送连接请求,而服务器可能已经建立了一个旧的连接。如果握手只进行两次,那么服务器将无法区分这是一个新的连接请求还是一个旧的连接请求,从而可能导致数据混乱。通过进行三次握手,可以避免这种情况的发生。

  3. 同步双方初始序列号
    三次握手的第二个重要原因是同步双方的初始序列号。TCP是一个字节流协议,它使用序列号来确保数据的按序到达。在三次握手的过程中,双方会交换初始序列号,以便在后续的数据传输中能够正确地识别和处理接收到的数据。

那为什么不是四次呢?

简单说,就是三次挥手已经足够创建可靠的连接,没有必要再多一次握手导致花费更多的时间建立连接。

标签:面试题,IP,握手,TCP,发送,接收,连接,客户端
From: https://blog.csdn.net/m0_65013257/article/details/139723797

相关文章

  • SciPy的原理与使用
    文章目录一、引言二、SciPy的原理1.基于NumPy2.子模块化设计3.优化的数学算法三、SciPy的使用1.安装SciPy2.导入SciPy模块3.使用SciPy的函数和算法线性代数积分优化4.结合其他库使用四、总结一、引言在科学计算和数据处理的领域中,SciPy是一个非常重要的Py......
  • Enhancing CLIP with GPT-4: Harnessing Visual Descriptions as Prompts
    标题:用GPT-4增强CLIP:利用视觉描述作为提示源文链接:Maniparambil_Enhancing_CLIP_with_GPT-4_Harnessing_Visual_Descriptions_as_Prompts_ICCVW_2023_paper.pdf(thecvf.com)https://openaccess.thecvf.com/content/ICCV2023W/MMFM/papers/Maniparambil_Enhancing_CLIP_with......
  • JavaScript算法之龟兔赛跑
    简介:龟兔赛跑算法,又称弗洛伊德循环检测算法,是一种在链表中非常常用的算法。它基于运动学和直觉的基本定律。本文旨在向您简要介绍该算法,并帮助您了解这个看似神奇的算法。假设高速公路上有两辆车。其中一辆的速度为x,另一辆的速度为2x。它们唯一能相遇的条件是它们都在循环......
  • 详解pip换源步骤,打造极速Python开发环境
    在当今日益数字化的世界中,Python及其包管理工具pip已成为开发者们不可缺少的工具。Python的广泛应用,从数据分析到人工智能,从Web开发到科学计算,都离不开大量高质量的库和包的支持。但是,在安装和管理这些库和包时,网络速度和源的可靠性往往成为制约效率的瓶颈。为了解决这一问题,......
  • 电脑IPv6正常但是外部无法ping或者ping不通解决办法
    常见问题咨询解决运营商屏蔽设备没有正确获取IPv6,只是局域网IPv6路由器没有开启相关功能推荐一个测试网站,IPv4和IPv6多点查询-设备IP地址多点查询测试平台:https://v6.qjcq.net打开网站后其他设备扫码进入后可以在页面上全部显示ip地址所有问题排查之后还有无法ping通......
  • JavaScript状态数据
    最近需要做一个三维场景切换的功能,切换场景后,还可以进行二三维模式的切换,二三维切换时,要定位到当前场景视角,那么场景的视角参数信息就需要保存到状态数据中,以供二三维场景切换时使用。项目是用vue做的,这里并没有使用vue的状态管理库,我是这样实现的:定义状态数据sceneInfolets......
  • JavaScript的学习之旅之基本数据类型
    一、字面量(常量)和变量字面量:不可变的数据,一般位于等式的右边变量:可变的数据,位于等式的左边<script> //声明一个变量 //用关键字var声明 vara; //要为变量赋值 a=456 a=678 //声明和赋值可以同时进行 varb=34; console.log(b);</script>二、标识符......
  • springMvc 接收文件 MultipartFile
    使用SpringMVC 的controller中接收文件,如果只是接收一个文件,声明MultipartFile或者指定@RequestParam注解,参数(strReqBody和 images)与前端参数一致即可例:第一种方式publicvoiduploadImg(MultipartFileimg){}第二种public void uploadImg(SringstrReqBody,@Req......
  • OCS2_mobile_manipulator案例详解
    1.启动共启动3个节点mobile_manipulator_mpc_node//mpc问题构建,计算mobile_manipulator_dummy_mrt_node//仿真,承接MPC的输出,发布Observation,对于仿真来讲,状态发布也是反馈mobile_manipulator_target//交互发布target2.MobileManipulatorMpcNode.cppMobileManipula......
  • 2024最新最全【网络安全/渗透测试】面试题汇总
    思路流程信息收集漏洞挖掘漏洞利用&权限提升清除测试数据&输出报告复测问题深信服一面:SQL注入防护为什么参数化查询可以防止sql注入SQL头注入点盲注是什么?怎么盲注?宽字节注入产生原理以及根本原因产生原理在哪里编码根本原因解决办法sql里面只有update怎么利用sql如何......