【底层服务/编程功底系列】「网络通信体系」带你攻克网络技术之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
379
分享
相关文章
掌握网络通信协议和技术:开发者指南
本文探讨了常见的网络通信协议和技术,如HTTP、SSE、GraphQL、TCP、WebSocket和Socket.IO,分析了它们的功能、优劣势及适用场景。开发者需根据应用需求选择合适的协议,以构建高效、可扩展的应用程序。同时,测试与调试工具(如Apipost)能助力开发者在不同网络环境下优化性能,提升用户体验。掌握这些协议是现代软件开发者的必备技能,对项目成功至关重要。
导入虚拟机到Hyper-V环境时,理解并配置网络适配器设置是确保网络通信的关键
在Hyper-V环境中,正确配置虚拟机的网络适配器是确保其网络通信的关键。需先启用Hyper-V功能并创建虚拟交换机。接着,在Hyper-V管理器中选择目标虚拟机,添加或配置网络适配器,选择合适的虚拟交换机(外部、内部或私有),并根据需求配置VLAN、MAC地址等选项。最后,启动虚拟机并验证网络连接,确保其能正常访问外部网络、与主机及其他虚拟机通信。常见问题包括无法访问外部网络或获取IP地址,需检查虚拟交换机和适配器设置。
智能体竟能自行组建通信网络,还能自创协议提升通信效率
《一种适用于大型语言模型网络的可扩展通信协议》提出创新协议Agora,解决多智能体系统中的“通信三难困境”,即异构性、通用性和成本问题。Agora通过标准协议、结构化数据和自然语言三种通信格式,实现高效协作,支持复杂任务自动化。演示场景显示其在预订服务和天气预报等应用中的优越性能。论文地址:https://arxiv.org/pdf/2410.11905。
39 6
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
【网络原理】——HTTP协议、fiddler抓包
HTTP超文本传输,HTML,fiddler抓包,URL,urlencode,HTTP首行方法,GET方法,POST方法
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
238 3
网络安全与信息安全:知识分享####
【10月更文挑战第21天】 随着数字化时代的快速发展,网络安全和信息安全已成为个人和企业不可忽视的关键问题。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议,帮助读者提高自身的网络安全防护能力。 ####
105 17
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
70 10

热门文章

最新文章