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