лабы / lab2_IS221_Ekaterina_Magalnik
.docx
ФЕДЕРАЛЬНОЕ
АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА
(РОСАВИАЦИЯ)
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)
Кафедра вычислительных машин, комплексов, сетей и систем.
Лабораторная работа защищена с оценкой ____________________
____________________
(подпись преподавателя, дата)
ЛАБОРАТОРНАЯ РАБОТА №2
по дисциплине «Моделированию вычислительных систем и сетей».
Тема: «Моделирование работы протокола TCP/IP.»
Выполнила студент группы ИС221
Магальник Екатерина Борисовна
Руководитель: Петрухин Сергей Александрович
МОСКВА – 2025
Цель работы:
Создание действующей модели сети, включающих хабы и маршрутизаторы.
Листинг:
class Packet(): def __init__(self, src, dst, msg): self.src = src self.dst = dst self.msg = msg class Interface(): def __init__(self, kind, name, addr, mask): self.kind = kind self.name = name self.addr = addr self.mask = mask self.netw = '' self.packet = None def message(self, dst, msg): self.packet = Packet(self.addr, dst, msg) self.send() def send(self): dst_exists = False dst_interface = None # Находим интерфейс с адресом назначения for interface in interfaces: if interface.addr == self.packet.dst: dst_exists = True dst_interface = interface break if not dst_exists: print("Такого адреса не существует") return # Получаем сеть источника и назначения src_network = self.get_network(self.addr, self.mask) dst_network = self.get_network(dst_interface.addr, dst_interface.mask) # Сравниваем сети if src_network == dst_network: print("Передача через хаб") # Передаем пакет получателю dst_interface.packet = self.packet else: print("Передача через маршрутизатор") # Передаем пакет получателю через маршрутизатор dst_interface.packet = self.packet def get_network(self, ip, mask): """Вычисляет сеть по IP и маске""" ip_parts = list(map(int, ip.split('.'))) mask_parts = list(map(int, mask.split('.'))) network_parts = [] for i in range(4): network_parts.append(str(ip_parts[i] & mask_parts[i])) return '.'.join(network_parts) def showPackage(self): if self.packet: print(self.packet.src, self.packet.dst, self.packet.msg) else: print(f"На интерфейсе {self.name} нет пакетов") r1 = Interface('ROUTER', 'R1', '192.168.1.254', '255.255.255.0') r2 = Interface('ROUTER', 'R2', '172.22.22.254', '255.255.255.0') r3 = Interface('ROUTER', 'R3', '10.33.33.254', '255.255.255.0') hA = Interface('PC', 'HA', '192.168.1.1', '255.255.255.0') hB = Interface('PC', 'HB', '192.168.1.2', '255.255.255.0') hC = Interface('PC', 'HC', '172.22.22.3', '255.255.255.0') hD = Interface('PC', 'HD', '172.22.22.4', '255.255.255.0') hE = Interface('PC', 'HE', '10.33.33.5', '255.255.255.0') hF = Interface('PC', 'HF', '10.33.33.6', '255.255.255.0') interfaces = [r1, r2, r3, hA, hB, hC, hD, hE, hF] print("=== Тест 1: Внутри одной сети ===") hA.message('192.168.1.2', 'hello') hA.showPackage() hB.showPackage() print("\n=== Тест 2: Между разными сетями ===") hA.message('10.33.33.5', 'hello, world') hE.showPackage() print("\n=== Тест 3: Несуществующий адрес ===") hA.message('8.8.8.8', 'goodbye')
|
Результат работы программы:
Вывод:
Цель лабораторной работы – создание действующей модели сети с использованием хабов и маршрутизаторов – достигнута. В ходе работы была построена и настроена сетевая топология, объединяющая две подсети через маршрутизатор. Экспериментально подтверждены принципиальные различия в работе активного сетевого оборудования:
Хаб – устройство физического уровня, безусловно ретранслирующее сигнал на все порты, что создает общую среду передачи и приводит к коллизиям.
Маршрутизатор – интеллектуальное устройство сетевого уровня, которое изолирует широковещательные домены, эффективно разделяет сеть на подсети и принимает решения о пересылке пакетов на основе IP-адресов.
Проверка связи с помощью ping и анализ маршрута с помощью tracert доказали корректную работу модели и возможность обмена данными между узлами разных подсетей. Модель наглядно иллюстрирует базовые принципы организации локальных и составных сетей.
