计算机网络 Vol2 | 应用层协议

网络应用是计算机网络存在的理由,如果我们不能构想出任何游有用的应用,也就没有必要支持它们的网络协议来,正是因特网的全面发展以来,的确开发众多有用的、有趣的网络应用,正是这些应用程序成为因特网成功的驱动力。

一些非常有意思的历史:

20世纪70年年代到80年年代,流行的经典的基于文本的应用,比如电子邮件、远程访问计算机等;

20世纪90年代中期引入的万维网,包括Web冲浪、搜索和电子商务

20世纪末,引入的即时通讯和对等P2P文件分享

之后出现来:IP电话、视频电话、视频网站、在线游戏

再到智能手机发展:签到、约会和地图导航等等

贲本章主要学习网络应用的原理和实现方面的只是,从关键的应用层概念开始,描述网络服务、客户和服务器、进程和运输层接口,之后设计开发运行在TCP和UDP的网络应用程序,之后学习Socket接口来编写一些简单的客户-服务器应用程序。

2.1 应用层协议原理

在应用层程序开发过程中,最重要的一点是不必要关心网络中路由设置等等情况。

2.1.1 网络应用程序体系结构( Application architecture)

应用程序研发者设计,规定如何在各种端系统上组织该应用程序,在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序所使用的两种主流体系结构之一:客户-服务器体系结构和对等P2P体系结构

  1. Client-server architecture,可能会出现多台客户端想服务器响应,在这个过程服务器的IP地址是固定的,但是会出现单独的服务器主机跟不上所有客户请求的情况,因此需要设置多个数据中心Data center用来创建强大的虚拟服务器,通常一个数据中心可能存在数十万台服务器
  2. P2P architecture,应用程序对于专用服务器的具有最小的依赖,相反应用程序在间断连接的主机之间使用直接通信,这些主机对称为对等方,服务器用于跟踪用户的IP地址,但是用户到用户的报文在用户主机之间无须通过中间服务器直接发送,一个比较大的特点是具有自拓展性(self-scalability)

2.1.2 进程通信(Process communication)

在构建网络应用需要对运行在多个端系统上的程序是如何进行通信的情况进行了解,⚠️计算机网络中并不关注于同一台主机的进程,而是不同端系统的进程(Process)之间的通信机制

在进程之间的通信会话场景中,发起通信的称为客户(Clinet)、在会话开始等待联系的是服务器(Server)

进程与网络之间通信的接口需要使用套接字(Socket)的软件接口向网络发送message和接受message;调用系统提供的socket api和操作系统,将其转换为不同的流量的tCP再发送。我们可以在Socket中选择什么?

  1. 选择运输层的协议
  2. 设定几个运输层参数,比如最大缓存和最大报文长度

同时在进程需要考虑地址IP和端口Port的选择

TCP/UDP端口列表 - 维基百科,自由的百科全书

2.1.3 可供应用程序使用的运输服务

针对不同的Application自然需要不同的运输方式,比如实际的火车、飞机各有不同,计算机网络传输方式也是相同。需求分析需要从之间的计算机网络的基本特性出发

  1. 可靠性数据传输(reliable data transfer)
  2. 吞吐量(Bandwidth)
  3. 定时(Time delay)
  4. 安全性(Security)

2.1.4 因特网(或者抽象模型下次层)提供的运输服务

提供TCP和UDP传输协议,这个是运输层提供的选择

  • TCP的主要特点是面向连接的服务,会有握手的过程,同时提供可靠的数据传输服务以及拥塞控制机制。
  • UDP提供不必要服务的轻量级运输协议,面向无连接的

额外的会有Security Socket Layer来将进行加密,提供关键进程到进程的安全性服务

2.1.5 应用层协议(application-layer protocol)

学习如何构造报文发送到Socket实现网络进程之间的相互通信,如何构造这些报文?如何明确这些报文中字段的含义?在何时发送报文?这些都是由协议规定的:

  1. 交换的报文类型,利用request和response报文
  2. 报文中字段是如何描述
  3. 字段的语义
  4. 确定一个进程何时以及如何发送报文

2.2 Web和HTTP

Web是一个引起公众注意的因特网应用,极大的改变了人与工作环境交流的方式,它将人们从被动接受转向按需操作

2.2.1 HTTP概况(HyperText Transfer Protocol,HTTP)

超文本传输协议是Web的核心,主要由客户端程序和服务器程序组成,在两个不同的host中,通过交换HTTP报文进行会话,需要回顾Web术语。

Web页面(web page)是由对象(Object)组成的,包括HTML文件、JPEG图片、JAVA程序或者视频等

URL是这些文件寻找地址的东西,多数Web页面包含HTML文本和5个JPEG图形,浏览器(Web browser)实现了HTTP的客户端、服务器(Web server)实现了HTPP的服务器端,用于存储web对象

HTTP也定义了客户端请求和回复Web页面的方式,HTTP使用TCP作为支撑运输协议,即HTTP一定能保证报文可以传递,同时在请求和回复的状态中,服务器并不会保存关于客户的任何信息,因此是一个无状态协议(Stateless protocol)

2.2.2 非持续连接和持续连接(yes or no persistent connection)

也就是客户端和服务器之间会存在一个持续文件交互是采用单独的TCP连接,还是经过不同的TCP连接,经过激烈的讨论希望在一定时间间隔内采用持续性连接的方式,超过之后采用非持续性连接的方式

2.2.3 HTTP报文格式

第一种请求报文,第一行是request line,后面的行header line,

请求行包括方法字段、URL字段和HTTP版本

常用的方法有GET、POST、HEAD、PUT、DELETE

HOST提供信息是web代理高速缓存所需要的

Connection:高速服务器不要使用持续连接

User-agent:指明用户代理,也就是服务器的类型

Accept-language:表示拥护想要该对象的版本

img

image-20220618194455618

三个部分:初始状态行status line、六个首部行header line、实体行entity body

HTTP以及状态码

connection 表示发送完之后将关闭tcp连接

200 OK请求成功

301对象被永久转移了

400通用差错代码

404 请求的文档不在服务器上

505 服务器不支持请求报文使用的HTTP协议版本

Date 表示服务器从文件系统中检索到该对象,并插入响应报文并发送该报文的时间

Server:表示服务器产生

Last-modified:表示对象创建或者最后修改的日期和时间

Content-Length:包含的字节数

content-type:对象是HTML文本

无状态的HTTP服务器简化了设计,但是为了识别用户,还是希望将请求内容与用户身份联系起来,为此使用Cookie,其主要由四个组件构成

  1. 在HTTP响应报文中一个cookie首部行
  2. 在HTTP请求报文中一个cookie首部行
  3. 在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理
  4. 位于web站点的一个后端数据库

但是结合cookie用户提供的账户信息,web站点可以知道许多用户的信息

img

image-20220618194508226

2.2.5 Web缓存(cache)

也叫做代理服务器(proxy server),是能够代表初始Web服务器来满足HTTP请求的网络实体

web缓存可以大大减少客户请求的响应时间,

同时可以大大减少一个机构的接入链路到因特网的通信量,通过内容分发网络(Content Distribution Network,CDN),web缓存器正在让因特网发挥越来越多的作用

但是web缓存的一个重要的问题可能是,存放在缓存器中的对象副本可能是陈旧的,这就需要缓存器证实对象是最新的,也就是条件GET(conditional GET方法)

2.3 Mail和SMTP、POP3、IMAP、HTTP

当因特网还在襁褓之中,电子邮件已经称为来最流行的应用程序,是一种异步通信媒介,也就是人们方便的时候可以收发邮件,不必与他人计划进行协调。同时电子邮件的优势在于具有附件、超链接、html格式文本的图片的报文。

首先看电子邮件的总体结构以及关键组成部分

  1. 用户代理 user-agent
  2. 邮件服务器 mail-server
  3. 简单邮件传输协议 simple-Mail-Transfer-Protocol,SMTP

重要的场景: SMTP一般不使用中间邮件服务器发送邮件,即时这两个邮件服务器位于地球两端也是这样的,即使另一个服务器没有开机,这样的报文也会保留在ALice的邮件服务器上等待进行新的尝试

2.3.1 SMTP协议

img

image-20220618194530174

2.3.2 SMTP协议与HTTP协议对比

HTTP 从Web服务器向客户端传送文件;但是HTTP是一个pull protocol,在方便的时候,某些人在Web服务器上装载信息,用户使用HTTP协议从服务器上拉取这些协议

SMTP 从一个邮件服务器向另一个邮件服务器传送文件,也就是发送邮件服务器将文件推向接受邮件服务器

其他的区别:

  1. STMP要求每个报文按照7比特ASCII格式,如果含有非法的7比特或者二进制的图形文件,需要按照7比特ASCII进行编码,HTTP不受这样的限制
  2. 如何处理包含文本和图形的文档,HTTP将其封装在HTTP响应报文中,SMTP则把所有报文对象放在一个报文中

2.3.3 邮件报文格式

类似与SPI、CAN,无线传递都需要使用首部行来作为标识,只是作为应用层的标识可能更人性化一点,但是这样的人性化可能在一定程度上让人产生费解,之后理解背后的机理才能更好理解别人。

img

image-20220618194546104

2.3.4 邮件访问协议

之前讨论的SMTP协议,必须要求发送端发送的时候,接收端在线,但是由于PC或者手机不能一种保持在线,因此通常需要一个共享的邮件服务器,但是这个服务器和代理之间不能通过SMTP传送,因为SMTP只能Push,不能PULL文件,因此需要一些流行的邮件访问协议,包括

  1. 第三版的邮局协议,POST-OFFCIE-PROTOCOL,POP3
  2. 第一个阶段:特许(Authorization)
  3. 第二个阶段:事务处理
  4. 第三个阶段:更新
  5. 特点,一旦将邮件下载到本地主机就能简历邮件文件夹,并将下载的邮件放入该文件夹中,之后Bob可以删除报文,可以在文件夹之间移动报文,并查询报文,但是POP3协议没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法
  6. 因特网邮件访问协议 Internet Mail Access Protocol,IMAP
  7. IMAP协议是一个邮件访问协议,每个报文与一个文件夹联系起来,当报文第一次到达服务器时,与收件人的inbox的文件夹相关联,收件人则能够把邮件转移到一个新的、用户创建的文件夹中,阅读邮件、删除邮件等
  8. 还提供了在远程文件夹中查询邮件的命令
  9. 维护了IMAP会话的用户状态信息
  10. (重要)允许用户代理获取报文某些部分的命令
  11. HTTP
  12. 在上述选择和获取的过程采用的是http的协议
  13. 但是邮件传输的过程中仍然采用的是SMTP协议

img

image-20220618194556513

2.4 URL和DNS

一件事物通常可以通过多种方式来进行标识,我们可以通过姓名来标识,也可以通过身份证来标识、也可以通过社保账号来有限的、通过某个学校的学号来确定的认识一个人,在不同的场景下可以采用不同的识别方式,对于计算机网络中的主机有多种方式

  1. 主机名称(Host name),www.baidu.com等,但是主机几乎没哟提供主机在因特网中的位置信息
  2. IP地址,利用4字节组成,具有严格的层次结构,这里将在第四章中进行讨论

2.4.1 DNS(Domain Name System,域名系统)

人们容易记住主机名标识方式,但是路由器喜欢定长的、有着层次结构的IP地址,为了这些不同的偏好,我们需要一种将主机名称转换到IP地址的目录服务,这就是域名系统的主要功能

  1. 一个分层的DNS服务器实现的分布式数据库
  2. 一个是的主机能够查询分布式数据库的额应用层协议

DNS服务器通常是运行BIND(Berkeley internet name domain)软件的UNIX,使用53端口,考虑它如何使用,可以观察一个客户端发送URL请求会发生什么样的过程:

  1. 用户主机上运行DNS应用的客户端
  2. 浏览器从上述URL中抽取出主机名,也就是URL,传递给DNS应用的客户端
  3. DNS客户端向DNS服务器发送包含主机的请求
  4. 返回ip地址的报文
  5. 一旦浏览器没收到来自DNS的IP地址,向该IP地址的80端口的HTTP服务器进程发送一个TCP连接

除进行主机到IP地址的转换之外还提供服务

  1. 主机名到ip地址转换
  2. 主机别名 host aliasing
  3. 邮件服务器别名 mail server aliasing
  4. 负载分配 load distribution 用于在冗余的服务器之间进行负载分配,繁忙的站点被冗余分布在多台服务器中,每台服务器均运行在不同的端系统高上,因此ip地址集合可以与同一个规范主机名相联系。一些内容分发公司也以更加复杂的方式使用DNS来提供web内容分发

2.4.2 DNS工作原理概述

DNS客户端使用gethostbyname() 的方法可以简单的得到IP地址的报文,但是对于DNS内部机理复杂,因为它是由分布在全球大量的DNS服务器以及定义DNS服务器与查询主机通信方式的应用层协议组成

如果一个网络只存在一个DNS服务器

  1. 单点故障 a single point of failure
  2. 通信容量 traffic volume
  3. 远距离的集中式数据库 distant centralized database
  4. 维护 maintenance,因此需要采用不同层次方式组织

需要分布式、层次数据库

  1. 根DNS
  2. 顶级域 Top Level Domain TLD
  3. 权威DNS服务器
  4. 本地DNS服务器,这个由ISP提供,本地DNS服务器通常使用DHCP与其他本地DNS服务器连接,在本次网络中可能与用户的服务器临近,起到了代理的作用

img

image-20220618194611062

这里使用到了递归查询(recursive query)和迭代查询(iterative query)两种方式

DNS缓存

为了改善时延和减少互联网上的DNS报文数量,广泛使用缓存的概念,一般情况下DNS服务器在同一段时间内会丢弃缓存的信息,这样会让的根服务器或者TLD的服务器被绕过

DNS记录和报文

共同实现了DNS分布式数据库的所有DNS服务器存储的资源记录,只有查询和回答报文

img

image-20220618194625034

2.5 File Share和P2P

到目前为止,本章描述的应用包括web、电子邮件和DNS都采用了客户-服务器体系结构,极大依赖于总是打开的基础u设施服务器,使用P2P体系结构对于总是打开的基础设置设施服务器有最小的依赖,与之相反,成间歇连接的主机批次直接通信,这些对等方并不为服务提供商ISP所拥有,而是受用户控制的桌面计算机和个人计算机

本次章节将研究一个非常自然的P2P应用,即从单一服务器向大量对等方发送大文件,这里可能是Linux操作系统,也有可能是MP3音乐文件等,在客户-服务器文件分发中,该服务器必须向每个对等方发送该文件的副本,服务器承担了极大的负担,并且消耗了大量的服务器带宽;在P2P文件分发中,每个对等方能够收到任何其他对等方重新分发已经收到的该文件的任何部分,而从在分发过程中协助该服务器,2016年中最重要的是BitTorrent

2.5.1 P2P体系结构的拓展性

为了将客户-服务器体系结构与P2P体系结构进行比较,阐述P2P的内在自拓展性,我们现在考虑一个用于两种体系结构类型的简单定量模型

2.6 VIdeo Stream和内容分发网CDN

在本节我们将对如何在今天的因特网实现流行的视频流服务进行概述,实现的方式是通过应用层协议和像高速缓存那样方式运行的服务器。

2.6.1 因特网视频

video是一系列的图像,通常是按照一种恒定的速率来,这些是通过像素阵列组成,通过比特编码来实现亮度或者颜色,因此比特率越高、图像质量越好,用户的总体视觉感受越好,因此视频网站也会根据视频设置不同清晰度的版本

2.6.2 HTTP流和DASH(dynamic adaptive streaming over HTTP)

HTTP流中,视频只是存储在HTTP服务器中作为一个普通的文件,每个文件都有一个特定的URL,当用户查看这个视频的时候,客户与服务器创建一个TCP连接并发送对该URL的get请求,服务器则以底层网络协议和流量条件允许的尽可能快的速率,发送视频文件,另一端字节被收集到客户应用缓存中,一段超过预先设定的门限,客户应用程序就可以开始播放

对于相同的客户的不同时间也有可能存在不同的带宽,因此需要根据不同时段,设计不同的比特率,对应于不同的质量水平,客户动态选择来自高速率版本的快,当可用带宽量较低的时候,客户可以自然选择来自低速率版本的快

2.6.3 内容分发网 content distribution network

对于一个因特网视频公司,最直观的是建立单一的大规模数据中心,在数据中心中存储所有的视频,并直接从该数据中心向世界范围的客户传输流式视频,会存在一些问题

  1. 如果客户远离数据中心,服务器到客户的分组将跨越许多通信链路并肯呢个经过不同的ISP,导致烦人的通信时延
  2. 经过多条链路会浪费网络带宽
  3. 单个数据中心代表着单点故障

2.7 课后习题

课后习题和问题_与君共勉的技术博客_51CTO博客

课后习题和问题 复习题 2.2~2.5节_与君共勉的技术博客_51CTO博客

1
nslookup blog.tjdata.site

计算机网络 Vol2 | 应用层协议
https://blog.tjdata.site/posts/52fccb61.html
作者
chenlongxu
发布于
2024年4月29日
许可协议