Sie können etwas sehr Ähnliches tun. Sie können alle von Ihnen gesendeten Bytes zählen und alle Bytes, die vor der Nachricht am Ende Ihrer Nachricht gesendet wurden, zählen.
Ich werde wirklich nervös, wenn jemand über 'Pakete' mit TCP spricht. Denn wenn Sie gleichzeitig über Pakete und TCP sprechen, mischen Sie Protokollebenen, die nicht gemischt werden sollten. Es gibt keine sinnvolle Entsprechung zwischen den Daten, die Sie in TCP senden, und den Paketen, die über IP gesendet werden.
Ja, es gibt Sequenznummern in IP-Paketen, die zum Senden von TCP-Informationen verwendet werden. Bei diesen Sequenznummern handelt es sich um die Anzahl der bisher gesendeten Bytes (aka Oktetts). Sie identifizieren, wo im Stream die Bytes in dem Paket gehören, aber sie sind ansonsten nicht mit dem Paket verbunden.
Wenn ein erneutes Senden stattfindet oder wenn Sie den Nagle-Algorithmus verwenden oder wenn sich der TCP-Stack an diesem Tag anfühlt, können zwei Sendevorgänge im selben Paket enden. Oder Sie enden mit der Hälfte einer Sendeoperation, die in einem Paket endet, und der Hälfte in einem anderen Paket. Und jedes dieser Pakete hat seine eigenen Sequenznummern.
Wie gesagt, es gibt absolut keine sinnvolle Beziehung zwischen Sendeoperationen, die Sie auf der Transportschicht durchführen, und den Paketen, die auf der Netzwerkschicht gesendet werden. Ich rede auch nicht theoretisch. Es sind nicht wirklich alle Pakete darunter und das Senden im Allgemeinen, abgesehen von einem seltsamen Zustand, setzt alle Bytes in ein einziges Paket. Nein, die oben skizzierten Szenarien, bei denen die Bytes einer einzelnen Sendeoperation auf mehrere Pakete verteilt werden, treten häufig und unter unvorhersehbaren Bedingungen auf.
Also, ich weiß nicht, warum Sie etwas über die Sequenznummern in Paketen wissen wollen. Aber wenn Sie die Sequenznummer als Proxy für die Anzahl der gesendeten Bytes verwenden, können Sie diese Zählung selbst behalten und sie einfach selbst in den Stream stopfen. Und vergiss nicht, auch diese Bytes zu zählen.
Warum auf der Erde tun Sie dies tun wollen? – Omnifarious
@Onmifarious: Ich benötigte "Sequenznummern" in einem Sicherheitsprotokoll. Da das Implementieren von ihnen erfordert, ein Fenster zu halten (wie in TCP), was wiederum viel Codierung erfordert, dachte ich, dass es leichter sein könnte, das Rad nicht neu zu erfinden und die zugrundeliegenden TCP-Sequenznummern zu verwenden. Aus den Antworten unten scheint die Idee unmöglich zu sein. Haben Sie eine Idee, die Implementierung von "Sequenznummern" zu erleichtern? –
Ihr Sicherheitsprotokoll sollte nicht von der zugrunde liegenden Paketierung des TCP-Datenstroms abhängen. Die Art, wie TLS und andere strombasierte kryptografische Protokolle dies handhaben, besteht darin, die Daten zu chunken. Jedem Datenelement wird eine Länge vorangestellt und ein MAC als Suffix hinzugefügt. Sie stellen also eine Datensatzstruktur innerhalb des Streams bereit. – Omnifarious