TCP 协议报文格式&tcpdump抓包工具

简介: 之前文章介绍过 wireshark 抓包工具的 捕获过滤器 和 显示过滤器,而 捕获过滤器 使用的 BPF 过滤语法可以在 tcpdump 中使用,tcpdump 可以在 Linux 服务端使用,熟悉和了解 tcpdump 抓包工具的使用,可以帮助分析服务端数据报文的情况。

之前文章介绍过 wireshark 抓包工具的 捕获过滤器显示过滤器,而 捕获过滤器 使用的 BPF 过滤语法可以在 tcpdump 中使用,tcpdump 可以在 Linux 服务端使用,熟悉和了解 tcpdump 抓包工具的使用,可以帮助分析服务端数据报文的情况。

1.TCP 协议特点

  • TCP连接是面向连接的(一对一)、可靠的(不管网络发生什么变化)、基于字节流的(消息没有边界,有序的)传输层通信协议,是根据 IP 地址穿越网络传送数据
  • 点对点(不能广播、多播),面向连接
  • 双向传递(全双工)
  • 字节流:打包成报文段、保证有序接收、重复报文自动丢弃
  • 优点:不强制要求应用必须离散的创建数据块,不限制数据块大小
  • 缺点:不维护应用报文的边界(对比HTTPGRPC
  • 流量缓冲:解决速度不匹配问题
  • 可靠的传输服务(保证可达,丢包时通过重发进而增加时延实现可靠性)
  • 拥塞控制

2.消息传输的核心要素

  • IP地址
  • TCP(UDP) 端口
  • HTTP Host/URI
  • IP 序列号
  • TCP 序列号

3.IP 头部

4.UDP 头部

Tips:Destination Port 表示目的端口,Source Port 表示消息来源端口(回送消息也是依据此端口),Checksum 表示防止错误的校验码。

5.TCP 协议的任务

  • 主机内的进程寻址
  • 创建、管理、终止连接
  • 处理并将字节(8 bit)流打包成报文段(如 IP报文)
  • 传输数据
  • 保持可靠性与传输质量
  • 流量控制与拥塞控制

6.如何标识一个 TCP 连接

  • TCP 四元组(源地址、源端口、目的地址、目的端口)
  • 对于 IPv4 地址,单主机最大 TCP 连接数 2^(32+16+32+16)
  • QUIC 协议是基于连接 ID 的。

7.TCP Segment 报文段

Tips:Destination Port 表示目的端口,Source Port 表示消息来源端口(回送消息也是依据此端口),Sequence NumberAcknowledgment Number 用来唯一标识一个 TCP 连接,Acknowledgment Number 还用来确认报文,保证消息的可达性,TCP 常规报文段是 20 字节。

8.TCP Segment 报文段抓包

image.png

9.TCP 常用可选项

从前面的 TCP Segment 报文段图中可以看出 TCP OPTIONS 是可选项,可选项如下表:

类型 总长度(字节) 数据 描述
0 - - 选项列表末尾标识
1 - - 无意义,用于32对其使用
2 4 MSS 值 握手时发送端告知可以接收的最大报文大小
3 3 窗口移位 指明最大窗口扩展后的大小
4 2 - 表明支持 SACK 选择性确认中间报文段功能
5 可变 确认报文段 选择性确认窗口中间的 Segments 报文段
8 10 Timestamps 用于更精确的计算 RT,及解决 PAWS 问题
14 3 校验和算法 双方认可后,可使用新的校验和算法
15 可变 校验和 当16位标准校验和放不下时,放置在这里
34 可变 FOC TFO(TCP first open) 中 Cookie

关于 TCP OPTIONS 抓包如下图所示:

10.tcpdump 使用方法

  • 捕获选项
  • -D 列举所有网卡设备
  • -i 选择网卡设备
  • -c 抓取多少条报文
  • --time-stamp-precision 指定捕获时的时间精度,默认毫秒 micro,可选纳秒 nano
  • -s 指定每条报文的最大字节数,默认 262144 字节。


10.1 查看网卡设备

tcpdump -D

10.2 选择网卡设备抓取

tcpdump -i ens160

image.png

10.3 指定抓取报文条数

tcpdump -i ens160 -c 20

image.png

10.4 抓取环回地址报文

tcpdump -i lo

image.png

10.5 指定抓取报最大文字节数

tcpdump -s 1024

10.6 抓取纳秒精度的报文

tcpdump --time-stamp-precision nano

image.png

11.捕获过滤器(BPF)语法介绍

       Berkeley Packet Filter,在设备驱动级别提供抓包过滤接口,多数抓包工具都支持此语法(tcpdump),expression 表达式由多个原语组成:

11.1 primitives 原语过滤

       primitives 原语由名称或数字,以及描述它的多个限定词组成,qualifiers 限定词:

  • Type:设置数字或者名称所指的类型,例如host www.baidu.com
  • (1)host、port
  • (2)net,设定子网,如 net 192.168.0.0 mask 255.255.255.0 等价于 net 192.168.0.0/24
  • (3)portrange,设置端口范围,例如 portrange 6000-8000
  • Dir:设置网络出入方向,例如 dst port 80
  • (1)src、dst、src、src or dst、src and dstsrc 表示源,dst 表示目标)
  • (2)ra、ta、addr1、addr2、addr3、addr4、(仅对 IEEE 802.11 Wireless LAN有效)
  • Proto:指定协议类型,例如 udp
  • ether、fddi、tr、wlan、ip、ip6、arp、rarp、decnet、tcp、udp、icmp、igmp、icmp、igrp、pim、ah、esp、vrrp
  • 其他
  • (1)geteway:指明网关 IP 地址,等价于 ether host $ehost and not host $host
  • (2)broadcast:广播报文,例如ether broadcast 或者 ip broadcast
  • (3)multicast:多播报文,例如 ip multicast 或者 ip6 multicast
  • (4)lessgreater小于或者大于。

11.2 原语运算符

原语运算符如:src or dst portrange 6000-8000 && tcp or ip6

  • 与:&& 或者 and
  • 或:|| 或者 or
  • 非:! 或者 not

11.3 基于协议域过滤

  • 捕获所有 TCP 中的 RST 报文
  • TCP[13]&4==4
  • 抓取 HTTP GET 报文
  • port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420,注意 47455420ASCII 码的 16 进制,表示 'GET'TCP 报文头可能不只 20 字节,data offset 提示了承载数据的偏移,但它以 4 字节为单位

12.tcpdump 文件操作

  • -w 输出结果至文件
  • -C 限制输入文件的大小,超出后以后缀加 1 等数字形式递增(注意单位是 1000000 字节)
  • -W 指定输出文件的最大数量,到达后会重新覆盖写第 1 个文件
  • -G 指定每隔 N 秒就重新输出至新文件,注意 w 参数应基于 strftime 参数指定文件名
  • -r 读取一个抓包文件
  • -V 将待读取的多个文件名写入一个文件中,通过读取该文件同时读取多个文件

12.1 抓取报文至文件

tcpdump -C 1 -W 3 -w a

12.2 读取一个抓包文件

tcpdump -r a0

image.png

13.tcpdump 输出时间戳格式

  • -t 不显示时间戳
  • -tt197011 0 点至今的秒数
  • -ttt 显示邻近两行报文间经过的秒数
  • -tttt 带日期的完整时间
  • -ttttt 自第一个抓取的报文起经历的秒数

14.tcpdump 分析信息详情

  • -e 显示数据链路层头部
  • -q 不显示传输层信息
  • -v 显示网络层头部更多信息,如 TTL、id
  • -n 显示 IP 地址、数字端口代替 hostname
  • -S TCP 信息以绝对序列号替代相对序列号
  • -AASCII 方式显示报文内容,适用于 HTTP 分析
  • -x16 进制方式显示报文内容,不显示数据链路层
  • -xx16 进制方式显示报文内容,显示数据链路层
  • -X 同时以 16 进制及 ACII 方式显示报文内容,不显示数据链路层
  • -XX 同时以 16 进制及 ACII 方式显示报文内容,显示数据链路层
相关文章
|
7月前
|
运维 网络协议 安全
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
230 0
|
2月前
|
Web App开发 网络协议 数据可视化
tcpdump 和 wireshark 抓包工具 ,介绍、安装、命令使用。 详解三次握手、四次挥手。两个结合使用,会更好分析报文
这篇文章详细介绍了网络抓包工具tcpdump和Wireshark的使用,包括安装、命令选项、过滤器语法,以及如何通过分析TCP的三次握手和四次挥手来理解网络通信细节。
608 1
|
4月前
tcpdump抓包命令详解
tcpdump抓包命令详解
|
4月前
|
存储 监控 网络协议
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
|
5月前
|
网络协议 Linux Windows
计算机网络抓包工具——tcpdump详解
计算机网络抓包工具——tcpdump详解
|
7月前
|
机器学习/深度学习 运维 网络协议
运维工程师必会工具(Nmap和TCPdump)
运维工程师必会工具(Nmap和TCPdump)
|
7月前
|
运维 网络协议 Python
使用tcpdump和wireshark进行服务器抓包分析
使用tcpdump和wireshark进行服务器抓包分析
278 0
|
7月前
|
机器学习/深度学习 Linux
tcpdump的抓包
tcpdump的抓包
59 0
|
7月前
|
Ubuntu 网络协议 安全
Tcpdump 抓包分析指令使用方法
tcpdump是一个强大的网络数据包抓包分析工具,用于抓取数据包和分析网络流量。并以可阅读的格式展示,包括源和目标地址、端口、协议类型等信息。
278 0
|
7月前
|
网络协议 Linux
Linux命令(120)之tcpdump
Linux命令(120)之tcpdump
98 0