Популярное
- Расчет зигзагообразных антенн Харченко для 3G модема 2100
- Перенос папки Temp Windows 7 и для чего нужна папка темп
- Как настроить ускоритель связи сети интернета 3G модема?
- Прошивка USB 3G модема HUAWEI Modem 3.0 (новая версия!)
- Флешки или радуйтесь счастливые обладатели A-DATA и Trancsend
- Почему диспетчер задач отключен администратором, как включить?
Как работает интернет. Часть 8 | Как устроен протокол TCP, структура - Подтверждение пакетов |
Глобальные компьютерные сети и интернет | |||||||||||||||||||||||||||||||||||||||
Как вы помните, одной из задач протокола TCP (мы ее описали в статье: инкапсуляция протоколов) была коррекция ошибок. Корректирует ошибки протокол по самой простой схеме – мы шлем пакеты, а нам приходят подтверждения на них, «пакет получил». Если мы отправили пакет, а подтверждения нет, то мы считаем, что клиент пакеты не получил, и переотправляем пакеты ему еще раз. А как узнать, что клиент пакеты не получил? Может они просто до него еще не дошли? Для этого есть специальное «окно». Помните, в предыдущей статье мы писали про поле Window – какой максимальный объем можно посылать компьютеру. То есть, процесс происходит так – мы шлем компьютеру данные, один пакет, второй, третий… бац, все, пришел ответ, «первый пакет получен». Убираем его размер из «окна», шлем четвертый пакет. Допустим, пришел ответ, «третий пакет получен». Это сообщение означает, что и второй получен тоже. Действительно, зачем слать, что получен второй, если уже получен третий? Тогда мы шлем пятый-шестой-седьмой-восьмой… и, допустим, все, размер окна у нас кончается. Больше мы ничего не шлем, а только ждем реакции собеседника (понятно, если удаленный компьютер не отвечает, то, скорее всего соединение просто разорвалось, и дальше слать нет смысла). Если удаленный компьютер отвечает, что «получен восьмой», мы понимаем, что получены все 8 пакетов. Окно очищаем, и начинаем слать дальше. А теперь представим себе ситуацию, мы отправили три пакета, нам пришел ответ, «получен 1 пакет». Мы решили, что второй и третий просто еще не дошли. Но окно у нас еще не заполнено, поэтому мы продолжаем слать – пакет номер 4, 5, 6… И получаем второй ответ, «получен 1 пакет». Как?! Ведь 1 был получен в прошлый раз. Тут явно какая-то ошибка. В каком пакете? Очевидно, в пакете номер 2, ведь если бы он дошел до удаленного компьютера, то он вернул бы ответ хотя бы «получено 2 пакета». Что мы делаем? Очевидно, переотправляем пакет номер 2 снова. Заодно и далее – пакеты 7,8,9 (если размер окна позволяет). И получаем ответ, «получено 6 пакетов». Что это означает? Это означает, что до удаленного компьютера дошел пакет номер 2 (переотправленный), а пакеты 3,4,5,6 – он получил еще раньше, они были у него в «окне», но он не мог их использовать, так как без пакета номер 2 они бессмысленны. Теперь все в порядке, обмен продолжается. Тут есть две тонкости. Первая – обмен данными, как вы понимаете, не заключается в «мы посылаем, удаленный компьютер слушает», или «удаленный компьютер посылает, мы слушаем». Вполне может быть, что «мы посылаем пакет, удаленный компьютер отвечает, что его получил, и в этот же пакет (с подтверждением) добавляет свои данные нам, мы их получаем, отвечаем, что получили, и в этот же пакет суем дальнейшие данные». То есть, это диалог, а не монолог. Мы подтверждаем получение данных удаленного компьютера, удаленный компьютер подтверждает получение наших данных. И вторая тонкость – подтверждаются не пакеты, как утрированно описывалось выше, а байты, то есть, «получено 1000 байт», или «получено 165456 байт». В принципе, особо большой разницы это не вносит. Теперь нужно разобраться, как компьютеры шлют эту информацию, о том, что «получен пакет Х». Где эта информация в пакете? В поле данных она быть не может, так как, как мы уже говорили, можно послать эту информацию вместе с данными в одном пакете. Следовательно, она в заголовке. Действительно, она в заголовке, в полях Sequence Number и Acknowledgment Number. В поле Sequence Number мы указываем удаленному компьютеру, какой байт мы ему шлем, а в поле Acknowledgment Number – какой байт мы получили от удаленного компьютера (подтверждение). Удаленный компьютер, наоборот, обратно шлет номер своего байта, который он нам шлет, и подтверждает какой-то наш байт.
3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."
|