Если скрипт слушает TCP-сокет стандартными средствами (read/recv), то TCP-стек должен гарантировать доставку данных в правильном порядке. Я думаю, именно это имел в виду
major.
По идентификаторам пакетов я могу расставить их в нужном порядке, но как я могу быть уверен, что в конкретный момент времени у меня нет «пропущенных» пакетов, которые придут следом? Возможно, какие-то заголовки (о том, что это только часть сообщения)? Если да, то какие?
Не очень понятно, о каких пакетах и идентификаторах идёт речь. Целостность потока данных TCP обеспечивается полем sequence number заголовка TCP (см.
www.ietf.org/rfc/rfc793.txt п 3.1) и длиной принятых данных (вычисляется на основании поля total length из заголовка IP, см.
tools.ietf.org/html/rfc791#section-3.1). А именно, каждый переданный байт данных — это +1 к sequence number. Начальный sequence number выбирается случайным образом при установке соединения, т.е. при приёме пакета с флагом SYN. В простейшем случае (без selective ack), каждое установленное соединение должно хранить sequence number ожидаемых данных и сравнивать его с полученным по сети sequence number; в случае их совпадения пропущенных данных нет.