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


    一  TCP Fast Open 快速建立连接

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

    ①  TFO简介

    ②  请求 Fast Open Cookie过程

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

    ③  真正开始 TCP Fast Open

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

    ④  抓包分析

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

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

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

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

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

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

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

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

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

    二  TCP 快速建立连接

    ①   常规的TCP三次握手过程

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

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

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

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

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

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

    ②  快速建立连接

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

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

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

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

    ④  TFO 抓包分析

    DDOS:  耗光'内存'从而'拒绝'服务
  • 相关阅读:
    基于遗传算法的微电网经济运行优化matlab程序
    301. 删除无效的括号
    基于自动化设备和现代化仓储精益管理思想开发的仓库管理系统
    Cookie、Session、Token、JWT详解
    20221125使用PR2023自动识别obs-studio录屏生成的MKV视频的字幕
    日期模拟器(改变check即可 手切日期)
    java毕业生设计短视频交流点播系统计算机源码+系统+mysql+调试部署+lw
    小白备战大厂算法笔试(四)——哈希表
    effective c++学习笔记(后四章)
    光环云入选“北京市算力互联互通试点参与企业”!
  • 原文地址:https://blog.csdn.net/wzj_110/article/details/133922511