图3展示了通过因特网彼此通信的两个进程间的套接字通信(本图假设底层的传输协议是TCP,不过UDP也可以同样使用)。可见套接字是单台主机内应用层和传输层之间的接口。套接字也用于指代应用程序和网络之间的应用程序接口(application PRogram interface,简称API),因为它又是用于构造因特网中的网络应用程序的编程接口。应用程序开发人员可以完全控制套接字的应用层一侧,对于套接字的传输层一侧却几乎无能为力。对于传输层一侧他们只能控制:(1)传输协议的选择;(2)诸如最大缓冲区大小和最大片段大小等有限几个传输层参数的调整。一旦选定某个可用的传输协议,就使用由该协议提供的传输层服务来构造应用程序。
因特网(更一般地说,TCP网络)给应用程序提供两个传输协议:用户数据报协议(UserDatagram Protocol,UDP)和传输控制协议(Transaction Control Protocol,TCP)。当开发人员创建一个新的因特网应用时,他必须选择UDP或TCP这两个协议之一用于该应用。这两个协议给应用提供不同的服务模型。
因特网上,公众域和专属的应用层出不穷。我们不想百科全书式地罗列一大堆因特网应用,于是选了少数几个既重要且流行的应用集中讨论。我们将具体地讨论4个流行的应用:Web、文件传送、电子邮件、目录服务。我们首先讨论web,其原因不仅在于web是一个极其流行的应用,还在于它的应用层协议(即HTTP)相对简单,可用于阐明网络协议的许多要害因素。接下来讨论文件传送,因为其协议与HTTP恰好形成对照,使得我们可以强调一些额外因素。我们还讨论电子邮件,它是因特网中第一个高度流行的应用。应该看到,现代的电子邮件使用不止一个应用层协议。Web、文件传送和电于邮件有共同的服务需求:需要可靠的传输服务,没有非凡的定时需求,能接受弹性带宽服务。TCP提供的服务完全满足这3个应用。域名系统(Domain Name System,DN5)是我们讨论的第4个应用,它为因特网提供目录服务。多数用户不会直接与DNS打交道;相反,他们通过其他应用(包括即将讨论的那3个应用)间接求助于DNS。DNS精妙地展示了可以怎样在因特网中实现分布式数据库。这4个即将讨论的应用对时间都不大敏感。