使用tcpdump工具与对tcp协议的理解

简介: 使用tcpdump工具与对tcp协议的理解

一。tcpdump工具的使用

==> 安装
 yum install -y tcpdump 
==》 更多命令使用
# 列出可以抓包的网络接口 (网卡)
tcpdump -D

# 抓取所有网卡的包
tcpdump -i any

# 抓取5次 ping报文信息
tcpdump -i any -c5 icmp

# 抓取 与 目标地址相关的数据包
tcpdump -i any -c5 -nn host 54.204.39.132

# 抓取80端口的数据包
tcpdump -i any -c5 -nn port 80

# 源ip匹配的地址 (左边匹配)
tcpdump -i any -c5 -nn src 192.168.122.98

# 改为显示绝对序号 (默认在握手成功后 ack变为从1开始)
-S 

# 使用and 或or来过滤规则 同时可以加上 () 让条件更复杂多样
tcpdump -i any -c5 -nn src 192.168.122.98 and port 80

其它参数

-A:以ASCII编码打印每个报文(不包括链路层的头),这对分析网页来说很方便;
-a:将网络地址和广播地址转变成名字; 
-c<数据包数目>:在收到指定的包的数目后,tcpdump就会停止;
-C:用于判断用 -w 选项将报文写入的文件的大小是否超过这个值,如果超过了就新建文件(文件名后缀是1、2、3依次增加);
-d:将匹配信息包的代码以人们能够理解的汇编格式给出; 
-dd:将匹配信息包的代码以c语言程序段的格式给出; 
-ddd:将匹配信息包的代码以十进制的形式给出;
-D:列出当前主机的所有网卡编号和名称,可以用于选项 -i;
-e:在输出行打印出数据链路层的头部信息; 
-f:将外部的Internet地址以数字的形式打印出来; 
-F<表达文件>:从指定的文件中读取表达式,忽略其它的表达式; 
-i<网络界面>:监听主机的该网卡上的数据流,如果没有指定,就会使用最小网卡编号的网卡(在选项-D可知道,但是不包括环路接口),linux 2.2 内核及之后的版本支持 any 网卡,用于指代任意网卡; 
-l:如果没有使用 -w 选项,就可以将报文打印到 标准输出终端(此时这是默认); 
-n:显示ip,而不是主机名; 
-N:不列出域名; 
-O:不将数据包编码最佳化; 
-p:不让网络界面进入混杂模式; 
-q:快速输出,仅列出少数的传输协议信息; 
-r<数据包文件>:从指定的文件中读取包(这些包一般通过-w选项产生); 
-s<数据包大小>:指定抓包显示一行的宽度,-s0表示可按包长显示完整的包,经常和-A一起用,默认截取长度为60个字节,但一般ethernet MTU都是1500字节。所以,要抓取大于60字节的包时,使用默认参数就会导致包数据丢失; 
-S:用绝对而非相对数值列出TCP关联数; 
-t:在输出的每一行不打印时间戳; 
-tt:在输出的每一行显示未经格式化的时间戳记; 
-T<数据包类型>:将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议); 
-v:输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; 
-vv:输出详细的报文信息; 
-x/-xx/-X/-XX:以十六进制显示包内容,几个选项只有细微的差别,详见man手册; 
-w<数据包文件>:直接将包写入文件中,并不分析和打印出来;
expression:用于筛选的逻辑表达式;

二、 实际的tcp请求的理解

这里首先要理解几个概念
为什么要用tcp ,ip 不够吗?
实际上网络协议到了ip层就已经实现了通信,
tcp (transmission Control Protocol)重点在于 Control 是为了达到控制,控制可靠性

tcp 的格式:
                源端口,目标端口
                序号 Seq
                确认号 Ack
                首部长度,保留,标志位,窗口
                校验和,紧急指针
                选项项,填充
                数据Data

序号 seq (sequence Number) 是用来解决乱序问题的。
确认号 ack (Acknowledgment Number) 是用来解决丢包情况的,告诉发送方这个包我收到了。

三次握手,其实是为了初始化序号 SYN (synchronize sequence Number)
举例流程-三次握手:

确认号为序号+1  
我 -seq100》 
你 -seq105 ack101》我  
我 -ack106》你  
这就完成了三次握手

举例流程-tcp传输:

接下来是交互过程(在三次握手初始化后会给对方一个初始化后的seq来用,双方各有一个)
我 -seq 101(101:111)(length 10)
你 -ack 111

你 -seq 106(106:126)(length 20)
我 -ack 126
。。。。

举例流程-四次挥手:

我 -seq 359 ack 1077 [fin]
你 -ack 360
你 -seq 1077 ack 360 [fin]
我 -ack 1078

从上面可见,三次握手的过程实际上是为了同步给对方seq 序号,具体流程是我告诉你我的序号,你把我的序号+1,来证明知道了,同时发送了你的序号,我也把你的序号+1,证明我也知道了。
这也就解释了为什么要三次才能握手,因为同步SYN过程最少也要像这样走三下,同时如果走四下会浪费一次请求。
另外四次挥手为什么要四次,原因是tcp协议是全双工的,也就是我能发给你,你也能发给我,要断开连接必须双方都确认才能断开。
断开的双方都将上一次自己收到的对方最后ack的序号作为seq,并发给对方ack,对方回复一个ack=seq+1 即完成关断

三、tcpdump执行后的结果分析

# 使用如下命令抓取80端口
》》》tcpdump -i any -c5 -nn port 80
listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes
# 三次握手
11:53:21.695073 IP 我  > 你: Flags [S], seq 196875948, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
11:53:21.695105 IP 你 > 我 : Flags [S.], seq 4087077141, ack 196875949, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
11:53:21.695349 IP 我  > 你: Flags [.], ack 1, win 4106, length 0
# 数据传输
11:53:21.695497 IP 我  > 你: Flags [P.], seq 1:539, ack 1, win 4106, length 538: HTTP: GET / HTTP/1.1
11:53:21.695511 IP 你 > 我 : Flags [.], ack 539, win 237, length 0
11:53:21.695997 IP 你 > 我 : Flags [P.], seq 1:180, ack 539, win 237, length 179: HTTP: HTTP/1.1 304 Not Modified
11:53:21.736287 IP 我  > 你: Flags [.], ack 180, win 4105, length 0
# 使用如下命令抓取80端口,不要相对序号,要绝对序号
》》》tcpdump -S -i any -c5 -nn port 80
11:58:21.495550 IP 我 > 你主机: Flags [S], seq 493576005, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
11:58:21.495599 IP 你主机 > 我: Flags [S.], seq 2487186919, ack 493576006, win 29200, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
11:58:21.495811 IP 我 > 你主机: Flags [.], ack 2487186920, win 4106, length 0

11:58:21.496316 IP 我 > 你主机: Flags [P.], seq 493576006:493576544, ack 2487186920, win 4106, length 538: HTTP: GET / HTTP/1.1
11:58:21.496336 IP 你主机 > 我: Flags [.], ack 493576544, win 237, length 0

11:58:21.497167 IP 你主机 > 我: Flags [P.], seq 2487186920:2487187099, ack 493576544, win 237, length 179: HTTP: HTTP/1.1 304 Not Modified
11:58:21.539155 IP 我 > 你主机: Flags [.], ack 2487187099, win 4105, length 0

四次挥手的样本

13:49:48.484108 IP 主机 > 192.168.41.1.60873: Flags [F.], seq 359, ack 1077, win 245, length 0
13:49:48.484271 IP 192.168.41.1.60873 > 主机: Flags [.], ack 360, win 4104, length 0
13:49:56.188338 IP 192.168.41.1.60873 > 主机: Flags [F.], seq 1077, ack 360, win 4104, length 0
13:49:56.188386 IP 主机 > 192.168.41.1.60873: Flags [.], ack 1078, win 245, length 0
上面的字段
时间戳(micro-timestamp) 上层协议 发送方ip.port > 接收方ip.port : 【标记】 seq/ack(序号/答复号) win(window窗口大小 可以接受长度) length(长度) 下层协议 协议头
flag 部分 [S] 表示 seq 被设置 [.] 表示 ack 被设置 [P] 表示发送数据 [F] 表示fin进行挥手告别
相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
28天前
|
运维 网络协议 安全
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
44 0
|
3月前
|
机器学习/深度学习 网络协议 安全
网络抓包工具 - tcpdump
【1月更文挑战第1天】
87 4
|
5月前
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
6月前
|
网络协议 算法 Linux
TCP 协议报文格式&tcpdump抓包工具
之前文章介绍过 wireshark 抓包工具的 捕获过滤器 和 显示过滤器,而 捕获过滤器 使用的 BPF 过滤语法可以在 tcpdump 中使用,tcpdump 可以在 Linux 服务端使用,熟悉和了解 tcpdump 抓包工具的使用,可以帮助分析服务端数据报文的情况。
100 0
|
2天前
|
网络协议 Java API
深度剖析:Java网络编程中的TCP/IP与HTTP协议实践
【4月更文挑战第17天】Java网络编程重在TCP/IP和HTTP协议的应用。TCP提供可靠数据传输,通过Socket和ServerSocket实现;HTTP用于Web服务,常借助HttpURLConnection或Apache HttpClient。两者结合,构成网络服务基础。Java有多种高级API和框架(如Netty、Spring Boot)简化开发,助力高效、高并发的网络通信。
|
9月前
|
机器学习/深度学习 监控 网络协议
浅谈 TCP 握手/数据传输/挥手过程以及 tcpdump 抓包工具使用
浅谈 TCP 握手/数据传输/挥手过程以及 tcpdump 抓包工具使用
209 0
|
11月前
|
消息中间件 网络协议 安全
TCP/IP 应用层常用协议
TCP/IP 应用层常用协议
291 0
|
负载均衡 网络协议 网络安全
TCP/IP:有层次的协议栈
TCP/IP:有层次的协议栈
175 0
TCP/IP:有层次的协议栈
|
网络协议 算法
【网络篇】第十二篇——TCP协议通讯流程
【网络篇】第十二篇——TCP协议通讯流程
【网络篇】第十二篇——TCP协议通讯流程
|
监控 网络协议 数据格式
第一张TCP/IP协议
一 什么是tcp/ip TCP/IP协议(Transfer ControlnProtocol/Internet Protocol)叫做传输控制/网际协议,又叫网络通讯协议,这个协议是Internet国际互联网络的基础。
113 0