暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

tcpdump抓包解释一次请求的过程

苏克分享 2021-04-12
507
点击上方“蓝字”关注我们



Flags中参数解释
Flags are some combination  of  S  (SYN),  F(FIN), P (PUSH), R (RST), U (URG), W (ECN CWR), E (ECN-Echo) or `.' (ACK), or `none' if no flags are set.

抓取主机192.168.0.104和主机180.101.49.11的通信

[root@ecs-1c9f-0004 network-scripts]# tcpdump host 192.168.0.104 and 180.101.49.11
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes

基础:主机向180.101.49.11发送请求 curl 180.101.49.11

逐行解析

第一次握手

Flags [S]:发送syn请求

10:26:11.350025 IP ecs-1c9f-0004.51786 > 180.101.49.11.http: Flags [S], seq 458741837, win 29200, options [mss 1460,sackOK,TS val 82802261 ecr 0,nop,wscale 7], length 0
第二次握手

Flags [S.]:目标地址回复确认 S -> syn
, . -> ack

10:26:11.362155 IP 180.101.49.11.http > ecs-1c9f-0004.51786: Flags [S.], seq 4283621899, ack 458741838, win 8192, options [mss 1452,sackOK,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,nop,wscale 5], length 0
第三次握手

Flags [.]:主机再次向目标地址发送确认 . -> ack

10:26:11.362196 IP ecs-1c9f-0004.51786 > 180.101.49.11.http: Flags [.], ack 1, win 229, length 0
三次握手完成后开始发送数据包

Flags [P.]首先主机向目标地址发送数据包并携带ack,目标地址携带ack响应。同样的目标地址和主机通信时也会以同样的方式,先发送请求,然后主机响应ack确认。

10:26:11.362252 IP ecs-1c9f-0004.51786 > 180.101.49.11.http: Flags [P.], seq 1:78, ack 1, win 229, length 77: HTTP: GET  HTTP/1.1
10:26:11.374481 IP 180.101.49.11.http > ecs-1c9f-0004.51786: Flags [.], ack 78, win 908, length 0
10:26:11.375616 IP 180.101.49.11.http > ecs-1c9f-0004.51786: Flags [P.], seq 1453:2869, ack 78, win 908, length 1416: HTTP
10:26:11.375653 IP ecs-1c9f-0004.51786 > 180.101.49.11.http: Flags [.], ack 2869, win 274, length 0

建立通信的基础:路由寻址,以下演示:ping www.baidu.com

路由表:

[root@standby01 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.99.1 0.0.0.0 UG 100 0 0 eth0
192.168.99.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
192.168.122.0 0.0.0.0 255.255.255.0 U 0 0 0 virbr0

问题一:在DNS解析后拿到目标地址IP之后目标地址和主机如何建立通信,然后再发送数据包?

路由表中进行路由判定,eg:目标地址:172.17.1.5  主机路由表如上图所示。判定过程为:第一步 目标ip和网络掩码 Genmask列中的地址做与运算,得到Destination中对应的值 172.17.1.5 和 255.255.255.0
得到的与运算结果还是自己172.17.1.5
,所以上面表格中的第二行淘汰了,看第一行判定:0.0.0.0 与 172.17.1.5
做运算结果得到0.0.0.0
符合,也就是这个位置中的Gateway就是目标地址的下一跳

问题二:0.0.0.0
为什么就判定成功了?

网络中0.0.0.0的IP地址表示整个网络,即网络中的所有主机
这里又关联到一个数据链路层和网络层的东西ARP
,在上述请求中如果目标地址在ARP缓存中没有找到地址的话,就会将当前的ip广播到本地网络上的所有主机。源主机A的IP地址和MAC地址都包括在ARP请求中。本地网络上的每台主机都接收到ARP请求并且检查是否与自己的IP地址匹配。如果主机发现请求的IP地址与自己的IP地址不匹配,它将丢弃ARP请求。

问题三:下一跳
?

这个词就是网络中寻址的关键词,全球建立的网络连接就是基于下一跳
,通过这种方式实现基础通信,比如在购买云服务器的时候(华为云)就有个下一跳
查看.

文章来源苏克分享小程序:点击访问小程序


扫码关注我们
扫码关注我们



文章转载自苏克分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论