Hirdetés

Keresés

Új hozzászólás Aktív témák

  • crok

    Topikgazda

    válasz stafidani #7216 üzenetére

    A preamble-t nem vette bele a forrásod (ahogy a gap-et se szokták) hiszen "adattartalma", "információértéke" egyiknek sincs.

  • crok

    Topikgazda

    válasz stafidani #7216 üzenetére

    Fent leírtam kb mindent - de röviden:
    [12byte ethernet gap, ezt nem számolja "data"-nak]
    [8byte ethernet preamble]
    [6byte ethernet destination]
    [6byte ethernet source]

    [4byte 802.1q VLAN tag ha van]
    [2byte length]
    [Az ethernet keretben az IP csomag]
    [4 byte ethernet FCS]

  • crok

    Topikgazda

    válasz stafidani #7212 üzenetére

    Durván összetett azért ahhoz, hogy egyszerűen a+b=c legyen (:

    Megpróbálom a minimumot/legegyszerűbbet összerakni (nem életszagú).

    Egyetlen ethernet keret layer 1-en (MTU 1500, VLAN tag nincs):
    Alatta leírom mennyi kell belőle.
    -----------------------------------------------
    12byte Ethernet gap + 8byte Ethernet preamble
    -----------------------------------------------
    -- Ethernet Frame:
    ----------------------------------------------
    --Ethernet header:
    --6 byte dest addr
    --6 byte src addr
    --[4 byte 802.1q VLAN Tag ha van..]
    --2 byte length/type
    -------------------------------------------------
    ------ IP Packet
    --------------46-1500 byte data (payload)----------
    ----20byte IPv4 header:
    ----1byte Version; 1byte IHL; 1byte ToS; 2byte Length;
    ----2byte Identification; 3bit Flag; 13bit Fragment offset
    ----1byte TTL; 1byte Protocol; 2byte Header Checksum;
    ----4byte dest addr; 4byte src addr
    ----8byte Options (ha van, mert az IHL több, mint 5 (5x32=20byte))
    ---------------------------------------------------
    -------- TCP segment
    -----------------------------------------------------
    --------20byte TCP header
    --------2byte src port; 2byte dst port;
    --------4byte sequence number
    --------4byte acknowledge number
    --------4bit data offset;
    --------3bit reserved; 9bit flag (syn;ack;psh;rst;...)
    --------2byte window size
    --------2byte checksum; 2byte URG pointer
    --------(Ha a data offset 5-nél nagyobb akkor az Options rész is
    --------tartalmaz adatot- nagyságát az 5-nél magasabb offset
    --------határozza meg (5x32=20byte a header alapból, ha nincs
    --------az Options alatt semmi akkor 0-val van feltöltve 4byte-ig de
    --------úgyis lesz egy kevés, mert kell pl. SYN-ben az MSS..))
    -----------------------------------------------------
    -----------------
    -----------------
    ----------------- A HTTP adat, ami a végén 1MB-ot fog kiadni.
    -----------------
    -----------------
    ----------------- Csomagonként 1460byte a maximum..
    -----------------
    -----------------
    -----------------------------------------------------
    --------
    ---------------------------------------------------
    ------
    ----------------------------------------------
    --4 byte Ethernet FCS
    -----------------------------------------------
    4byte Ethernet trailer
    -----------------------------------------------


    Na, ekkor jön egy olyan, hogy 3way handshake miatt egy SYN, egy
    SYNACK és egy ACK. => 3x Ethernet frameben IP csomag 0 payload-al.
    Kell egy HTTP GET, ami minimum ennyi:
    GET / HTTP/1.0[ENTER] \
    [ENTER] |-- 17 byte összesen
    [ENTER] /
    ..amire a szerver válaszol egy "üres" ACKel és tolja az 1MB file-t:

    Tekintsük a TCP receive window-t a maximumnak: 65536byte (nincs
    specifikálva se az kliens OS, se a szerver, se a szerver OS; az
    életben TCP receive window 17.5KB lenne mondjuk egy "átlagos gépnél").

    Így (1024*1024byte)/65536byte = 16 TCP full window lenne az átvitel
    ideális esetben de mivel az ack is kell és 1460byte egy csomag, így
    ideális (csomagvesztés nélküli) esetben kell 16 ACK csomag is és a
    data 44.89 tehát 44db 1460byte-os valamint egy 1296byte-os csomag
    lesz egy teljes TCP window. Ehhez jön még window-nként egy ACK.
    Majd a végén a lezárás (nem az "elegáns" Windows Serveres RST,
    hanem) egy rendes, FINACK a klienstől +ACK a szervertől.


    Durvaélet kihagytam valamit, de tippre a tanár már így is többet kap
    mint amire számít. Ha nem lenne itt nézhető, akkor vagy kijelölöd és
    átteszed notepad-be (vagy fix széles karakterekkel nézed meg) vagy
    feldobtam pastebinre: http://pastebin.com/c5rBrzU4

  • Wolfy999

    tag

    válasz stafidani #7212 üzenetére

    1538 byte lehet maximum 1 Ethernet frame (1500 payload + 38 header+crc) (ha nem VLAN tagged és nincs Jumbo frame)
    ...ekkor...
    1500 byte lehet maximum 1 IPv4 packet (1480 payload + 20 header) (option-ök nélkül)
    ...ekkor...
    1480 byte lehet maximum 1 TCP segment (1460 payload + 20 header) (option-ök nélkül)
    ...ekkor 1024*1024/1460 csomag kell az átküldéshez. Ez 719 felfelé kerekítve, mert ugye a kis maradékhoz is kell majd csomag. Tehát az átvitt adat 1024*1024 + 719*78 = 1104658 byte lesz. (A 78 onnan jött, hogy 20 TCP header + 20 IP header + 38 Ethernet header+crc)

    Ekkor persze még kihagytuk a számításból a TCP 3-way handshake csomagjait, de ha tippelnem kéne ez a tanárodnak eszébe sem jutott. Persze a való életben még ebbe több dolog is beleszólhat, de közelítésnek jó lesz ez.

    Ha érted ezt a számítást és megjegyzed a következő adatokat, akkor meg fogod tudni oldani az ilyen típusú feladatokat.
    Az MTU max 1500 byte lehet (Maximum Transmission Unit - egy ethernet keretben átvihető hasznos adat). (Persze csak ha nincs jumbo frame, de ezt hagyjuk.)
    Az Ethernet header+crc 38 byte.
    Az IPv4 header 20 byte.
    A TCP header 20 byte, az UDP 8 byte. (Itt figyelned kell arra, hogy mit ír a feladat.)

    Remélem segítettem. Ha valamit kihagytam vagy elírtam, a többiek biztos kijavítanak.

Új hozzászólás Aktív témák

Hirdetés