使用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进行挥手告别
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
7月前
|
运维 网络协议 安全
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
211 0
|
7月前
|
机器学习/深度学习 网络协议 安全
网络抓包工具 - tcpdump
【1月更文挑战第1天】
249 4
|
缓存 网络协议 Linux
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
手把手实现tcp/ip用户态协议栈,帮你实践网络知识(网络必备,面试项目)
|
XML 存储 JSON
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
【面试题精讲】序列化协议对应于 TCP/IP 4 层模型的哪一层?
|
网络协议 算法 Linux
TCP 协议报文格式&tcpdump抓包工具
之前文章介绍过 wireshark 抓包工具的 捕获过滤器 和 显示过滤器,而 捕获过滤器 使用的 BPF 过滤语法可以在 tcpdump 中使用,tcpdump 可以在 Linux 服务端使用,熟悉和了解 tcpdump 抓包工具的使用,可以帮助分析服务端数据报文的情况。
255 0
|
2月前
|
Web App开发 网络协议 数据可视化
tcpdump 和 wireshark 抓包工具 ,介绍、安装、命令使用。 详解三次握手、四次挥手。两个结合使用,会更好分析报文
这篇文章详细介绍了网络抓包工具tcpdump和Wireshark的使用,包括安装、命令选项、过滤器语法,以及如何通过分析TCP的三次握手和四次挥手来理解网络通信细节。
461 1
|
25天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
68 3
|
1月前
|
网络协议 安全 Go
Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
【10月更文挑战第28天】Go语言进行网络编程可以通过**使用TCP/IP协议栈、并发模型、HTTP协议等**方式
49 13
|
1月前
|
网络协议 算法 网络性能优化
计算机网络常见面试题(一):TCP/IP五层模型、TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议
计算机网络常见面试题(一):TCP/IP五层模型、应用层常见的协议、TCP与UDP的区别,TCP三次握手、四次挥手,TCP传输可靠性保障、ARQ协议、ARP协议
|
2月前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
149 3