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

一  TCP Fast Open 快速建立连接

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

①  TFO简介

②  请求 Fast Open Cookie过程

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第1张图片

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

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第2张图片

③  真正开始 TCP Fast Open

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第3张图片

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

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第4张图片

④  抓包分析

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' 参数

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第5张图片

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第6张图片

3、服务端'抓包'

tcpdump -nni br0 tcp and host 172.25.2.157 -w tcp_fast_open.pcap

4、客户端'测试'  
 
curl  --tcp-fastopen -kv nginx.wzj.com/ok

知识点: curl '7.42.0+'后才'支持' TFO 选项 '--tcp-fastopen'

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第7张图片

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第8张图片

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

说明: 实验'1' 的第'1'个 SYN 包:wireshark 有标记 'TFO=R',看下这个包的 'TCP 首部'

特点: 这个首部包含了 TCP Fast Open 选项,但是 Cookie 为'空',表示向服务器请求新的Cookie

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第9张图片

说明: 实验 '1' 的第 '2' 个包是 'SYN + ACK' 包,wireshark 标记为TFO=C

备注: 这个包的'首部'如下图'所示':

补充: 服务器已经生产了一个值为 "df8f286592b0187c" 的 Cookie

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第10张图片

说明: 实验 '1' 的第'3'个包是'客户端' 对服务器的 'SYN 包'的'确认'包

小结: 到此三次握手完成,这个过程跟'无 TFO 三次握手'唯一的'不同点'

--> 就在于 Cookie 的请求和返回

后面的几个包就是'正常'的'数据传输'和'四次挥手'断开连接了
实验2: '第二次':'真正的快速打开' 抓包分析

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

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第11张图片

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第12张图片

需求: '显示'当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三次握手过程

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第13张图片

1、RTT '往返'时间 Round-trip Time 含义

说明: 一个'TCP数据包'从源端'发送'到接收端,源端收到接收端'确认'的时间'间隔'

2、怎么'简单'的看一下RTT是多少:

说明: ping一下'对端'机器,最后的'time值'其实就是这两台机器的'RTT时间'啦

3、 2.5 RTT 是'如何'计算的

1.5 RTT(握手) + 1 RTT(数据往返) = 2.5 RTT

4、 2 RTT 是'如何'计算的

一般来说,比较'积极'的TCP在第三次握手的时候,已经顺便携带了'数据'请求,需要的时间将减小为:

1 RTT(握手) + 1 RTT(数据往返) = 2 RTT

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

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

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第14张图片

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

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

思考: 如果第'三次握手包'服务器'没有'收到,就'直接'发送数据,会发生什么?

结论:

   1、如果第三次握手包服务器'没有'收到,就直接'发送'数据

   2、服务器将这个'携带应用数据'的包当做'第三次'握手

原因:直接发送的那个GET请求包中,ACK标记是置位了的,所以服务端就把这个GET包当成了第三次握手了

   3、前提:这一个包中携带有'ACK'标记

②  快速建立连接

说明: 注意'演进'的过程

TCP Fast Open 的'优势': 一个最显著的优点是可以利用'握手'去除一个'往返 RTT'

特点: 在开启 TCP Fast Open以后,从'第二次请'求开始,就可以在'一个RTT'时间拿到'响应'的数据

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第15张图片

++++++++++++  "原理描述"  ++++++++++++

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

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第16张图片

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

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

内核参数: 'tcp_fastopen'

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第17张图片

④  TFO 抓包分析

TCP/IP(二十二)TCP 实战抓包分析(六)TCP 快速建立连接_第18张图片

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

你可能感兴趣的:(TCP/IP,tcp/ip,TCP,Fast,Open,TCP快速建立连接)