一次GET请求的抓包分析

第一次GET请求-成功

初始环境

客户端地址:192.168.0.143,服务端地址:192.168.0.180。
在客户端上执行"curl 192.168.0.180:30080"访问web页面,并抓包如下图所示。
找到对30080端口的访问记录并按下图所示追踪TCP流。其中26780为客户端端口,30080为服务端端口。
在这里插入图片描述
对TCP流的追踪结果如下图所示,可分为三部分:建立连接>数据传输>断开连接。
在这里插入图片描述

建立连接

该部分属于明显的TCP三次握手流程,属于传输层。
参考TCP三次握手的逻辑图,如下图所示。
在这里插入图片描述
在这里插入图片描述

  • SYN:为发起建立连接标志,用于发起建立连接。
  • Seq:为序列号,此处初始值为0。

可以理解为客户端26780向服务端30080端发起了第一次握手。
在这里插入图片描述

  • ACK:为应答标志。
  • ack:为确认号。其值为序列号Seq+1。

可以理解为服务端响应了客户端的上一次握手,同意建立连接,发起了第二次握手。
在这里插入图片描述
在第二次握手后,客户端修改序列号Seq为第一次握手中Seq+1,确认号Ack为第二次握手中Seq+1,向服务端发送ACK确认标志,发起第三次握手。
由此,经过三次握手,建立了一条TCP可靠传输。此时客户端和服务端进入ESTABLISHED状态。在这里插入图片描述

数据传输

在这里插入图片描述
当建立了可靠的传输后,客户端向服务端表达了自己的诉求,需要访问一个网页。
可以看到,对比前面的三次握手多了一个"Hypertext Transfer Protocol"超文本传输协议,因为HTTP属于应用层协议,自然要对数据包解析的更深(解析至应用层)。
在这里插入图片描述服务端收到客户端的诉求后,向客户端发送ACK应答标志,其中修改序列号Seq为第二次握手中Seq+1,修改确认号Ack为http数据包长度+1。
在这里插入图片描述

  • PSH:指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。

服务端向客户端发送PSH标志,要求客户端尽快处理这个报文段
在这里插入图片描述
服务端继续向客户端发送数据,其中修改序列号Seq为上次数据包长度Len+上次序列号Seq。
在这里插入图片描述
当数据都发送完毕后,服务端向客户端返回http状态码200,表示本次http请求处理结束。
在这里插入图片描述
客户端收到数据后,向服务端发送ACK应答标志,其中修改确认号Ack为上次Ack的值+上次收到的数据包长度Len。

断开连接

在这里插入图片描述

  • FIN: 为断开连接标志。

当客户端将数据完全接收完毕后,向服务器发送FIN断开连接标志,通知服务器断开连接。
在这里插入图片描述
服务端满足断开连接条件后,向客户端发送FIN断开连接标志,同时进入TIME_WAIT状态。
在这里插入图片描述
在这里插入图片描述
客户端接收到服务端的断开连接信息后,向服务端发送ACK确认标志并断开连接。

第二次GET请求-失败

现象及解决办法

k8s ipvs模式下,curl inner_server_ip:NodePort 时通时不通,且浏览器访问outer_server_ip:NodePort重复访问均正常,且curl pod_ip:Port多次访问均正常
在这里插入图片描述
报错
[A new tcp session is started with the same ports as an earlier session in this trace]
[This frame is a (suspected) retransmission]
最终解决方法:
修改服务端的内核参数

vim /etc/sysctl.conf
net.ipv4.tcp_tw_recycle = 0

sysctl -p

参考资料:https://blog.csdn.net/qq_39592858/article/details/125652646

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Traceroute 是一种网络诊断工具,用于确定从计算机到目标服务器的数据包传输路径。而抓包是一种技术,用于捕获和分析网络中传输的数据包。 要抓包 HTTP 请求,我们可以结合使用 Traceroute 和抓包工具,如 Wireshark。 首先,我们使用 Traceroute 工具来确定到目标服务器的路径。我们在命令行中输入 traceroute 命令,后面跟上目标服务器的 IP 地址或域名。Traceroute 会发送一系列的数据包,每个数据包绕过网络中一跳,并返回每一跳的 IP 地址。这样可以得到从我们的计算机到目标服务器的路径。 接下来,我们启动抓包工具 Wireshark,选择正确的网络接口进行抓包。然后,我们可以在过滤器中设置过滤规则,以捕获目标服务器的 HTTP 请求。例如,我们可以设置过滤器为 "ip.dst==目标服务器的IP地址 && http",这样 Wireshark 将只捕获到达目标服务器并使用 HTTP 协议的数据包。 抓包工具 Wireshark 将开始捕获数据包,并显示相关的详细信息,如源 IP 地址、目标 IP 地址、协议类型、请求头和响应体等。我们可以根据需要分析这些数据,例如查看请求头中的 User-Agent 字段来确定发送请求的浏览器类型,或者查看响应体中的内容来检查数据传输的正确性。 通过使用 Traceroute 和抓包工具,我们可以定位网络故障、监测网络性能,并且更深入地了解 HTTP 请求过程中的数据传输情况。这对于网络工程师和开发人员来说都是非常有用的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值