这篇文章是学习中科大自动化系郑烇老师《计算机网络》MOOC的笔记。课程录像可以在 这里 观看,教材是《计算机网络-自顶向下方法(第7版)》,课件可以在 这里 下载。

本篇内容对应课程录像的 P12 2.0 应用层概述P13 2.1 应用层原理,欢迎讨论交流。

根据Top-down的原则,本篇开始介绍应用层的内容。这一章主要包含三部分,第一是应用层的原理,第二是应用层的一些协议实例,第三部分是Socket API编程。
应用层的协议最多,这得益于建立和运行网络应用的成本极低。

网络应用的体系结构

概论部分已经在这里简单讲过,此处再做一次回顾。

服务器-客户端(C/S)模式

  • 服务器:一直运行,在固定IP地址监听特定端口,响应客户端的请求;

  • 客户端:可能间歇运行运行,向客户端主动发起请求,请求地址不固定;

  • 二者地位不平等,服务器位于中心地位;可扩展性差,服务器性能限制客户端访问体验;

端到端对等(P2P)模式

  • 几乎没有一直运行的服务器;
  • 每个节点既可以在一个session中作为服务器,又可以在另一个session中作为客户端;
  • 有自扩展性(用户越多,资源越多,传输性能越好),但是难以管理节点。

混合模式

混合模式的网络应用同时具备上面两种模式的某些特性,下面是两个例子:

  • Napster:音乐分发应用,存在一个中心服务器,节点上线时向中心服务器注册资源,请求的客户端向服务器查询资源并在其引导下使用端到端的协议与拥有资源的节点直接通信;
  • 即时通信软件:在线状态功能是集中式的,而部分用户对话是P2P的。

进程通信

  • 应用层的通信实际上是应用进程的通信,主机上运行的应用程序使用OS提供的通信服务,遵守协议交换报文(message)。进程按照其角色可以分为两类:
    • 客户端进程:发起通信的进程
    • 服务器进程:等待连接的进程

P2P模式中也存在两类进程的分别,这要依据节点在session中的任务来判断。

分布式进程通信有三个需要解决的问题,这也是理解应用层原理的关键:

  1. 要知道目标的地址和具体进程,即进程标示和寻址;

  2. 通信的具体流程,具体而言借助传输层提供了什么服务;

  3. 如何使用传输层的服务应用报文的格式和动作。

进程标示和寻址

  • 要有主机IP地址,要有连接方式,要有端口号;

    • TCP和UDP各有16bit的端口号,共65536个
  • 有一些约定俗成的端口,如HTTP web应用在80端口;

  • 任何应用进程之间的通信都可以用两个端节点的形式来标示,一般采用ip:port的形式进行编址。

传输层提供的服务

  • SAP即层间接口携带的信息:传什么(SDU)、谁传的(IP+TCP/UDP)、传给谁;

  • TCP或UDP的实体根据这些信息封装TCP段报文(具体在传输层介绍);

TCP Socket

  • 传统的跨层传输每次需要携带一些冗余重复的信息,为了便于管理,减少穿过层间的信息量,可以使用Socket。

  • 建立TCP连接后,用一个整数作为本地标识代表通信的双方和单方,反映唯一的一个会话(session)。Socket值即这个证书里面里面包含Client和Server的IP和端口号信息。

所谓“本地”,就意味着会话中通信双方各自对会话生成一个Socket值,并且互相不知道这个标识是什么。这实际上反映出Socket是一台主机之内应用层和传输层之间的约定,而在主机间的传输还是需要声明目标的地址。主机上的操作系统维护一个表用于根据Socket值查找地址信息。

  • UDP Socket的意义与TCP类似,只是其socket值仅包含源节点的IP和端口信息;这样一来,发送报文时,可以用socket代替“发件人”的地址,但还必须指明对方的IP和UDP端口。

  • Socket就像一个“传送门”一样,源主机只需向Socket推送数据,另一端的目标进程就可以收到。

要有层次意识。这里我们只关心应用层如何使用传输层提供的Socket服务,而至于Socket具体如何实现,则需留在介绍传输层时再详细阐述。

应用层如何使用服务

  • 应用以下层提供的服务为基础定义应用层协议

  • 协议只是应用的组成部分,与网络有关的遵守协议的内容叫做xx层实体,一个网络应用还有UI/IO等部分,这些不属于实体;

  • 应用层协议规定了不同端系统上的应用进程如何交换报文,包括类型、语法、语义和响应交互的规则;

  • 协议分为公开和私有的:

    • Open:RFC文档发布,允许互操作,如HTTP/SMTP
    • Private:如skype
  • 衡量和描述服务的表现主要有以下几个指标:

    • 丢失率,无需赘言;
    • 延迟,无需赘言;
    • 吞吐,单位时间内发出多少,对方能收到多少,这与带宽有关;
    • 安全性,无需赘言。
  • 不同应用对这些指标的要求不同。

Internet传输层提供的服务

  • Internet的传输层主要提供TCP和UDP两种服务,具体特点在第一章中有介绍。

既然UDP不具备TCP提供的一些良好特性,为什么还要有UDP?

  • UDP在IP基础上增加了端口号,可以在不需建立连接的情况下实现进程到进程的通信,提高了传输效率
  • 部分应用对可靠性要求不高,TCP的一些机制反而会对应用造成额外的负担

关于安全性

  • TCP和UDP完全不提供任何安全特性,明文通过互联网传输;

  • 在TCP上有一个SSL机制(在应用层),可以与TCP配合向应用提供安全的服务;

  • SSL可以实现私密性、数据完整性和端到端鉴别,提供SSL Socket API供网络应用使用。