Размер окна передачи файлов TCP
Я пытаюсь выполнить обратное проектирование приложения, и мне нужна помощь, чтобы понять, как работает размер окна TCP. Мой MTU - 1460. Мое приложение передает файл по протоколу TCP из пункта А в пункт Б. Я знаю следующее:
- Файл разбит на сегменты размером 8K
- Каждый сегмент сжат
- Затем каждый сегмент отправляется в точку B по TCP. Эти сегменты для текстового файла могут иметь размер 148 байт, а для PDF - 6000 байт.
Для текстового файла я должен видеть сегменты 148, соединенные друг с другом, чтобы сформировать один большой поток TCP? а потом он делится по размеру окна?
Любая помощь приветствуется.
1 ответ
Приложение-получатель должно видеть данные таким же образом, как и приложение отправителя. TCP использует потоковую передачу байтов, поэтому он собирает все байты в порядке и доставляет их приложению. MTU в значительной степени является внутренней семантикой TCP и не учитывает границы пакетов прикладного уровня. Если TCP имеет достаточно данных для отправки в своем буфере отправки (каждый сокет TCP имеет свой собственный буфер отправки, кстати), он упаковывает свой следующий сегмент размером MTU и отправляет его; точнее, он вычитает заголовки TCP и IP из размера MTU.