分别描述TCP的3次握手和四次挥手的定义、目的和过程

2023-11-03

定义

  1. 三次握手是指建立TCP连接协议时,需要在客户端和服务器之间发送三个包,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
  2. 四次挥手是指终止TCP连接协议时,需要在客户端和服务器之间发送四个包,四次挥手完毕后,客户端与服务器TCP连接完全断开。

过程

UDP的报文结构
在这里插入图片描述
TCP的报文结构
在这里插入图片描述
UDP报文的头部只有8个字节,相对TCP的20字节。

 三次握手是指建立TCP连接协议时,需要在客户端和服务器之间发送三个包,握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。

在这里插入图片描述

第一次握手:客户端发送第一个包,其中SYN标志位为1, ACK=0,发送顺序号sequence=X(随机int)。客户端进入SYN发送状态,等待服务器确认。
第二次握手:服务器收到这个包后发送第二个包,其中包SYN、ACK标志位为1,发送顺序号seq=Y(随机int),接收顺序号ACK=X+1,此时服务器进入SYN接收状态。
第三次握手:客户端收到服务器传来的包后,向服务器发送第三个包,SYN=0, ACK=1,接收顺序号ACK = Y+1,发送顺序号seq=X+1。此包发送完毕,客户端和服务器进入ESTABLISHED建立成功状态,完成三次握手。

在这里插入图片描述

四次握手是指终止TCP连接协议时,需要在客户端和服务器之间发送四个包

第一次挥手:主动关闭方发送第一个包,其中FIN标志位为1,发送顺序号seq为X。
第二次挥手:被动关闭方收到FIN包后发送第二个包,其中发送顺序号seq为Z,接收顺序号ack为X+1。
第三次挥手:被动关闭方再发送第三个包,其中FIN标志位为1,发送顺序号seq为Y,接收顺序号ack为X。
第四次挥手:主动关闭方发送第四个包,其中发送顺序号为X,接收顺序号为Y。至此,完成四次挥手。
超时重传指的是,发送数据包在一定的时间周期内没有收到相应的ACK,等待一定的时间,超时之后就认为这个数据包丢失,就会重新发送。这个等待时间被称为RTO.

深入讨论:

1、为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

  建立连接时,ACK和SYN可以放在一个报文里来发送。而关闭连接时,被动关闭方可能还需要发送一些数据后,再发送FIN报文表示同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2、为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

  两个存在的理由:1、无法保证最后发送的ACK报文会一定被对方收到,所以需要重发可能丢失的ACK报文。2、关闭链接一段时间后可能会在相同的IP地址和端口建立新的连接,为了防止旧连接的重复分组在新连接已经终止后再现。2MSL足以让分组最多存活msl秒被丢弃。

3、为什么必须是三次握手,不能用两次握手进行连接?

   记住服务器的资源宝贵不能浪费!  如果在断开连接后,第一次握手请求连接的包才到会使服务器打开连接,占用资源而且容易被恶意攻击!防止攻击的方法,缩短服务器等待时间。两次握手容易死锁。如果服务器的应答分组在传输中丢失,将不知道S建立什么样的序列号,C认为连接还未建立成功,将忽略S发来的任何数据分组,只等待连接确认应答分组。而S在发出的分组超时后,重复发送同样的分组。这样就形成了死锁。

目的

  1. 三次握手可以防止失效的连接请求报文段被服务端接收,从而产生错误。
    PS:失效的连接请求:若客户端向服务端发送的连接请求丢失,客户端等待应答超时后就会再次发送连接请求,此时,上一个连接请求就是『失效的』。
    若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED(就绪)状态,而服务端在收到连接请求后就进入ESTABLISHED(就绪)状态。此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED(就绪)状态,等待发送数据或主动发送数据。但此时的客户端早已进入CLOSED(关闭)状态,服务端将会一直等待下去,这样浪费服务端连接资源。
  2. TCP连接是双向的,因此在四次挥手中,前两次挥手用于断开一个向的连接,后两次挥手用于断开另一方向的连接。
  3. 为什么A要先进入TIME-WAIT状态,等待2MSL时间后才进入CLOSED状态?
    这也是为了保证B(被动方)能收到A(主动方)的确认应答。
    若A发完确认应答后直接进入CLOSED状态,那么如果该应答丢失,B等待超时后就会重新发送连接释放请求,但此时A已经关闭了,不会作出任何响应,因此B永远无法正常关闭
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分别描述TCP的3次握手和四次挥手的定义、目的和过程 的相关文章

  • Java 基于协同过滤实现插画交流平台中的插画信息推荐功能

    Mahout 介绍 Mahout 是 Apache Software Foundation ASF 旗下的一个开源项目 提供一些可扩展的机器学习领域经典算法的实现 旨在帮助开发人员更加方便快捷地创建智能应用程序 Mahout包含许多实现 包
  • MyBatis增删改查(步骤详细,由浅入深,适合初学者,只看这一篇就够了)

    MyBatis目录 java 后端框架 MyBatis的使用 1 mybatis基本使用 2 mybatis工具类的封装和实现增删改查 3 mybatis中主要类的介绍 4 nybatis实现动态代理 使用的是反射机制 重点掌握 5 myb
  • [Pikachu靶场实战系列]RCE(远程系统命令执行)

    RCE介绍 exec ping 可以输入一个ip地址 结果发现页面无回显 难道不应该回显Ping命令的结果吗 不过我们不管他 继续下一步 在ip后用 分割再输入一个ls命令 发现ls命令被执行了 说明开发者没有做严格的安全控制 没有想到我们
  • python pandas 处理并excel 插入一列新的数据

    python pandas 处理excel并插入一列新的数据 接到个需求是在表格里塞入一列新的数据 假如分页的数据 页 条数 我们这是200条 页 用的是pandas import pandas as pd path excel room
  • Elasticsearch硬核入门教程(2022最全)

    Java全能学习 面试指南 https javaxiaobear cn 1 Elasticsearch概述 1 什么是Elasticsearch The Elastic Stack 包括 Elasticsearch Kibana Beats
  • 返回给定二叉树中一层最多的节点个数(仅使用队列实现)

    思路点拨 我们知道对二叉树实现层序遍历 也就是一层一层遍历 需要使用队列 而要找出节点最多的那一层 必然避不开要算出每一层节点的个数 那也就避不开层序遍历 除此之外 我们还需要维护几个变量 1 curend 当前层的最后一个节点 2 nex
  • Java基础之try catch finally的原理

    先看一段代码 public static int test int i 0 try System out println 业务执行 标记1 i 1 0 System out println 业务执行完成 i 标记2 return i cat
  • 双向循环神经网络

    双向循环神经网络结构图
  • LinuxRPM软件安装

    软件管理 软件安装介绍 学软件开发 各种台的软件熟练安装是必须要熟练掌握 大家都知道 Windows下安装软件时 只需用鼠标双击软件的安装程序 或者用Zip等解压缩软件解压缩即可安装 在android或者apple中安装软件时 只需要在手机
  • nginx前后端分离部署无法访问到后端接口

    先看一组错误案例 user nobody worker processes 1 error log logs error log error log logs error log notice error log logs error lo
  • 【程序运行时的两种环境】

    目录 前言 一 翻译环境 一 预编译 二 编译 三 汇编 四 链接 二 执行环境 三 补充 总结 前言 在ANSI C的任何一种实现中 都要经过两种环境 一种是编译环境 用于将程序代码转换为可执行的机器指令 二进制指令 另一种是执行环境 用
  • 【C++】细说C++中的数组之动态数组

    转载自如下位置 https blog csdn net u013921430 article details 79514972 以备学习
  • 前端引入和html标签

    先安装 flask模块 pip install flask from flask import Flask app Flask name 创建了网址 show info 和函数index的对应关系 以后用户在浏览器上访问 show info
  • 前端小程序面试题(一)

    首先说一些为什么总结小程序相关的面试题吧 我们可以随便打开一个招聘网站 在那里你会发现市场对于小程序的需求还是蛮高的 有些公司可能就只需要写小程序的前端人员 虽然小程序的开发很大一部分都是很简单的 但是有些常用的东西还是有必要了解一下的 故
  • Android代码实现APK文件的安装与卸载

    Android程序使用代码的安装和卸载 安装 String str CanavaCancel apk String fileName Environment getExternalStorageDirectory str Intent in
  • Zebra-VTYSH源码分析和改造(二):深入代码

    分析Zebra VTYSH的源码 首先从main函数开始 在ztysh main c中找到main函数 来进一步分析流程执行如下图所示 在平时的使用中我们会发现 配置的时候有很多的视图 View 每个视图中有不同的命令可供用户输入进行配置
  • STM32—Flash读写详解

    目录 前言 介绍 STM32 FLASH 闪存的编程和擦除 Flash读写的标准库函数 软件设计 FLASH的读取 直接读取某一地址的内容 读取选定位置的选定大小的内容 FLASH的写入 直接使用标准库写入 写入选定位置的选定大小的内容 如
  • mega328p-ADC,PWM,UART驱动

    ADC驱动 函 数 名 Ai Init 函数功能 Ai端口初始化 输入参数 void 输出参数 void 返 回 值 void 参考文档 void 创 件 人 程强刚 创建日期 2016 02 09 修改历史 void Ai Init vo
  • 身份认证之多因素身份认证(MFA)

    我们大多数人都同意密码是不安全的身份验证形式这一观点 更糟糕的是 它完全不智能 但这引发了一个问题 如果密码不是解决安全问题的答案 那什么是 目前 答案可能是多因素身份验证 MFA 多因素身份验证增加了一层关键的防御 MFA使用两个或多个因

随机推荐

  • Filter过滤器完成验证代码的封装

    Filter过滤器完成验证代码的封装 filter是什么 1 使用filter 2 filter配置到项目中 验证用户权限是需要反复使用的代码块 把他封装到filter中 减少代码冗余 filter是什么 init 方法 初始化方法 在创建
  • 主板上还剩啥?CPU整合GPU/北桥/南桥

    泡泡网主板频道2月6日 众所周知 主板上最重要 成本最高的两颗芯片 被称为北桥和南桥 其中北桥负责与处理器对接 主要功能包括 内存控制器 PCI E控制器 集成显卡 前 后端总线等 都是速度较快的模块 而南桥则负责外围周边功能 速度较慢 主
  • c++ 读写excel_每天10分钟,轻松入门python,json、csv等读写

    JSON的全称是 JavaScript Object Notation 意思是JavaScript对象表示法 它是一种基于文本 独立于语言的轻量级数据交换格式 这种数据在弄爬虫的时候 经常会见到这类型的数据 下面展示一个简单的json数据
  • 利用计数器实现任意分频,占空比为60%(任意占空比)电路 [VHDL]

    本次实验为利用计数器实现分频常数为24000 占空比为60 的电路 也可以设置为任意分频 任意占空比的电路 一 设计思路 设计分析 要将原来的占空比为50 大频率的信号重新设为60 占空比 频率较小的周期信号 其中频率的思想就是分频器 利用
  • Northstar软件下载 以及搭建机器人时遇到的坑

    上个学期学机器人的时候 老师让我们用 innostar 创意之星 做出一个机器人来 但我翻遍全网也没找到创意之星的配套软件 我找了三天也没找到 公司官网也没有 给博创的人发邮件也不回 给我整的心态爆炸 为了方便后来的学弟学妹们 现在把我找到
  • Java 优先队列(PriorityQueue)总结

    PriorityQueue 实现的是 Queue 接口 可以使用 Queue 提供的方法 以及自带的方法 1 PriorityQueue概述 Java PriorityQueue 实现了 Queue 接口 不允许放入 null 元素 其通过
  • LVGL学习笔记

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 硬件要求 二 移植 1 准备工作 2 文件准备 3 加入工程 前言 LVGL 轻巧而多功能的图形库 是一个免费的开放源代码图形库 它提供创建具有易于使用的
  • Shopify Liquid 日期

    Shopify Liquid 日期变量 assign start date now date s assign start date year now date Y assign yoy start start date year minu
  • 基于卷积神经网络的车道线检测

    在本博客中 我们将探讨如何使用卷积神经网络 CNN 在Udacity自动驾驶数据集上进行车道线检测 我们将首先简要介绍自动驾驶的相关知识 然后介绍车道线检测的重要性 接下来 我们将构建一个CNN模型 并在Udacity数据集上对其进行训练和
  • 【Mo 人工智能技术博客】K-means:无监督聚类的经典算法

    K means 无监督聚类的经典算法 作者 郑培 无监督学习是一类用于在数据中寻找模式的机器学习技术 无监督学习算法使用的输入数据都是没有标注过的 这意味着数据只给出了输入变量 自变量 X 而没有给出相应的输出变量 因变量 在无监督学习中
  • 常见的并发模型

    介绍 常见解决并发的策略一般有两种 共享数据和消息传递 基于消息传递的实现有 CSP模型 典型的有Go语言中基于Channel的通讯 Actor模型 典型的有Akka中的Actor模型 CSP模型和Actor模型的简单理解 Don t co
  • linux centos中查看应用进程和杀死进程

    1 ps 表示 查看正在运行中的进程 2 ps ef 表示 查看所有进程的详细信息 3 输入 ps ef grep nmon 表示 搜索nmon相关的进程 4 杀死进程 kill 9 进程号
  • 【常用的反监控(winrdlv3)方法winrdlv3】

    常用的反监控 winrdlv3 方法winrdlv3 方案一 使用silent terminal 禁用 sdhelper2 exe和winrdlv3 exe两个程序进程 加密进程终止或者可以只中止sdhelper2则不会加密也不会被管理员发
  • Python手册(Standard Library)--re

    文章目录 re模块 匹配 返回re对象 MatchObject 查找 检索 替换和分割 flags标志 re 模块使 Python 语言拥有全部的正则表达式功能 compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象
  • 笔记:JavaScript编译与执行

    1 js的编译与执行 事件循环 单线程语言 JavaScript是单线程语言 即在浏览器中一个页面只有一个线程在执行js代码 进程和线程 假设我们有一家工厂 进程 那么 工厂所拥有的独立资源就相当于系统给我们分配的内存 这是独立的 如果我们
  • Flutter 学习笔记 (二) —— Flutter布局及常用widget总结

    前言 在Flutter里 UI控件就是Widget Widget根据不同的功能可以分为结构元素 如按钮或菜单 文本样式 字体或者颜色方案 布局属性 如填充 对齐 居中 可以这么理解 一个flutter的页面是有一棵树型的Widget组成 包
  • Nginx+Redis+Ehcache:大型高并发与高可用的三层缓存架构总结

    Nginx Redis Ehcache 大型高并发与高可用的三层缓存架构总结 Nginx 对于中间件nginx常用来做流量的分发 同时nginx本身也有自己的缓存 容量有限 我们可以用来缓存热点数据 让用户的请求直接走缓存并返回 减少流向服
  • 电感的特性

    电感的特性 2009 10 19 17 06 jonniyong 分类 工程技术科学 浏览4472次 简单的说电感有虑波 震荡 扼流三个作用 但是具体是怎么来实现的呢 各自的工作原理 还有就是对于这三种用途的电感 那些因素影响他们 也就是说
  • 文本预处理 BOW(Bag Of Words,词袋)和 TF-IDF(Term Frequency-Inverse Document Frequency,词频逆文档频率)

    1 BOW 构建过程 将文本中的词汇提取出来 组成一个词汇表 每篇文档则使用词汇表中的词来表示 形成一个词频向量 忽略词汇之间的顺序关系 只关心词频信息 比如 文本1 The cat sits on the mat 文本2 The dog
  • 分别描述TCP的3次握手和四次挥手的定义、目的和过程

    定义 三次握手是指建立TCP连接协议时 需要在客户端和服务器之间发送三个包 握手过程中传送的包里不包含数据 三次握手完毕后 客户端与服务器才正式开始传送数据 四次挥手是指终止TCP连接协议时 需要在客户端和服务器之间发送四个包 四次挥手完毕