Я не понимаю, как на самом деле работает TCP. Я прочитал в нескольких книгах и статьях, что он отвечает за перестановку передаваемых дейтаграмм на принимающем хосте. Тем не менее, я читал RFC 793 и не могу найти такую спецификацию. С другой стороны, RFC 791 (Интернет-протокол) прямо заявляет, что Интернет-протокол отвечает за перераспределение отправленных пакетов на принимающем хосте. Любая помощь? Спасибо!
2 ответа
С точки зрения IP, пакет представляет собой единицу данных. Он может быть фрагментирован, поскольку он пересекает устройства с различным MTU (максимальный блок передачи) и отвечает за соединение этих фрагментов вместе на другом конце. Таким образом, 1500-байтовый пакет может быть разбит на 5 фрагментов, когда он пересекает часть сети с 300 MTU, а затем пакет восстанавливается на другом конце.
TCP, с другой стороны, работает с потоками данных, состоящими из любого количества IP-пакетов. Таким образом, TCP отвечает за обеспечение того, чтобы 1) порядок пакетов в потоке был правильным (при передаче на следующий уровень), и 2) все они прошли через него - или в противном случае указывают на ошибку
Таким образом, они оба несут ответственность за последовательность данных в своих слоях.
Но каждый уровень ISO не знает верхних уровней. Таким образом, для IP просто невозможно переставить пакеты в правильной последовательности для TCP - последовательность, в которой TCP ожидает, что пакеты находятся, не имеет смысла для IP. Точно так же, как TCP не может гарантировать, что HTTP-вызов настроен правильно, или для Ethernet, чтобы знать, что IP-пакет правильно адресован.
В целом, IP-протокол не имеет представления о порядке ваших данных. IP-пакеты - это отдельные объекты, не имеющие отношения друг к другу. Единственная обязанность протокола IP - доставить пакет из пункта А в пункт Б. Он может иметь дело с фрагментацией пакетов, которая произошла из-за меньших MTU в пути, чем у отправителя, и он соберет фрагменты вместе в получателе, но у него нет инструмента для упорядочивания ваших данных.
TCP является партнерским протоколом с протоколом IP. Протокол TCP предоставляет то, что называется транспортным уровнем пакета TCP/IP. Транспортный уровень состоит из протоколов TCP и UDP. TCP предоставляет пакеты состояния и подтверждения доставки, которые отправляются по IP. UDP не имеет состояния и на самом деле обеспечивает только упрощенное сопоставление IP-адресов с номерами портов, он часто используется в потоковых приложениях или там, где быстрое и маленькое лучше, чем надежное.
TCP обеспечивает некоторые ключевые функции, гарантирующие получение всех ваших пакетов. Как только два клиента устанавливают соединение TCP, каждый пакет, отправляемый между ними, учитывается по мере поступления на основе порядкового номера и длины пакета. Это делается с помощью системы передачи и подтверждения данных в скользящем окне.
Ключом к системе является то, что каждый пакет подтверждения от получателя подтверждает только последний пакет, полученный в непрерывном потоке от отправителя. Таким образом, если пакеты 1, 2 и 4 поступают к отправителю, они передаются в TCP с IP без какой-либо обработки. Однако TCP будет принимать ACK только до пакета 2 (и неявно пакета 1), потому что он может сказать, что должен был быть пакет 3 на основе порядкового номера и длины пакета.
В зависимости от реализации TCP у отправляющей системы пакеты 3 и 4 снова подтверждают, что они получены. Время до повторной отправки зависит от времени, встроенного в реализацию TCP на компьютере, и может изменяться в зависимости от скорости сети и производительности канала. Со временем, если у вас ненадежная ссылка, количество пакетов, которые будут отправлены без подтверждения предыдущих пакетов, станет меньше.
Опять же, суть в том, что IP не знает, в каком порядке принадлежат ваши пакеты. Я только понимаю, как получить пакет отсюда туда.