Pardon me for going slightly offtopic, but I felt your pain a couple of years ago and I've developed a workflow which you might find useful.
When debugging a connectivity issue, I split it into three parts:
- my connection to the ISP (that's between me and the gateway at the ISP)
- the infrastructure of the ISP (you will have to do a little investigation to find this out, because some ISPs don't disclose their network ranges. Look at the output of traceroute and do "whois" against each IP starting with your gateway. Up to a certain point they will be assigned to your ISP, that's the internal infrastructure of your ISP)
- the rest of the internet
My favorite tool for debugging networking issues is mtr. There are at least Linux and Windows versions. It works like a combination of ping and traceroute - it's like an interactive traceroute.
A wide class of connectivity issues happens because IP packets loss. I will elaborate on them in reverse order:
- issues outside your ISP. This is not an excuse for your ISP support to turn around angry customers. They should work with the upstream provider and settle this. Such problems don't happen often, because backbone ISPs have better quality. They might happen if some link went down and traffic is temporarily rerouted over a backup link that has lower bandwidth.
- issues inside your ISP infrastructure. This is the situation when you can be more harsh. Call the support and tell them "Your router with this IP (you will see which one in mtr, there will be packet losses there) has issues. Fix them and tell me how much time do you need for fixing that." Sometimes they will say ten minutes or 30 minutes, just to dodge your call, because most people call once and give up. If they said ten minutes and the problem is not getting fixed, call again after ten minutes. Never say "internet is not working" or something like that. Tell them exactly what the problem is, if you can figure it out, this will make them understand that you know the tech part and they won't get away with silencing you by providing some silly tech excuse.
- issues between you and your gateway. These can be harder to debug, because there are many factors involved. They can happen because your network card went faulty. But they also can happen because you get ADSL over an old phone line and the signal is bad. This is already the headache of your ISP, it shall replace your phone line to meet the standards.
Missing internet stresses people a lot, so never be rude when talking with support guys. Remember that they are just earning some money this way and generally they are not your ennemies :-) So be nice to them. But also always ask for their name and ID. It is important because this way you already know the name you shall complain about later, if the support guy provides inaccurate information or is just telling plain lies to you (yes, that happens too). If you feel that you are wasting your time, politely request to be hooked up with an upper-level sysadmin and talk to him.
Set up a locally hosted forum and spread the word among the clients of a certain ISP. If something gets bad, the forum will instantly fill up with complaints and logs which prove that the ISP indeed has issues and that your case is not a single one. Such an argument is very valuable if the situation evolves and you have to talk with a senior manager. They are very sensitive about such matters and this is one of the reasons why a lot of ISPs don't have their own tech support forums for customers, because every reported issue is bad PR for them :-)
As correctly pointed, monopolies, especially government-linked ones, are another pain. But this is a double edge sword. If the monopoly gains bad reputation against its clients as "crappy ISP", as soon as there will appear a second player on the market (and this will eventually happen, sooner or later) - a lot of clients will cancel their contracts. Not for switching to a better ISP, just for getting rid of a crappy one.
Regarding your ping problem: yes, it can be a DNS issue. Sometimes ISP startups (especially in developing countries) get a pair of DNS servers configured when launching their services. At some point the client base grows enough that the DNS servers can't handle the load anymore "just because sometimes it still works, so no need to fix anything". There are a couple of workarounds here that can help mitigate the problem:
- use alternate DNS servers: the ones from google or from opendns. Use them if you can, it is not always possible, because some ISPs go as far as blocking DNS requests to third-party DNS servers (guess what happens when their own DNS servers die for some reason)
- use a local DNS caching proxy. I've used pdnsd and it did the job very well for me