【计算机网络】TCP握手与挥手:三步奏和四步曲

这里写目录标题

  • 前言
  • 三次握手
  • 四次挥手
  • 三次握手和四次挥手的作用
    • TCP三次握手的作用
      • 建立连接
      • 防止已失效的连接请求建立连接
      • 防止重复连接
    • TCP四次挥手的作用:
      • 安全关闭连接
      • 避免数据丢失
      • 避免半开连接
    • 总结:
  • 总结

前言

TCP(传输控制协议)是一种面向连接的可靠的传输协议。在建立连接和关闭连接时,TCP使用了三次握手和四次挥手的机制来确保通信的可靠性。
TCP是一种非常重要的传输层协议,被广泛应用于各种网络通信场景中。无论是企业内部的数据传输,还是互联网上的数据交换,都离不开TCP的支持。

三次握手

三次握手的过程是这样的:

  • 第一步:客户端向服务器发送一个SYN(同步)标志位的数据包,请求建立连接。这个数据包包含了一个随机生成的序列号X。

  • 第二步:服务器收到客户端的请求后,会回复一个带有SYN和ACK(确认)标志位的数据包。这个数据包中除了SYN标志位外,还包含了服务器随机生成的序列号Y,以及确认号ACK为X+1。

  • 第三步:客户端收到服务器的响应后,会发送一个ACK标志位的数据包给服务器,确认连接建立。该数据包中的确认号ACK为Y+1。
    经过以上三个步骤,双方都知道彼此已经准备好进行通信,连接成功建立。

注意:三次握手的目的是为了确保双方都能够收到对方的数据包。如果只有两次握手,则存在一种情况,即客户端发送的SYN数据包在传输过程中丢失,而服务器没有收到客户端的请求,但是客户端已经认为连接建立成功了。当客户端向服务器发送数据时,服务器会认为这是一个非法的数据包,并拒绝接收。因此,三次握手可以避免这种情况的发生。
请添加图片描述

四次挥手

四次挥手的过程是这样的:

  • 第一步:客户端发送一个FIN(结束)标志位的数据包给服务器,请求关闭连接。

  • 第二步:服务器收到客户端的请求后,发送一个ACK标志位的数据包给客户端,确认收到关闭请求。

  • 第三步:服务器继续向客户端发送一个FIN标志位的数据包,表示服务器也准备关闭连接。

  • 第四步:客户端收到服务器的关闭请求后,发送一个ACK标志位的数据包给服务器,确认收到关闭请求。

经过以上四个步骤,双方都完成了关闭连接的过程。在这个过程中,服务器和客户端都需要等待一段时间(即TIME_WAIT状态)才能完全关闭连接,等待时间一般为2MSL,即2倍最大报文段生存时间。这是因为在实际应用中,网络状况可能不稳定,需要确保对方已经接收到最后一个ACK数据包。
四次挥手的过程可以避免连接关闭时出现问题,如双方同时关闭连接,但是还有数据传输的情况。
请添加图片描述

三次握手和四次挥手的作用

TCP三次握手的作用

建立连接

三次握手确保了客户端和服务器之间建立了可靠的连接。客户端发送SYN数据包给服务器,服务器回复SYN+ACK数据包给客户端,最后客户端发送ACK数据包给服务器。通过这个过程,双方都确认对方可达,并同步了序列号和确认号。只有完成三次握手,才能确保双方能够正常通信。

防止已失效的连接请求建立连接

在网络传输过程中,可能会有延迟或丢失的情况发生。如果没有三次握手,客户端发送的连接请求可能会在网络中滞留,当客户端重新发送请求时,服务器无法区分新的连接请求与旧的失效请求。通过三次握手,服务器可以确认客户端发送的连接请求是有效的,避免建立无效的连接。

防止重复连接

在网络环境中,可能存在网络拓扑改变或网络故障的情况。如果没有三次握手,客户端可能会发送多个连接请求给服务器,而服务器则无法判断是新的连接请求还是旧的重复连接。通过三次握手,服务器可以确认客户端的序列号和确认号,避免重复连接的情况发生。

TCP四次挥手的作用:

安全关闭连接

四次挥手确保了双方在关闭连接时能够安全地完成数据传输。客户端发送FIN数据包给服务器,表示不再发送数据;服务器回复ACK数据包给客户端,确认收到关闭请求;服务器继续发送FIN数据包给客户端,表示也准备关闭连接;最后,客户端回复ACK数据包给服务器,确认收到关闭请求。通过这个过程,双方都完成了数据传输并安全地关闭连接。

避免数据丢失

在关闭连接之前,可能存在数据传输的延迟。通过四次挥手,客户端和服务器可以互相通知对方不再发送数据,确保所有数据都能被接收和处理,避免数据丢失的情况。

避免半开连接

在网络环境中,可能存在半开连接的情况,即一方已经关闭连接但另一方不知道。通过四次挥手,双方都可以通知对方自己的关闭意图,并确认对方已经收到关闭请求,避免出现半开连接的情况。

总结:

TCP三次握手和四次挥手在网络通信中起着至关重要的作用。通过三次握手,双方建立可靠的连接,确保能够正常通信,并避免无效连接和重复连接的问题。而通过四次挥手,双方安全地关闭连接,完成数据传输,并避免数据丢失和半开连接的情况发生。

总结

通过三次握手和四次挥手的机制,TCP能够可靠地建立连接和关闭连接,保证数据的完整性和可靠性。在实际应用中,TCP是非常重要的协议,被广泛应用于各种网络通信场景中。了解TCP的三次握手和四次挥手机制对于网络开发人员来说是非常重要的基础知识。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/419483.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大模型理论基础3

模型架构 模型概括 先把语言模型看成黑盒,以便于了解整体功能后拆分成:分词、模型架构 分词 首先要知道:语言模型 p 是建立在词元(token)序列的上的一个概率分布输出,其中每个词元来自某个词汇表V&#…

NLP论文阅读记录 - 2022 | WOS 04.基于 XAI 的强化学习方法,用于社交物联网内容的文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法3.1 总结为两阶段学习3.1.1 基础系统 3.2 重构文本摘要 四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 XAI-Base…

USB-C接口给显示器带来怎样的变化?

随着科技的不断发展,Type-C接口已经成为现代电子设备中常见的接口标准。它不仅可以提供高速的数据传输,还可以实现快速充电和视频传输等功能。因此,使用Type-C接口的显示器方案也受到了广泛的关注。本文将介绍Type-C接口显示器的优势、应用场…

linux下vsc的自动切换输入法解决方案

前言 个人使用的是Linux开发加上vsc编辑器,这两个东西一加中国开发者大致上就消失不见了,眼馋idea那个Smartinput很久了,赶上放假了,有空搞搞,如果后期有心情会做的通用点 安装 商店搜索SmartInputLinux安装 使用…

SystemC学习笔记(三) - 查看模块的波形

简述 波形在Simulation/Emulation中地位十分重要,尤其是在研发初期,只能通过波形来查看软件hang住的位置。 对于TLM来说,查看波形一般是指查看pvbus上的transaction,而对于SystemC本身来说,查看波形就是使用Gtkwave或…

二、用户管理(上)

目录 1.用户/组基本概念 用户基本信息文件:vim /etc/passwd(冒号为分隔,分为7列字段) 用户密码信息文件:/etc/shadow 组信息文件:/etc/group。 2.用户/组管理 查看当前用户:whoami 创建用…

2024最新 8 款电脑数据恢复软件推荐分享

数据恢复是一个涉及从设备硬盘驱动器检索已删除文件的过程。这可能需要存储在工作站、笔记本电脑、移动设备、服务器、相机、闪存驱动器上的数据——任何在独立或镜像/阵列驱动器上存储数据的东西,无论是内部还是外部。 在某些情况下,文件可能被意外或故…

再论 如何通过一个项目征服Java

前面说过,我准备用几个月的时间,将Java体系认真的梳理一遍,不一定做的很好,但是每次都努力去做。 为什么我觉得需要加紧做这个呢?Java早已经不是高大上的稀世珍品了,程序员也不再是高科技工作者&#xff0…

GPU与SSD间的P2P DMA访问机制

基于PCIe(Peripheral Component Interconnect Express)总线连接CPU、独立GPU和NVMe SSD的系统架构。 在该架构中,PCIe Swicth支持GPU与SSD之间快速的点对点直接内存访问(peer-to-peer, p2p DMA)。通常情况下&#xff0…

数据结构实验4:二叉树的基本操作

一、问题描述 运用二叉链表实现二叉树的基本操作,包括:创建二叉树的存储结构、复制已有的二叉树、计算已有的二叉树的深度、先根序序列、中根序序列、后根序序列等。 输入格式:AB#C##D## 二、实验目的 掌握二叉链表及二叉树的基本操作。 …

算法练习-替换数字(思路+流程图+代码)

难度参考 难度:简单 分类:字符串 难度与分类由我所参与的培训课程提供,但需要注意的是,难度与分类仅供参考。以下内容均为个人笔记,旨在督促自己认真学习。 题目 给定一个字符串S,它包含小写字母和数字字符&#xff0…

php基础学习之代码框架

一&#xff0c;标记 脚本标记&#xff08;已弃用&#xff09;&#xff1a;<script language"php"> php代码 </script> 标准标记&#xff1a;<?php php代码 ?> 二&#xff0c;基础输出语句 不是函数&#xff0c;…