从Wireshark看TCP连接的建立与关闭

news2024/11/19 16:38:05

http://t.zoukankan.com/jonathanlin-p-4282582.html

TCP是一种面向连接、可靠的协议。TCP连接的建立与断开,都是需要经过通信双方的协商。用一句话概括就是:三次握手say hello(建立连接);四次握手say goodbye(断开连接)。要了解TCP连接的建立与断开,就不得不需要了解TCP头的内容。然而,TCP头及其复杂,概括而言,我们需要了解以下内容:

Sequence Number(Seq):序号。表示一个TCP片段,用于保证数据没有丢失

Acknowledgment Number(Ack):确认号。用于表示希望从对方得到的下一个数据包的序号。举例来说A发送了一个数据包给B,Ack = 1000;那么就表示A希望从B那接收到的下一个数据包的序号为1000。也就是说,B应该发送一个数据包给A,Seq = 1000。后面会有更详细的例子

Flags:标志。用于标记TCP数据包的类型。TCP连接的建立与断开,会用到以下标记:SYN,ACK,FIN

SYN = Synchronize sequence numbers
ACK = Acknowledgment
FIN = Finish
三次握手的示意图如下:
在这里插入图片描述

使用Wireshark捕获TCP三次握手的过程,从下图我们也能很清楚的知道Seq以及Ack变化的过程:

Client -> Server: Seq = 3691127924(X) (Flags = SYN)
Server -> Client: Seq = 233779340(Y), Ack = 3691127925(X+1) (Flags = SYN&ACK)
Client -> Server: Seq = 3691127925(X+1), 233779341(Y+1) (Flags = SYN&ACK)

在这里插入图片描述
四次握手的示意图如下:
在这里插入图片描述

使用Wireshark捕获TCP四次次握手的过程,从下图我们也能很清楚的知道Seq以及Ack变化的过程:

Client -> Server: Seq = 822643295(X), Ack = 2079380537(Y) (Flags = FIN&ACK)
Server -> Client: Seq = 2079380537(Y), Ack = 822643296(X+1) (Flags = ACK)
Server -> Client: Seq = 2079380537(Y), Ack = 822643296(X+1) (Flags = FIN&ACK)
Client -> Server: Seq = 822643296(X+1), Ack = 2079380537(Y+1) (Flags = ACK)
在这里插入图片描述

上述的Wireshark并不是我在实践中捕获的数据包,而是《Wireshark数据包分析实战》这本书中附带的数据包文件。在我实际的抓包分析中,捕获的四次握手的过程似乎有些不一样(只有三次握手就断开连接了,希望通过后续学习能解开这个疑惑)

三次握手:
在这里插入图片描述
四次握手:
在这里插入图片描述

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

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

相关文章

蓝桥杯Python组排序算法与函数

目录 一、排序算法 二、排序函数 1、Python 的 sort() 函数和 sorted() 函数 2、sort() 例子 3、sorted() 例子 4、部分排序 三、例题 1、统计数字(lanqiaoOJ题号535) 2、错误票据(lanqiaoOJ题号205) 3、奖学金&#xf…

线程池 - ThreadPoolExecutor 详解

线程池 - ThreadPoolExecutor 详解 线程池 ThreadPoolExecutor 源码解析参考 juc 专栏系列文章。 基本概述 线程池:一个容纳多个线程的容器,容器中的线程可以重复使用,省去了频繁创建和销毁线程对象的操作。 线程池作用: 降低资…

【基础】Elasticsearch 基础

Elasticsearch 基本概念及使用Elasticsearch 基本概念ES 的简介及使用场景ES 基本概念ES 与 Kibana 的安装Elasticsearch 分词器ES 内置分词器ik 分词器的安装和使用Elasticsearch 基本使用索引操作数据的增删改查DSL 查询聚合查询批量操作Elasticsearch 基本概念 ES 的简介及…

多线程锁相关

日升时奋斗,日落时自省 目录 1、常见的锁策略 1.1、悲观锁vs乐观锁 1.2、轻量级锁vs重量级锁 1.3、自旋锁vs挂起等待锁 1.4、互斥锁vs读写锁 1.5、公平锁vs非公平锁 1.6可重入锁vs不可重入锁 2、CAS 2.1、CAS解析 2.2、CAS的应用场景 2.2.1、实现原子类 …

JavaSE学习day2_03, 算数运算符

5. 算术运算符 5.1 分类: - * / % 5.2 细节: 1.运算规则。跟小学数学是一模一样的 2.如果是整数跟整数进行计算,结果只能是整数。直接去掉小数部分,保留整数。如5/22,而不是2.5. 3.如果想要结果中有小数,需要有小…

(二)K8S Namespace 和 Label

Namespace 1、K8S集群中默认的Namespace为default,通过Namespace可以实现Pod之间的相互隔离(如测试环境、生成环境的隔离) 2、通过K8S的资源配置机制限定不同的Namespace对CPU、内存的使用,再通过K8S授权机制将不同的Namespace交…

启动ruoyi框架(初学)

启动ruoyi框架(初学)(RuoYi) Ruo Yi启动ruoyi框架(初学)([RuoYi](http://doc.ruoyi.vip/))一、简介二、项目启动1.前端模组:RUOYI-UI2.后端模组:3.环境要求&a…

Java版阿里云/腾讯云域名动态映射DDNS到动态IPv4或IPv6

1 介绍 利用业余时间,整合了一下阿里云和腾讯云动态域名映射,并将其使用spring boot做了一下封装,正好可以把家里的闲置电脑和IP v6利用起来,具体使用方法如下,或者参考对应项目的readme文档 2 地址 aliyun-ddns&am…

数据分析-深度学习 Day3

youtube课程地址:(实时更新)https://www.youtube.com/playlist?listPLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2Jwww.youtube.com/playlist?listPLJV_el3uVTsMhtt7_Y6sgTHGHp1Vb2P2JB站课程地址:李宏毅2021机器学习【week3】&#xff1a…

基于tensorflow框架bert的自然灾害描述文本分类详细教程

概述: 使用tensorflow框架: 预测给定的推文是否与真正的灾难有关。如果是这样,预测一个1。如果不是,预测一个0 数据展示:

Java之String概述、对象创建原理和常见面试题、String类常用API、案例

目录String、ArrayList前言String简单介绍Arraylist简单介绍String 概述String类的特点详解总结String类创建对象的两种方式两种方式有什么区别吗?总结String常见面试题String类常用API-字符串内容比较总结String类常用API-遍历、替换、截取、分割操作String案例验证…

内存管理(C/C++)

内存管理(C/C)C/C内存分布C语言中的动态内存管理方式C中动态内存管理new / delete 操作内置类型new 和 delete 操作自定义类型operator new 和 operator delete 函数operator new 和 operator delete 函数new 和 delete 的实现原理内置类型自定义类型定位…

【人工智能原理自学】激活函数:给机器注入灵魂

😊你好,我是小航,一个正在变秃、变强的文艺倾年。 🔔笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。 🔔本文讲解激活函数:给机器注入灵魂,一起卷起来叭! 目录一、“分…

已解决pandas正确创建DataFrame对象的四种方法(通过list列表、dict字典、ndarray、Series对象创建)

已解决(pandas创建DataFrame对象失败)ValueError: 4 columns passed, passed data had 2 columns 文章目录报错代码报错翻译报错原因解决方法创建DataFrame对象的四种方法1. list列表构建DataFrame2. dict字典构建DataFrame3. ndarray创建DataFrame4. Se…

【MySQL】十一,存储引擎

查看存储引擎 查看mysql提供什么存储引擎 设置系统默认的存储引擎 查看默认的存储引擎 show variables like %storage_engine%; SELECT default_storage_engine;修改默认的存储引擎 如果在创建表的语句中没有显式指定表的存储引擎的话,那就会默认使用 InnoDB 作…

08、ThingsBoard使用msa构建镜像并上传到Harbor

1、概述 今天讲解如何使用thingsboard源码中的msa模块来构建镜像,首先我先说一下这个模块的作用,很多人都不明白msa是如何构建镜像的,msa下面创建了很多模块,每个模块都是一个应用,就像我们平时微服务一样可以独自启动,thingsboard是使用这些模块去其它模块拉取代码过来…

卷积神经网络 Convolutional Neural Network (CNN)

CNNObservation 1Observation 2Benefit of Convolutional LayerMultiple Convolutional LayersComparision of Two StoriesObservation 3Convolutional Layers PoolingApplication: Playing GoTo learn more ...仅供个人学习,不具参考价值! Image Class…

python代码运行速度有点慢 ? 教你使用多线程速度飞升

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ 在我们爬取数据的时候,有时候它运行速度会非常慢 那么怎么解决呢? 这里给大家带来一个多线程的方法 我们用采集二手车来举例 环境使用: Python 3.8 Pycharm 模块使用: requests 数据请求模…

JVM类加载机制-让你明明白白的了解类的执行流程

一、类加载运行过程1.1 类加载到jvm的流程当我们使用java命令运行某个类的main函数启动程序时,首先需要通过类加载器把主类加载到jvm里。1.2 loadClass的类加载过程其中loadClass的类加载过程有如下几步:加载 >> 验证 >> 准备 >> 解析…

关于Visual Studio C++项目属性设置的说明

链接器—常规—输出文件 这里的输出文件指的是最终生成的exe文件 C/C–常规—附加包含目录 这里指的是需要include的一些头文件所在的 目录,可以提前在项目文件中建立好include文件,然后在这里设置,以后将一些自定义的include头文件放在这个…