Вопросы и задачи
1. В нашем примере транспортных примитивов, приведенных на илл. 6.2, LISTEN является блокирующим вызовом. Обязательно ли это? Если нет, объясните, как следует пользоваться неблокирующим примитивом. Какое преимущество это даст по сравнению с представленной нами схемой?
2. Приложение для общения в чате, использующее протокол TCP, многократно вызывает функцию получения данных receive() и выводит полученные данные как новое сообщение. К какой проблеме может привести такой подход?
3. В модели, лежащей в основе диаграммы состояний на илл. 6.4, предполагается, что пакеты могут теряться на сетевом уровне и поэтому должны подтверждаться индивидуально. Допустим, сетевой уровень обеспечивает 100 %-ную надежность доставки и никогда не теряет пакеты. Нужны ли какие-нибудь изменения в диаграмме состояний на илл. 6.4, и если да, то какие?
4. В обеих частях илл. 6.6 значение SERVER_PORT должно быть одинаковым у клиента и у сервера. Почему это так важно?
5. Предположим, что используется управляемая таймером схема генерирования начальных порядковых номеров с 15-разрядным счетчиком тактовых импульсов. Таймер срабатывает один раз в 100 мс, а максимальное время жизни пакета равно 60 с. Как часто должна производиться ресинхронизация:
а) в наихудшем случае?
б) если на данные тратится 240 порядковых номеров в минуту?
6. Почему максимальное время жизни пакета T должно быть достаточно большим, чтобы гарантировать, что не только пакет, но и его подтверждение исчезли?
7. Представьте протокол транспортного уровня, ориентированный на установление соединения, который выбирает порядковые номера для пакетов на основе времени суток. Таймер использует 10-битный счетчик и срабатывает с интервалом в 125 мс. Максимальное время жизни пакета — 64 с. Если отправитель передает по 4 пакета/с, как долго соединение будет работать без захода в запретную зону?
8. Объясните, в чем состоит разница между использованием протокола раздвижного окна на канальном уровне и его использованием на транспортном уровне с точки зрения тайм-аутов протокола.
9. Рассмотрим проблему восстановления после сбоев хостов (илл. 6.18). Если бы интервал между записью и отправкой подтверждения (или наоборот) можно было сделать относительно небольшим, какими были бы две лучшие стратегии отправителя и получателя, минимизирующие риск ошибки протокола?
10. В сеть на илл. 6.20 добавляется новый поток E, который идет через маршрутизаторы R1, R2 и R6. Как изменится распределение пропускной способности по максиминному критерию для пяти потоков?
11. Допустим, потоки на илл. 6.20 реорганизованы так, что поток A проходит через маршрутизаторы R1, R2, R3, B — через R1, R2, R5, R6, C — через R4, R2, R3, а D — через R4, R2, R3. Как при этом будет выглядеть распределение пропускной способности по максиминному критерию?
12. Обсудите преимущества и недостатки схемы кредитного протокола по сравнению с протоколами раздвижного окна.
13. Существуют и другие стратегии, обеспечивающие равнодоступность при контроле перегрузки: аддитивное увеличение, аддитивное уменьшение (Additive Increase Additive Decrease, AIAD); мультипликативное увеличение, аддитивное уменьшение (Multiplicative Increase Additive Decrease, MIAD); мультипликативное увеличение, мультипликативное уменьшение (Multiplicative Increase Multiplicative Decrease, MIMD). Что вы можете сказать об их сходимости и стабильности?
14. Имеется протокол транспортного уровня, который использует правило AISRD (Additive Increase Square Root Decrease — аддитивное увеличение, уменьшение по закону квадратного корня). Сходится ли эта версия протокола к справедливому распределению пропускной способности?
15. Два хоста одновременно передают данные через сеть с пропускной способностью 1 Мбит/с. Хост A использует UDP и передает 100-байтный пакет за 1 мс. Хост B генерирует данные со скоростью 600 Кбит/с и использует TCP. Какой хост получит более высокую пропускную способность?
16. Зачем нужен протокол UDP? Разве не достаточно было бы просто позволить пользовательским процессам отправлять необработанные IP-пакеты?
17. Рассмотрим простой протокол прикладного уровня на основе UDP, позволяющий клиенту запрашивать файл с удаленного сервера, расположенного по общеизвестному адресу. Клиент отправляет запрос с именем файла, а сервер отвечает последовательностью информационных пакетов с разными частями запрошенного файла. Для обеспечения надежности и доставки частей в правильном порядке клиент и сервер используют протокол с ожиданием. Какие сложности могут возникнуть с таким протоколом, кроме очевидных проблем с производительностью? Учитывайте вероятность сбоя процессов.
18. Клиент отправляет 128-байтный запрос на сервер, удаленный от него на 100 км, по оптоволокну со скоростью 1 Гбит/с. Какова эффективность линии во время выполнения удаленного вызова процедуры?
19. Вновь рассмотрите ситуацию, описанную в предыдущем вопросе. Вычислите минимально возможное время ответа для данной линии со скоростью 1 Гбит/с и для линии со скоростью 1 Мбит/с. Какой вывод можно сделать, исходя из полученных значений?
20. Как в UDP, так и в TCP номера портов используются для идентификации принимающей подсистемы при доставке сообщения. Назовите две причины того, почему для этих протоколов были изобретены новые абстрактные идентификаторы (номера портов) и не использовались идентификаторы процессов, уже существовавшие на момент появления данных протоколов.
21. Почему протокол RTP обычно реализуется поверх UDP, а не TCP? При каких условиях приложение может использовать RTP на основе TCP?
22. Рассмотрим две сети, N1 и N2, с одинаковой средней задержкой при передаче пакетов от источника A к получателю D. В N1 задержка распределена равномерно с максимальным значением 10 с, а в N2 99 % пакетов имеют задержку менее 1 с, но максимальная задержка может быть сколь угодно большой. Подумайте, как в таких ситуациях можно использовать RTP, если вы планируете передавать аудио-/видеопоток в режиме реального времени.
23. Каков суммарный размер минимального MTU протокола TCP, включая накладные расходы TCP и IP, но не учитывая накладные расходы канального уровня?
24. Фрагментация и дефрагментация дейтаграмм выполняется протоколом IP и невидима для TCP. Означает ли это, что TCP не должен беспокоиться о данных, приходящих в неверном порядке?
25. RTP используется для передачи аудио с таким же качеством звука, как на компакт-диске, что соответствует паре 16-битных сэмплов на частоте 44 100 Гц, по одному сэмплу на каждый канал стерео. Сколько пакетов в секунду должен уметь передавать RTP?
26. Процессу хоста 1 был назначен порт p, а процессу хоста 2 — порт q. Могут ли несколько соединений одновременно существовать между этими портами?
27. На илл. 6.36 мы видели, что в дополнение к 32-разрядному полю Acknowledgement number в четвертом слове имеется бит ACK. Приносит ли он какую-либо пользу? Ответ поясните.
28. Имеется TCP-соединение, которое передает данные с такой высокой скоростью, что начинает повторно использовать порядковые номера в течение максимального времени жизни сегмента. Можно ли предотвратить это, увеличив размер сегмента? Объясните почему.
29. Опишите два способа, с помощью которых можно достичь состояния SYN RCVD (илл. 6.39).
30. Какой возможный недостаток несет в себе использование алгоритма Нейгла в сильно загруженной сети?
31. Вы играете в онлайн-игру по сети с высокой задержкой. Игра требует, чтобы вы быстро нажимали на объекты на экране. В то же время результаты ваших действий игра отображает в режиме слайд-шоу. Может ли определенный параметр протокола TCP привести к такому результату? Какой еще причиной (связанной с сетью) это может быть вызвано?
32. Рассмотрим эффект использования алгоритма медленного старта на линии с RTT равным 10 мс, без перегрузок. Размер окна получателя 24 Кбайт, а максимальный размер сегмента равен 2 Кбайт. Через какое время может быть передано полное окно?
33. Предположим, окно перегрузки протокола TCP установлено на 18 Кбайт, когда происходит тайм-аут. Каким будет размер окна, если четыре последующие передачи будут успешными? Предполагается, что максимальный размер равен 1 Кбайт.
34. Имеется соединение, использующее протокол TCP Reno. Исходный размер окна перегрузки — 1 Кбайт, исходный порог — 64 Кбайт. Допустим, аддитивное увеличение производится с шагом в 1 Кбайт. Каким будет размер окна перегрузки на восьмом круге передачи, если первым является нулевой круг?
35. Текущее значение RTT протокола TCP равно 30 мс, а следующие подтверждения приходят через 26, 32 и 24 мс. Каково будет новое значение RTT? Используйте α = 0,9.
36. TCP-устройство передает окна по 65 535 байт по гигабитному каналу, в котором время прохождения сигнала в один конец равно 10 мс. Какова максимальная достижимая пропускная способность канала? Чему равна эффективность использования линии?
37. Какова максимальная скорость, с которой хост может отправлять в линию TCP-пакеты, содержащие 1500 байт пользовательских данных, если максимальное время жизни пакета в сети равно 120 с? Требуется, чтобы порядковые номера не зацикливались. При расчете учитывайте накладные расходы на TCP, IP и Ethernet. Предполагается, что фреймы Ethernet могут передаваться непрерывно.
38. Чтобы устранить ограничения в IPv4, IETF приложила немало усилий и разработала IPv6, однако эта версия до сих пор внедряется неохотно. При этом для решения проблем, связанных с ограничениями в TCP, настолько серьезных усилий не требуется. Объясните почему.
39. Чему равна максимальная скорость передачи данных для каждого соединения, если максимальный размер сегмента равен 128 байт, максимальное время жизни сегмента равно 30 с, при этом используются 8-разрядные порядковые номера сегментов?
40. Имеется TCP-соединение, в котором максимальное время жизни сегмента составляет 128 с. Предполагается, что параметр временной метки не используется. Что в таком случае можно сказать о максимальной скорости передачи данных?
41. Рассмотрим TCP-соединение между отправителем и получателем с такими параметрами: отправителю нужно передать получателю ровно 30 сегментов; порог медленного старта ssthresh — 4; исходный размер окна перегрузки cwnd (на нулевом круге передачи) — 1; RTT для пути между отправителем и получателем — 500 мс; максимальный размер сегмента — 1000 байт; пропускная способность узких мест — 64 Кбит/с. Представьте, что:
а) отправитель получает три дубликата подтверждения для 14-го сегмента и успешно повторяет его передачу на следующем круге;
б) в ходе первой попытки сегменты 25–30 теряются в одном сеансе передачи;
в) не происходит никаких других потерь.
Чему равна средняя пропускная способность данного соединения на этапе предотвращения перегрузки (в килобитах в секунду)? Чему равна средняя пропускная способность (в килобитах) всего соединения? Чему равен средний коэффициент потерь в рамках всей передачи? На каких кругах передачи заполняется буфер узкого места? На каком круге передачи в этом буфере находится больше всего пакетов? Чему равна максимальная дополнительная задержка, которая добавляется к сквозной задержке из-за такой буферизации (в миллисекундах)?
42. Предположим, вы измеряете время, необходимое для получения сегмента. Когда возникает прерывание, вы считываете показания системного таймера в миллисекундах. После полной обработки сегмента вы снова проверяете его показания. В результате миллиона измерений вы получаете значения 0 мс 270 000 раз и 1 мс 730 000 раз. Какой вывод можно сделать на основании этих результатов?
43. CPU выполняет 1000 MIPS. Данные могут копироваться 64-разрядными словами. На копирование каждого слова требуется 10 инструкций. Может ли такая система управлять гигабитной линией, если каждый приходящий пакет должен быть скопирован четыре раза? Для простоты предположим, что все инструкции, даже обращения к памяти, выполняются с максимальной скоростью — 1000 MIPS.
44. Для решения проблемы повторного использования старых порядковых номеров пакетов (в то время как старые пакеты еще существуют) можно использовать 64-разрядные порядковые номера. Однако теоретически оптоволоконный кабель может обладать пропускной способностью до 75 Тбит/с. Какое максимальное время жизни пакетов следует выбрать, чтобы гарантировать отсутствие в сетях будущего пакетов с одинаковыми номерами при скорости линий 75 Тбит/с и 64-разрядных порядковых номерах? Предполагается, что порядковый номер присваивается каждому байту, как в TCP.
45. Имеется компьютер, работающий со скоростью 1000 MIPS (1 инструкция за 1 нс). Он должен выполнить 50 инструкций для обработки заголовка пакетов, независимо от объема пользовательских данных, и по 10 инструкций на каждые 8 байт этих данных. Сколько пакетов в секунду может обработать компьютер, если размер пакетов составляет: а) 128 байт и б) 1024 байта? Чему в обоих случаях равна полезная пропускная способность в байтах в секунду?
46. В гигабитной линии протяженностью более 4000 км ограничивающим фактором является не пропускная способность, а время задержки. Рассмотрим MAN со средней удаленностью отправителя от получателя 20 км. При какой скорости передачи данных RTT из-за конечности скорости света будет равно времени передачи одного пакета размером 1 Кбайт?
47. Рассчитайте произведение пропускной способности на задержку в следующих сетях:
а) T1 (1,5 Мбит/с);
б) Ethernet (10 Мбит/с);
в) Т3 (45 Мбит/с);
г) STS-3 (155 Мбит/с).
Предполагается, что RTT = 100 мс. Не забудьте, что в TCP-заголовке на размер окна отводится 16-разрядное поле. Как этот факт отразится на результатах вычислений?
48. Чему равно произведение пропускной способности на задержку для канала геостационарной спутниковой связи с пропускной способностью 50 Мбит/с? Если все пакеты имеют размер 1500 байт (включая накладные расходы), какого размера должно быть окно в пакетах?
49. По каким причинам тест пропускной способности сети доступа, выполняемый на стороне клиента, может не отражать реальную скорость канала доступа?
50. Рассмотрите TCP-заголовок (илл. 6.36). Каждый отправляемый TCP-сегмент включает четыре неиспользуемых бита. Как скажется на производительности удаление этих битов со смещением всех последующих полей на четыре бита влево?
51. Файловый сервер, код которого представлен на илл. 6.6, далек от совершенства. Неплохо было бы внести в него некоторые улучшения. Проделайте следующие изменения:
а) пусть у клиента появится третий аргумент, указывающий байтовый диапазон;
б) добавьте флаг –w в программу клиента, который позволил бы записывать файл на сервер.
52. Почти все сетевые протоколы должны уметь работать с сообщениями. Если вы помните, протоколы передают их путем добавления/отделения заголовков. Некоторые протоколы могут разбивать сообщение на несколько фрагментов, а потом восстанавливать его. Попробуйте разработать библиотеку управления сообщениями с поддержкой создания нового сообщения, добавления/отделения заголовка, разбиения одного сообщения на два, объединения двух сообщений в одно и сохранения копии сообщения. Минимизируйте, насколько это возможно, копирование данных из одного буфера в другой. Важно, чтобы эти операции работали только с указателями, не затрагивая данные в сообщении.
53. Разработайте и реализуйте систему сетевого общения (чат) для нескольких групп пользователей. Координатор чата располагается по общеизвестному сетевому адресу, использует для связи с клиентами UDP, настраивает чат-серверы перед каждой сессией общения и поддерживает каталог чат-сессий. На каждую сессию выделяется один обслуживающий сервер. Для связи с клиентами сервер использует TCP. Клиентская программа позволяет пользователям начинать разговор, присоединяться к уже ведущейся дискуссии и покидать сессию. Разработайте и реализуйте код координатора, сервера и клиента.