高性能服务器实验tcpdump测试(4)

TCPDUMP

tcpdump是一款经典的网络抓包工具。即使在今天,我们拥有像Wireshark这样更易于使用和掌握的抓包工具,tcpdump仍然是网络程序员的必备利器。

-n,使用IP地址表示主机,而不是主机名;使用数字表示端口号,而不是服务名称。
-i,指定要监听的网卡接口。“-i any”表示抓取所有网卡接口上的数据包。
-v,输出一个稍微详细的信息,例如,显示P数据包中的TTL和TOS信息。
-t,不打印时间戳。
-e,显示以太网帧头部信息。
-c,仅抓取指定数量的数据包。
-x,以十六进制数显示数据包的内容,但不显示包中以太网帧的头部信息。
-X,与-x选项类似,不过还打印每个十六进制字节对应的ASCH字符。-
-XX,与-X相同,不过还打印以太网帧的头部信息。
-s,设置抓包时的抓取长度。当数据包的长度超过抓取长度时,tepdump抓取到的将是被截断的数据包。在4.0以及之前的版本中,默认的抓包长度是68字节。这对于IP、TCP和UDP等协议就已经足够了,但对于像 DNS、NFS这样的协议,68字节通常不能容纳一个完整的数据包。比如我们在1.6.3小节抓取 DNS数据包时,就使用了-s选项(测试机器ernest-laptop 上,tcpdump的版本是4.0.0)。不过4.0之后的版本,默认的抓包长度被修改为65 535字节,因此我们不用再担心抓包长度的问题了。
-S,以绝对值来显示TCP报文段的序号,而不是相对值。
-w,将tcpdump的输出以特殊的格式定向到某个文件。
-r,从文件读取数据包信息并显示之。

host 能够用来查询域名,它还能得到更多的信息
host -t mx example.com 可以查询出 example.com 的 MX 记录,以及处理 mail 的 host 的名字
host -l example.com 会返回所有注册在 example.com 下的域名
host -a example.com 则会显示这个主机的所有域名信息.


tcpdump观察DNS

tcpdump  -i ens33 -nt -s 500 port domain
host -t A www.baidu.com
IP 192.168.179.188.49431 > 192.168.179.2.domain: 43016+ A? www.baidu.com. (31)

IP 192.168.179.2.domain > 192.168.179.188.49431: 43016 3/0/0 CNAME www.a.shifen.com., A 14.215.177.39, A 14.215.177.38 (93)

这两个数据包开始的“IP”指出,它们后面的内容描述的是IP数据报。tcpdump以“IP地址.端口号”的形式来描述通信的某一端;以“>”表示数据传输的方向,“>”前面是源端,后面是目的端。可见,第一个数据包是测试机器CENTOS7 (IP地址是192.168.179.188)向其首选 DNS服务器(IP地址是192.168.179.2)发送的DNS查询报文,
第二个数据包是服务器反馈的DNS应答报文

第一个数据包中,数值49431是 DNS查询报文的标识值,因此该值也出现在 DNS应答报文中。“+”表示启用递归查询标志。“A?”表示使用A类型的查询方式。“www.baidu.com则是DNS查询问题中的查询名。括号中的数值31是DNS查询报文的长度(以字节为单位)。
第二个数据包中,“3/0/0”表示该报文中包含3个应答资源记录、0个授权资源记录和0个额外信息记录。“CNAME www.a.shifen.com.,A 14.215.177.39,A 14.215.177.39 则表示3个应答资源记录的内容。其中CNAME表示紧随其后的记录是机器的别名,A表示紧随其后的记录是IP地址。该应答报文的长度为39字节。

TCPDUMP观察ARP

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.179.189  netmask 255.255.255.0  broadcast 192.168.179.255
        inet6 fe80::9da6:ae67:d11e:7e5c  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ba:38:85  txqueuelen 1000  (Ethernet)
        RX packets 27178  bytes 39906383 (39.9 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3039  bytes 222599 (222.5 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 266  bytes 26465 (26.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 266  bytes 26465 (26.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ubuntu

ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.179.188  netmask 255.255.255.0  broadcast 192.168.179.255
        inet6 fe80::e7e6:2e30:d103:fc1  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:1c:81:25  txqueuelen 1000  (Ethernet)
        RX packets 286  bytes 33587 (32.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 140  bytes 14921 (14.5 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


//centos

sudo tcpdump -i ens33 -ent '(dst 192.168.179.189 and src 192.168.179.188)or(
dst 192.168.179.188 and src 192.168.179.189)'

telnet 192.168.179.188



00:0c:29:ba:38:85 > ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.179.188 tell 192.168.179.189, length 28
00:0c:29:1c:81:25 > 00:0c:29:ba:38:85, ethertype ARP (0x0806), length 60: Reply 192.168.179.188 is-at 00:0c:29:1c:81:25, length 46

由tcpdump抓取的数据包本质上是以太网帧,我们通过该命令的众多选项来控制帧的过滤(比如用dst和 src指定通信的目的端IP地址和源端地址)和显示(比如用-e选项开启以太网帧头部信息的显示)。
第一个数据包中,ARP通信的源端的物理地址00:0c:29:ba:38:85是(ernest-laptop-ubantu),目的端的物理地址是ff:ff:ff;:ff:ff:ff,这是以太网的广播地址,用以表示整个LAN。该LAN上的所有机器都会收到并处理这样的帧。数值0x806是以太网帧头部的类型字段的值,它表示分用的目标是ARP模块。该以太网帧的长度为42字节(实际上是46字节,tcpdump未统计以太网帧尾部4字节的CRC字段),其中数据部分长度为28字节。“Request”表示这是一个ARP请求,“who-has 192.168.1.109 tell 192.168.1.108”则表示是ernest-laptop要查询Kongming20的IP地址。
第二个数据包中,ARP通信的源端的物理地址00:0c:29:1c:81:25是0(centos),目的端的物理地址是00:16:d3:5c:b9:e3 (ernest-laptop-ubantu)。"Reply”表示这是一个ARP应答,“192.168.179.188 is-at 00:0c:29:1c:81:25”则表示目标机器Kongming20报告其物理地址。该以太网帧的长度为60字节(实际上是64字节),可见它使用了填充字节来满足最小帧长度。
在这里插入图片描述

使用tcpdump观察ipv4与tcp

sudo tcpdump -ntx -i lo

telnet 127.0.0.1 

IP 127.0.0.1.47534 > 127.0.0.1.23: Flags [S], seq 1438175385, win 65495, options [mss 65495,sackOK,TS val 2673867955 ecr 0,nop,wscale 7], length 0
	0x0000:  4510 003c 63c2 4000 4006 d8e7 7f00 0001
	0x0010:  7f00 0001 b9ae 0017 55b8 d099 0000 0000
	0x0020:  a002 ffd7 fe30 0000 0204 ffd7 0402 080a
	0x0030:  9f5f fcb3 0000 0000 0103 0307

 

tcpdump输出Flags[S],表示该TCP报文段包含SYN标志,因此它是个同步报文段

seq是序号值。因为该同步报文段是从127.0.0.1.47534(客户端IP地址和端口号)到127.0.0.1.23(服务器IP地址和端口号)这个传输方向上的第一个TCP报文段,所以这个序号值也就是此次通信过程中该传输方向的ISN值。并且,因为这是整个通信过程中的第一个TCP报文段,所以它没有针对对方发送来的TCP报文段的确认值(尚未收到任何对方发送来的TCP报文段)。
win是接收通告窗口的大小。因为这是一个同步报文段,所以win值反映的是实际的接收通告窗口大小。

options是TCP选项,其具体内容列在方括号中。mss是发送端(客户端)通告的最大报文段长度。通过ifconfig命令查看回路接口的MTU为65536字节,因此可以预想到TCP报文段的MSS 为 ( 65536-40)字节。sackOK表示发送端支持并同意使用SACK选项。TS val是发送端的时间戳。ecr是时间戳回显应答。因为这是一次TCP通信的第一个TCP报文段,所以它针对对方的时间戳的应答为0(尚未收到对方的时间戳)。紧接着的nop是一个空操作选项。wscale指出发送端使用的窗口扩大因子为7。
字段分析放在38/54

tcpdump观察TCP的连接的建立和关闭

$ sudo tcpdump -i eth0 -nt '(src 192.168.1.109 and dst 192.168.1.108) or (src192.168.1.108 and dst 192.168 .1.109j'
 telnet 192.168.1.109 8o
Trying 192.168 .1.109...connectei to 192.168.1.109.Escape character is "一].]《回车)。输入ctrl+]并回车
telnet> quit〔回车)
connection closed.


1. IP 192.168.1.108.60871 > 192.168.1.109.80: Flags [S], seq 535734930,win5840,length o
2. IP 192.168.1.109.80 > 192.168.1.108.60871: Flags [8.],seq 2159701207,ack 535734931,win 5792.length o
3.IP 192.168.1.108.60871 > 192.168.1.109.80: Flags [.1,ack 1,win 92,length 4. IP 192.168.1.108.60871 > 192.168.1.109.80: rlags [F.],8eq 1,ack 1,win 92,length 0
5.IP 192.168.1.109.80 > 192.168.1.108.60871: Flags [.), ack 2,win 91,length 06.IP 192.168.1.109.80 > 192.168.1.108.60871: Flags [F.],seq l,ack 2,win 91,length o
7. IP 192.168.1.108.60871 > 192.168.1.109.80: Flags 〔.], ack 2,win 92,length o



在这里插入图片描述
第1个TCP报文段包含SYN标志,因此它是一个同步报文段,即ernest-laptop(客户端)向Kongming20(服务器)发起连接请求。同时,该同步报文段包含一个ISN值为535734930的序号。第2个TCP报文段也是同步报文段,表示Kongming20同意与ernest-laptop建立连接。同时它发送自己的ISN值为2159701207的序号,并对第1个同步报文段进行确认。确认值是535734931,即第1个同步报文段的序号值加1。前文说过,序号值是用来标识TCP数据流中的每一字节的。但同步报文段比较特殊,即使它并没有携带任何应用程序数据,它也要占用一-个序号值。第3个TCP报文段是ernest-laptop对第2个同步报文段的确认。至此,TCP连接就建立起来了。建立TCP连接的这3个步骤被称为TCP三次握手。

后面4个TCP报文段是关闭连接的过程。第4个TCP报文段包含FIN标志,因此它是一个结束报文段,即 ernest-laptop要求关闭连接。结束报文段和同步报文段一样,也要占用一个序号值。Kongming20用TCP报文段5来确认该结束报文段。紧接着Kongming20发送自己的结束报文段6,ernest-laptop则用TCP报文段7给予确认。实际上,仅用于确认目的的确认报文段5是可以省略的,因为结束报文段6也携带了该确认信息**。确认报文段5是否出现在连接断开的过程中,取决于TCP的延迟确认特性**。延迟确认将在后面讨论。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值