TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接

一  TCP Fast Open 快速建立连接

说明: 之前讲解'TCP 相关知识点'遗漏了这个'知识点',补充上

①  TFO简介

②  请求 Fast Open Cookie过程

++++++++++++  "原理图"  ++++++++++++

③  真正开始 TCP Fast Open

重点: 'TFO' 使 'SYN包' 可以包含'payload 数据'

④  抓包分析

1、Linux 上快速打开是'默认关闭'的,需要'先开启 TFO' --> '客户端'和'服务端'都开启echo 3 > /proc/sys/net/ipv4/tcp_fastopen思考: 如何让'快速连接' Cookie的'进快'过期 --> '设置为0',再'请求一次'即可2、nginx 来'充当'服务器,修改 nginx 配置'listen 80 fastopen=256;',使之支持 TFO知识点: 在nginx '1.5.8' 版本以及之后,'listen 指令'开始支持 'fastopen' 参数

3、服务端'抓包'tcpdump -nni br0 tcp and host 172.25.2.157 -w tcp_fast_open.pcap4、客户端'测试'  curl  --tcp-fastopen -kv nginx.wzj.com/ok知识点: curl '7.42.0+'后才'支持' TFO 选项 '--tcp-fastopen'

实验1: 第一次:'请求 Fast Open Cookie' 抓包分析

说明: 实验'1' 的第'1'个 SYN 包:wireshark 有标记 'TFO=R',看下这个包的 'TCP 首部'特点: 这个首部包含了 TCP Fast Open 选项,但是 Cookie 为'空',表示向服务器请求新的Cookie

说明: 实验 '1' 的第 '2' 个包是 'SYN + ACK' 包,wireshark 标记为TFO=C备注: 这个包的'首部'如下图'所示':补充: 服务器已经生产了一个值为 "df8f286592b0187c" 的 Cookie

说明: 实验 '1' 的第'3'个包是'客户端' 对服务器的 'SYN 包'的'确认'包小结: 到此三次握手完成,这个过程跟'无 TFO 三次握手'唯一的'不同点'--> 就在于 Cookie 的请求和返回后面的几个包就是'正常'的'数据传输'和'四次挥手'断开连接了
实验2: '第二次':'真正的快速打开' 抓包分析

第 1 个包就很'亮瞎眼',wireshark 把这个包识别为了 'HTTP 包','展开头部'看一下

需求: '显示'当TFO密钥cat /proc/sys/net/ipv4/tcp_fastopen_key遗留: 系统为什么'默认'没有开启'TFO'快速连接?备注: 'mac' 默认情况下已经'支持TFO'在TFO的'问题': 1、如伪造TFO SYN攻击 '通过DHCP及NAT、Moles获取有效的Cookies'2、这种场景下,Server资源会'被攻击耗尽'

TFO 系统知识点汇总   TFO的安全性

二  TCP 快速建立连接

①   常规的TCP三次握手过程

1、RTT '往返'时间 Round-trip Time 含义说明: 一个'TCP数据包'从源端'发送'到接收端,源端收到接收端'确认'的时间'间隔'2、怎么'简单'的看一下RTT是多少:说明: ping一下'对端'机器,最后的'time值'其实就是这两台机器的'RTT时间'啦3、 2.5 RTT 是'如何'计算的1.5 RTT(握手) + 1 RTT(数据往返) = 2.5 RTT4、 2 RTT 是'如何'计算的一般来说,比较'积极'的TCP在第三次握手的时候,已经顺便携带了'数据'请求,需要的时间将减小为:1 RTT(握手) + 1 RTT(数据往返) = 2 RTT

高RTT值的网络中,如何提高短连接的传输速度

补充: 客户端发送完'第三次'握手包后,'不再需要'服务端的确认,立即可以'发送'数据

思考: 如何证明'第三次'握手携带了'payload 数据报文'?

验证TCP第三次握手刻意携带数据

思考: 如果第'三次握手包'服务器'没有'收到,就'直接'发送数据,会发生什么?结论:1、如果第三次握手包服务器'没有'收到,就直接'发送'数据2、服务器将这个'携带应用数据'的包当做'第三次'握手原因:直接发送的那个GET请求包中,ACK标记是置位了的,所以服务端就把这个GET包当成了第三次握手了3、前提:这一个包中携带有'ACK'标记

②  快速建立连接

说明: 注意'演进'的过程TCP Fast Open 的'优势': 一个最显著的优点是可以利用'握手'去除一个'往返 RTT'特点: 在开启 TCP Fast Open以后,从'第二次请'求开始,就可以在'一个RTT'时间拿到'响应'的数据

++++++++++++  "原理描述"  ++++++++++++使用TCP 快速打开 'TCP Fast Open, TFO',尽可能'降低'握手对'网络延迟'的影响

③  在 Linux 上如何打开 Fast Open 功能?

注意: Fast Open 功能是'3.7+'内核引入的内核参数: 'tcp_fastopen'

④  TFO 抓包分析

DDOS:  耗光'内存'从而'拒绝'服务

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

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

相关文章

AD20原理图库的制作

1、打开“51单片机最小系统”的工程文件。 2、创建原理图库文件:单击“文件”菜单,选择“新的”选项中的“库”选项,再选择“原理图库”,进入原理图库元件的编辑界面。 3、保存原理图库文件:选择“文件”菜单&#xff…

Pytorch ddp切换forward函数 验证ddp是否生效

DDP及其在pytorch中应用 ddp默认调用forward函数,有些模型无法使用forward函数,可以对模型包装一下。 class modelWraper(nn.Module):def __init__(self, model):super().__init__()self.model modeldef forward(self, *args, **kwargs):return self.…

What‘s new in Arana v0.2.0

Arana 定位于云原生数据库代理,它可以以 sidecar 模式部署为数据库服务网格,项目地址是 https://github.com/arana-db/arana 。Arana 提供透明的数据访问能力,当用户在使用时,可以不用关心数据库的 “分片” 细节,像使…

CPU飙高问题排查命令

1. 远程客户端连接服务器,top命令查看cpu占用最高的进程id 2. (top -H -p 进程pid) 命令: 找出进程里面线程占用CPU高的线程有哪些 ? 3. (printf 0x%x\n 线程id) 线程id转16进制 4. (./jstack PID | grep TID(十六进制) -A 30)

关于Redis(Redisson)超时问题的分析

概述 生产环境中流量高峰期会出现短时间的redis异常,主要报错如下: Redis server response timeoutRedisTimeoutException: Command execution timeout for command: (PING)Command still hasn’t been written into connection! 根据redisson官方所述…

设计模式之建造者模式

什么是建造者模式 建造者模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。这种模式将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。 举一个简单的例子:假设我们要创建一个复杂的对象,例如一…

【Edabit 算法 ★☆☆☆☆☆】Maximum Edge of a Triangle

【Edabit 算法 ★☆☆☆☆☆】Maximum Edge of a Triangle algorithms math numbers Instructions Create a function that finds the maximum range of a triangle’s third edge, where the side lengths are all integers. Examples nextEdge(8, 10) // 17 nextEdge(5, 7…

matlab bin格式转txt输出

matlab bin格式转txt输出 clc,clear; fid fopen(\text.bin,rb); data fread(fid,Inf,int16); fclose(fid);fidfopen(\text.txt,w); fprintf(fid,%d\n,data); fclose(fid);

vscode摸鱼插件开发

不知道大家在写代码的时候,摸不摸鱼,是不是时不时得打开一下微博,看看今天发生了什么大事,又有谁塌房,而你没有及时赶上。 为此,我决定开发一个vscode插件,来查看微博热搜 插件名称&#xff1…

influxDB学习记录

一、官网 influxdb官方英文文档:https://docs.influxdata.com/influxdb/v1.8/query_language/spec/influxdb中文文档:https://jasper-zhang1.gitbooks.io/influxdb/content/ 二、centos安装与基本配置 influxdb安装与基本配置(centos) 三…

论文阅读[51]通过深度学习快速识别荧光组分

【论文基本信息】 标题:Fast identification of fluorescent components in three-dimensional excitation-emission matrix fluorescence spectra via deep learning 标题译名:通过深度学习快速识别 三维激发-发射矩阵荧光光谱中的荧光组分 期刊与年份&…

【量化交易笔记】10.建立最简单的交易策略

概述 量化说得简单一些用策略进行股票交易,在实施交易之前,需要制定策略,并回测试共效果 为了把交易说明清楚,将这个过程,能简单,就简单,总之,简单,简单再简单。 以下主…

unity NPR 卡通渲染

文章目录 一、 介绍二、 素材准备三、 步骤四、 shader代码五、工程链接 一、 介绍 NPR是计算机图形学中的一类,即非真实感绘制(Non-photorealistic rendering),主要用于模拟艺术式的绘制风格,也用于发展新绘制风格,形式一般是卡…

owasp top 10

1、访问控制的崩溃: 通过身份验证的用户可以访问其他用户的信息,越权 达成方式:通过修改url、内部应用程序状态或html页面绕过 防范:除了公有资源外,默认情况下拒绝访问,严格判断权限,记录失败的…

冰蝎默认加密的流量解密

破解冰蝎的默认加密 流量包分析 上传的冰蝎流量包 POST /web-zh/DVWA/vulnerabilities/upload/ HTTP/1.1 Host: 192.168.197.111 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/118.0 Accept: text/html,application/xhtmlxml,a…

Ansible定义各类变量,引用变量方式介绍及注册变量和vars_prompt的用法示例

目录 一.Ansible定义变量 1.用途 2.定义规则 3.变量优先级 二.命令行定义变量 三.定义主机和主机组变量 1.主机变量 (1)内置主机变量 (2)简单示例 2.主机组变量 四.定义playbook变量 1.通过vars表示定义变量&#xff…

HTML 实现 点击按钮切换 整张界面 点击按钮切换局部界面

点击按钮实现页面切换 点击按钮切换全局界面方法一: 使用a标签进行跳转连接 href方法二:在button标签中加上onclick属性,赋值为Javascript方法三:触发一个函数跳转方法四:表单的action定向提交跳转 点击按钮切换局部界…

shell条件测试与条件测试操作符

shell条件测试与条件测试操作符 条件测试变量#?test与条件测试语句方括号测试表达式字符串测试操作符逻辑测试操作符整数测试操作符双小括号的整数测试操作符与含义文件测试操作符条件测试举例 条件测试 条件测试是可以根据某个特定条件是否满足,来选择…

vscode调试container(进行rocksdb调试)+vscode比较git项目不同分支和fork的哪个分支

vscode调试container(进行rocksdb调试) 参考链接: https://blog.csdn.net/qq_29809823/article/details/128445308#t5 https://blog.csdn.net/qq_29809823/article/details/121978762#t7 使用vscode中的插件dev containners->点击左侧的…

zmq封装

ZmqBindlib zmq常用封装 使用方法 基本使用 1.简单请求回复 ZmqRequest request new ZmqRequest();request.RemoteAddress localaddes;request.PubClient "A";int num 0;while (true){// Thread.Sleep(1000);//string msg request.Request("hi"…