Скачиваний:
0
Добавлен:
23.04.2026
Размер:
583.77 Кб
Скачать

Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации

Федеральное государственное бюджетное образовательное учреждение Высшего образования «Санкт-Петербургский государственный университет телекоммуникаций им. Проф. М. А. Бонч-Бруевича» (СПбГУТ)

Факультет Информационных технологий и программной инженерии

Кафедра Программной инженерии

Практическая работа 1

По дисциплине: Разработка имитационных моделей инфокоммуникационных сетей и систем

Выполнил студент:

Яковлев М. А.

ИКПИ-32

Приняла работу:

Дмитриева В. В.

Дата выполнения: «02» марта 2026 г.

Санкт-Петербург

2026 г.

Постановка задачи

Изучить, как работает протокол np-CSMA (непостоянный доступ с контролем несущей), и с помощью компьютерной модели посмотреть, как меняется его эффективность при разной загрузке сети.

Ход работы

В протоколе np-CSMA станция перед передачей пакета анализирует состояние канала. Если канал свободен, пакет отправляется немедленно. Если канал занят, станция не продолжает опрашивать его непрерывно, а ждёт случайный интервал времени, после чего снова проверяет канал и повторяет алгоритм.

Аналитические графики

После написания программы было проведено имитационное моделирование и получены следующие графики.

Из первого графика (рис. 1) видно, что при малых значениях нагрузки G пропускная способность S растёт, так как коллизий мало. При увеличении G рост замедляется, а дальнейший рост G приводит к спаду S, так как возрастает количество коллизий.

Рисунок 1 - График производительности

На втором графике (рис. 2) видно, как меняется задержка в зависимости от нагрузки G. Задержка минимальна, когда нагрузка маленькая, но при увеличении нагрузки задержка начинает расти.

2

Рисунок 2 - График задержки в зависимости от нагрузки

Текст программы на Python

import random import math

import matplotlib.pyplot as plt standby =0

transmit=1 collision=2

total=1000 brate=0.25e6 plen=500 time=plen/brate dtime=0.1 delay=time*dtime mnum=100

g = [0.1, 0.3, 0.5, 0.7, 0.9, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] traffic_list=[]

s_model_list=[] delay_list=[] s_theory_list=[]

for G in g:

tint = -time/math.log(1-G/mnum) rint=tint

spnum=0 splen=0 tplen=0 wtime=0.0

mgtime=[0.0]*mnum for i in range(mnum): r=random.random()

mgtime[i]=-tint*math.log(1-r) mtime=mgtime[:] mstate=[standby]*mnum

3

mplen=[plen]*mnum mstime=[0.0]*mnum now_time=min(mtime)

while spnum<total: now_time=min(mtime) indices=[]

for i in range(mnum):

if mtime[i] == now_time and mstate[i] == transmit: indices.append(i)

for i in indices: spnum=spnum+1 splen=splen+mplen[i]

wtime=wtime+(now_time-mgtime[i]) mstate[i]=standby

r =random.random() new_time=now_time+(-tint*math.log(1-r)) mgtime[i]=new_time

mtime[i] =mgtime[i]

#конец коллизии indices=[]

for i in range(mnum):

if mtime[i] == now_time and mstate[i] == collision: indices.append(i)

for i in indices: mstate[i] = standby r =random.random()

new_time=now_time+(-rint*math.log(1-r)) mtime[i]=new_time

#попытка передачи indices = []

for i in range(mnum):

if mtime[i] == now_time and mstate[i] == standby: indices.append(i)

if indices:

for i in indices:

tplen = tplen+mplen[i] for i in indices:

busy = False

for j in range(mnum): if j == i:

continue

if mstate[j] == transmit or mstate[j] == collision:

if mstime[j]+delay<=now_time<mstime[j]+delay+time: busy = True

break if not busy:

mstate[i] =transmit mstime[i] =now_time mtime[i] =now_time + time

4

else:

r = random.random()

mtime[i] =now_time+(-rint*math.log(1-r))

#обнаружение коллизий transmitting =[]

for i in range(mnum):

if mstate[i] == transmit or mstate[i] == collision: transmitting.append(i)

if len(transmitting)>1: for i in transmitting:

mstate[i] = collision

traffic=tplen/brate/now_time s_model=splen/brate/now_time delay_val=wtime/total*brate/plen a=dtime exp_a=math.exp(-a*traffic)

s_theory=traffic*exp_a/(traffic*(1+2*a)+exp_a) traffic_list.append(traffic) s_model_list.append(s_model) delay_list.append(delay_val) s_theory_list.append(s_theory)

print(G, traffic, s_model, delay_val, s_theory)

#Графики plt.figure(1)

plt.plot(g, s_model_list, label='моделирование') plt.plot(g, s_theory_list, label='теория') plt.xlabel('G')

plt.ylabel('S') plt.legend()

plt.title('Пропускная способность') plt.figure(2)

plt.plot(g,delay_list) plt.xlabel('G') plt.ylabel('Задержка') plt.title('Средняя задержка') plt.show()

Вывод

В ходе выполнения лабораторной работы была разработана и исследована дискретно-событийная имитационная модель протокола np-CSMA.

Контрольные вопросы

1. Сформулируйте особенности работы протокола np-CSMA.

Особенностью протокола ненастойчивого np-CSMA является то, что станция, имеющая пакет для передачи, сначала прослушивает среду. Если среда занята (Busy), станция не

5

продолжает попытки передать немедленно, а ждет в течение случайного интервала времени, после чего снова прослушивает среду. Если среда свободна (Idle), станция начинает передачу. Такой подход снижает вероятность коллизий.

2. Приведите и поясните временную диаграмму функционирования протокола np-CSMA.

На диаграмме на оси нормированного времени обозначены две станции для передачи сообщений. Обозначен цикл, который состоит из последовательности состояний Busy (занято) и следующего за ним Idle (свободно). Busy состоит из B = 1+a+Y, где 1 – нормированная длительность одного кадра, a – нормированная задержка распространения сигнала, Y – это время от начала передачи (t) до момента последнего прибытия пакета в интервале t, t + a, которое вызовет коллизию.

3. Как нормированная продолжительность состояния BUSY, IDLE и нормированная продолжительность состояния передачи кадров без коллизий связаны с пропускной способностью протокола np-CSMA?

Пропускная способность S это доля времени, когда канал реально передает полезные данные без коллизий. Она равна полезному времени U, деленному на общее время занятое B и свободное I.

4. Как нормированная нагрузка связана с нормированной продолжительностью состояния передачи кадров без коллизий в протоколе np-CSMA?

Нормированная нагрузка связана с нормированной продолжительностью состояния передачи кадров без коллизий следующей формулой:

5. Как нормированная продолжительность состояния IDLE связана с нормированной нагрузкой в протоколе np-CSMA?

Нормированная продолжительность состояния Idle I, когда кадры не генерируются, может быть представлена:

6

6. Чем определяется вероятностный характер параметра нормированной продолжительности состояния BUSY в протоколе np-CSMA?

Вероятностный характер состояния Busy определяется случайным характером момента генерации пакетов станциями.

7