Καλημέρα σε όλους
Ήθελα να ρωτήσω κάτι για να ακούσω την άποψη σας.
Έστω πως έχουμε το ακόλουθα σχήμα:
Υπ1--δ1--δ2--δ3--δ4--Υπ2
Ο υπ1 θέλει να επικοινωνήσει με τον Υπ2 και ένα πακέτο διέρχεται από τους δρομολογητές δ1,δ2,δ3,δ4....η απορίαμου είναι η εξής...αν το πακέτο που ξεκινάει από τον υπ1έχει χρόνο ζωής 4,θα φτάσει στον προορισμό του ;; δηλαδή, κάθε δρομολογητής υποθέτουμε μειώνει κατά 1...στον δ4 μηδενίζεται και απορρίπτεται ή πρώτα ελέγχει πως ο υπ2 επικοινωνεί άμεσα με αυτόν οπότε και του παραδίδει το πακέτο με χρόνο ζωής 1;;; ή τίποτα από αυτά ;;; >:D :police:
Αν δεν κάνω λάθος το πακέτο θα φτάσει στον υπολογιστή 2.
Όταν φτάσει στο δ4 θα μηδενιστεί αλλά επειδή ο δ4 είναι συνδεδεμένος με τον Υπ2 τότε θα φτάσει κανονικά
Αν ο δ4 έπρεπε να το προωθήσει αλλού τότε θα είχε απορριφθει
Αν κατάλαβα καλά με βάση αυτό https://tools.ietf.org/html/rfc1812#section-4.2.2.9 (https://tools.ietf.org/html/rfc1812#section-4.2.2.9)
Θέμα Δ2 το 2014
Ποια ειναι η σωστη απαντηση?
Στο θέμα Δ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 μπορούμε να φτάσουμε μόνο στο τοπικό μας δίκτυο (ίδιο δίκτυο) και δε μπορούμε να βγούμε έξω από αυτό.
https://tools.ietf.org/html/rfc1812#section-4.2.2.9 (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 ο χρόνος ζωής και αμέσως το απορριπτει δίχως να δει αν ο προορισμός εινια στο δίκτυο του.. Εγώ είχα το ανάποδο στο μυαλό μου, πως πρώτα ελέγχει αν ο προορισμός ειναι στο δίκτυο του.. Υπάρχει άραγε κάποια '' επίσημη '' απάντηση;; έχει κάποιος συνάδελφος επαφές για να ρωτήσει;;
Η εντολή 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 του και κατ' επέκταση, δίκτυο.
Κατ' εφαρμογήν των όσων προανέφερα.
Ιχνηλατούμε τη διαδρομή προς το 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 (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ο κόμβο.
Ένα πιο εποπτικό σχεδιάγραμμα.
Σημείωση:
NAT -> Network Address Translation. Ό,τι πακέτο (datagram) φεύγει από τον οικιακό δρομολογητή, αντικαθίσταται η ιδιωτική διεύθυνση αποστολέα (source address) IP(v4) της μορφής 192.168.1.x με την εξωτερική διεύθυνση του οικιακού δρομολογητή που δόθηκε από τον provider, 89.210.139.133 στο παράδειγμά μας.
Οδηγίες για τον τρόπο χειρισμού του TTL μπορούν να βρεθούν στο:
Requirements for Internet Gateways [Braden & Postel]
https://tools.ietf.org/html/rfc1009 (https://tools.ietf.org/html/rfc1009)
4.8. Time-To-Live
[Page 36]
και στο:
https://tools.ietf.org/html/rfc1812#section-4.2.2.9 (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 (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;
...
.