TCP 协议-三次握手抓包分析&查看状态

简介: TCP 协议-三次握手抓包分析&查看状态

前面文章介绍了 TCP 报文头部的格式,TCP 协议是一个面向连接的协议,所以在使用 TCP 协议之前需要先建立连接,而建立连接就需要先 握手,在握手的时候就会有 TCP 报文头部数据的传递,这篇文章介绍一下 TCP 连接的 三次握手,然后使用 tcpdump 抓包工具分析 三次握手是如何被建立的,然后使用 netstat 命令查看分析 TCP 状态。

1.TCP 三次握手的目的

  • 同步 Sequence 序列号,初始化序列号 ISN(Initial Sequence Number)
  • 交换 TCP 通讯参数,如 MSS、窗口比例因子、选择性确认、指定校验和算法

2.三次握手示意图

3.tcpdump抓包分析

       以 curl www.baidu.com 为例,使用如下命令抓取 TCP 报文:

tcpdump host www.baidu.com -c 3 -S

Tips:其中 host www.baidu.com 表示使用 BFP 过滤语法抓取和 www.baidu.com 相关的报文数据,-c 3 表示抓取次数为 3-S 表示 信息以绝对序列号替代相对序列号

如下图所示:

Tips:图中窗口是 tcpdump 抓取报文窗口,可以另起一个窗口执行 curl www.baidu.com

4.tcpdump报文关系示意图对应

  • 第一次:SYN
18:33:27.289687 IP localhost.localdomain.33952 > localhost.http: Flags [S], seq 1108648416, win 29200, options [mss 1460,sackOK,TS val 3178219629 ecr 0,nop,wscale 7], length 0

Tips:其中 seq 的值为 1108648416

  • 第二次:SYN/ACK
18:33:27.317960 IP localhost.http > localhost.localdomain.33952: Flags [S.], seq 737377256, ack 1108648417, win 64240, options [mss 1460], length 0

Tips:其中 seq 的值为 737377256ack 的值为 1108648417,比第一次的 seq1

  • 第三次:ACK
18:33:27.318021 IP localhost.localdomain.33952 > localhost.http: Flags [.], ack 737377257, win 29200, length 0

Tips:其中 ack 的值为 737377257,比第二次的 seq1

5.wireshark 抓包分析

       以抓取浏览器访问 http://www.singwa666.com 网站发起的 HTTP/1.1 请求时,建立的 TCP 连接握手为例,使用 BPF 捕获过滤器语法 host www.singwa666.com 抓取报文,然后使用 显示过滤器 语法 tcp.stream eq 1过滤报文,如下图所示:

  • 第一次:SYN

Tips:其中 Sequence Number(seq) 的值为 4150432755(f7 62 93 f3)FLAGS 的第 7 位置 1

  • 第二次:SYN/ACK

Tips:其中 Sequence Number(seq) 的值为 257427380(0f 58 07 b4)Acknowledgment number (ack) 的值为 4150432756(f7 62 93 f4),比第一次的 Sequence Number(seq)1

  • 第三次:ACK

Tips:其中 Acknowledgment number (raw) 的值为 257427381(0f 58 07 b5),比第二次的 Sequence Number(seq)1

6.三次握手报文说明

6.1 第一次:SYN 报文说明

Tips:FLAGS 报文中的第 7 位置 1 表示 SYN 报文,此时 seq 序列号码有效,需要传递设置 序列号码(seq)

6.2 第二次:SYN/ACK 报文说明

Tips:FLAGS 报文中的第 4 和 第 7 位置 1 表示 SYN/ACK 报文,此时 seqack序列号码有效,需要传递 序列号码(seq)确认号码(ack),此时确认号码(ack)是第上一次 seq 1

6.3 第三次:ACK 报文说明

Tips:FLAGS 报文中的第 4 位置 1 表示 ACK 报文,此时 ack 序列号码有效,需要传递设置 确认号码(ack),此时 确认号码(ack)是第上一次 seq1

7.三次握手过程中的状态变迁

       当我们做服务器端的开发时,服务器端同时处理成千上万的 TCP 连接时,需要理解 三次握手 中的状态变迁,对于定位复杂的网络问题非常有帮助。

7.1 三次流程中涉及到的五种状态及示意图

  • CLOSED
  • LISTEN
  • SYN-SENT
  • SYN-RECEIVED
  • ESTABLISHED

Tips:TCB 的意思是 Transmission Control Block,保存连接使用的源端口、目的端口、目的 IP、序号、应答序号、对方窗口大小、己方窗口大小、TCP 状态、TCP 输入/输出队列、应用层输出队列、TCP 的重传有关变量等。

7.2 netstat 命令参数介绍

  • interval:重新显示选定的统计信息,各个显示间暂停的间隔秒数
  • -a:显示所有连接和监听端口
  • -n:以数字形式(如IP地址)显示地址和端口号
  • -r:显示路由表
  • -s:显示每个协议的统计信息
  • -o(Widnows):显示拥有的每个连接关联的进程 ID
  • -b(Windows)/-p(Linux):显示对应的可执行程序名字

 

7.3 服务端查看 TCP 状态变迁

       下面在服务器端使用如下命令:

netstat -anp

Tips:其中 -anp a 所有的连接,n 表示以数字的形式,p 表示显示进程号。

Tips:一般很难观察到 SYN-SENT 状态,有一种 ACK 攻击就是攻击者构造一个 SYN 帧,却不返回 ACK 帧,这样会让服务器大量的连接都处于 SYN-RECEIVED 状态。


相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
8月前
|
缓存 网络协议 数据处理
网络协议与攻击模拟-07-TCP连接-三次握手
网络协议与攻击模拟-07-TCP连接-三次握手
50 0
|
网络协议
TCP/IP协议三次握手与四次挥手流程解析
一、TCP报文格式   TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: 图1 TCP报文格式   上图中有几个字段需要重点介绍下:   (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
1430 0
|
6天前
|
缓存 网络协议 算法
深入理解Linux网络——TCP协议三次握手和四次挥手详细流程
• 找到套接字:创建内核对象的时候,fd会跟file对象做通过fd_install关联起来,通过进程的fd_table就可以找到对应的file,而file的private指针就指向了socket对象,所以根据fd即可找到套接字 • 判断当前套接字的状态:只有SS_UNCONNECTED状态(刚创建的套接字就是该状态)才会继续,其他状态都会报错 1. 注意此处是socket的状态,而不是sock的状态 2. 会将socket状态更改为SS_CONNECTING • 更改sock状态为TCP_SYN_SENT
|
8月前
|
网络协议 关系型数据库 MySQL
网络协议与攻击模拟-08-TCP连接-四次挥手
网络协议与攻击模拟-08-TCP连接-四次挥手
33 0
|
10月前
|
机器学习/深度学习 监控 网络协议
浅谈 TCP 握手/数据传输/挥手过程以及 tcpdump 抓包工具使用
浅谈 TCP 握手/数据传输/挥手过程以及 tcpdump 抓包工具使用
223 0
|
11月前
|
网络协议 算法 Java
TCP详解(WireShark抓包分析TCP三次握手和TCP四次挥手)(二)
TCP详解(WireShark抓包分析TCP三次握手和TCP四次挥手)
183 0
|
11月前
|
存储 缓存 网络协议
TCP详解(WireShark抓包分析TCP三次握手和TCP四次挥手)(一)
TCP详解(WireShark抓包分析TCP三次握手和TCP四次挥手)
144 0
|
监控 网络协议 前端开发
【网络小知识】TCP协议介绍/三次握手,四次挥手的作用
TCP协议介绍/三次握手,四次挥手的作用
|
网络协议
TCP协议三次握手的执行流程,tcp的交互模式
TCP协议三次握手的执行流程,tcp的交互模式
131 0
|
网络协议
TCP通信过程的三次握手和四次握手
TCP通信过程的三次握手和四次握手
117 0
TCP通信过程的三次握手和四次握手