无法回应的ARP请求包导致的网站缓慢问题排错

news/2024/5/15 22:54:49/文章来源:https://blog.csdn.net/weixin_34081595/article/details/92944740

问题

访问一个网站,从本地访问很快,但是从客户端访问大概要等待3秒的样子。在服务器放上静态网页,在客户端访问则返回时间很快。

排错步骤

  • 在客户端访问问题网站,在客户端用wireshark抓包

    1. 用tcp 三次握手及客户端请求与服务器返回的ACK来判断是否存在线路或者服务器忙问题,发现不是。348-349 显示出服务器响应很快。 349-498 之间用了3.28秒,说明这是服务器应用的问题。

    无法回应的ARP请求包导致的网站缓慢问题排错

  • 让开发人员调查服务器端的应用,开发人员说之前有个小功能可以抓取客户端MAC地址,但是看到抓的包,应该不是用的客户端的代码,因为第一个web页响应就3秒多,要是客户端代码那也是后续的JS或者资源加载较慢。

  • 不管三七二十一,在服务器端也抓了下包。过滤下arp 和http的包看看,过滤后发现有三个ARP请求,但是没有对应回应。另外仔细看ARP请求的具体内容也不对,服务器用ARP请求去解析客户端的MAC地址应该是不对的,原因是服务器和客户端不在一个网段,正常的跨网段的ARP请求是同一个网段才会用的,如果跨网段那应该去解析路由器的MAC地址。所以这些ARP请求有问题。

无法回应的ARP请求包导致的网站缓慢问题排错

  • 开发人员注释掉了客户端ARP地址查询的代码。访问速度瞬间提升了。
  • 开发人员同时注意到客户端ARP地址查询的结果为00-00-00-00-00-00,和我们的服务器上的抓包结果一致,因为去请求一个跨网段IP地址的MAC,所以目标地址不会收到,因为ARP广播会在路由器端终止。

揭开真相

  • 开发人员给了我服务器端的代码C#
    ``` c#
    [DllImport("Iphlpapi.dll")]
    private static extern int SendARP(Int32 dest, Int32 host, ref Int64 mac, ref Int32 length);
    [DllImport("Ws2_32.dll")]
    private static extern Int32 inet_addr(string ip);

    public string getClientMac(string userip)
    {if (string.IsNullOrEmpty(userip)) return null;//string userip = Request.UserHostAddress;string strClientIP = userip.ToString().Trim();Int32 ldest = inet_addr(strClientIP);Int32 lhost = inet_addr("");Int64 macinfo = new Int64();Int32 len = 6;int res = SendARP(ldest, 0, ref macinfo, ref len);string mac_src = macinfo.ToString("X");//if (mac_src == "0")//{//    ip = userip;//}while (mac_src.Length < 12){mac_src = mac_src.Insert(0, "0");}string mac_dest = "";for (int i = 0; i < 11; i++){if (0 == (i % 2)){if (i == 10){mac_dest = mac_dest.Insert(0, mac_src.Substring(i, 2));}else{mac_dest = "-" + mac_dest.Insert(0, mac_src.Substring(i, 2));}}}return mac_dest;
    }

* 按照代码逻辑的话,服务器应该是用了一次SendARP 调用,但是为什么会有三个ARP请求产生,而且不同的ARP请求包之间的等待时间不一。所以为了验证这个SendARP的调用的实际操作,我用powershell 写了上面一个sendARP 调用,然后用wireshark抓包。
``` powershell
Function Send-Arp { 
param( [string]$DstIpAddress, [string]$SrcIpAddress = 0 
) $signature = @" 
[DllImport("iphlpapi.dll", ExactSpelling=true)] public static extern int SendARP(  uint DestIP, uint SrcIP, byte[] pMacAddr, ref int PhyAddrLen); 
"@ Add-Type -MemberDefinition $signature -Name Utils -Namespace Network try { $DstIp = [System.Net.IPAddress]::Parse($DstIpAddress) $DstIp = [System.BitConverter]::ToInt32($DstIp.GetAddressBytes(), 0) } catch { Write-Error "Could not convert $($DstIpAddress) to an IpAddress type.  Please verify your value is in the proper format and try again." break } if ($SrcIpAddress -ne 0) { try { $SrcIp = [System.Net.IPAddress]::Parse($SrcIpAddress) $SrcIp = [System.BitConverter]::ToInt32($SrcIp.GetAddressBytes(), 0) } catch { Write-Error "Could not convert $($SrcIpAddress) to an IpAddress type.  Please verify your value is in the proper format and try again." break } } else { $SrcIp = $SrcIpAddress } $New = New-Object PSObject -Property @{ IpAddress = $DstIpAddress PhysicalAddress = '' Description = '' ArpSuccess = $true } | Select-Object IpAddress,PhysicalAddress,ArpSuccess,Description $MacAddress = New-Object Byte[] 6 $MacAddressLength = [uint32]$MacAddress.Length $Ret = [Network.Utils]::SendARP($DstIp, $SrcIp, $MacAddress, [ref]$MacAddressLength) if ($Ret -ne 0) { $New.Description =  "An error was returned from SendArp() with error code:  $($Ret)" $New.ArpSuccess = $false } else { $MacFinal = @() foreach ($b in $MacAddress) { $MacFinal += $b.ToString('X2') } $New.PhysicalAddress = ($MacFinal -join ':') } Write-Output $New 
} 
  • 使用powershell 来解析一个跨网段的目标IP地址,然后紧接着ping目标主机,这样可以根据ping包的开始时间得出sendARP 的结束时间。
    powershell 命令如下:

    send-arp serverIP ;ping serverIP
  • 抓包过滤ARP以及ICMP来验证,SendARP函数会发送三个ARP包,可能也会等待超时,因为没有ARP包回应,这个测试的时间大概也在3.1秒左右,符合问题现象。
    无法回应的ARP请求包导致的网站缓慢问题排错

最后总结:

  1. 在服务器上本机访问非常快,是因为服务器使用ARP请求查本机,应该会很快有回应。如果其他客户端和服务器在同一个网段,估计也不会慢。

  2. 客户端慢是因为服务器在返回给客户端http信息时,先用ARP请求跨网段的客户端IP,但是不会有ARP回应,因为路由的原因,客户端看不到服务器的ARP请求,而SendARP函数的超时时间大概为3.1秒,所以跨网段的客户端收到服务器的一个HTTP响应在3.28秒左右。同样单纯在客户端抓包只能分析出服务器应用有问题,但是说不出具体的问题。

  3. 静态网页快是因为,静态网页不执行服务器端代码,所以不会执行ARP查询。

  4. 另外开发人员也应该熟悉常见的网络协议,像这次的代码就会仅仅在特定场景下工作,如果网站是面向互联网的话,那这个代码将不会起到作用,反而影响性能

转载于:https://blog.51cto.com/yoke88/2053667

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_710528.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Lambda架构与推荐在电商网站实践

王富平 现为1号店搜索与精准化部门架构师&#xff0c;之前在百度从事数据挖掘相关工作&#xff0c;对实时处理有着深刻的研究。一直从事大数据相关研发工作&#xff0c;2013年开发了一款SQL实时处理框架&#xff0c;致力于建设高可用的大数据业务系统。一、Lambda架构Lambda架构…

[tools]python的mkdocs模块分分钟将md搞成一个网站

docusaurus: facebook出的一个文档生成器,用起来感觉没那么友善 hugo: 这个很棒 python的mkdocs模块: 用起来最简单 python的这个模块可以分分钟将一坨md假设成一个网站 参考: http://www.mkdocs.org/ 安装配置 pip install mkdocsmkdocs new my-project cd my-project只需要将…

hbuilder制作简单网页_企业信息化网站+营销服务之电子商务网站制作流程

爱美食爱技术网站制作流程&#xff0c;是指网站制作过程中必须遵循的工作顺序。每个成品网站都必须按标准流程进行建设。这类似于企业的产品生产线&#xff0c;一个工序一个工序地完成整个产品加工。很多人把网站制作与网页制作混为一谈&#xff0c;在他们的意识中&#xff0c;…

phphstudy运行不了网站_传统企业网站运营分析:这些弊端你了解吗

传统企业网站建设运营分析&#xff1a;对于企业来说&#xff0c;网站不仅仅只是在网络上展示的店铺&#xff0c;而是一个重要的网上营销手段&#xff0c;尤其是在网络营销概念遍布的时代。随着网络营销概念的不断加深&#xff0c;国内各行各业对于企业网站建设也越来越重视。传…

分析原因型思维模型框架_分析营销型网站优化效果不佳的主要原因

说到网站优化&#xff0c;相信大家都已是耳熟能详了&#xff0c;不少企业在营销型网站建设上线后&#xff0c;都会花费心思在优化工作上面&#xff0c;目的自然是希望自己网站关键词排名更好&#xff0c;以此来获得更多流量。但是企业在优化之后&#xff0c;往往发现无论自己怎…

实现ip数据包抓取并分析_一些网站https证书出现问题的情况分析

20200326下午&#xff0c;有消息说[1]github的TLS证书出现了错误告警。证书的结构很奇怪&#xff0c;在其签发者信息中有一个奇怪的email地址&#xff1a;346608453qq.com。明显是一个伪造的证书。为了弄清楚其中的情况&#xff0c;我们对这一事件进行了分析DNS劫持&#xff1f…

可以发外链的网站_可以发外链的地方有哪些?-top推

做SEO除了要更新网站的内容以外&#xff0c;还要去一些高权重的平台发外链&#xff0c;发的外链多并且质量高的话&#xff0c;网站的权重很容易上升&#xff0c;那么可以发外链的地方有哪些呢&#xff1f;不妨跟随本期的top推一起了解一下吧。一、权重高的博客。在外链建设中&a…

python“-o”命令更改存储位置_程序员的狂欢地一般人的超大存储免费空间和网站空间你要会用用...

程序员的狂欢地一般人的超大存储免费空间和网站空间你知道是什么么?怎么用么?程序员的狂欢地一般人的超大存储免费空间和网站空间是GitHub.什么是GitHub&#xff1f;GitHub是用于版本控制和协作的代码托管平台。它可以让您和其他人在任何地方协同工作。本教程教您GitHub基本知…

k-近邻算法-优化约会网站的配对效果

KNN原理 1. 假设有一个带有标签的样本数据集&#xff08;训练样本集&#xff09;&#xff0c;其中包含每条数据与所属分类的对应关系。 2. 输入没有标签的新数据后&#xff0c;将新数据的每个特征与样本集中数据对应的特征进行比较。 a. 计算新数据与样本数据集中每条数据的距离…

一个网站大概多少钱_建一个外贸网站大概需要多少钱?角点科技总结建外贸网站的费用...

建一个外贸网站大概需要多少钱&#xff1f;小编经常遇到客户问&#xff1a;建一个网站需要多少钱&#xff1b;小编一般都是问&#xff1a;可以说说你的需求吗&#xff1f;是搭建什么类型呢&#xff1f;建站主要目的是什么&#xff1f; 因为小编一直认为网站的价格是看客户的需求…

大型网站技术架构(二)架构模式

2019独角兽企业重金招聘Python工程师标准>>> 每一个模式描述了一个在我们周围不断重复发生的问题及该问题解决方案的核心。这样&#xff0c;你就能一次又一次地使用该方案而不必做重复工作。 所谓网站架构模式即为了解决大型网站面临的高并发访问、海量数据、高可靠…

移动端媒体尺寸_网络推广外包浅析提升移动端网站建设效率有哪些网络推广外包技巧-企服...

相信许多站长有所耳闻&#xff0c;在当下的谷歌浏览器搜索中&#xff0c;要求PC端网站具备移动端网站才能更好的促进网站优化运营&#xff0c;这也标志着当下网络市场中移动端网站建设的必要性。移动端网站与PC端网站设计不同&#xff0c;有很多开发细节需要站长掌握&#xff0…

不同网站不同网卡_弄清高端网站建设的独特不同之处才能做好网站

弄清高端网站建设的独特不同之处才能做好网站网站并不总是只是互联网上的一个虚拟目的地&#xff0c;有时它是一种独特的存在&#xff0c;它为客户提供了无与伦比的体验。这种体验令人难忘&#xff0c;而且毫不费力地为用户提供了他们需要的准确信息。高端网站建设和普通网站建…

怎么把一个网页作为背景套在另一个网页上_设计科技公司网站背景的六个小技巧...

我们都知道&#xff0c;任何网站的背景对于网站如何影响我们都至关重要&#xff0c;尤其是在设计科技公司网站的时候表现的更加明显。背景对访问者及其用户对网站的认知程度有多大影响。以前网站没有背景&#xff0c;内容被放置在纯白色背景上。但是随着时间的流逝&#xff0c;…

网站备案负责人_三分钟教你如何做好网站备案

根据国家的相关法律要求&#xff0c;若使用中国大陆地区服务器开办网站&#xff0c;或提供其他类似的网络信息服务&#xff0c;需要依法进行备案。通过域名访问网站、浏览网站内容时&#xff0c;此网站会被解析到某地的服务器上&#xff0c;每个网站背后需要有对应运营单位、单…

dedecms和php有什么关系,dedecms和用PHP自己编写的程序做网站有什么区别?哪一种更好一点...

Dedecms也称做DedeCMS以简单、健壮、灵活、开源几大特点占领了国内CMS的大部份市场&#xff0c;目前已经有超过35万个站点正在使用DedeCMS或基于DedeCMS核心开发&#xff0c;产品安装量达到95万(这个数字来自于官方统计可能远远不止这些)。织梦cms是开源的程序现在也有很多所谓…

wcf编程用什么工具_四个强大的自学编程网站工具,用的人都是学习欲望很强!...

今天给大家分享几个自学编程的网站工具&#xff0c;希望可以帮到正在努力自学的你&#xff01;~~慕课网很多朋友都在想如何学习软件开发&#xff0c;这个自学开发的网站确实好用&#xff0c;一款专业的在线编程学习平台&#xff0c;早期的发展有很多免费的课程&#xff0c;对于…

window.open怎么设置title_企业seo怎么优化 都有那些策略?

seo怎么优化&#xff0c;做seo优化也需要讲究策略&#xff0c;策略不太对路的话&#xff0c;可能效果就差强人意。搜索引擎优化技术知识好掌控&#xff0c;但是如何灵活运用&#xff0c;并能做出效果&#xff0c;则是需要深入研究和实践的了。面对一个网站&#xff0c;seo怎么优…

seo 伪原创_seo伪原创工具(解析新云查新型伪原创模式工具)

现在内容为王&#xff0c;外链为皇的互联网时代大家对文章内容的质量越来越看重&#xff0c;SEOer们在做内容时原创文章内容时最好的&#xff0c;当然伪原创文章也是一大部分SEOer的选择。文章做伪原创的方法有的人是手动做伪原创&#xff0c;而有的人是依靠伪原创工具做伪原创…

idea中浏览器打开页面404_深圳网站建设中的404页面有什么用

通常我们访问网站时&#xff0c;遇到404页面会让人很扫兴&#xff0c;想想正在兴致勃勃的看新闻、找资料、看视频等等&#xff0c;突然出现一个巨大的404&#xff0c;告诉你找的东西不存在&#xff0c;是不是有种想砸键盘的冲动&#xff1f;可偏偏有很多404页面让你看到之后不仅…