The "~" notation is not part of the http standards, your browser doesn't give it any special significance, it is a .net way of indicating the root of the site. So only .net controls have the ability to interpret the "~" and replace it with the correct path. So this will work
<asp:HyperLink runat="server" NavigateUrl="~/index.aspx">Home</asp:HyperLink>
If you don't want to use a .net control you can do this instead
<a href="/index.aspx">Home</a>
The browser knows that "/" means site root, however if you put your site in a virtual directory then the "/" will not work any more, however the .net version will, that is why it is best to use the .net controls.
As a side note, if you can't even get a link to work then I strongly suggest you go through books on basic html and asp.net before you try anything more complex. Forums are good for asking specific questions, but not learning something from scratch. It is going to be unreasonable to come here and ask about every single problem you have.