Протокол TCP / IP и фрагментация - PullRequest
3 голосов
/ 09 января 2012

При использовании протокола TCP / IP при наличии соединения между клиентом и сервером пакеты, отправленные клиентом на сервер, всегда принимаются в том же порядке, в котором они были отправлены?

Например, если клиент отправляет 3 пакета данных, A, B и C, сервер всегда будет сначала получать A, а затем B и C, или возможно, чтобы сервер сначала получил C, а затем A и B

Ответы [ 6 ]

5 голосов
/ 09 января 2012

На уровне IP пакеты могут поступать в любом порядке (если они поступают). На уровне TCP поток данных гарантированно будет заказан одинаково на обоих концах.

Это означает, что да, сервер будет всегда получать A, затем B, а затем C . Пока вы используете TCP.

3 голосов
/ 09 января 2012

При использовании TCP данные принимаются целевым приложением в том же порядке, в котором они отправляются исходным приложением.

Для получения более подробной информации см. Следующее:

http://en.wikipedia.org/wiki/Transmission_Control_Protocol#Data_transfer

3 голосов
/ 09 января 2012

TCP - это протокол передачи, и он передает данные, отправляя данные в виде IP-пакетов по базовой IP-сети.TCP отвечает за обеспечение правильной передачи данных, которая включает в себя упорядочение прибывающих пакетов, повторный запрос пропущенных пакетов и удаление дубликатов.

TCP как таковой не предоставляет пользователю никакого понятия «пакет»;тот факт, что данные разбиваются на пакеты IP, является деталью реализации «по IP».Другая реализация, например TCP-over-bike-courier, может использовать совершенно другую схему.

2 голосов
/ 09 января 2012

Не может быть, что вы получаете данные в другом порядке на стороне приложения через сокет TCP.

Может случиться так, что пакеты принимаются сетевым уровнем ОС в другом порядке, но TCP требует, чтобы верхние уровни приводили данные в порядок. Роль ОС - снова запрашивать непринятые фрагменты и т. Д. И собирать эти фрагменты. Так что вам не нужно беспокоиться.

UDP, с другой стороны, не дает такой гарантии.

0 голосов
/ 09 января 2012

Как правило, пакеты будут приниматься в том же порядке, в котором они были переданы.Но сеть может отбрасывать или переупорядочивать пакеты.Например, пакеты могут проходить по разным маршрутам и поступать не по порядку.Пакеты могут быть потеряны или даже дублированы в сети.Реализация TCP отвечает за повторную передачу потерянных пакетов, подтверждение полученных пакетов, игнорирование дублированных пакетов, и все с целью точной реконструкции передаваемого байтового потока на приемнике.

На уровне приложения вы отправляетепоток байтов и получить поток байтов.TCP делает все необходимое, чтобы гарантировать, что полученный поток байтов идентичен отправленному потоку байтов, независимо от того, что происходит с пакетами в сети.

0 голосов
/ 09 января 2012

Сервер (как физическая сетевая карта компьютера) может получать их в любом порядке.Ваша ОС может снова получать их в любом порядке - это будет в основном (но не всегда) порядок физического приема.Ваше клиентское приложение гарантированно получит их в правильном порядке, это свойство TCP

...