>whay ip,udp,tcp do not notify the source when error of transmission

This is really a design choice.

TCP does report there was an error if it can't recover, but one of the major
design points of TCP is reliable delivery, so it will do everything it can to
handle errors and ensure delivery. If you're referring to why it doesn't
send explicit NAKs instead of timeouts, that's just a design choice.

IP and UDP were designed for maximizing speed and minimizing overhead. Some
errors are actually returned to the sender stack via the ICMP message protocol
and the stacks may use that information, but won't notifying the sending app.
Reliability is left as an item for the layers above. To really have full
error reporting back to the app would add overhead

I'm sure you could find some historic documents on the web that would go into
the details and debate of the design choices.