what does internal protect?

I know it protects assembly but what does that mean?

as IF I make a script with internal class, internal variables, some other script can access them all.

I find internal like public.

thanks in advance.

internal makes classes and their members accessible in the scope of the same assembly only. To test this, you can create a sample script:

public class InternalTest
{
   public int number;
}

and put it into Assets/Plugins folder. It will compile into a separate assembly, and you can reference it from any of your default scripts:

var it = new InternalTest { number = 1 };

This will compile without any problem. But if you change the whole InternalTest class or number field to internal, you’ll get compile error, because you try to access a class/member not visible to other assemblies.