Χρόνος ζωής πακέτου

Ξεκίνησε από Λαμπράκης Μανώλης, 31 Μαΐου 2018, 11:15:34 ΠΜ

« προηγούμενο - επόμενο »

Λαμπράκης Μανώλης

Καλημέρα σε όλους

Ήθελα να ρωτήσω κάτι για να ακούσω την άποψη σας.

Έστω πως έχουμε το ακόλουθα σχήμα:

Υπ1--δ1--δ2--δ3--δ4--Υπ2

Ο υπ1 θέλει να επικοινωνήσει με τον Υπ2 και ένα πακέτο διέρχεται από τους δρομολογητές δ1,δ2,δ3,δ4....η απορίαμου είναι η εξής...αν το πακέτο που ξεκινάει από τον υπ1έχει χρόνο ζωής 4,θα φτάσει στον προορισμό του ;; δηλαδή, κάθε δρομολογητής υποθέτουμε μειώνει κατά 1...στον δ4 μηδενίζεται και απορρίπτεται ή πρώτα ελέγχει πως ο υπ2 επικοινωνεί άμεσα με αυτόν οπότε και του παραδίδει το πακέτο με χρόνο ζωής 1;;; ή τίποτα από αυτά ;;;  >:D :police:

lamousis

Αν δεν κάνω λάθος το πακέτο θα φτάσει στον υπολογιστή 2.
Όταν φτάσει στο δ4 θα μηδενιστεί αλλά επειδή ο δ4 είναι συνδεδεμένος με τον Υπ2 τότε θα φτάσει κανονικά
Αν ο δ4 έπρεπε να το προωθήσει αλλού τότε θα είχε απορριφθει
Αν κατάλαβα καλά με βάση αυτό https://tools.ietf.org/html/rfc1812#section-4.2.2.9

socnafs

Θέμα Δ2 το 2014
Ποια ειναι η σωστη απαντηση?

gxry

Στο θέμα Δ2 του 2014,
η σωστή απάντηση είναι η "2. Δεν θα φτάσει στον προορισμό του"

Γιατί;
Το πακέτο καταφθάνει στον Δ1 με TTL=2.
Ο Δ1 μειώνει το TTL κατά 1 (TTL=1>0) και το προωθεί. Στη διαδρομή Δ1->Δ2 κινείται με TTL=1 και φτάνει στον Δ2 (TTL=1).
Ο Δ2 μειώνει το TTL κατά 1. Τώρα πια το TTL=0 και δεν το προωθεί παρακάτω (TTL=0).
Ο Δ2 δημιουργεί ένα μήνυμα ICMP "Time to live exceeded" και το στέλνει στον αρχικό αποστολέα.

Με το ίδιο σκεπτικό, και στο αρχικό ερώτημα του Μανώλη, ο δ4 θα λάβει το πακέτο με TTL=1, θα το μειώσει σε 0 και δε θα το προωθήσει στο interface που είναι συνδεδεμένο το δίκτυο με τον Υπ2. Δηλαδή δεν θα φτάσει στον Υπ2.

Με TTL=1 μπορούμε να φτάσουμε μόνο στο τοπικό μας δίκτυο (ίδιο δίκτυο) και δε μπορούμε να βγούμε έξω από αυτό.

lamousis

https://tools.ietf.org/html/rfc1812#section-4.2.2.9 λέει ότι
ΠαράθεσηA router MUST NOT discard a datagram just because it was received with TTL equal to zero or one; if it is to the router and otherwise valid, the router MUST attempt to receive it.
δλδ στο Δ1 έχει τιμή 2 στο Δ2 έχει τιμή 1 κ στο Δ3 τιμή 0 κ μετά θα απορριφθει (αλλά αφού ο Η/Υ Α συνδέεται με το Δ3 θα το πάρει), ή κάνω κάτι λάθος;

Λαμπράκης Μανώλης

Παράθεση από: gxry στις 19 Δεκ 2018, 03:54:58 ΜΜ
Στο θέμα Δ2 του 2014,
η σωστή απάντηση είναι η "2. Δεν θα φτάσει στον προορισμό του"



Γιατί;
Το πακέτο καταφθάνει στον Δ1 με TTL=2.
Ο Δ1 μειώνει το TTL κατά 1 (TTL=1>0) και το προωθεί. Στη διαδρομή Δ1->Δ2 κινείται με TTL=1 και φτάνει στον Δ2 (TTL=1).
Ο Δ2 μειώνει το TTL κατά 1. Τώρα πια το TTL=0 και δεν το προωθεί παρακάτω (TTL=0).
Ο Δ2 δημιουργεί ένα μήνυμα ICMP "Time to live exceeded" και το στέλνει στον αρχικό αποστολέα.

Με το ίδιο σκεπτικό, και στο αρχικό ερώτημα του Μανώλη, ο δ4 θα λάβει το πακέτο με TTL=1, θα το μειώσει σε 0 και δε θα το προωθήσει στο interface που είναι συνδεδεμένο το δίκτυο με τον Υπ2. Δηλαδή δεν θα φτάσει στον Υπ2.

Με TTL=1 μπορούμε να φτάσουμε μόνο στο τοπικό μας δίκτυο (ίδιο δίκτυο) και δε μπορούμε να βγούμε έξω από αυτό.

Σύμφωνα με αυτά που γράφει ο συνάδελφος πρώτα ελέγχει αν ειναι 0 ο χρόνος ζωής και αμέσως το απορριπτει δίχως να δει αν ο προορισμός εινια στο δίκτυο του.. Εγώ είχα το ανάποδο στο μυαλό μου, πως πρώτα ελέγχει αν ο προορισμός ειναι στο δίκτυο του.. Υπάρχει άραγε κάποια '' επίσημη '' απάντηση;; έχει κάποιος συνάδελφος επαφές για να ρωτήσει;;

gxry

Η εντολή ping με όρισμα -t n επιτρέπει την αποστολή πακέτου με time to live ίσο με n. (σε linux)
Σε windows νομίζω είναι /l.
Δοκιμάστε να κάνετε ping -t 1 <default gateway ip>
Θα γίνει επιτυχώς.
Δοκιμάστε να κάνετε ping -t 1 8.8.8.8 (είναι ο public dns server της google)
Θα πάρετε
...
From <default gateway ip> icmp_seq=1 Time to live exceeded
...
... που σημαίνει ότι ο πρώτος κόμβος στη διαδρομή σας είναι η προεπιλεγμένη πύλη (default gateway) και με TTL=1 μπορεί να φτάσει μόνο μέχρι εκεί.

Ιχνηλατήστε (με traceroute ή tracert σε windows) τη διαδρομή προς το 8.8.8.8
Σημειώστε τη σειρά των πρώτων 3-4 τουλάχιστον κόμβων.
Εκτελέστε διαδοχικά την ping με -t = 1, 2, 3 κ.ο.κ. Επιβεβαιώστε μέχρι ποιον κόμβο φτάνει κάθε φορά, από το από ποιον παίρνετε την απάντηση "time to live exceeded"

Σημειωτέον πως ένας router δεν ανήκει σε ένα δίκτυο. Ανήκει σε τόσα όσα είναι διασυνδεδεμένα στα αντίστοιχα interfaces του. Συνεπώς όταν δέχεται ένα πακέτο σε ένα interface του, το να το προωθήσει σε άλλο, σημαίνει διαφορετικό δίκτυο.
Παραλαμβάνει ένα πακέτο σε ένα interface, μειώνει το TTL και εάν δεν είναι μηδέν, το προωθεί σε άλλο interface του και κατ' επέκταση, δίκτυο.

gxry

Κατ' εφαρμογήν των όσων προανέφερα.

Ιχνηλατούμε τη διαδρομή προς το 8.8.8.8

george@castor:~$ traceroute -n 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1  192.168.1.1  0.597 ms  0.987 ms  1.389 ms
2  62.38.0.170  34.765 ms  34.902 ms  36.344 ms
3  62.38.40.13  38.706 ms  38.870 ms  39.069 ms
4  62.38.37.81  40.970 ms  41.991 ms  44.093 ms
5  62.38.96.150  46.090 ms  46.284 ms  48.011 ms
6  62.38.93.222  49.973 ms  52.097 ms  51.891 ms
7  213.144.178.36  93.881 ms 79.140.91.12  66.398 ms 195.22.193.108  77.367 ms
8  213.144.178.39  65.975 ms 89.221.39.50  67.204 ms 213.144.178.39  67.807 ms
9  72.14.209.224  45.469 ms 72.14.223.184  43.717 ms  44.415 ms
10  108.170.250.161  45.391 ms 108.170.250.177  45.781 ms *
11  216.239.54.2  46.887 ms 216.239.46.193  46.673 ms 216.239.54.2  46.253 ms
12  8.8.8.8  45.001 ms  39.783 ms 216.239.58.201  41.824 ms
george@castor:~$

Με την ping -R καταγράφουμε το δρομολόγιο μέχρι βάθους εννέα κόμβων το μέγιστο (σα να βλέπουμε τη διαδρομή ερχόμενοι από έξω προς εμάς)

george@castor:~$ ping -R -c 1 213.144.178.36
PING 213.144.178.36 (213.144.178.36) 56(124) bytes of data.
64 bytes from 213.144.178.36: icmp_seq=1 ttl=53 time=89.1 ms
NOP
RR:    192.168.1.115
   89.210.139.133
   62.38.40.14
   62.38.1.82
   62.38.93.222

   213.144.178.36
   195.22.211.240
   195.2.1.172
   195.2.1.36


--- 213.144.178.36 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 89.137/89.137/89.137/0.000 ms
george@castor:~$

Υπόψιν ότι επειδή η δρομολόγηση είναι μια δυναμική διεργασία, κάθε φορά που εκτελούμε τις παραπάνω εντολές, η διαδρομή μετά από τους πρώτους 3-5 κόμβους μπορεί να είναι διαφορετική σε κάθε εκτέλεση.
Στο παρακάτω σχήμα φαίνονται οι πρώτοι κόμβοι προς το 8.8.8.8
http://users.sch.gr/gxry/traceroute1.svg.png

κάνοντας ping  με -t 4 (TTL=4) το πακέτο αδυνατεί να φτάσει στον προορισμό που είναι interface του 4ου κόμβου
george@castor:~$ ping -t 4 -c 1 62.38.93.222
PING 62.38.93.222 (62.38.93.222) 56(84) bytes of data.
From 62.38.37.81 icmp_seq=1 Time to live exceeded

--- 62.38.93.222 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms
george@castor:~$

φτάνει όμως επιτυχώς στο interface εισόδου του 4ου κόμβου.

george@castor:~$ ping -t 4 -c 1 62.38.37.81
PING 62.38.37.81 (62.38.37.81) 56(84) bytes of data.
64 bytes from 62.38.37.81: icmp_seq=1 ttl=252 time=27.0 ms

--- 62.38.37.81 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 27.064/27.064/27.064/0.000 ms
george@castor:~$

Για να φτάσει στο interface εξόδου του 4ου κόμβου μπορεί, ανάλογα και με τους πίνακες δρομολόγησης, να χρειαστεί έως και δυο (2) επιπλέον hop (-t 6) για να εισέλθει προωθούμενο (το πακέτο) από τον 5ο κόμβο.



gxry

Ένα πιο εποπτικό σχεδιάγραμμα.
Σημείωση:
NAT -> Network Address Translation. Ό,τι πακέτο (datagram) φεύγει από τον οικιακό δρομολογητή, αντικαθίσταται η ιδιωτική διεύθυνση αποστολέα (source address) IP(v4) της μορφής 192.168.1.x με την εξωτερική διεύθυνση του οικιακού δρομολογητή που δόθηκε από τον provider, 89.210.139.133 στο παράδειγμά μας.

gxry

Οδηγίες για τον τρόπο χειρισμού του TTL μπορούν να βρεθούν στο:

Requirements for Internet Gateways [Braden & Postel]
https://tools.ietf.org/html/rfc1009
4.8.  Time-To-Live
[Page 36]

και στο:

https://tools.ietf.org/html/rfc1812#section-4.2.2.9
Requirements for IP Version 4 Routers

Στο
https://github.com/torvalds/linux/blob/master/net/ipv4/ip_forward.c
μπορείτε να δείτε πως υλοποιείται (πραγματικά) στην προώθηση πακέτων IP σε μια μηχανή που "τρέχει" linux όταν έχει ενεργοποιηθεί το ip forwarding και ενεργεί ως δρομολογητής.

απόσπασμα από τον πηγαίο κώδικα:


...
/*
*   According to the RFC, we must first decrease the TTL field. If
*   that reaches zero, we must reply an ICMP control message telling
*   that the packet's lifetime expired.
*/

if (ip_hdr(skb)->ttl <= 1)
   goto too_many_hops;
...

.