Где фактический контент в сегменте TCP
Когда я отправляю что-то по электронной почте или загружаю программу, или делаю что-то еще по сети, где в сегменте находится фактический контент? Если я отправляю по электронной почте документ объемом 20 КБ, а максимальный размер поля данных в сегменте составляет 1500 байт, означает ли это, что для отправки документа по почте, куда бы он ни направлялся, требуется около 14 сегментов?
Я думаю, что я получаю модель OSI, и у меня есть приличное понимание протокола IP. Мне кажется, я понимаю концепцию переноса заголовков каждого последующего уровня в стеке протоколов. На что я не могу получить однозначный ответ - куда идет фактический контент в сегменте TCP? Это датаграмма?
Может быть, тот факт, что я спрашиваю, доказывает, что я понятия не имею...
Большое спасибо.
3 ответа
Данные поступают со смещением 160, если заголовки опций отсутствуют, и далее вниз (кратно 32), если присутствуют заголовки опций IP. Часть данных продолжается до конца пакета. Пакет может иметь переменный размер из-за различных настроек MTu вдоль пути, поэтому точное количество пакетов, в которые попадает часть данных более высокого протокола, зависит.
"Датаграмма" - это размер заголовка IP + данные.
Вы неверны в максимальном размере поля данных, равном 1500b. Это размер всего пакета, включая заголовки. Размер поля данных является переменным в зависимости от длины заголовка, как я описал выше.
Контент разбивается на куски и помещается в часть данных в пакетах. Смещения для этого раздела данных были упомянуты в другом ответе.
Это стоит прочитать: http://en.wikipedia.org/wiki/TCP_packet
TCP /IP довольно сложный; свидетель: http://www.tcpipguide.com/free/t_toc.htm
Вот довольно хорошее представление части данных пакетов, которую я нашел на http://concept51.co.uk/in_how_networks.html:
Пожалуйста, см. RFC 793 ( http://www.ietf.org/rfc/rfc793.txt).
Фактические "данные" (т. Е. Ваш документ) содержатся в сегменте TCP (после заголовка TCP) пакета. Размер данных в пакете определяется максимальным размером сегмента TCP (MSS).
Я предлагаю скачать такой инструмент, как Wireshark ( http://www.wireshark.org/) и захватывать сетевой трафик при отправке файла. Wireshark интерпретирует пакеты для вас (вы можете даже щелкнуть правой кнопкой мыши на одном из пакетов, которые содержат данные из вашего файла, и выбрать "Follow TCP Stream").
Вы также сможете просмотреть каждый последующий заголовок пакета, который декодируется и объясняется для вас Wireshark. Это должно дать вам гораздо лучшее представление о том, что происходит, когда вы отправляете данные через TCP.
HTHAL