Hey,
vielen Dank für eure Antworten.
Zunächst mal die Aufnahme mit Wireshark war mit einem USB-
Ethernetadapter. Bei dem ist es so wie es mir scheint, dass er die
Packete zwischenbufferd und sie dann an Windwos weiterleitet. (Für Ping-
Antworten braucht es immer um die 2ms, was auch recht lang ist). Daher
auch die schnellen Bursts der 8 aufeinander folgendne Pakete.
Aktuell bekomme ich eine Übertragungsrate von etwa 58Mbit/s hin. Und
zwar mit den Einstellungen
1 | /* TCP sender buffer space (bytes). */
|
2 | #define TCP_SND_BUF (8*TCP_MSS)
|
3 |
|
4 | /* TCP sender buffer space (pbufs). This must be at least = 2 *
|
5 | TCP_SND_BUF/TCP_MSS for things to work. */
|
6 | #define TCP_SND_QUEUELEN (8 * TCP_SND_BUF)/TCP_MSS
|
Was ich bisher nicht hatte war die Callbackfunktion nach erhalt eines
ACK.
Die kann man mit der folgenden Funktion festlegen.
1 | /**
|
2 | * Used to specify the function that should be called when TCP data
|
3 | * has been successfully delivered to the remote host.
|
4 | *
|
5 | * @param pcb tcp_pcb to set the sent callback
|
6 | * @param sent callback function to call for this pcb when data is successfully sent
|
7 | */
|
8 | void
|
9 | tcp_sent(struct tcp_pcb *pcb,
|
10 | err_t (* sent)(void *arg, struct tcp_pcb *tpcb, u16_t len))
|
11 | {
|
12 | pcb->sent = sent;
|
13 | }
|
Leider hab ich es nicht hinbekommen die Anzahl der Ack zu reduzieren.
Was derzeit glaub ich die größte Bremse ist. Wie man im neuen
Wiresharkauszug (interne Netzwekkarte) sieht, sende ich alle 6 Pakete
ein "PSH,ACK". Damit habe ich versucht eben nur alle 6 Pakete ein ACK zu
bekommen.
Naja, solangsam finde ich mich mit der Geschwindigkeit ab.