Значение TTL - TimeToLive - PullRequest
       31

Значение TTL - TimeToLive

0 голосов
/ 21 июня 2011

http://searchnetworking.techtarget.com/definition/time-to-live

Из этой статьи я запутался в определении об этой теме.есть ли шанс, что кто-нибудь поможет мне лучше понять, что происходит?

stav.

----------------------------------


РЕДАКТИРОВАТЬ:

Я пытался отправить себе массаж с того же компьютера.когда я устанавливаю значение TTL в 0, посылка, которую я посылаю, все равно попадает ко мне.это почему?вот код:

кстати, эта строка в методе отправки.

server.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.MulticastTimeToLive, 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();
    }
}

1 Ответ

0 голосов
/ 21 июня 2011

Клиентские машины установить значение TTL при создании пакета, чтобы указать максимальное количество прыжков, которое разрешено пройти пакету.

Каждый раз, когда пакет проходит через маршрутизатор, маршрутизатор будет уменьшать значение TTL.

Если значение TTL достигнет нуля, маршрутизатор отбросит пакет и вернет сообщение об ошибке ICMP «Превышено число переходов».

Основное преимущество поля TTL состоит в том, чтобы остановить пакеты, нависающие вокруг навсегда в случае петли маршрутизации , то есть сбой сети, который вызывает пакеты, отскакивающие вокруг одного и того же набора маршрутизаторов.

...