Networks and operating systems have a lot of overlap. In this course, however,we are not going to discuss networking in detail, but rather focus on the networking abstractions provided by operating systems. These abstractions are necessary because in real-life networks we have to deal with a large variety of hardware and protocols. It would be almost impossible to implement practical networking solutions if we had to actually take all these factors into account when implementing, say, an instant messenger. When designing application-layer software, we we want to focus solely on the logic necessary to solve that particular problem; we don't want to deal with the details of routing, lostmessages, etc. Furthermore, since networks are slow,wewill need to use our previous work on threading and concurrency to hide latency and maximize parallelism.
What abstractions can the OS provide us so that we don't have to worry about all the nitty-gritty details of networking?