Enigma su errori TCP (x esperti)
Moderatore: Staff
Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
-
bhackerozzo
- Linux 0.x

- Messaggi: 67
- Iscritto il: sab 18 dic 2004, 0:00
Enigma su errori TCP (x esperti)
Allora, ho scritto un'applicativo in java che si connette a un server tramite una semplice connessione tcp. E' attivo 24 ore su 24.
Il problema è che spesso (almeno una volta al giorno) accade che la connessione viene chiusa dal server, infatti java genera una eccezione "SocketException: connection reset".
Siccome so che, in base alle specifiche, il server non è cosi scortese da buttarmi fuori "gratuitamente", ho indagato piu a fondo sniffando il traffico con ethereal (eseguito nello stesso client).
Ebbene dall'analisi dei pacchetti scambiati è emersa una situazione inquietante: la totalità dei pacchetti tcp inviati dal client (esclusi solo gli ack) hanno checksum tcp sbagliato (Il checksum ip invece è a posto). Ecco quindi che ogni tanto il server si scoccia di ricevere errori e chiude la connessione con un pacchetto RST.
Secondo voi dove può essere il problema? la scheda di rete, il sistema operativo, java??
Grazie per qualunque idea.
Il problema è che spesso (almeno una volta al giorno) accade che la connessione viene chiusa dal server, infatti java genera una eccezione "SocketException: connection reset".
Siccome so che, in base alle specifiche, il server non è cosi scortese da buttarmi fuori "gratuitamente", ho indagato piu a fondo sniffando il traffico con ethereal (eseguito nello stesso client).
Ebbene dall'analisi dei pacchetti scambiati è emersa una situazione inquietante: la totalità dei pacchetti tcp inviati dal client (esclusi solo gli ack) hanno checksum tcp sbagliato (Il checksum ip invece è a posto). Ecco quindi che ogni tanto il server si scoccia di ricevere errori e chiude la connessione con un pacchetto RST.
Secondo voi dove può essere il problema? la scheda di rete, il sistema operativo, java??
Grazie per qualunque idea.
- useless
- Staff

- Messaggi: 3896
- Iscritto il: dom 12 ott 2003, 0:00
- Località: A place where the streets have no name
- Contatta:
mah, il problema dei checksum tcp sbagliato, secondo me, è fuorviante. nel senso che, da quanto noto runnando ethereal, anche qui capita la stessa cosa, ma tutto funziona come deve.
quindi:
- o linux sbaglia volutamente a calcolare il checksum (magari nella pratica si guarda solo quello di ip, e non quello di tcp).
- o ethereal sbaglia a valutarlo.
quale sia la risposta giusta non lo so ancora, ma presto ci guarderò, per la tesi. nel frattempo ti consiglierei di cercare il tuo bug altrove, dato che questo comportamento pare normale.
quindi:
- o linux sbaglia volutamente a calcolare il checksum (magari nella pratica si guarda solo quello di ip, e non quello di tcp).
- o ethereal sbaglia a valutarlo.
quale sia la risposta giusta non lo so ancora, ma presto ci guarderò, per la tesi. nel frattempo ti consiglierei di cercare il tuo bug altrove, dato che questo comportamento pare normale.
-
bhackerozzo
- Linux 0.x

- Messaggi: 67
- Iscritto il: sab 18 dic 2004, 0:00
L'ho escluso a priori non perchè sia il migliore programmatore al mondo5m0k3r ha scritto:Un bug nel tuo sorgente?
grazie per la tua risposta,useless ha scritto:mah, il problema dei checksum tcp sbagliato, secondo me, è fuorviante. nel senso che, da quanto noto runnando ethereal, anche qui capita la stessa cosa, ma tutto funziona come deve.
quindi:
- o linux sbaglia volutamente a calcolare il checksum (magari nella pratica si guarda solo quello di ip, e non quello di tcp).
- o ethereal sbaglia a valutarlo.
per quanto ne so i vari checksum vengono calcolati dal kernel, ma mi sembra molto strano che linux sbagli a calcolarlo e poi che quello ip sia sempre corretto e quello tcp sempre sbagliato, e che gli ack invece siano sempre a posto. non sono errori casuali.
in realtà ho sniffato il traffico con tcpdump e poi analizzato offline con ethereal, ma dovrebbero essere compatibili, poichè usano entrambi libcap...
qui ho messo la parte più significativa, se vuoi dargli un'occhiata..per favore...
http://marlon80.interfree.it/boh/tcp.cap
-
bhackerozzo
- Linux 0.x

- Messaggi: 67
- Iscritto il: sab 18 dic 2004, 0:00
Ho provato a collegarmi da telnet e ottengo esattamente la stessa situazione.
Almeno ora ho escluso anche java.
ah, la connessione passa attraverso un tunnel vpn che parte dal primo router, ma client e server si vedono quindi il tunnel non è cieco...e funziona bene.
ma ancora piu strano: se mi collego via https al router (dalla macchina client), i pacchetti vengono trasmessi tutti correttamente, non c'è nessun errore!! ma allora la colpa non è nemmeno di tcpdump & ethereal???
devo pensare che linux si sta divertendo a farmi impazzire...?!

Almeno ora ho escluso anche java.
ah, la connessione passa attraverso un tunnel vpn che parte dal primo router, ma client e server si vedono quindi il tunnel non è cieco...e funziona bene.
ma ancora piu strano: se mi collego via https al router (dalla macchina client), i pacchetti vengono trasmessi tutti correttamente, non c'è nessun errore!! ma allora la colpa non è nemmeno di tcpdump & ethereal???
devo pensare che linux si sta divertendo a farmi impazzire...?!
Ehm....useless ha scritto:mah no, appunto. magari, x rispamiare tempo, il checksum tcp non lo calcola nessuno, intanto se è giusto quello IP, è ovvio che il suo contenuto (tcp appunto) non può essere sbagliato.
Non e' proprio esatto...
Il checksum IP riguarda solo l'header del pacchetto IP e non dice assolutamente nulla sulla correttezza o meno dei dati in trasportati dal protocollo TCP.
Il checksum TCP, al contrario, e' un po' piu' complesso e viene calcolato utilizzando l'header TCP, i dati e anche una parte dell'header IP.
Per essere sicuri quindi che un pacchetto TCP/IP sia corretto in base ai checksum bisogna:
1) controllare il checksum IP per capire se l'header IP puo' essere considerato corretto
2) se l'header IP e' corretto si usano le informazioni in esso contenute per identificare il protocollo utilizzato a livello superiore (ad esempio TCP) e i vari offset, ...
3) controllare il checksum TCP per verificare che l'header TCP e i dati in esso contenuti siano coretti...
4) solo a questo punto e' possibile dire che tutto il pacchetto ricevuto (o spedito) sia corretto
Ciao ciao...
GiAn
Per info:
http://en.wikipedia.org/wiki/IPv4#Header
http://en.wikipedia.org/wiki/Transmissi ... col#Header

