Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577

    [c++] quantità massima di byte da mettere su socket

    ciao,
    leggevo in merito alla MTU che il payload massimo su ethernet, è di cira 1500 byte ai quali ne vanno sottratti 14 per l'header di ethernet e quindi ne rimangono 1486.

    Ora, avendo a disposizione una rete da 100 Mbit/s mi chiedevo quanti byte al secondo posso inviare prima di "saturare" completamente la banda a disposizione.

    100 Mbit/s = 12.5 MB/s = 12500000 Byte/s

    12500000 : 1486 = 8411 pacchetti da 1486 byte/s


    possibile che si riesce ad inviare così tanti pacchetti?

  2. #2
    Devi dividere per la dimensione del pacchetto, non del payload....
    Comunque il metodo di accesso al canale, per l'ethernet, utilizza una politica di collision detect (CSMA/CD)... ovvero i client trasmettono sul mezzo fisico e, in caso di collisioni, attendono un intervallo di tempo random prima di ritrasmettere.
    Quando il traffico aumenta, aumentano anche le collisioni, e quindi diminuisce anche il rendimento del mezzo fisico....
    Ho cercato di buttartela giù in modo semplice.
    Experience is what you get when you don’t get what you want

  3. #3
    EDIT (purtroppo non mi fa modificare il messaggio precedente)
    Comunque, il numero dei dati scambiati nell'unità di tempo, in una situazione reale, dipende da molti altri fattori, tra cui:
    - architettura di rete
    - dispositivi di rete
    - messaggi di controllo, handshake, etc
    Experience is what you get when you don’t get what you want

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    grazie per la risposta. Per dimensioni dell'intero pacchetto intendi quella che ha nel momento in cui viene messa al livello più basso nel modello iso/osi??

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    stavo leggendo qui http://users.lilik.it/~mirko/gapil/gapilsu209.html delle dimensioni dei pacchetti, nel mio caso la dimensione massima dovrebbe essere di 65535 byte?
    Ma a quanto ammonterebbe il payload?

  6. #6
    Quote Originariamente inviata da misterx Visualizza il messaggio
    grazie per la risposta. Per dimensioni dell'intero pacchetto intendi quella che ha nel momento in cui viene messa al livello più basso nel modello iso/osi??
    Sì... o, in un caso pratico, dello stack TCP/IP.

    Immagina come se ogni livello dello stack di protocolli aggiungesse un header al "pacchetto" passatogli dal livello superiore (che prende il nome di payload).

    Quote Originariamente inviata da misterx Visualizza il messaggio
    stavo leggendo qui http://users.lilik.it/~mirko/gapil/gapilsu209.html delle dimensioni dei pacchetti, nel mio caso la dimensione massima dovrebbe essere di 65535 byte?
    Dipende dal tuo mezzo di comunicazione... per l'ethernet solitamente è di 1500 byte.

    Quote Originariamente inviata da misterx Visualizza il messaggio
    Ma a quanto ammonterebbe il payload?
    Dipende dalla grandezza "dell'header" dei vari pacchetti e del frame di livello fisico.

    Considera infine che, in una rete con mezzi trasmissivi misti, a livello IP, per rispettare i diversi MTU, potrebbero verificarsi delle frammentazioni, che vanno a ridurre ulteriormente il numero di byte trasmessi nell'unità di tempo.
    Experience is what you get when you don’t get what you want

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    per quanto riguarda le collisioni non dovrebbero esserci, siamo su una lan swtched

  8. #8
    Quote Originariamente inviata da misterx Visualizza il messaggio
    per quanto riguarda le collisioni non dovrebbero esserci, siamo su una lan swtched
    Se i nodi sono connessi con link full duplex, direttamente allo switch e dopo che la tabella di instradamento è stata popolata.
    Experience is what you get when you don’t get what you want

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    Quote Originariamente inviata da Xaratroom Visualizza il messaggio
    Se i nodi sono connessi con link full duplex, direttamente allo switch e dopo che la tabella di instradamento è stata popolata.
    grazie per le tue risposte.
    Entro nel vivo della questione; ho costruito un piccolo simulatore in codice Borland Builder. Quello che fa è lanciare un thread che crea alcuni pacchetti e li invia alla funzione SpedisciDati().
    In tale funzione ho implementato una sorta di timer il quale invia effettivamente i dati quando è trascorso 1 secondo=1000 ms.
    Studiando le variabili relative al tempo, effettivamente il codice nell'if viene eseguito sempre ogni secondo invece, la dimensione del buffer che io ho chiamat stringa varia da 500000 caratteri a 1500000.

    A questo punto mi chiedo se l'uso di un thread porta fuori strada se si desidera capire quanti byte/secondo (utili) si riesce ad inviare in quanto intervengono i ritardi dello scheduler di windows o altro?

    Grazie


    codice:
    // creazione dei pacchetti
    DWORD WINAPI ThreadTest( LPVOID lpParameter )
    {
            char msgbuf[40];
    
            while(!bAbort)
            {
                    for(int i=0; i < 127; i++)
                    {
                            sprintf(msgbuf, "B%d_5,1,xxx.xxx.xxx.xxx;", i);
                            SpedisciDati(msgbuf);
                    }
            }
    
            return 0;
    }
    
    //---------------------------------------------------------------------------
    
    // i pacchetti vengono inviati al client trascorso 1 secondo
    void SpedisciDati(char *msg)
    {
            stringa+=msg;
    
            if(GetTickCount() - tempo >= 1000 || tempo == 0)
            {
                    ServerSocket1->Socket->Connections[actconn]->SendText(stringa);
                    printf("%d",stringa.Length());
                    stringa="";
                    tempo=GetTickCount();
    
             }
    }
    //---------------------------------------------------------------------------

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    ciao,
    in base al codice che ho postato mi sono venuti in mente i seguenti dubbi: quando viene chiamata la sendtext() decide windows quando inviare il pacchetto sulla rete, giusto?
    Quindi riempie il suo buffer e quando lo ritiene giusto lo invia.

    Allora potrebbe accadere che richiamando la sendtext() per inviare 1 solo carattere alla volta sia più penalizzante in termini di performance che accumulare in un buffer ad esempio 1000 caratteri e richiamare la sendtext()?

    Oppure è indifferente?

    grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.