Как происходит разбиение данных на TCP сегменты?
Если мы передаем большой массив текста по HTTP в кодировке UTF8, может ли случится так, что разделение сегментов пройдет через какой-нибудь символ?
(Т.е. первый байт символа окажется в первом сегменте, а последующие во втором?)
в случае двухбайтовых символов unicode/utf? Конечно может, по любому смещению может поделиться. Поэтому в заголовках http используется разделитель \r\n, а для тела указывается явный размер, чтобы принимающая сторона точно знала, что еще не весь http запрос принят и нужно принимать дальше, и не начинать парсить
...и не произойдет ничего страшного. Читаем про семиуровневую модель. Каждый уровень посылает тот обьем, который может послать. TCP фрагментирует на свои единицы, IP - на свои, Ethernet - на свои. При приеме они так же соответственно собираются и на последний уровень - HTTP отдается полностью переданный массив.
система управления TCP сама все сделает: и распилит входной поток байтов на пакеты и полноценно в правильной последовательности соберет все обратно, для этого ее и создавали. Как произведется распиловка пользователю не сообщают, сколько есть места в MTU столько посылают :)
сшивок между пакетами ты не увидишь, ибо это проблемы не пользователя, а системы управления передачей данных и они давно все продуманы.