עבור לתוכן

TTL Value - TimeToLive

Featured Replies

פורסם

בקישור הזה מסבירים את המושג. http://searchnetworking.techtarget.com/definition/time-to-live

לפי מה שאני הבנתי, TTL זה בעצם כמות הראוטרים שהקובץ שאתה רוצה להעביר יכול לעבור. עכשיו אני דיי בטוח שזה לא נכון חח. אני ישמח אם תקראו את הפסקה השניה ותסבירו לי מזה בדיוק. תודה!

לכל העצלנים:

specify a certain time span in seconds that, when exhausted, would cause the packet to be discarded. Since each router is required to subtract at least one count from the TTL field, the count is usually used to mean the number of router hops the packet is allowed before it must be discarded. Each router that receives a packet subtracts one from the count in the TTL field. When the count reaches zero, the router detecting it discards the packet and sends an Internet Control Message Protocol (ICMP) message back to the originating host.

0 is restricted to the same host

1 is restricted to the same subnet

32 is restricted to the same site

64 is restricted to the same region

128 is restricted to the same continent

255 is unrestricted

פורסם

הבנת פחות או יותר נכון. רק שלא מדובר על קובץ, אלא על פאקט. (זה יכול ליהיות קובץ שלם, יכול ליהיות חלק מקובץ).

בגדול זה נקרא Time To Live כי פעם כשפיתחו את זה ההערכה הייתה שהראוטר מתנהל בערך שניה עם הקובץ לפני שהוא מעביר אותו הלאה.

היום זה כבר הרבה פחות, ולא מודד זמן, אלא כמה hops הפאקט יכול לעבור עד שהוא מגיע ליעד. אם המס' יורד ל0, הראוטר זורק את הפאקט ולא מעביר אותו.

ההיגיון מאוחרי זה הוא למנוע מפאקטים להסתובב לנצח במקרה של routing loops, כשלוקחים בחשבון ששום פאקט בעולם לא צריך לעבור 255 hops

כדי להגיע ליעדו בצורה תקינה.

פורסם
  • מחבר

אוקי את זה הבנתי אבל מה שלא הבנתי זה למה דווקא 255 ולא 256? או 348930?

אז אם אני רושם 0 אז ברגע שהחבילה מגיעה לראוטר היא רואה 0 ואז החבילה אמורה להמחק. אבל היא לא נמחקת לי מישום מה והיא כן מגיעה ליעד (שלחתי מהמחשב שלי למחשב שלי סתם כדי לראות איך זה עובד). למה?

פורסם

מה בדיוק עשית? איך שלחת?

ובכל מקרה החבילה לא עברה בשום ראוטר מהמחשב שלך לעצמו. נסה לשלוח למחשב ברשת אחרת, ותראה שזה לא יגיע.

למה דווקא 255? כי זה הערך של בייט אחד, שזהו גודל השדה שהוקצה לTTL. אין צורך ביותר.

פורסם
  • מחבר

אז אתה אומר שהחבילה עוברת מראוטר לראוטר בעולם עד שהיא מגיעה ליעד? או רק בין ראוטר לראוטר באותו רשת? כי 255 בעצם מגביל את הרשת ל255 ראוטרים.

אגב הנה התוכניות:

בקוד אני יוצר קבוצה ומפעיל את הפעולה שמקבלת הודעה. עכשיו שניה לפני שהיא מחכה להודעה לנצח אני מפעיל THREAD שמפעיל פעולה ששולחת הודעה. עכשיו אם הגדרתי את הTTL ל0 אז בעצם לפי מה שאתה אומר אז ההודעה הולכת לראוטר ומשם בחזרה אליי כי אני חלק מהקבוצה אבל בגלל שהTTL הוא 0 אז החבילה שמכילה את ההודעה שנאי רוצה לשלוח אמורה להזרק.. לפי מה שאתה אומר.


using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
class MAIN
{
public static MulticastOption MulticastOption;
private static MulticastOption CreateGroup()
{
MulticastOption = new MulticastOption(IPAddress.Parse("224.100.0.1"));
return MulticastOption;
}
private static void Receive()
{
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9050);
EndPoint ep = (EndPoint)iep;
sock.Bind(iep);
sock.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, MulticastOption);
//
byte[] data = new byte[1024];
new Thread(new ThreadStart(Send)).Start();
int recv = sock.ReceiveFrom(data, ref ep);
string stringData = Encoding.ASCII.GetString(data, 0, recv);
Console.WriteLine("received: {0} from: {1}", stringData, ep.ToString());
sock.Close();
}
private static void Send()
{
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint iep = new IPEndPoint(IPAddress.Any, 9051);
IPEndPoint iep2 = new IPEndPoint(IPAddress.Parse("224.100.0.1"), 9050);
server.Bind(iep);
server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse("224.100.0.1")));
server.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastTimeToLive, 0);
server.SendTo(Encoding.ASCII.GetBytes("This is a test message"), iep2);
server.Close();
}
public static void Main(String[] args)
{
CreateGroup();
Receive();
Console.ReadKey();
}
}

פורסם

ראוטר זה מכשיר שמחבר בין רשתות שונות, ככה שלרוב הביטוח "בין ראוטר לראוטר באותה רשת" די סותר את עצמו... :nixweiss:

פאקט לא יכול לעבור יותר מ255 ראוטרים מהמקור ליעד. לא משנה אם המקור והיעד הם באותו חדר או בקצה השני של העולם.

(תעשה כמה טרייסים ותראה שלרוב אתה אפילו לא מתקרב למס' הזה)

לא כל כך הבנתי מה אתה מנסה לעשות, או מה בדיוק הקוד הזה עושה.

אבל בכל מקרה, מי שמשנה TTL או זורק חבילות זה הראוטרים.

במקרה שאתה מתאר החבילה פשוט תגיע לסוויץ' וממנו לכל המחשבים שחברים בmulticast.

פורסם
  • מחבר

אם אמרתי לTTL להיות 0 אז איך זה הגיוני שברגע שאני שולח מידע לכולם בקבוצה שיצרתי, הקבוצה מחזירה לי מידע? אתה אמרת שברגע שהראוטר רואה 0 בTTL אז הוא מוחק את המידע ולא מעביר אותו לשום מקום... ובתוכנית אני כן מקבל את המידע ששלחתי. (שלחתי מהמחשב שלי למחשב שלי)

פורסם

כי המידע שאתה שולח לא עובר בשום ראוטר.

פורסם
  • מחבר

למה הוא לא עובר בשום ראוטר.. זה השאלה שלי. הרי אם אני משתמש בMULTICAST הוא חייב לעבור בראוטר

פורסם

למה?

ואם יש רשת שאין בה ראוטר (רק כמה מחשבים מחוברים לסוויץ'), אז אי אפשר לשלוח multicast?

multicast עובד גם ברמה 3 וגם ברמה 2. שים לב שכשאתה מוציא פאקט לIP של מולטיקאסט, הוא גם מקבל MAC יעד שייחודי למולטיקאסט.

(זה מורכב מהתחלה קבועה 01:00:5E וממשיך ב23 ביטים האחרונים של כתובת הIP)

פורסם
  • מחבר

אין לי מושג מה אמרת הרגע בשתי שורות האלה + מזה סוויץ'

multicast עובד גם ברמה 3 וגם ברמה 2. שים לב שכשאתה מוציא פאקט לIP של מולטיקאסט, הוא גם מקבל MAC יעד שייחודי למולטיקאסט.

(זה מורכב מהתחלה קבועה 01:00:5E וממשיך ב23 ביטים האחרונים של כתובת הIP)

אני ישמח לקבל הסבר או קישור למקור מידע שיסביר לי יותר. אגב תודה על התגובות :)

פורסם

איך הגעת למצב שאתה צריך לדעת מה זה TTL בלי שאתה יודע מה זה switch? ???

תקרא קצת על בסיס של רשתות לפני שאתה מתחיל לכתוב אפליקציות שעובדות ברשת....

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים