ilyachalov (ilyachalov) wrote,
ilyachalov
ilyachalov

Categories:

Программа, моделирующая сетевую архитектуру (разбор задания)

Задание из книги Таненбаума про компьютерные сети к главе 1 «Введение», цитата:

37. Напишите программу, которая осуществляет поток сообщений от верхнего слоя до нижнего слоя модели протокола с 7 уровнями. Ваша программа должна включать отдельную функцию протокола для каждого уровня. Заголовки протокола — последовательность до 64 символов. У каждой функции есть два параметра: сообщение, пришедшее из протокола более высокого уровня (буфер случайной работы), и размер сообщения. Эта функция присоединяет свой заголовок перед сообщением, печатает новое сообщение на стандартном выводе и затем вызывает функцию протокола нижнего уровня. Ввод программы — сообщение приложения (последовательность 80 символов или меньше).


Перевод ужасный. Я сначала ничего не понял. (Выделение цветом — моё.)

Оригинал:

37. Write a program that implements message flow from the top layer to the bottom layer of the 7-layer protocol model. Your program should include a separate protocol function for each layer. Protocol headers are sequence up to 64 characters. Each protocol function has two parameters: a message passed from the higher layer protocol (a char buffer) and the size of the message. This function attaches its header in front of the message, prints the new message on the standard output, and then invokes the protocol function of the lower-layer protocol. Program input is an application message (a sequence of 80 characters or less).


Мой вариант перевода:

37. Напишите программу, которая осуществляет прохождение сообщения от верхнего уровня к нижнему уровню модели сетевой архитектуры с 7-ю уровнями и протоколами. Ваша программа должна включать отдельную функцию протокола для каждого уровня. Заголовки, добавляемые по протоколам — последовательность до 64 символов. У каждой функции есть два параметра: сообщение (символьный массив), пришедшее от протокола уровня, лежащего выше, и размер сообщения. Эта функция присоединяет свой заголовок перед сообщением, печатает новое сообщение в стандартный вывод и затем вызывает функцию протокола уровня, лежащего ниже. На вход программы подаётся сообщение прикладного уровня (последовательность из 80 символов или меньше).


Во фразе «message flow» речь идет про одно сообщение, а не про несколько. На вход программы подается сообщение и мы должны увидеть, как оно изменится после прохождения каждого уровня нашей модели.

Фраза «the 7-layer protocol model» говорит о том, что, во-первых, наша программа будет всего лишь моделью и в действительности не будет работать с сетью. Программа должна быть написана лишь в иллюстративных целях. Во-вторых, часть этой фразы «7-layer protocol» отсылает к подразделу 1.3.1. «Иерархия протоколов» книги Таненбаума. Здесь речь идет не о «протоколе с 7 уровнями», как можно подумать и как подумал переводчик, а о наборе из семи уровней и соответствующих этим уровням семи протоколов (одному уровню соответствует один протокол). Такой набор (необязательно состоящий именно из 7 уровней и протоколов, это число может быть больше или меньше) называют «сетевой архитектурой» или «архитектурой сети».

Слово «layer» переводчик почему-то в одном предложении переводит как «слой», а в другом предложении — как «уровень». В принципе, оба варианта применимы, только нужно выбрать один из них, чтобы читатель не путался.

Фраза «protocol header», думаю, не должна переводиться как «заголовок протокола», потому что этот заголовок добавляется не к протоколу, а к сообщению (пакету). Здесь имеется в виду, что заголовок описан в протоколе (или регламентирован протоколом).

У нас есть стопка (стек) уровней и соответствующих этим уровням протоколов. Над самым верхним уровнем нет других уровней, но под ним есть шесть уровней. Над самым нижним есть шесть уровней, но под ним нет уровней. У каждого из средних в стопке (стеке) уровней сверху и снизу есть один или более уровней. В этом контексте перевод фразы «higher layer» как «более высокий уровень» некорректен, потому что у средних в стопке (стеке) уровней выше может находиться больше одного уровня, а в задании в данном случае подразумевается только один уровень — самый близкий из лежащих выше, то есть примыкающий сверху к данному уровню. Та же история с переводом фразы «lower-layer» — имеется в виду не любой из лежащих ниже уровней, а только один конкретный, самый близкий из лежащих ниже, то есть примыкающий снизу к данному уровню.

С переводом фразы «char buffer» как «буфер случайной работы» вышло забавно. Вообще в английском для слова «буква» есть слова «letter» и «character». Создатели языка программирования Си взяли слово «character», но оно им показалось слишком длинным, поэтому его сократили до «char». Но тут получилась путаница, потому что в английском языке уже есть слово «char» и оно никогда не использовалось ранее в значении «буква» или «символ». У слова «char» есть множество значений и одно из них действительно — «подённая работа» в смысле повседневная, тяжелая, низкооплачиваемая (случайная) работа. Однако, в контексте компьютерных сетей в данном случае фраза «char buffer», очевидно, переводится как «символьный буфер» или «символьный массив».

Под печатью сообщения в стандартный вывод, очевидно, подразумевается стандартный поток вывода, то есть наша программа будет выводить текст на дисплей компьютера. Тут подробнее:
https://ru.wikipedia.org/wiki/Стандартные_потоки
https://en.wikipedia.org/wiki/Standard_streams

Фраза «program input» подразумевает, что наша программа будет запрашивать текст сообщения у пользователя, поэтому переводить эту фразу следует не «ввод программы», а, к примеру, «на вход программы подаётся».

Верхний уровень любой сетевой модели (хоть OSI, хоть TCP/IP или какой-то другой) обычно называют «прикладным уровнем» (по-английски «application layer»), потому что на этом уровне действуют приложения пользователя, которые при необходимости работы с сетью обращаются к сетевому программному обеспечению. К примеру, когда пользователь работает в браузере, браузер можно считать пользовательским приложением, которое с помощью протокола прикладного уровня (HTTP) работает с остальными уровнями сетевой архитектуры. Исходя из этого, фраза «application message», думаю, означает, что это сообщение, которое изначально будет запрашивать наша программа на прикладном уровне (именно поэтому здесь присутствует прилагательное «application»). Первая функция (реализующая протокол верхнего уровня) и будет запрашивать у пользователя это сообщение. Поэтому фразу «application message» переводим как «сообщение прикладного уровня».

Продолжение (реализация программы): тут.
Tags: Английский язык, Образование, Программирование
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your IP address will be recorded 

  • 0 comments