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

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请求。

问题三:下一跳?

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

来源:微信小程序