根据公式计算网络qoe

本文详细探讨了如何根据不同场景如Web浏览、游戏、VoIP和办公来计算网络质量体验(QOE)。通过一系列特定的公式,我们可以量化这些不同应用下的网络性能,从而提升整体用户体验。

公式分为web浏览,游戏,voip,办公等类型

import os
import math
import time
def getsoe(apptype,minv,maxv,aver,loss):
    if minv == '0':
        minv='1'
    if maxv == '0':
        maxv='1'
    if aver == '0':
        aver='1'
                
    drop = float(loss)/10
    jitter = math.sqrt(((float(maxv)-float(aver))*(float(maxv)-float(aver))+(float(minv)-float(aver))*(float(minv)-float(aver)))/2)
    delay = float(aver)
    
    #print("drop jitter delay ",drop,jitter,delay)
    
    if apptype == 'web' or apptype == 'office' or apptype == 'sns':
        a=5.008
        b=-0.0045
        c=0.03            
        soe = a*math.exp(b*delay)+c
                        
    if apptype == 'video':
        #enhence effect        
        soe = math.exp(-drop)/(0.00628*jitter+delay*0.0138)+1.844
        
    if apptype == 'game':
        jitter=jitter
        x = delay+0.686*jitter
        if x>650.0:
            x = 650.0
        a = 3.08*(10**(-9))    
        b = 1.18*(10**(-5))
        c = 1.15*(10**(-2))            
        soe = 4.33-a*(x*x*x)+b*(x*x)-c*x
                        
    if apptype == 'voip':
        soe = 5-0.003*delay-16.14*drop
            
    if apptype == 'download':
        x = delay*200/1000
        soe = 4.298*math.exp(-0.347*x)+1.39+1

    if soe>5.0:
        soe = 5.0            
    if soe<1.0:
        soe = 1.0  
    return round(soe,3)            


os.system("curl.exe --silent -o rpingdst.txt http://1.1.1.1/rpingres.txt")

dstlist=[]
fd = open('rpingdst.txt')
for v in fd:
    if v.find('node')==0:
        dstlist.append(v.split('#')[1])
fd.close()    

dstlist = list(set(dstlist))       

apptype=["web","office","video","game","voip","download","sns"]
appsoe = {}
appip = {}
for x in apptype:
    appsoe[x]=[]
    appip[x]=[]
    
for x in dstlist:
    app = x.split(':')[0]
    ip = x.split(':')[1]
    #print(app,ip)
    time.sleep(2)
    cmd = "ping "+ip+" -n 10"
    if app=='video' or app=='download':
        cmd+=" -l 800"
    tmpres = os.popen(cmd).readlines()
    #print(len(tmpres))
    loss = ''
    minv = ''
    maxv = ''
    aver = ''
    for t in tmpres:
        #print(t)
        if t.find('Lost')>=0:
            loss = t.split('Lost')[1].split('(')[0].replace('=','').strip()
        if t.find('Minimum')>=0:    
            minv = t.split(',')[0].split('=')[1].replace('ms','').strip()
            maxv = t.split(',')[1].split('=')[1].replace('ms','').strip()
            aver = t.split(',')[2].split('=')[1].replace('ms','').strip()
    
    #print(getsoe(app,minv,maxv,aver,loss))
    if minv=='' or maxv=='' or aver=='':
        minv='999'
        maxv='999'
        aver='999'
    if app=='video':
        print(app,ip,minv,maxv,aver,loss,getsoe(app,minv,maxv,aver,loss))    
    appsoe[app].append(getsoe(app,minv,maxv,aver,loss))
    appip[app].append(ip)
print('')    

fd = open('qossoe.txt','w')
for x in apptype:    
    print(x,round(sum(appsoe[x])/len(appsoe[x]),2))
    fd.write(x+'#'+str(round(sum(appsoe[x])/len(appsoe[x]),2))+'\n')
fd.close()    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值