TCP三次握手与四次挥手详解
需积分: 0 187 浏览量
更新于2024-08-04
收藏 571KB DOCX 举报
"前端大厂最新面试题-handshakes_waves.docx"
在前端面试中,TCP的三次握手和四次挥手是网络协议部分的重要知识点,对于理解数据传输的可靠性和连接管理至关重要。
一、三次握手
三次握手是TCP(传输控制协议)建立连接时的必要步骤,目的是确保两端(客户端和服务器)都能正确地发送和接收数据,同时防止旧的数据包在网络中延迟后对新连接造成干扰。具体过程如下:
1. 第一次握手:客户端向服务器发送一个SYN(同步)报文,携带自身的初始化序列号ISN(c),客户端进入SYN_SENT状态,表示它准备好接收服务器的确认。
2. 第二次握手:服务器接收到SYN报文后,回应一个SYN+ACK报文,其ACK(确认)字段确认客户端的序列号ISN(c)+1,并携带服务器自己的初始化序列号ISN(s)。服务器进入SYN_RCVD状态,表示它可以发送数据了。
3. 第三次握手:客户端收到SYN+ACK报文后,发送一个ACK报文,确认服务器的序列号ISN(s)+1,客户端进入ESTABLISHED状态,表示连接已建立。当服务器接收到这个ACK,它也进入ESTABLISHED状态,连接完全建立。
三次握手确保了双方都有发送和接收的能力,并且避免了半开连接的问题。如果只有两次握手,服务器可能无法确认客户端是否收到了它的确认,可能导致资源的无效占用。
二、四次挥手
相比之下,关闭TCP连接需要四次挥手,因为连接的双向性使得每个方向上的关闭都需要独立进行。过程如下:
1. 第一次挥手:客户端发送FIN(结束)报文,请求关闭连接,进入FIN_WAIT1状态,不再发送数据,但可以接收数据。
2. 第二次挥手:服务器接收到FIN,回复一个ACK报文,确认客户端的序列号,进入CLOSE_WAIT状态,表示已收到关闭请求,但还有数据需要发送。
3. 第三次挥手:服务器完成数据发送后,发送FIN报文给客户端,请求关闭其到客户端的方向,进入LAST_ACK状态。
4. 第四次挥手:客户端收到服务器的FIN,发送ACK报文确认,进入TIME_WAIT状态,等待一段时间确保服务器收到确认后,连接彻底关闭。服务器收到ACK后,连接关闭。
四次挥手的原因在于,由于TCP连接是全双工的,所以每个方向上的关闭都需要单独的确认。此外,TIME_WAIT状态是为了防止旧的FIN报文在网络中延迟,导致误解为新的连接请求。
这些TCP连接管理机制对于保证网络通信的可靠性至关重要,是理解和解答前端面试题时必须掌握的基础知识。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2020-05-06 上传
2020-04-13 上传
2021-04-06 上传
2021-10-20 上传
2021-05-10 上传
2021-10-20 上传
xox_761617
- 粉丝: 29
- 资源: 7802
最新资源
- Python-DataStructure-GFG-实践
- Starling-Extension-Particle-System:Starling框架的粒子系统,与71squared.com的“粒子设计器”兼容
- 30dayJSPractice:我将按照Wes BosJavaScript 30课程来练习Vanilla JS。 此知识库中有一些个人笔记的解决方案,可帮助我在JS上更强壮
- audiobook-player-alexa
- 新翔ASP培训学校教学管理系统
- Excel模板考场桌面标签.zip
- datepicker:显示日历,然后为彩票选择随机日期
- EPANET:供水系统液压和水质分析工具包
- MAX31855温度检测_MAX31855
- SimpleMachineLearningExp:我与机器学习的第一次互动!
- A-Recipe:Soorji ka Halwa的食谱。 享受!
- 无限跑者游戏
- DesignPattern:设计模式小Demo
- BMITaven.rar
- manga4all-ui:manga4all-ui
- InjectableGenericCameraSystem:这是一个通用的相机系统,可用作相机在游戏内拍摄屏幕截图的基础。 该系统的主要目的是通过用我们自己的值覆盖其摄像机结构中的值来劫持游戏中的3D摄像机,以便我们可以控制摄像机的位置,俯仰角值,FoV和摄像机的外观向量