Le tunnel GRE
09/02/2005
 Christian CALECA 
Liste des cours

Le protocole

Accueil ] [ Le principe ] [ Tunnel GRE ] [ Le protocole ] [ Utilisation ] [ Limites ]


Que disent les RFCs ?

Elles le disent en anglais ici. Désolé, mais personne n'a eu l'idée (même pas moi) de traduire ça en français.

En réalité, pour comprendre comment ça fonctionne, il suffit de comprendre :

La capture de trames qui suit montre encore une fois un simple ping, mais observé cette fois-ci sur l'interface ppp0, c'est à dire l'interface qui sert de support au tunnel dans notre exemple. On y observe clairement les deux couches IP l'une dans l'autre :

Frame 5 (108 bytes on wire, 108 bytes captured)
    Arrival Time: May 11, 2004 10:09:55.596430000
    Time delta from previous packet: 1.731613000 seconds
    Time since reference or first frame: 1.731613000 seconds
    Frame Number: 5
    Packet Length: 108 bytes
    Capture Length: 108 bytes
Raw packet data
    No link information available
Internet Protocol, Src Addr: 80.8.147.232 (80.8.147.232), Dst Addr: 81.248.157.2 (81.248.157.2)
## ça, c'est la première couche IP, celle qui est transportée par PPPoE sur notre configuration.
## Observez les adresses IP source et destination, ce sont celles de nos passerelles
## sur l'internet.
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 108
    Identification: 0x0000 (0)
    Flags: 0x04
        .1.. = Don't fragment: Set
        ..0. = More fragments: Not set
    Fragment offset: 0
    Time to live: 255
    Protocol: GRE (0x2f)
## Vient ensuite GRE sur cette première couche IP
## Notez que pour cette couche IP, GRE est vu comme un protocole de niveau supérieur
## (code de protocole 0x2F) au même titre que TCP (code proto 0x06), 
## UDP (code proto 0x11) ou ICMP (code proto 0x01)
    Header checksum: 0xa877 (correct)
    Source: 80.8.147.232 (80.8.147.232)
    Destination: 81.248.157.2 (81.248.157.2)
Generic Routing Encapsulation (IP)
    Flags and version: 0000
        0... .... .... .... = No checksum
        .0.. .... .... .... = No routing
        ..0. .... .... .... = No key
        ...0 .... .... .... = No sequence number
        .... 0... .... .... = No strict source route
        .... .000 .... .... = Recursion control: 0
        .... .... 0000 0... = Flags: 0
        .... .... .... .000 = Version: 0
    Protocol Type: IP (0x0800)
Internet Protocol, Src Addr: 192.168.0.15 (192.168.0.15), Dst Addr: 172.16.254.2 (172.16.254.2)
## Vient enfin la seconde couche IP, encapsurée dans GRE. Observez les adresses IP source 
## et destination : Ce sont celles des passerelles dans les deux réseaux privés.
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 84
    Identification: 0x0000 (0)
    Flags: 0x04
        .1.. = Don't fragment: Set
        ..0. = More fragments: Not set
    Fragment offset: 0
    Time to live: 63
    Protocol: ICMP (0x01)
    Header checksum: 0xd0de (correct)
    Source: 192.168.0.15 (192.168.0.15)
    Destination: 172.16.254.2 (172.16.254.2)
Internet Control Message Protocol
# Enfin, ICMP (niveau 4), pour le ping.
    Type: 8 (Echo (ping) request)
    Code: 0 
    Checksum: 0xaf0c (correct)
    Identifier: 0xa30d
    Sequence number: 0x0001
    Data (56 bytes)

0000  45 00 00 6c 00 00 40 00 ff 2f a8 77 50 08 93 e8   E..l..@../.wP...
0010  51 f8 9d 02 00 00 08 00 45 00 00 54 00 00 40 00   Q.......E..T..@.
0020  3f 01 d0 de c0 a8 00 0f ac 10 fe 02 08 00 af 0c   ?...............
0030  a3 0d 00 01 53 8a a0 40 be 16 09 00 08 09 0a 0b   ....S..@........
0040  0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b   ................
0050  1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b   .... !"#$%&'()*+
0060  2c 2d 2e 2f 30 31 32 33 34 35 36 37               ,-./01234567

Et nous retrouvons la même structure dans la trame de retour :

Frame 6 (108 bytes on wire, 108 bytes captured)
    Arrival Time: May 11, 2004 10:09:55.659309000
    Time delta from previous packet: 0.062879000 seconds
    Time since reference or first frame: 1.794492000 seconds
    Frame Number: 6
    Packet Length: 108 bytes
    Capture Length: 108 bytes
Raw packet data
    No link information available
Internet Protocol, Src Addr: 81.248.157.2 (81.248.157.2), Dst Addr: 80.8.147.232 (80.8.147.232)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 108
    Identification: 0x0000 (0)
    Flags: 0x04
        .1.. = Don't fragment: Set
        ..0. = More fragments: Not set
    Fragment offset: 0
    Time to live: 251
    Protocol: GRE (0x2f)
    Header checksum: 0xac77 (correct)
    Source: 81.248.157.2 (81.248.157.2)
    Destination: 80.8.147.232 (80.8.147.232)
Generic Routing Encapsulation (IP)
    Flags and version: 0000
        0... .... .... .... = No checksum
        .0.. .... .... .... = No routing
        ..0. .... .... .... = No key
        ...0 .... .... .... = No sequence number
        .... 0... .... .... = No strict source route
        .... .000 .... .... = Recursion control: 0
        .... .... 0000 0... = Flags: 0
        .... .... .... .000 = Version: 0
    Protocol Type: IP (0x0800)
Internet Protocol, Src Addr: 172.16.254.2 (172.16.254.2), Dst Addr: 192.168.0.15 (192.168.0.15)
    Version: 4
    Header length: 20 bytes
    Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
        0000 00.. = Differentiated Services Codepoint: Default (0x00)
        .... ..0. = ECN-Capable Transport (ECT): 0
        .... ...0 = ECN-CE: 0
    Total Length: 84
    Identification: 0xa541 (42305)
    Flags: 0x00
        .0.. = Don't fragment: Not set
        ..0. = More fragments: Not set
    Fragment offset: 0
    Time to live: 254
    Protocol: ICMP (0x01)
    Header checksum: 0xac9c (correct)
    Source: 172.16.254.2 (172.16.254.2)
    Destination: 192.168.0.15 (192.168.0.15)
Internet Control Message Protocol
    Type: 0 (Echo (ping) reply)
    Code: 0 
    Checksum: 0xb70c (correct)
    Identifier: 0xa30d
    Sequence number: 0x0001
    Data (56 bytes)

0000  45 00 00 6c 00 00 40 00 fb 2f ac 77 51 f8 9d 02   E..l..@../.wQ...
0010  50 08 93 e8 00 00 08 00 45 00 00 54 a5 41 00 00   P.......E..T.A..
0020  fe 01 ac 9c ac 10 fe 02 c0 a8 00 0f 00 00 b7 0c   ................
0030  a3 0d 00 01 53 8a a0 40 be 16 09 00 08 09 0a 0b   ....S..@........
0040  0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b   ................
0050  1c 1d 1e 1f 20 21 22 23 24 25 26 27 28 29 2a 2b   .... !"#$%&'()*+
0060  2c 2d 2e 2f 30 31 32 33 34 35 36 37               ,-./01234567

Notez tout de même ici la remarquable organisation des couches d'un réseau. En réalité, au sens strict, nous avons un tunnel dans un tunnel, puisque notre tunnel GRE est creusé dans une couche IP elle même "tunnelisée" par PPPoE sur Ethernet du moins, jusqu'à votre modem. Au delà, nous ne savons pas exactement comment ça se passe, ce qui n'a d'ailleurs que peu d'importance, du moment que nous avons une couche IP cohérente et fonctionnelle de bout en bout.

Chacun fait son travail et tout se passe bien. C'est ça la répartition intelligente des tâches.


Précédente ] [ Accueil ] [ Suivante ]