详解TCP/IP的三次握手和四次挥手

文章目录

  • 前言
  • 一、TCP/IP协议的三次握手
    • 1.1 三次握手流程
  • 二、TCP/IP的四次挥手
    • 2.1 四次挥手流程
  • 三、主要字段
    • 3.1、标志位(Flags)
    • 3.2、序号(sequence number)
    • 3.3、确认号(acknowledgement number)
  • 四、状态名词解析


前言

本文章讲解TCP/IP协议的三次握手和四次挥手的流程。


一、TCP/IP协议的三次握手

三次握手:为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。

1.1 三次握手流程

TCP协议位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。

在这里插入图片描述

  • 第一次握手: 客户端发送给服务器连接请求的报文,其中报文中包含seq序列号,是由发送端随机生成的,并且将报文中的SYN字段置为1,表示需要建立TCP连接。(SYN=1,ACK=0,seq=x,x为随机生成数值);
  • 第二次握手: 服务端接收到客户端的连接请求的报文后,回复给客户端连接请求确认的报文,其中包含seq序列号,是由服务端随机生成的,并且将ACK设置为1(代表服务器同意连接),而且会产生ack字段,ack字段数值是在客户端发送过来的序列号seq的基础上加1进行回复,以便客户端收到信息时,知晓自己的TCP建立请求已得到验证。(SYN=1,ACK=1,ack=x+1,seq=y,y为随机生成数值)这里的ack加1可以理解为是确认和谁建立连接;
  • 第三次握手: 客户端收到服务端发送的连接请求确认的报文后,回复给服务器确认的报文,其中SYN设置为0,表示已经建立连接,seq为自身序列号+1,ack为y+1。(SYN=0,ACK=1,seq=x+1,ack=y+1)

二、TCP/IP的四次挥手

即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

2.1 四次挥手流程

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

在这里插入图片描述

  • 第一次挥手: 主动关闭方向被动关闭方发送一个FIN包,FIN=1,也就是主动关闭方告诉被动关闭方 :我已经不会再给你发数据了。(FIN=1,seq=x)
  • 第二次挥手: 被动关闭方收到FIN包 后发送一个 ACK包 给主动关闭方 。告诉主动关闭方已收到通知 。(ACK=1,seq=x,ack=x+1)注:在被动关闭方发送 FIN包之前,被动关闭方还是可以向 主动关闭方发送数据的。
  • 第三次挥手: 被动关闭方又发送一个 FIN包给主动关闭方,用来关闭被动关闭方到主动关闭方的数据传送。也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。(FIN=1,ACK=1,seq=z,ack=x+1)
  • 第四次挥手: 主动关闭方收到FIN包后,发送一个ACK包给被动关闭方,至此,完成四次挥手。(ACK=1,seq=x+1,ack=z+1)

三、主要字段

3.1、标志位(Flags)

标志位含义说明
SYN发起建立连接当SYN=1,ACK=0,表明是连接请求报文,若同意连接,则响应报文中应该有 SYN=1,ACK=1
ACK确认标识当ACK=1,确认标识才有效。(为了与 确认号ack 区分开,我们一定要用大写字母)
FIN释放连接当FIN=1,表明此报文的发送方的数据已经发送完毕,并且要求释放。
PSH读取数据当PSH=1,提示接收端应用程序立即从TCP缓存区把数据读走。
RST重置连接当RST=1,表时TCP连接出现严重差错,必须释放连接,在后再重新连接。
URG紧急指针当URG=1,表明紧急指针字段有效,告诉系统此报文段中有紧急数据。

3.2、序号(sequence number)

seq序号:占32位。用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
注:
SYN是标志位,表示发起建立一个连接。
seq即seq序号,表示发起方发送数据进行标记。

3.3、确认号(acknowledgement number)

ack序号:占32位。只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
注:
ACK 是标志位中的确认标识。
ack是确认序号,接收到的对方的数据,ack=seq+1。

四、状态名词解析

  • LISTEN:等待从任何远端TCP 和端口的连接请求。

  • SYN_SENT:发送完一个连接请求后等待一个匹配的连接请求。

  • SYN_RECEIVED:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。

  • ESTABLISHED:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。

  • FIN_WAIT_1:等待远端TCP 的连接终止请求,或者等待之前发送的连接终止请求的确认。

  • FIN_WAIT_2:等待远端TCP 的连接终止请求。

  • CLOSE_WAIT:等待本地用户的连接终止请求。

  • CLOSING:等待远端TCP 的连接终止请求确认。

  • LAST_ACK:等待先前发送给远端TCP 的连接终止请求的确认(包括它字节的连接终止请求的确认)

  • TIME_WAIT:等待足够的时间过去以确保远端TCP 接收到它的连接终止请求的确认。

    • TIME_WAIT 两个存在的理由:
      1.可靠的实现tcp全双工连接的终止;
      2.允许老的重复分节在网络中消逝。
  • CLOSED:不在连接状态(这是为方便描述假想的状态,实际不存在)


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

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

相关文章

MySQL——事务

一、事务的开始与结束 一个数据库事务由一条或多条sql语句构成,它们形成一个逻辑的工作单元。这些sql语句要么全部执行成功,要么全部执行失败。 1.1.事物的开始 1.对于DDL(create,alter,drop)和DCL&…

Java 中如何实现序列化?

什么是序列化?Java 中如何实现序列化? 在 Java 编程中,序列化是一种将对象转换为字节流的过程,可以将对象在网络中传输或者保存到磁盘中。序列化可以将对象的状态保存下来,以便在需要时重新创建对象。Java 中提供了一…

Android 10.0 禁用adb shell input输入功能

1.前言 在10.0的产品开发中,在进行一些定制开发中,对于一些adb shell功能需要通过属性来控制禁止使用input 等输入功能,比如adb shell input keyevent 响应输入事件等,所以就需要 熟悉adb shell input的输入事件流程,然后来禁用adb shell input的输入事件功能,接下来分…

【数据结构--顺序表】移除元素

题目描述&#xff1a; 代码实现&#xff1a; 1、指针实现 int removeElement(int* nums, int numsSize, int val) {int* dst nums, * src nums;int n1 0,n20;while (n1n2 < numsSize){if (*src ! val){*dst *src;dst;src;n1;//表示src走的步数}else{src;n2;//表示src走…

【C++心愿便利店】No.5---构造函数和析构函数

文章目录 前言一、类的6个默认成员函数二、构造函数三、析构函数 前言 &#x1f467;个人主页&#xff1a;小沈YO. &#x1f61a;小编介绍&#xff1a;欢迎来到我的乱七八糟小星球&#x1f31d; &#x1f4cb;专栏&#xff1a;C 心愿便利店 &#x1f511;本章内容&#xff1a;类…

GO远程构建并调试

GO远程调试 之前写C&#xff0c;一直习惯了本地IDERemote CMake/GDB编译调试的模式。 因为6.824课程需要用GO&#xff0c;好像没有特别好的支持。记录一下如何配置调试的。 IDE: Goland 操作系统&#xff1a;Windows 远程服务器&#xff1a;Ubuntu 首先配置SSH,让其可以连接到…

source insight keil 中文乱码

1. 乱码的根本原因就是编码的方式太多了&#xff0c;你用这种编码&#xff0c;他用那种编码&#xff0c;就变成鸡同鸭讲了&#xff0c;对牛弹琴就要用牛语&#xff0c;如果全世界只有一种编码方式&#xff0c;就肯定不会有乱码问题&#xff0c;但这是不可能的。keil 设置编码格…

SpringMVC入门篇

目录 1.SpringMVC工作流程 2.SpringMVC核心组件 2.1 DispatcherServlet 2.2 HandlerMapping 2.3 Handler 2.4 HandlerAdapter 2.5 ViewResolver 2.6 View 3.SpringMVC的入门 3.1 添加相关依赖 3.2 创建Spring-mvc.xml 3.3 配置web.xml 3.4 效果演示 4.静态资源处…

二叉搜索树

如何搜索构建一颗二叉搜索树插入删除 如何搜索 在二叉搜索树里搜索值&#xff1b;搜索非常类似于二分查找 //查找key是否存在public TreeNode search(int key) {TreeNode cur root;while(cur ! null) {if(cur.key key) {return cur;}else if(cur.key > key){cur cur.lef…

【Python】Python运算符/部分函数对应的双下划线魔法方法

先说下Python版本&#xff1a;【Python 3.7.8】 以下用图片表格展示&#xff0c;一是防扒&#xff0c;二是没精力改成md格式。 还有就是内容肯定没有完全包含(而且也很难做到)&#xff0c;像是__reduce__与py自带模块pickle有关(pickle用于对象序列化/反序列化)、sys.getsizeo…

SQLAlchemy 封装的工具类,数据库pgsql(数据库连接池)

1.SQLAlchemy是什么&#xff1f; SQLAlchemy 是 Python 著名的 ORM 工具包。通过 ORM&#xff0c;开发者可以用面向对象的方式来操作数据库&#xff0c;不再需要编写 SQL 语句。 SQLAlchemy 支持多种数据库&#xff0c;除 sqlite 外&#xff0c;其它数据库需要安装第三方驱动。…

20230904 QT客户端服务器搭建聊天室

Ser cpp#include "app.h" #include "ui_app.h"APP::APP(QWidget *parent):QWidget(parent),ui(new Ui::APP) {ui->setupUi(this);this->resize(550,400);ui->Line->setAlignment(Qt::AlignCenter);//标签文本对齐方式 居中ui->Line->se…

力扣:83. 删除排序链表中的重复元素(Python3)

题目&#xff1a; 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚…

群晖NAS:通过Docker 部署宝塔面板【注册表:cyberbolt/baota】

群晖NAS&#xff1a;通过 Docker 部署宝塔面板【注册表&#xff1a;pch18/baota】 由于 docker 源地址被墙&#xff0c;在面板里面查询不到注册表&#xff0c;使用 ssh 命令行拉取 1、打开 SSH&#xff0c;链接后打开命令行 这里不赘述&#xff0c;具体自行百度 2、下载 镜像…

origin中optimal cluster安装报错解决

1.在安装之后程序运行出错&#xff0c;报错信息为缺少numpy包。解决办法&#xff1a;打开窗口-脚本窗口&#xff0c;用pip安装numpy&#xff0c;其他缺少的包可用同样方法解决。 2.有的包在外部python中才有&#xff0c;通过origin无法下载。解决办法&#xff1a;在连接-python…

PHP对接阿里云虚拟号的实现(号码隐私保护)

fastadmin 封装框架 实现功能&#xff1a;AXN隐私号绑定、解绑&#xff1b; 场景&#xff1a;为店铺手机号开通虚拟号&#xff0c;用户联系店铺展示虚拟号码&#xff1b; 官方开放文档地址&#xff1a;https://help.aliyun.com/document_detail/59655.html?spma2c4g.111742…

营销邮件主题怎么写?编写邮件主题的技巧?

如何创建营销邮件主题&#xff1f;制作EDM邮件主题的方法策略&#xff1f; 营销邮件主题在整个营销邮件中起着至关重要的作用&#xff0c;它是吸引读者打开邮件的第一步。蜂邮EDM将分享一些关于如何撰写令人惊艳的营销邮件主题的技巧&#xff0c;帮助您吸引更多的目标受众。 …

【高德地图】 覆盖物/画点/画折线/画多边形/画矩形/画圆

官方示例 https://lbs.amap.com/demo/javascript-api/example/mouse-operate-map/mouse-draw-overlayers <!doctype html> <html lang"en"><head><meta charset"utf-8"><meta http-equiv"X-UA-Compatible" content…

微信小程序中 vant weapp 使用外部的icon作为图标的步骤

微信小程序中 vant weapp 使用外部的icon作为图标的步骤 1. 在项目中创建静态资源文件夹2. 前往iconfont图标官网&#xff0c;添加图标并拷贝在线链接3. 下载iconfont代码&#xff0c;解压之后拷贝到小程序的目录中4. 修改iconfont.wxss 将本地链接替换为在线链接5. 在项目的ap…

巨额亏损,股价遭受重创,Polestar极星汽车已陷入困境

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 8月31日&#xff0c;由吉利汽车&#xff08;00175&#xff09;和沃尔沃汽车合资创建的瑞典电动汽车公司Polestar极星汽车&#xff08;PSNY&#xff09;公布了2023年第二季度财报。 这家电动汽车公司在去年通过SPAC上市后&am…