Можно ли заставить TCP-сокет отправлять 0 байтов в случае потери пакетов - python

Я пишу простую файловую связь клиент-сервер для передачи файла по TCP. Код, который я хочу реализовать, используя программирование сокетов Python. Я слежу за этим пример. Мне интересно, можно ли контролировать потерю и повторную передачу пакетов. Например, могу ли я отправить нулевые байты размера, потерянного при отбрасывании пакетов, вместо повторной передачи фактических потерянных сегментов?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
1 975
1

Ответы 1

Нет, отправка 0 байтов - это индикатор того, что сокет был правильно закрыт, и это часть протокола TCP. Вы пытаетесь изменить протокол TCP, который уже обрабатывает потерю пакетов. Вы, безусловно, можете отправить данные, указывающие на потерю пакета, но они будут получены после того, как будут завершены попытки повторения для данных, которые были ранее потеряны и вам не помогут. Похоже, что то, что вы пытаетесь сделать, лучше подходит для использования UDP и написания собственной логики для потери пакетов, но тогда вам также придется обрабатывать данные, не соответствующие порядку.

Не могли бы вы указать на ту часть протокола, о которой вы говорите? По крайней мере, для одного, пакет без полезной нагрузки и установленным флагом ACK является пакетом ACK. Насколько я понимаю, TCP-пакет "нулевой длины" просто означает, что отправившая его сторона не имеет полезной нагрузки для отправки.

Rad 11.11.2019 14:04

Другие вопросы по теме