网络应用一般上分为客户端与服务端,一般是客户端向服务端请求服务,服务端响应客户端的服务。这种请求与响应是通过某种通信协议来实现的。实际上一个网络应用所涉及的网络通信协议非常多,有应用层协议(如HTTP协议)、运输层协议(如TCP协议)、网络层协议(IP协议)、网络接口层协议(MAC协议、ARP协议等),如下图所示。
在网络编程中,更多的关注是TCP/IP层的编程。当然,网络编程也包括网络接口层,例如利用原始套接字API来自定义各层协议。但绝大部分情况下,本内容是聚焦于TCP/IP协议。
在网络编程API中,套接字API是运行于用户进程与操作系统内核之间的接口,套接字API之上是应用层细节,往下是通信细节,一般上通信细节由操作系统内核完成,比如TCP/UDP协议的调用、网络层的调用,网络的形成和路由协议等等,而用户只需要关注应用层细节即可。