windows - Winsock TCP buffering adfærd

Indlæg af Hanne Mølgaard Plasc

Problem



For det første miljøet i dette spørgsmål;


Windows XP SP3

Eksklusiv brug af overlappede I/O

Tx og Rx sokobuffering er deaktiveret

TCP transport

Nagle deaktiveret

I/O færdiggørelse port

Wireshark bruges til at analysere netværkstrafik



Det jeg overholder med min ansøgning er en uoverensstemmelse mellem netværkstrafikmodtagelse og min ansøgnings anmeldelse af disse begivenheder.


For bedst at illustrere dette problem er følgende et eksempel på en TCP-strøm af en sådan sag:


#   RelTime  Dir  Len
1   0        Rx   ACK
2   10       Rx   536
3   9        Rx   536
4   0        Tx   ACK
5   10       Rx   536
6   10       Rx   536
7   0        Tx   ACK
8   9        Rx   536
9   9        Rx   429


(De bogførte buffere til modtagelse af disse data er 2044 byte hver)


Ovennævnte 3109 bytes modtages af min ansøgning i 3 anmeldelser som 2044 bytes, 100 bytes, 965 bytes. Stakken ser således ud til at have ventet, indtil den har sendt to ACK'er (# 4, # 7), inden de besluttede at udbrede dataene til userland (og igen på # 9)


Bortset fra at synes at være i modstrid med alle Winsock-dokumentationen vedrørende notifikation (hvoraf det hedder øjeblikkelig anmeldelse, som i dette tilfælde vil være 536 bytes hver), er forsinkelsen i anmeldelsen (f.eks. ~ 40 ms) ret betydelig, især i mit tilfælde, som er et spil server modelleret på tidsforsinkelse spil input distribution.


Hvad jeg efter er en ordentlig forklaring vedrørende semantikken i forholdet mellem TCP på wire og brugerland notifikation via Winsock.


Tak,


Matt.


P.S., jeg har allerede stillet spørgsmålstegn ved MSDN Winsock-kernelforumet om dette, men til ingen nytte.


P.P.S., det er 3 am så jeg håber mit spørgsmål laves i det mindste en vis forstand.

Bedste reference


Bedste gæt: Sluk for Windows Firewall eller andet sikkerhedsprodukt, du har installeret (og genstart).


Se også efter andre LSP'er, der ikke er Microsoft, der kan installeres. Jeg har set nogle underlige netværksproblemer, fordi nogen installerede nogle tredjeparts proxy- og networking utils. Http://www.herongyang.com/Windows/Winsock-netsh-winsock-show-catalog-LSP.html[2]