увеличивается примерно до 200 байт. С битовым заполнением увеличение составляет около 12,5 %, так как к каждому байту добавляется 1 бит.
Рис. 3.5. Битовое заполнение:
Последний метод формирования кадров напрямую связан с особенностями физического уровня. В главе 2 мы узнали, что при кодировании битов в виде сигналов для облегчения работы получающей стороны добавляются избыточные данные. Это означает, что в самих данных некоторые сигналы не появляются. Например, в линии 4B/5B четыре бита данных сопоставляются с пятью сигнальными битами, для того чтобы гарантировать удовлетворительную передачу битов. Таким образом, 16 из 32 возможных сигналов не используются. Некоторые из зарезервированных сигналов можно применять для обозначения начальной и конечной границы кадров. Фактически для разграничения кадров можно применять «запрещенные сигналы». Прелесть этого метода в том, что использование зарезервированных сигналов делает поиск начальной и конечной границы кадра чрезвычайно простым, отменяя необходимость заполнять данные дополнительными байтами или битами.
Во многих протоколах канального уровня для повышения безопасности используются различные сочетания описанных методов. В протоколах Ethernet и 802.11 кадр часто начинается с четко определенного шаблона, называемого преамбулой (preamble). Этот шаблон может быть довольно длинным (для 802.11 обычно 72 бита), что упрощает адресату задачу приема пакета. Вслед за преамбулой в заголовке передается поле длины (счетчик битов). Он нужен для обнаружения конца кадра.
3.1.3. Обработка ошибок
Решив проблему маркировки начала и конца кадра, мы сталкиваемся с новой проблемой: как гарантировать доставку сетевому уровню принимающей машины всех кадров и при этом расположить их в правильном порядке. Предположим, что у адресата есть возможность понять, содержит полученный кадр правильную или ошибочную информацию (подробнее о кодах, позволяющих распознать и исправить ошибки передачи, мы поговорим чуть далее). В линиях, где подтверждение передачи не требуется, отправитель просто посылает кадры, не заботясь о том, дошли ли они до адресата. Но для ориентированного на соединение сервиса с подтверждениями этого недостаточно.
Обычно для гарантирования надежной доставки отправителю посылается информация о том, что происходит на другом конце линии. Протокол требует от получателя посылать обратно специальные управляющие кадры, содержащие позитивные или негативные сообщения о полученных кадрах. Получив позитивное сообщение, отправитель узнает, что посланный им кадр успешно получен на том конце линии. Негативное сообщение, напротив, означает, что с кадром что-то случилось и его нужно передать снова.
Кроме того, посланный кадр может из-за неисправности оборудования или какой-нибудь помехи (например, шума) пропасть полностью. В этом случае принимающая сторона его просто не получит и, соответственно, никак не прореагирует. Аналогично, если кадр подтверждения теряется, то отправитель также не знает, как ему действовать дальше. Очевидно, что протокол, в котором отправитель отсылает кадр, а затем начинает ожидать подтверждения (положительного или отрицательного ответа), зависнет навсегда, если кадр потеряется из-за, например, сбоя оборудования или коммуникационного канала.
Чтобы избежать зависаний сети в случае полной потери кадров, используются таймеры канального уровня. После посылки кадра включается таймер, отсчитывая интервал времени, достаточный для получения принимающим компьютером этого кадра, его обработки и посылки обратно подтверждения. В нормальной ситуации кадр правильно принимается, а подтверждение посылается назад и вручается отправителю, прежде чем истечет установленный интервал времени, и только после этого таймер отключается.
Однако если либо кадр, либо подтверждение теряется по пути, установленный интервал времени истечет, и отправитель получит сообщение о возможной проблеме. Самым простым решением для отправителя будет послать кадр еще раз. Однако при этом возникает опасность получения одного и того же кадра несколько раз на канальном уровне принимающего компьютера и повторной передачи его сетевому уровню. Чтобы этого не случилось, необходимо последовательно пронумеровать отсылаемые кадры, так чтобы получатель мог отличить повторно переданные кадры от оригиналов.
Вопрос управления таймерами и порядковыми номерами, гарантирующими, что каждый кадр доставлен сетевому уровню принимающего компьютера ровно один раз, не больше и не меньше, является очень важной частью задачи, решаемой канальным уровнем (и более высокими уровнями). Ниже в этой главе мы подробно изучим методы этого управления на серии постепенно усложняющихся примеров.
3.1.4. Управление потоком