Минимальные накладные расходы TCP / IP (через кадры Ethernet)

Насколько мал наименьший размер кадра в Ethernet? Каковы накладные расходы протоколов TCP и IP?

Что я хочу выяснить, так это накладные расходы однобайтового потока TCP/IP с точки зрения используемой полосы пропускания (в одну сторону, исключая ACK). Я предполагаю, что это около 32-100 байт, но это действительно не моя область знаний.

EDIT Я программирую веб-сервер и хочу запрограммировать правильные размеры данных моего приложения, чтобы получить хорошую пропускную способность в моей программе. Для этого я хочу знать, какие ограничения у меня есть для уменьшения пропускной способности.


person Jack Wester    schedule 17.01.2012    source источник
comment
Для тех из вас, кто закрывает этот вопрос. Если я разрабатываю серверное программное обеспечение, как это не связано с программированием? Обработка TCP/IP — это программное обеспечение, так же как и обработка JSON. Хотя я понимаю, что больше программистов используют веб-серверы и операционные системы, чем разрабатывают их, этот вопрос хорошо относится к программированию вещей, отмеченных тегами.   -  person Jack Wester    schedule 20.01.2012
comment
Если вам нужна хорошая пропускная способность, чем больше, тем лучше (примерно до 1400 байт). Чем меньше данных вы отправляете или получаете за раз, тем выше будут накладные расходы на кадры (пропорционально). Заголовки будут примерно одинакового размера, независимо от того, отправляете ли вы один байт или тысячу.   -  person cHao    schedule 20.01.2012
comment
@cHao - проблема не в этом. Каждый запрос поступает от уникальных клиентов. Мы обслуживаем более 20 миллионов клиентов и ежемесячно обрабатываем многие миллиарды запросов. Данные сообщения составляют несколько байтов.   -  person Jack Wester    schedule 20.01.2012
comment
Вы пишете драйвер устройства? Если нет, вы имеете дело не с кадрами Ethernet, а с потоками TCP или дейтаграммами UDP. Таким образом, параметры Ethernet не имеют значения, они обрабатываются сетевым стеком.   -  person Barmar    schedule 18.11.2014
comment
Я не хочу видеть, насколько сильно отстает Ethernet от пропускной способности, достижимой с использованием специального оборудования infiniband для безумного количества крошечных сообщений (IP не нужен и, конечно, не TCP, поскольку порядок в любом случае не имеет значения для меня). Я хотел посмотреть, смогу ли я избежать экзотического оборудования.   -  person Jack Wester    schedule 14.01.2015


Ответы (1)


Стандарт 802.3 определяет минимальный размер кадра как зависящий от реализации. Во всех конкретных, наиболее популярных реализациях (вплоть до 100 Мбит/с, 1 Гбит/с и 10 Гбит/с) он установлен как 512 бит, что равно 64 октетам. Имейте в виду, что это включает заголовок (не включая преамбулу и SFD, поэтому 12 байтов для адресов и 2 байта для типа кадра) и CRC (4 байта) в конце. Следовательно, при передаче кадра минимального размера у нас остается 46 байт на сами данные.

Базовый заголовок IPv4 имеет длину 20 байтов, а заголовок TCPv4 также имеет длину 20 байтов. Имейте в виду, что оба этих заголовка могут включать дополнительное необязательное поле «Параметры», которое может их увеличить (хотя я не знаю, чтобы какие-либо системы действительно делали это). Это оставляет вам 6 байтов для ваших реальных данных внутри фрейма Ethernet минимального размера.

person Daniel Kamil Kozar    schedule 17.01.2012
comment
Супер. Итак, предположим, что ответ на вопрос - 64 байта, а второй - 40-58 байт, учитывая, что мы говорим о современных сетевых картах. Благодарю вас! - person Jack Wester; 18.01.2012
comment
Дополнительный вопрос заключается в том, что я интерпретирую ваш ответ, поскольку у меня с большей вероятностью будет 24 байта, чем 6 байтов реальных данных, учитывая, что поле параметра не действует. Верный? - person Jack Wester; 18.01.2012
comment
Не совсем. Размер заголовков IPv4 и TCP без каких-либо дополнительных опций составляет ровно 20 байтов (или, точнее, октетов). Я не включил поле дополнительных параметров в свой окончательный ответ, вы правы с 6 байтами. :) - person Daniel Kamil Kozar; 18.01.2012
comment
Понятно. 46 - 20 - 20 равно 6. Глупо с моей стороны. Еще раз спасибо! - person Jack Wester; 18.01.2012