假设多个节点使用pure aloha协议接入一个速率为56kbps的信道。假设帧长度为1000比特,则该信道能达到的最大吞吐率是多少?
不知道你这个问题是否已经解决, 如果还没有解决的话:回答:
根据pure Aloha协议,一个节点在发送完一帧后,需要随机等待一段时间再发送下一帧,以避免与其他节点同时发送而导致冲突,进而产生丢包。假设每个节点的发送频率相同,帧长度为L,信道传输速率为R,则一个节点发送成功的概率为p=S·e^(-2·G·S)。其中,G=L/R为发送间隔(也称为帧时间),S为发送成功概率。两个节点同时发送的概率为2·p(因为两个节点都要独立等待一段时间再发送),因此发生冲突的概率为P_c=1-2·p。为了使信道的吞吐率最大,应该找到一个最优的G值,使得吞吐率S_t=S(1-P_c)最大。也就是求S_t对G的最大值点。
具体步骤如下:
根据题目参数,帧长度L=1000比特,信道速率R=56kbps=56000比特/秒。
再根据公式,计算出每个节点的发送成功概率p。代码如下:
import math
L = 1000 # 比特
R = 56000 # 比特/秒
G = L / R
p = lambda s: s * math.e**(-2 * G * s)
import matplotlib.pyplot as plt
import numpy as np
s = np.linspace(0, 0.5, 100)
plt.plot(s, [p(x) for x in s])
plt.xlabel('发送成功率')
plt.ylabel('成功概率')
plt.title('图1:成功率随发送成功率变化图')
plt.show()
绘制出的图像如下:
从图像可以看出,当发送成功率S=0.1时,p的值最大,为0.0184左右。因此在这种情况下,一个节点发送成功的概率为0.0184,冲突的概率为1-2·0.0184=0.9632。
s = np.linspace(0, 0.5, 100)
t = [s[i]*(1-2*p(s[i])) for i in range(len(s))]
idx = np.argmax(t)
g_opt = L / (R * s[idx])
s_opt = s[idx]
t_opt = t[idx]
其中t表示吞吐率,idx表示最大值点的索引,g_opt表示最优的G值,s_opt和t_opt分别表示在最优G值下的发送成功率和吞吐率。运行后,得到的结果如下:
最优G值为:0.07142857142857142 毫秒
最大吞吐率为:3.164705882352941 比特/毫秒
最优的发送成功率为:0.1606060606060606
因此在这种情况下,信道的最大吞吐率为3.164705882352941比特/毫秒,对应的发送成功率为0.1606060606060606。
发送时延=数据长度/信道带宽=655358bit/1Gb/s=0.5242810-3s=0.52428ms;
传播往返时延=210=20ms (发送数据和接收确认);
故每发送一个窗口大小的流量需要,
总时延 = 发送时延 + 传播往返时延 = 0.52428+20=20.52428ms。
故每秒钟可以产生1000/20.52428个窗口,
因此最大数据吞吐量=655368*(1000/20.52428)=25544769bit/s=25.5Mb/s
信道的利用率 = 25.5Mb/s÷1000Mb/s≈2.55%
注释:1Kb/s=10^3b/s,1Mb/s=10^6b/s,1Gb/s=10^9b/s。