[IP Datagram] |<-----------------IP datagram---------------------->| | |<-------- UDP datagram------------->| +---------------+----------+-------------------------+ | IP Header |UDP Header| UDP data | +---------------+----------+-------------------------+ |<-- 20 byte -->|<- 8byte->| |
[UDP Header]
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Srouce Port              |     Destination Port          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Length                 |        Checksum               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|             your data ...                                     |
                  ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    Length = UDP Headerの長さ + UDP Dataの長さ
[UDP Checksum用の仮想ヘッダ]
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                (Source) IP Address                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               (Destination) IP Address                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       0       | protocol(17)  |        Length                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Srouce Port              |     Destination Port          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Length                  |        Checksum               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|              UDP data ...                                     |
                  ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
fragment化されたデータがさらに fragment化されることがある。
[IP Header]
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|Version|  IHL  |Type of Service|        Total Length           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Identification          |Flags|    Fragment Offset      |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  Time to Live |    Protocol   |       Header Checksum         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Source Address                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Destination Address                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
|    TCP (or UDP) header, then your data ....                   |
                  ...
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
[IP Fragmentation on Ethernet]
|<-----------------IP datagram---------------------->|
|<-- 20 byte -->|<- 8byte->|<-------1473byte-------->|
+---------------+----------+-------------------------+
|   IP Header   |UDP Header|    UDP data             |
+---------------+----------+-------------------------+
|<-----------------IP packet----------------------->|  |<---IP packet--->|
|<-- 20 byte -->|<- 8byte->|<------1472byte-------->|  |<-- 20 byte -->| |
+---------------+----------+------------------------+  +---------------+-+
|   IP Header   |UDP Header|    UDP data            |  |   IP Header   | |
+---------------+----------+------------------------+  +---------------+-+
                                                                        ^1byte
(用語に関する注意)
[ICMP Error Message: Port Unreachable]
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Type       |     Code      |        Checksum               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|       Unused (must be 0)      |   MTU of next hop network     |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  ...                                          |
|             IP Header of Original IP Packet                   |
|                  ...                                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             First 8 byte Data of Original IP Packet           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    type =3: ICMP Destination Unreachable (宛先到達不能) 
    code = 4: Fragmentation Needed and Don't Fragment was Set
(例) p.171 Fig.11.10: 「netb → sun のMTU」を決定したい場合
                   552   SLIP    ???
       bsdi    sun------------------netb    solaris
    1500|   1500|                     |1500   |1500
      ============              ======================
        ETHERNET                       ETHERNET
(予想)
                    <-- <--             <----
                fragment化されたデータ  ICMP echo request(ping)
(実験結果)
        <----        <----              <----   ICMP echo request(ping)
        ----> ICMP echo reply
        <---- ICMP Destination Unreachable
(例) path MTU discovery機能がサポートされていない場合 sun% traceroute.pmtu slip 1 bsdi (140.25213.35) 15 ms 6 ms 6 ms 2 bsdi (140.252.13.35) 6 ms fragmentation required and DF set, trying new MTU = 1492 fragmentation required and DF set, trying new MTU = 1006 ... fragmentation required and DF set, trying new MTU = 296 2 slip (140.252.13.65) 377 ms 378 ms 377 ms
![]()
(例)      図11.13: UDPによる path MTU discoveryの例
      296 SLIP 296        552    SLIP    1500
    slip--------bsdi    sun------------------netb    solaris
             1500|   1500|                    |1500   |1500
              ==============            ======================
                ETHERNET                       ETHERNET
bsdi から solarisに ICMP Destination Unreachable Message
(Fragementation needed and Don't Fragment was Set) を返す。
bsdiから送られるICMP Messageが、「次のネットワークのMTU」を
含んでいればただちに path MTU がわかる。そうでない場合は、一度に送るサイズを小さくしたり、DF (DOn't Fragment) ビットを 0 にしたりする(Fig.11.4)。
    UDP Header + UDP Data
    = 8 + 8192
    = (1500  -  20) * 5 + 800
       ^^^^MTU  ^^IP Header
なので、1480byteのパケット5個と800byteのパケット1個が送出される
ことが期待される。
Fig.11.17 を見ると、Fig.11.17 Ethernetに8192byteのUDPデータグラムを送る 1 0.0 arp who-has svr4 tell bsdi 2 0.001234 (0.0012) arp who-has svr4 tell bsdi 3 0.001941 (0.0007) arp who-has svr4 tell bsdi 4 0.002775 (0.0008) arp who-has svr4 tell bsdi 5 0.003495 (0.0007) arp who-has svr4 tell bsdi 6 0.004319 (0.0008) arp who-has svr4 tell bsdi 7 0.008772 (0.0045) arp reply svr4 is-at 0:0:c0:c2:9b:26 8 0.009911 (0.0011) arp reply svr4 is-at 0:0:c0:c2:9b:26 9 0.011127 (0.0012) bsdi > svr4: (frag 10863:800@7400) 10 0.011255 (0.0001) arp reply svr4 is-at 0:0:c0:c2:9b:26 11 0.012562 (0.0013) arp reply svr4 is-at 0:0:c0:c2:9b:26 12 0.013458 (0.0009) arp reply svr4 is-at 0:0:c0:c2:9b:26 13 0.014526 (0.0011) arp reply svr4 is-at 0:0:c0:c2:9b:26 14 0.015583 (0.0011) arp reply svr4 is-at 0:0:c0:c2:9b:26
![]()
65535 - 20 - 8 = 65507しかし、実際はこれよりも小さい値をとる。 少なくとも576byte以上 (RIPが 512byte以下のパケットになる ように流していたことを思い出そう)である必要があるが、 多くの実装では NFS のデフォルトサイズ8192byteよりも大きくなっている。
                     1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 3 3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 (32bits width)
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   type (4)    |   code (0     |         checksum              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|               unused (must be 0)                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  ...                                          |
|             IP Header of Original IP Packet                   |
|                  ...                                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|             First 8 byte Data of Original IP Packet           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+