Re: Pořadí packetů
Petr Labaj
labaj na volny.cz
Pondělí Květen 9 16:30:17 CEST 2016
To píšete, jak si představujete, že by to mělo fungovat?
V praxi to totiž funguje jinak.
Odesílání dat si řídí odesilatel, přijímač do toho nemá co kecat a
někoho vyzývat.
Potvrzování v TCP je tzv. okénkové potvrzování, kdy přijímač potvrdí,
která poslední
data dostal OK, takže ta už odesilatel nemusí dál držet v bufferu. Do
doby, než to
ten Rx potvrdí, tak Tx musí tato data stále držet v bufferu pro případný
retransmit.
Potvrzená data nemusí být všechna odeslaná, je to prostě posouvající-se
ukazatel,
co už je doručeno OK. Takže příjemce klidně může potvrdit jen příjem
poloviny
dat, odeslaných v jednom rámci, a později pak potvrdí ten zbytek atd. Je
to asynchronní
proces.
Balení dat do jednotlivých rámců závisí na odesilateli. Je-li to možné,
je dobré
použít explicitně flush() tehdy, kdy to má význam. Pak to má aplikace
provoz pod kontrolou
a nezatěžuje síť zbytečnými malými rámci (což hrozí při Nodelay a
nevhodném plnění Tx
bufferu), ale ani nezdržuje provoz čekáním na timeouty pro odeslání
zbylých dat.
PL
**********************
Dne 9.5.2016 v 14:09 Jiří Nesvačil napsal(a):
>
> Zdravim,
>
> jeste jsem hledal, asi to bude o stesti na implementaci TCP/IP stacku.
> Behem tech 200ms muze projit pozadavek na dalsi data, ale spise to
> bude o spatne/stare implementaci IP stacku.
>
> Spise se doporucuje vyhnout tomu No Delay a poslat do bufferu vice,
> tim pripadne si snizite zatez na tom CPU. Nebo aspon budete vedete, co
> Vam ten wireshark zobrazuje.
>
> https://blogs.technet.microsoft.com/nettracer/2013/01/05/tcp-delayed-ack-combined-with-nagle-algorithm-can-badly-impact-communication-performance/
>
> Jirka
>
>
Další informace o konferenci Hw-list