Einer unserer Kunden hat Schwierigkeiten, Daten von unserer Anwendung (auf seinem PC) an einen Server (an einem anderen geografischen Ort) zu senden. Beim Senden von Paketen unter 1100 Bytes funktioniert alles einwandfrei, aber darüber sehen wir, dass TCP das Paket alle paar Sekunden erneut sendet und keine Antwort erhält. Die Pakete, die wir zum Testen verwenden, sind ungefähr 1400 Bytes (aber weniger als 1472). Ich kann einen ICMP-Ping an www.google.com senden, der 1472 Byte groß ist und eine Antwort erhält (also nicht der Router/die ersten Hops).Vorteile von "nicht fragmentieren" auf TCP-Paketen?
Ich habe festgestellt, dass unsere Anwendung das DF-Flag für diese Pakete setzt, und ich glaube, dass ein Router auf dem Weg zum Server eine MTU kleiner/gleich 1100 hat und das Paket fallen lässt.
Dies betrifft 1 Client in 5000, aber da jeder Routen anders sein wird dies erwartet.
Die Daten sind eine SOAP-Hülle und wir erwarten eine SOAP-Antwort zurück. Ich kann nicht rechtfertigen, warum wir es tun, der Code dafür wurde von einem früheren Entwickler geschrieben.
So ... Gibt es irgendwelche Vorteile oder Berechtigung, das DF-Flag auf TCP-Pakete für Anwendungsdaten zu setzen?
Ich kann mir Gründe vorstellen, die für Netzwerkdiagnoseanwendungen benötigt werden, aber nicht in unserer Situation (wir wollen, dass die Daten zum Endpunkt gelangen, fragmentiert oder nicht). Einer unserer Systemadministratoren sagte, dass es etwas mit SSL zu tun haben könnte, aber soweit ich weiß, ist SSL wie ein Stream und unabhängig von der Fragmentierung, solange der Stream am Ende neu aufgebaut wird, gibt es kein Problem.
Wenn es keine gute Begründung gibt, werde ich das Verhalten unserer Anwendung ändern.
Vielen Dank im Voraus.
Was ist der tatsächliche Socket-API-Aufruf, den Sie vornehmen, der bewirkt, dass das DF-Bit gesetzt wird? –
Es gibt einige nette Diskussionen darüber, wo der DF hier nützlich sein könnte: http://StackOverflow.com/questions/351806/where-is-the-dont-fragment-bit-of-the-ip-flags-used-in Kurz, es scheint wie eine Situation, in der, wenn Sie nicht wissen, dass Sie es brauchen, dann nicht. –