【底层服务/编程功底系列】「网络通信体系」带你攻克网络技术之TCP协议的三次握手和四次链接的技术盲区

简介: 【底层服务/编程功底系列】「网络通信体系」带你攻克网络技术之TCP协议的三次握手和四次链接的技术盲区

背景

当一台客户端和一台服务器进行通信时,TCP协议使用三次握手和四次挥手来建立和终止连接。

三次握手的作用

  1. 确认双方的发送和接收能力:在三次握手中,客户端和服务器需要交换彼此的序列号和确认号,以确认彼此的发送和接收能力正常,确保双方可以正常通信。
  2. 确认双方的同步连接状态:在三次握手的过程中,服务端和客户端会互相确认对方的初始序列号,以确保双方处于同步的连接状态,准备好正式传输数据。

四次挥手的作用

  1. 安全关闭连接:四次挥手确保了连接的安全关闭,双方可以在终止通信前完成数据交换和清理工作。
  2. 确保数据完整性:在四次挥手中,双方可以通过最后一次传输的数据来确认对方是否收到了所有数据,从而保证数据的完整性。

三次握手

为什么需要三次握手

即使进行N次握手,也无法百分之百地确保双方成功建立连接。这是因为一旦最后一次确认丢失,双方就陷入信息不对称的状态,即使之前的信息是对称的。成功建立连接的真正标志是双方都知道对方已经准备好传输数据,而至少需要三次握手才能实现这一点。

N次握手的案例分析

以 A 作为客户端,B 作为服务器端。

一次握手

那么 A 向 B 发送一个报文,然后双方都认为连接已经建立,这等同于使用无连接的 UDP,毫无意义。

两次握手

A 向 B 发送 SYN 报文,B 向 A 发送一个 ACK 报文(可能还包含 SYN 标志位),这时 B 已经知道 A 想要建立连接,双方的信息已基本对称,然而如果 B 到 A 的报文段丢失了,那么 A 就无法确定 B 是否收到了自己的连接请求,A 的状态成为未知,B 也知道了 A 的这种情况。

三次握手

因此需要第三次握手,即 A 向 B 发出 ACK 报文,这时双方都知道对方已经准备好传输数据(之前的时间点准备好,当前状态依然是不对称)。

三次握手解决-网络数据延迟

如果存在数据包延迟到达的情况,就会出现“已失效的连接请求报文段”,比如 A 向 B 发送的连接请求报文延迟到达 B,B 误以为这是一个新的连接请求,然后接受并发送 ACK 报文。如果是两次握手,B 此时就会进入建立状态,但这是一个错误的状态,因为 A 早已放弃了这个连接。

问题总结

无论进行多少次握手,都无法百分之百地确保成功建立连接,因为最后一次报文可能会丢失,或者出现延迟等各种情况。成功进行三次握手只能说明双方现在以相当高的概率可以进行正常通信。


四次挥手

四次挥手实际上就是两个FIN报文和两个ACK报文,这四个报文必不可少。

为什么不能学习三次握手将FIN和ACK合二为一?

A-TCP发送关闭报文

在TCP连接中,当一方(称为A)没有数据要发送时,会向另一方(称为B)发送一个FIN报文,而B必然会回复一个ACK报文。一旦B接收到FIN报文,它会通知上层应用程序。

B-TCP接收关闭报文

鉴于上层应用程序可能尚未发送完所有数据,B在这种情况下不应立即发送自己的FIN报文,即便数据已经全部发送完毕,B也不应该将FIN和ACK合二为一。

最佳做法是先发送ACK报文通知对方,然后在合适的时机才发送自己的FIN报文。

服务器主动端口

在TCP协议的C/S模式下,当TCP客户端想断开的时候,不能用 shutdown和closesocket与TCP服务器断开,只有让TCP服务器端主动断开(TCP 客户端被动断开),TCP 客户端的端口才能立刻被释放。

注意:中断连接端可以是Client端,也可以是Server端。

详细分析四次挥手

Client端-FIN阶段

假设Client端发起中断连接请求,也就是发送FIN报文。Server端接到FIN报文后,意思是说"我Client端没有数据要发给你了",但是如果你还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据。所以你先发送ACK,"告诉Client端,你的请求我收到了,但是我还没准备好,请继续你等我的消息"。

Client端-FIN_WAIT阶段

Client端就进入FIN_WAIT状态,继续等待Server端的FIN报文。当Server端确定数据已发送完成,则向Client端发送FIN报文,"告诉Client端,好了,我这边数据发完了,准备好关闭连接了"。

Client端-TIME_WAIT阶段

Client端收到FIN报文后,"就知道可以关闭连接了,但是他还是不相信网络,怕Server端不知道要关闭,所以发送ACK后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。

Client端-CLOSED阶段

Server端收到ACK后,"就知道可以断开连接了"。Client端等待了2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,我Client端也可以关闭连接了。

注意:在TIME_WAIT状态中,如果TCP client端最后一次发送的ACK丢失了,它将重新发送。TIME_WAIT状态中所需要的时间是依赖于实现方法的。典型的值为30秒、1分钟和2分钟。等待之后连接正式关闭,并且所有的资源(包括端口号)都被释放。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
打赏
0
0
0
0
381
分享
相关文章
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
39 7
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
从攻防演练到AI防护:网络安全服务厂商F5的全方位安全策略
48 8
网络通讯技术:HTTP POST协议用于发送本地压缩数据到服务器的方案。
总的来说,无论你是一名网络开发者,还是普通的IT工作人员,理解并掌握POST方法的运用是非常有价值的。它就像一艘快速,稳定,安全的大船,始终为我们在网络海洋中的冒险提供了可靠的支持。
59 22
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
60 12
掌握网络通信协议和技术:开发者指南
本文探讨了常见的网络通信协议和技术,如HTTP、SSE、GraphQL、TCP、WebSocket和Socket.IO,分析了它们的功能、优劣势及适用场景。开发者需根据应用需求选择合适的协议,以构建高效、可扩展的应用程序。同时,测试与调试工具(如Apipost)能助力开发者在不同网络环境下优化性能,提升用户体验。掌握这些协议是现代软件开发者的必备技能,对项目成功至关重要。
基于 C# 网络套接字算法的局域网实时监控技术探究
在数字化办公与网络安全需求增长的背景下,局域网实时监控成为企业管理和安全防护的关键。本文介绍C#网络套接字算法在局域网实时监控中的应用,涵盖套接字创建、绑定监听、连接建立和数据传输等操作,并通过代码示例展示其实现方式。服务端和客户端通过套接字进行屏幕截图等数据的实时传输,保障网络稳定与信息安全。同时,文章探讨了算法的优缺点及优化方向,如异步编程、数据压缩与缓存、错误处理与重传机制,以提升系统性能。
46 2
公共云网络安全即服务!阿里云稳居市占率第一!
公共云网络安全即服务!阿里云稳居市占率第一!
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
116 17
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。

热门文章

最新文章