真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

無(wú)法回應(yīng)的ARP請(qǐng)求包導(dǎo)致的網(wǎng)站緩慢問(wèn)題排錯(cuò)

問(wèn)題

訪問(wèn)一個(gè)網(wǎng)站,從本地訪問(wèn)很快,但是從客戶端訪問(wèn)大概要等待3秒的樣子。在服務(wù)器放上靜態(tài)網(wǎng)頁(yè),在客戶端訪問(wèn)則返回時(shí)間很快。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了豐都免費(fèi)建站歡迎大家使用!

排錯(cuò)步驟

  • 在客戶端訪問(wèn)問(wèn)題網(wǎng)站,在客戶端用wireshark抓包

    1. 用tcp 三次握手及客戶端請(qǐng)求與服務(wù)器返回的ACK來(lái)判斷是否存在線路或者服務(wù)器忙問(wèn)題,發(fā)現(xiàn)不是。348-349 顯示出服務(wù)器響應(yīng)很快。 349-498 之間用了3.28秒,說(shuō)明這是服務(wù)器應(yīng)用的問(wèn)題。

    無(wú)法回應(yīng)的ARP請(qǐng)求包導(dǎo)致的網(wǎng)站緩慢問(wèn)題排錯(cuò)

  • 讓開發(fā)人員調(diào)查服務(wù)器端的應(yīng)用,開發(fā)人員說(shuō)之前有個(gè)小功能可以抓取客戶端MAC地址,但是看到抓的包,應(yīng)該不是用的客戶端的代碼,因?yàn)榈谝粋€(gè)web頁(yè)響應(yīng)就3秒多,要是客戶端代碼那也是后續(xù)的JS或者資源加載較慢。

  • 不管三七二十一,在服務(wù)器端也抓了下包。過(guò)濾下arp 和http的包看看,過(guò)濾后發(fā)現(xiàn)有三個(gè)ARP請(qǐng)求,但是沒有對(duì)應(yīng)回應(yīng)。另外仔細(xì)看ARP請(qǐng)求的具體內(nèi)容也不對(duì),服務(wù)器用ARP請(qǐng)求去解析客戶端的MAC地址應(yīng)該是不對(duì)的,原因是服務(wù)器和客戶端不在一個(gè)網(wǎng)段,正常的跨網(wǎng)段的ARP請(qǐng)求是同一個(gè)網(wǎng)段才會(huì)用的,如果跨網(wǎng)段那應(yīng)該去解析路由器的MAC地址。所以這些ARP請(qǐng)求有問(wèn)題。

無(wú)法回應(yīng)的ARP請(qǐng)求包導(dǎo)致的網(wǎng)站緩慢問(wèn)題排錯(cuò)

  • 開發(fā)人員注釋掉了客戶端ARP地址查詢的代碼。訪問(wèn)速度瞬間提升了。
  • 開發(fā)人員同時(shí)注意到客戶端ARP地址查詢的結(jié)果為00-00-00-00-00-00,和我們的服務(wù)器上的抓包結(jié)果一致,因?yàn)槿フ?qǐng)求一個(gè)跨網(wǎng)段IP地址的MAC,所以目標(biāo)地址不會(huì)收到,因?yàn)锳RP廣播會(huì)在路由器端終止。

揭開真相

  • 開發(fā)人員給了我服務(wù)器端的代碼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;
    }

* 按照代碼邏輯的話,服務(wù)器應(yīng)該是用了一次SendARP 調(diào)用,但是為什么會(huì)有三個(gè)ARP請(qǐng)求產(chǎn)生,而且不同的ARP請(qǐng)求包之間的等待時(shí)間不一。所以為了驗(yàn)證這個(gè)SendARP的調(diào)用的實(shí)際操作,我用powershell 寫了上面一個(gè)sendARP 調(diào)用,然后用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 來(lái)解析一個(gè)跨網(wǎng)段的目標(biāo)IP地址,然后緊接著ping目標(biāo)主機(jī),這樣可以根據(jù)ping包的開始時(shí)間得出sendARP 的結(jié)束時(shí)間。
    powershell 命令如下:

    send-arp serverIP ;ping serverIP
  • 抓包過(guò)濾ARP以及ICMP來(lái)驗(yàn)證,SendARP函數(shù)會(huì)發(fā)送三個(gè)ARP包,可能也會(huì)等待超時(shí),因?yàn)闆]有ARP包回應(yīng),這個(gè)測(cè)試的時(shí)間大概也在3.1秒左右,符合問(wèn)題現(xiàn)象。
    無(wú)法回應(yīng)的ARP請(qǐng)求包導(dǎo)致的網(wǎng)站緩慢問(wèn)題排錯(cuò)

最后總結(jié):

  1. 在服務(wù)器上本機(jī)訪問(wèn)非常快,是因?yàn)榉?wù)器使用ARP請(qǐng)求查本機(jī),應(yīng)該會(huì)很快有回應(yīng)。如果其他客戶端和服務(wù)器在同一個(gè)網(wǎng)段,估計(jì)也不會(huì)慢。

  2. 客戶端慢是因?yàn)榉?wù)器在返回給客戶端http信息時(shí),先用ARP請(qǐng)求跨網(wǎng)段的客戶端IP,但是不會(huì)有ARP回應(yīng),因?yàn)槁酚傻脑?,客戶端看不到服?wù)器的ARP請(qǐng)求,而SendARP函數(shù)的超時(shí)時(shí)間大概為3.1秒,所以跨網(wǎng)段的客戶端收到服務(wù)器的一個(gè)HTTP響應(yīng)在3.28秒左右。同樣單純?cè)诳蛻舳俗グ荒芊治龀龇?wù)器應(yīng)用有問(wèn)題,但是說(shuō)不出具體的問(wèn)題。

  3. 靜態(tài)網(wǎng)頁(yè)快是因?yàn)椋o態(tài)網(wǎng)頁(yè)不執(zhí)行服務(wù)器端代碼,所以不會(huì)執(zhí)行ARP查詢。

  4. 另外開發(fā)人員也應(yīng)該熟悉常見的網(wǎng)絡(luò)協(xié)議,像這次的代碼就會(huì)僅僅在特定場(chǎng)景下工作,如果網(wǎng)站是面向互聯(lián)網(wǎng)的話,那這個(gè)代碼將不會(huì)起到作用,反而影響性能

文章標(biāo)題:無(wú)法回應(yīng)的ARP請(qǐng)求包導(dǎo)致的網(wǎng)站緩慢問(wèn)題排錯(cuò)
轉(zhuǎn)載注明:http://weahome.cn/article/gdceej.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部