趣谈(思考)TCP建接时三次握手和断连时四次握手

2024-06-12 23:38

本文主要是介绍趣谈(思考)TCP建接时三次握手和断连时四次握手,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       了解TCP的你们应该知道,TCP 协议是基于连接的(UDP不是面向连接的),先建立好连接,然后再进行传输。建立连接时是3次握手,断开连接是四次握手,一起学习:

三次握手建连-客户端发起:
       Server 端先监听端口,此时Server的连接状态是 LISTEN 状态。

       这时 Client 端准备建立连接,向Server端发送一个 SYN 同步包,Client 端的连接状态为 SYN_SENT 状态。

       Server 端收到 SYN 后,同意建立连接,会向 Client 端回复一个 ACK和SYN,然后Server 端的连接状态变成了 SYN_RCVD。

       Client 收到 Server 的 ACK 后,连接状态变成了 ESTABLISHED 状态,同时Client 向 Server 端发送 ACK,回复 Server 端的 SYN 请求。

       Server 端收到 Client 端的 ACK 后,Server 端的连接状态也变成了的 ESTABLISHED 状态,建连完毕。

 四次挥手断连-双方都可以发起:  

       假设是Client端发起,Client 向 Server 发送了一个 FIN 包,然后 Client 进入了 FIN_WAIT_1 状态。

       Server 端收到 FIN 后,返回 ACK,然后进入 CLOSE_WAIT 状态。

       Server 端会向 Client 端发送 FIN,此时 Server 进入 LAST_ACK 状态。

       Client 端收到 Server 端的 FIN 后,回复 ACK,然后进入 TIME_WAIT 状态,之后才会进入 CLOSED 关闭状态。

       而 Server 端收到 ACK 后直接进入 CLOSED 状态。

       其实这个过程我想大多数人应该都听说过,只是好像容易忘记,因为要理解,而不是死记硬背,只有理解了才会记得牢,我感觉三次握手建连就像你要给别人发什么东西的准备,应该是这么个过程:

你:在不在,我给你发个东西(SYN),收到回下。这相当于Client 向Server端发送一个 SYN 同步包。

他:噢,知道了(ACK)。一直在阿,可以发(SYN),发来嘛,收到回下。这相当于Server端同意建立连接,向 Client 端回复一个 ACK和SYN。

你:噢,在是吧,知道了(ACK),那我准备发了。这相当于Client 向 Server 端发送 ACK,回复 Server 端的 SYN 请求。

       然后双方就开始处理了。每一次确认都不可少,你想如果是2次握手,那可能一方没有确认对方消息,4次握手也显多余,因为是建立连接,Server 端的 SYN 和 ACK就合并为一次发送了,告知对方准备就绪,没必要分两次发送。

       四次握手断连就像说,东西发完了我要撤了,应该是这么个过程:

你:东西基本发完了(FIN)我要撤了,收到回下。这相当于Client 向 Server 发送了一个 FIN 包。

他:噢,好。收到(ACK)。这相当于Server收到 FIN 后,返回 ACK。

可能他要等一会。。。

他:嗯,是都发完了(FIN),那我也要撤了,收到回下。这相当于Server 向 Client 端发送 FIN。

可能你要等一会。。。

你:噢,好,收到(ACK)。我再等一会就撤,你先撤吧。这相当于Client端向Server端回复 ACK。

       四次确认,为什么不是三次,因为断连时两个方向上数据发送停止数据包(FIN)的时间可能不同,所以不能合并发送 FIN 和 ACK,必须都确认,我感觉这在生活中也有例子,打电话时接通了就行,挂电话要问下:说完没?他说说完了。你说:那我也说完了。拜拜。

       UDP传输可能是这样(图摘自网络):

 

这篇关于趣谈(思考)TCP建接时三次握手和断连时四次握手的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1055666

相关文章

关于如何更好管理好数据库的一点思考

本文尝试从数据库设计理论、ER图简介、性能优化、避免过度设计及权限管理方面进行思考阐述。 一、数据库范式 以下通过详细的示例说明数据库范式的概念,将逐步规范化一个例子,逐级说明每个范式的要求和变换过程。 示例:学生课程登记系统 初始表格如下: 学生ID学生姓名课程ID课程名称教师教师办公室1张三101数学王老师101室2李四102英语李老师102室3王五101数学王老师101室4赵六103物理陈

爬虫阶段思考

内容:写这篇文章是因为最近帮同学改了很多的爬虫代码,感触良多。 我用豆瓣为例,并不是不会用别的,而是这个我个人感觉最经典。然后还会写我遇到的一些问题以及解决方法。 首先,我们得先知道怎样爬取。我用的scrapy框架爬取。 我对此图的理解就是: 从spiders中获得一个请求(REQUEST),通过引擎传递给调度器,之后再返回给引擎,引擎把url封装好后传递给下载器,下载器将资源下载好后

关于微信没有接入鸿蒙NEXT的思考

6月21日,纯血鸿蒙发布,国内的质疑声终于停止,不再被人喊叫换皮 Android 了.就连编程语言都是华为自研的。 可是发布会后微信却成了热点,因为余承东在感谢了一圈互联网企业,如:淘宝、支付宝、美团、京东、抖音、今日头条、钉钉、小红书、微博、B站、高德、WPS等等. 唯独没有感谢腾讯. 中国互联网巨头只有哪么几家,腾讯、阿里、字节、拼多多、美团、百度、京东、华为 他们这些派系又诞生了无数

基于RAG的知识库AI代理机器人,问题思考

基于RAG的知识库AI代理机器人,问题思考 知识库内容分类 对于普通非qa问答格式的知识内容 在分段存储时,需要手动调整,保证每个分段的内容意思完整,不被分割,当然段落也不宜过长,保证内容表达的意思到不可分割为止就行 对于qa问答格式的知识内容 通常需要对问题增加格外索引,因为fastgpt的模式是将问题和回答,作为完整的文本作为向量化的坐标,当问题和回答的内容过长时,使用问题向量化匹配

TCP 可靠传输的工作原理

转载地址:https://my.oschina.net/xinxingegeya/blog/485233 感谢原作者 TCP 可靠传输的工作原理 ARQ(Automatic Repeat-reQuest)(自动重传请求) 停止等待ARQ协议 连续ARQ协议   停止等待ARQ协议 全双工通信的双发既是发送方也是接收方。下面为了讨论问题的方便,我们仅考虑A发送数据而B接受数据

ESP32使用MQTT_TCP连接阿里云

ESP32-IDF中MQTT函数的介绍 esp_mqtt_client_handle_t esp_mqtt_client_init(const esp_mqtt_client_config_t *config) 函数功能:mqtt 客户端初始化 函数形参: mqtt 客户端的配置 函数返回值:正确则返回根据配置创建的 mqtt 客户端句柄;异常则返回 NULL。 其中函数形参 esp_mqtt

【LinuxC语言】第一个简单的tcp/ip客户端

文章目录 前言一、客户端连接服务器的示意图二、客户端涉及的相关函数socket函数connect函数struct sockaddr结构体相关的转换函数connect主体函数 发送数据函数接收数据函数关闭socket客户端示例代码 总结 前言 在计算机网络中,TCP/IP 是最常见的网络协议。它为我们提供了一种可靠的方式来发送和接收数据。在这篇文章中,我们将使用 Linux C

TCP与UDP_三次握手_四次挥手

TCP vs UDP TCP数据 具体可以通过Cisco Packet Tracer工具查看: UDP数据 三次握手、四次挥手 为什么是3/4次?这牵扯到单工、双工通信的问题 TCP建立连接:表白 TCP释放连接:分手 TCP—建立连接—三次握手 解释: 首先,启动服务器,让服务器进入监听状态(监听客户端的连接请求)。客户端向服务器发送同

【linuxC语言】第一个简单的TCP/IP服务器

文章目录 前言一、服务器开发结构图二、深度解析服务器三、服务器开发相关函数htonl函数bind函数listen函数accept函数INADDR_ANY 宏struct sockaddr_in的不同场景区别tcp/ip服务器示例代码 总结 前言 在计算机网络中,TCP/IP 是一种非常重要的通信协议。它是互联网的基础,也是许多网络应用的核心。在 Linux 环境下,我们可以使

关于后台实践的一些疑问、思考与建议

1. 关于工具类 建议一个公司或者一个产品线的项目,使用统一的工具包,而不是每个项目都建立自己的工具类。包括一些枚举类,基础抽象类等也建议加到项目的基础工具包中。 如果要在自己项目中编写的工具类,尽量多实现一些常用的函数。或者让工具类直接继承一些框架中的常用工具类,如StringUtils可以继承common.lang中的StringUtils。 2. 关于日期和时间 从contro