协议簇:TCP 解析: 连接断开

简介

接前文 协议簇:TCP 解析: 建立连接, 我们这篇文章来看看 TCP 连接断开的过程,也就是众所周知的”四次挥手“的具体流程.

系列文章

协议簇:TCP 解析:基础
协议簇:TCP 解析:建立连接
协议簇:TCP 解析:连接断开
协议簇:TCP 解析:Sequence Number
协议簇:TCP 解析:数据传输

断开连接

通常情况

Normal Close Sequence
MSL: Maximum Segment Lifetime.

这里,我们假定 A 端为关闭连接的发起方.

  1. 初始状态下,通信双方均处于连接状态.
  2. 某一时刻,A 端发起断开连接请求(上层客户通过调用 TCP 的 Close 接口). 发起断开连接请求时A端发送 FIN 包, 之后A端的TCP 连接状态切换为 FIN-WAIT-1, 等待对方回应对应的 ACK。
    从此刻此,A 端发送的任何数据包都会被 B端拒绝,但是,与此同时 A 端可以正常接收 B端发送的数据
    处在这个状态的 A 端会重传FIN以及之前的数据包,直到接收到对方的 ACK.
  3. B端在收到 FIN 包后回复 ACK 确认收到 A 端发送的 FIN包,并把连接状态切换为 CLOSE-WAIT。 A 端收到对应的 ACK 之后状态切换为 FIN-WAIT-2.
    B 端在收到 A 端的 ACK 之后,不会立马发送 FIN 包. 只有当上层用户调用 TCP Close 接口时才会发送 FIN 包到 A 端.
  4. B 端收到 A 端的 FIN 包之后可以继续发送数据,知道某一时刻关闭 TCP。同A端一样,发送 FIN 包给 A端,然后等待 A 端回复 ACK。状态切换为 LAST-ACK。
  5. A 端收到 B 端发送的 FIN 后状态切换为 TIME-WAIT,并回复响应的 ACK。B 端收到 ACK 之后状态切换为 CLOSED
  6. 等待 2 MSL 时间hou,A端状态变为 CLOSED。c 此时,当前 TCP 已经完全关闭.

我们再使用 wireshark 抓包看看这个流程
在这里插入图片描述
上图中的四条记录便对应于上面流程中的 2-5 项. 至于数据包中各个字段的值,这里我们不关注.

双发同时发起关闭连接

Simultaneous Close Sequence

  1. 初始状态下,通信双方均处于连接状态.
  2. 某一时刻,双发均发起断开连接请求.
    假设,A 端发送了 FIN,且还未收到 B 端发送的 FIN。 B端也发送了 FIN,且还未收到 A端发送的FIN.
    发送完FIN之后,双方的状态均切换为 FIN-WAIT-1
    稍后,双发均收到了对方发送的 FIN, 需要回复对应的 ACK 给对方
    收到对方的 ACK 之后,双方状态切换为 CLOSING 状态.
  3. 此时,双发的 FIN 已经交换完成,只需要回复响应的 ACK,告知对方对方对方发送的 ACK(对应于之前发送的 FIN)己方已经收到便可.
  4. 稍后,双方均进入 TIME-WAIT 状态. 在经过 2 MSL 时间后,双方均进入 CLOSED状态。c 此时,当前 TCP 已经完全关闭.

END!!!

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

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

相关文章

协议簇:TCP 解析: Sequence Number

简介 序列号(Sequence Number) 是 TCP 协议中非常重要的一个概念,以至于不得不专门来学习一下。这篇文章我们就来解开他的面纱. 在 TCP 的设计中,通过TCP协议发送的每个字节都对应于一个序列号. 由于每个字节都有自己的序列号&a…

CodeTank iOS App Technical Support

CodeTank iOS App Technical Support For All Email: z253951598outlook.com TEL: 86-17782749061 App Screen Shoots

CentOS 7 防火墙命令

查看防火墙状态 systemctl status firewalld如果已经开启,状态为 active 如果未开启,状态为 inactive 开启防火墙 systemctl start firewalld关闭防火墙 systemctl stop firewalld查看当前防火墙的配置 firewall-cmd --list-all这里,我…

QTcpSocket connectToHost 建立连接速度慢问题

问题场景 在使用 QT 开发一个客户端 App 的时候,我们通过 QTcpSocket 与后台服务器进程通信。 后台程序使用其他语言编写。 问题: 在客户端启用之后尝试建立与后台程序的 TCP 连接的时候,发现连接速度非常慢(肉眼可见的慢&#x…

GTank iOS App Technical Support

GTank iOS App Technical Support For All Email: z253951598outlook.com TEL: 86-17782749061 App Screen Shoots ​​

证书体系: CSR 解析

原文同时发布于本人个人博客: https//kutank.com/blog/cert-csr/ 简介 CSR 全称 “证书签名请求”(Certificate Signing Request). 本文我们将来详细的学习 CSR 的知识,重点集中在 CSR 所包含的信息,及其意义。 CSR 的作用: CSR 通常由想要获…

模拟网页行为之工具篇二

先说360浏览器,打开开发者选项,可以看到界面提供了几个功能选项,如图: 这个图片的第一个搜索图标点中过后,再去选中网页你感兴趣的部分就可以在Element选项中跳转到你感兴趣的代码。也可以直接ctrlF2搜寻你感兴趣网页元…

模拟网页行为之实践篇三

现在来谈下验证码图片的获取方式,带有验证码的地方都会附带有个刷新按钮,而刷新按钮的地方就是获取验证码网址代码。如果看过前面写的《模拟网页行为之工具篇》就会很容易定位到代码位置。定位到代码位置后看下图: 基本可以看到的是获取验证码…

SHA-256算法实现

SHA-256 算法输入报文的最大长度不超过2^64 bit,输入按512-bit 分组进行处理,产生 的输出是一个256-bit 的报文摘要。该算法处理包括以下几步: STEP1:附加填充比特。对报文进行填充使报文长度与448 模512 同余(长度…

ecc算法入门介绍

一、从平行线谈起。 平行线,永不相交。没有人怀疑把:)不过到了近代这个结论遭到了质疑。平行线会不会在很远很远的地方相交了?事实上没有人见到过。所以“平行线,永不相交”只是假设(大家想想初中学习的平行…

Intel Hex概述

什么是Intel Hex文件 Intel HEX文件时遵循Intel HEX文件格式的ASCII文本文件。在Intel HEX文件的每一行都包含了 一个HEX记录。这些记录是由一些代表机器语言代码和常量的16进制数据组成的。Intel HEX文件常用来传输要存储在ROM 或者 EPROM中的程序和数据。大部分的EPROM编程器…

AndroidStudio+ideasmali动态调试smali汇编

0x00 前言 之前对于app反编译的smali汇编语言都是静态分析为主,加上一点ida6.6的动态调试,但是ida的调试smali真的像鸡肋一样,各种不爽,遇到混淆过的java代码就欲哭无泪了。后来知道IDEA用一款插件也可以实现smali的动态调试&a…

使用IDA Pro动态调试SO文件

(1)在IDA的安装路径中找到android_server文件。 (2)将android_server拷贝到手机的/data/local/tmp目录下面。 (3) 将手机插上电脑,打开命令提示符, 先输入”adb shell”,然后输入”…

机器学习或深度学习的数据读取工作(大数据处理)

机器学习或深度学习的数据读取工作(大数据处理)主要是.split和re.findall和glob.glob运用。 读取文件的路径(为了获得文件内容)和提取文件路径中感兴趣的东西(标签) 1,“glob.glob”用于读取文件路径 2,“.…

Android系统架构图

一、Aplications(应用层) 应用是用Java语言编写的云新在虚拟机上的程序。 二、Application Framework(应用框架层) 这一层是编写Google发布的核心应用时所使用的API框架,开发人员可以使用这些框架来开发自己的应用。 V…

AES算法重点详解和实现

可以看到,在原始数据长度为16的整数倍时,假如原始数据长度等于16*n,则使用NoPadding时加密后数据长度等于16*n,其它情况下加密数据长度等于16*(n1)。在不足16的整数倍的情况下,假如原始数据长度等于16*nm[其中m小于16]…

勒索病毒傀儡进程脱壳

样本是:wallet勒索病毒 环境:虚拟机VMWARE win7 32位 工具:OD,winhex 初次拿到样本,先用火绒剑工具监控下病毒样本的流程,可以看到有一个自创建进程的行为。 我们等找到OEP后,在CreateProcessA下…

arm32和arm64常用指令B BL BLX机器码计算

现在大部分手机cpu架构是ARM v7-A和ARMV8-A,,在ARM-v7A中常使用32位ARM指令集并且支持thumb指令集与arm的切换,而在ARMV8中使用的是64位ARM指令集且不再有thumb指令集状态的切换了。在调用函数时,会有常用的调用方式:BL和B&#x…

openssl c++实现bouncycastle中AES加解密

0x01 为什么要用bouncycastle 先说说JCE(Java Cryptography Extension)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。 它提供对对称、不对称、块和流密码的加密…

win10用Eclipse+OpenJTag对S3C2440开发板进行动态调试

0 背景在S3C2400开发板裸板调试程序中,常用调试手段有三种:点灯法,串口打印,OpenOCD。OpenOCD又分命令行和图形界面(Eclipse)。点灯发和串口打印调试效率都很低,若能掌握第三种调试方法,会让开发过程变得高…