(二)应用层协议、HTTP、电子邮件、DNS

目录

  • 一 应用层协议
    • 1.1 网络应用程序体系结构
      • CS体系结构
      • P2P体系结构
    • 1.2 进程通信
      • 客户和服务器进程
      • 进程与计算机网络之间的接口
      • 进程寻址
    • 1.3 可供应用程序使用的运输服务
      • 可靠数据传输
      • 吞吐量
      • 定时
      • 安全性
    • 1.4 因特网提供的运输服务
      • TCP服务
      • UDP服务
      • 因特网运输协议不提供的服务
    • 1.5 应用层协议
  • 二 Web和HTTP
    • 2.1 HTTP概况
    • 2.2 非持续连接和持续连接
    • 2.3 HTTP报文格式
    • 2.4 Web缓存
    • 2.5 条件GET方法
  • 三 因特网中的电子邮件
    • 3.1 SMTP
    • 3.2 与HTTP的对比
    • 3.3 邮件报文格式
    • 3.4 邮件访问协议
      • POP3
      • IMAP
      • 基于Web的电子邮件
  • 四 DNS:因特网的目录服务
    • 4.1 提供了哪些服务
    • 4.2 工作机理概述
      • 分布式、层次数据库
      • 多层权威DNS服务器
      • 递归查询和迭代查询
      • DNS缓存
    • 4.3 DNS记录和报文
      • DNS报文
      • 在DNS数据库中插入记录
  • 参考

一 应用层协议

我们现在开发系统(比如用java、php等语言),一般是编写将在多台端系统上运行的软件。而不是为网络核心设备写应用程序软件。因为在文章一中说过路由器只有三层,链路层交换机只有两层(物理层、数据链路层)。

1.1 网络应用程序体系结构

不同于网络的体系结构(比如说5层因特网体系结构),应用程序体系结构由开发者设计,主流有:客户-服务器体系模式和对等(P2P) 体系结构。
(二)应用层协议、HTTP、电子邮件、DNS_第1张图片

CS体系结构

常见有web、电子邮件等待。特征:

  • 客户相互之间不直接通信
  • 该服务器具有固定的、周知的地址
  • 服务器总是打开的
  • 互联和带宽费用高

为了能够处理海量的请求,一些公司会配备大量主机的数据中心,用于创建强大的虚拟服务器.(如google、百度、阿里巴巴等)

P2P体系结构

比如迅视频电话(Skype)

  • 主机之间直接通信,这些主机称为对等方
  • 许多流量密集型应用是P2P的(减少带宽压力)
  • 某些应用具有混合的体系结构。服务器用来跟踪用户的IP地址,但用户到用户的报文在用户主机之间直接发送
  • 自扩展性!通常不需要太大的服务器基础设施和服务器带宽。
  • 由于是非集中式结构,面临安全性、性能和可靠性的调战

1.2 进程通信

多个端系统的程序通信,本质是进程的通信。下面主要关注的是非同一台主机上的进程间的通信

客户和服务器进程

在一堆进程之间的通信会话场景中,发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器

进程与计算机网络之间的接口

进程和另一个进程之间收发报文必须通过下面的网络。进程通过一个称为套接字(socket) 的软件接口向网络发送报文和从网络接收报文

套接字是一台主机内应用层和传输层之间的接口,同时socket也被称为应用程序编程接口(API)。开发者可以控制socket在应用层端的一切,对socket在传输层却几乎没有控制权
对传输层的控制权:

  1. 选择传输层协议
  2. 可能可以设定一些传输层参数,如最大缓存和最大报文(在后面的文章会详细说明)
    (二)应用层协议、HTTP、电子邮件、DNS_第2张图片

进程寻址

接收进程需要一个地址,一般需要定义如下两种信息

  1. 主机的地址,由IP标识
  2. 在目的主机中指定接收进程(也就是socket)的标识符。端口号(port)用于这个目的

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

很多网络都提供了不止一种运输层协议。我们在选择时,一般通过四个方面来进行考虑

可靠数据传输

分组可能在网络中丢包。如果一个协议能够确保由应用程序的一端发送的数据正确、完全地交付给该应用程序的另一端。则被认为提供了可靠数据传输。
当一个传输层协议不提供可靠数据传输时,则发送程序发送的某些数据可能到达不了接收程序。这可能被容忍丢失的应用(如直播、视频电话、语音)所接收

吞吐量

可用吞吐量就是发送进程能够向接收进程交付比特的速率。
一些运输层协议能够以某种特定的速率提供确保的可用吞吐量。
根据对吞吐量是否由要求,应用分为带宽敏感的应用和弹性应用

定时

即是否能保证通信的延迟在指定范围内

安全性

运输层协议是否能够加密由发送进程传输的所有数据,然后接收主机中,运输层协议能够在交给接收进程前解密

1.4 因特网提供的运输服务

上面说的是计算机网络能够提供的通用运输服务。

TCP服务

  • 面向连接服务:在报文流动前,会先通过握手建立一个TCP连接。报文发送结束后,也会断开连接
  • 可靠数据传输服务:保证无差错、按适当顺序交付所有发送的数据;没有字节的丢失和冗余
  • 拥塞控制机制:并不能说这种服务能为通信进程带来直接好处,但能为整个因特网带来整体好处。(网络太卡时,不会一直发)

安全性
TCP和UDP都没有加密机制。这样明文发送很容易在中间链路被嗅探和发现。因此因特网界研制了TCP的加强版,称为安全层套接字(SSL)。注意SSL并不是在传输层的,而是一种对TCP的加强,是在应用层上实现的。

UDP服务

udp是一种不提供不必要服务的轻量级运输协议,仅提供最小服务。

  • 没有握手,没有建立连接
  • 不可靠数据传输
  • 报文可能乱序到达
  • 没有拥塞控制机制

因特网运输协议不提供的服务

tcp和udp都没有定时和吞吐量的功能。但我们仍然可以利用这些协议来构建一个带宽敏感、对延迟敏感的应用。这时因为它们被设计成尽最大可能对付这种保证的缺乏.
所以说设计还是很重要的。

1.5 应用层协议

前面讨论的是如何把报文发送进socket来实现进程通信。但很明显,这些报文也是需要遵循某些规则的,这就引出了应用层协议:定义了运行在不同端系统上的应用程序如何相互传递报文。应用层协议定义了:

  1. 交换的报文类型
  2. 报文的语法
  3. 字段的语义
  4. 确定一个进程何时以及如何发送报文,对报文进行响应的规则

应用层协议只是网络应用程序的一部分!(尽管这部分非常重要)。如Web是一种客户-服务器应用,包括了html协议、web浏览器、web服务器。

二 Web和HTTP

2.1 HTTP概况

Web的应用层协议就是http,是Web的核心。下面介绍一些web术语:

  1. Web页面(web page)也叫文档,由对象组成
  2. 对象:只是一个文件,诸如:一个html文件、一张jpeg照片等等,且可以通过url地址寻址

http是使用TCP作为传输层协议的,因此不用担心数据丢失问题,也不关注tcp从网络的数据丢失和乱序故障中恢复的细节(这里有一个很重要的思想:就是分层设计。把一个大问题先细分掉,尽量问题之间也要解耦。我们在实现其中一层时,只需要专注这一层的问题,而不要把太多其他问题考虑进来。这不论是在学习时,还是编程中,都非常重要

2.2 非持续连接和持续连接

客户端会发出一系列请求并且服务器对每个请求进行响应。应用程序的研制者需要做出一个决定:每个请求/响应对是经一个单独的TCP连接发送,还是所有的请求及其响应经相同的TCP连接发送。

注意
如果采用非持续连接,这些连接可能是串行也可能是并行的。浏览器一把可以打开5-10个并行的TCP连接,用户也可以设置最大并行连接数。
采用持续连接的好处就是不用每次都建立一个连接,减少了消耗的资源(对于每个连接,客户端和服务端都需要分配TCP的缓冲区和保持TCP变量)

2.3 HTTP报文格式

因为之前也学过编程,所以这里简单记录下。
一个请求报文分为三部分

  1. 请求行
  2. 首部行
  3. 空行
  4. 实体体

2.4 Web缓存

也被称为代理服务器,CDN就是一种实现
(二)应用层协议、HTTP、电子邮件、DNS_第3张图片

2.5 条件GET方法

前面小节的高速缓存能提高响应速度,但有一个问题:存放在缓存的对象副本可能是陈旧的。

这时可以使用条件GET来解决。
简单说:当客户端请求代理缓存器时,发现本地已经有缓存了。则会拿着缓存文件的最后一次更新时间,去问真正的服务器:这个文件有没有在指定时间之后修改过。修改过,则返回最新的文件,然后缓存并返回给客户端。没有则响应一个空实体体的报文(304),缓存服务器直接返回本地副本。

三 因特网中的电子邮件

因特网的电子邮件系统主要由3个主要部分组成:用户代理、邮件服务器、简单邮件传输协议(SMTP)
(二)应用层协议、HTTP、电子邮件、DNS_第4张图片
在邮件服务器上有个队列,这样的话就可以实现重试机制,用户邮箱是属于邮件服务器的。

3.1 SMTP

是因特网电子邮件中主要的应用层协议。
因为这个技术很老,所以会有一些看上去比较过时的设计,比如SMTP限制所有报文的体部分只能采用简单的7比特ASCII表示。因此当我们发送多媒体数据时,需要先对原始数据做转码处理

  • SMTP一般不使用中间邮件服务器发送邮件
  • 当服务器邮件服务器没有开机时,客户邮件服务器会在稍后继续尝试连接
  • 底层使用TCP传输层协议

3.2 与HTTP的对比

  • HTTP是拉协议(pull),SMTP是推协议(PUSH)
  • SMTP要求报文采用7比特ASCII码格式,HTTP不受这个限制
  • 处理一个既包含文本又包含图形的文档。HTTP是将每个对象封装到自己的HTTP响应报文中,而SMTP是将所有的报文对象放在一个报文

3.3 邮件报文格式

(二)应用层协议、HTTP、电子邮件、DNS_第5张图片

这里我还是有点困惑?
因为报文里的环境信息都在卡面SMTP握手中声明过了,所以不清楚这里的首部信息是为了干什么?
我的理解是:书上前面的握手协议我们输入的那些信息,在最后会由用户代理封装成一个SMTP报文,然后发送给邮件服务器。

(二)应用层协议、HTTP、电子邮件、DNS_第6张图片

3.4 邮件访问协议

以前都是用户登录到服务器主机,并直接在该主机上运行一个邮件阅读程序来阅读他的邮件的。但今天,邮件访问使用了一种客户-服务器体系结构,即用户通过用户端系统上的客户程序来阅读电子邮件(比如foxmail).

因为SMTP被设计成将电子邮件从一台邮件服务器推到另一台主机。然而我们的用户代理在运行在PC、手机上的,不可能一直运行着。所以邮件必须发送到邮件服务器,而我们也必须通过一种方式能让用户代理能从邮件服务器获取新的邮件.因此可以以引入一些特殊的邮件访问协议,如POP3、IMAP
(二)应用层协议、HTTP、电子邮件、DNS_第7张图片

POP3

一种极为简单的邮件访问协议。POP3按照3个阶段进行工作:

  1. 特许(authorization,我理解成认证)
  2. 事务处理(取回报文、增加/取消删除标记)
  3. 更新(发出quit目录,用来结束POP3会话,这时邮件服务器也会删除哪些被标记删除的邮件)

有两种下载模式

  1. 下载并删除
  2. 下载并报仇留

IMAP

POP3没有给用户提供任何创建远程文件夹并为报文指派文件夹的方法。
IMAP比POP3复杂的多。将每个报文与一个文件夹联系起来,并且具有允许用户代理获取报文某些部分的命令

基于Web的电子邮件

现在越来越多的用户使用Web浏览器来收发电子邮件。这时,用户代理就是普通的浏览器,用户和远程有限之间的通信则通过HTTP进行。淡然邮件服务器之间通信肯定还是SMSP。

四 DNS:因特网的目录服务

因特网上的主机有多种方式进行标识。一种方法是用主机名(hostname),比如www.baidu.com。这种方式便于人们记忆,但路由器很难处理,无法确认位置。因此主机也可以用IP进行标识。

IP详情会在后面讲到,先简单介绍下:IP(IPV4的)由4个字节组成,字节之间用.隔开。

4.1 提供了哪些服务

对于主机标识,因为人们喜欢主机名,而路由器喜欢ip格式。因此诞生了一种能将主机名到ip地址转换的目录服务。这就是域名系统DNS(Domain Name System

DNS定义

  1. 一个由分层的DNS服务器实现的分布式数据库
  2. 一种应用层协议:使主机能够查询分布式数据库
  3. 特点:基于UDP,服务器是53端口。

当使用HTTP\SMTP\FTP协议时,都有可能用到DNS服务将用户输入的主机名转换成IP地址。过程简单的说:就是将地址中的主机名向DNS查询

除了进行主机名到IP的转换,其他提供的重要服务

  1. 主机别名:有些主机别名很复杂,这时可以存在多个主机别名。真正的主机名叫做规范主机名
  2. 邮件服务器别名。场景和上面差不多,就是换成了邮件服务器的主机名。同时MX记录允许一个公司的邮件服务器别名和Web服务器是用相同的(别名化)主机名
  3. 负载均衡。即一个主机名可以一个IP地址集合相联系

4.2 工作机理概述

DNS采用分布式的设计方案。

分布式、层次数据库

众多DNS服务器是以层次方式组织的。大致来说,由3种类型:根DNS服务器、顶级域(Top-Level Domain,TLD)DNS服务器和权威DNS服务器。

在DNS服务器层次之外,还有一类本地DNS服务器,也非常重要。每个ISP都有一台DNS服务器。因此本地DNS服务器是邻近用户的主机的。本地DNS服务器也起着代理的作用,将DNS请求转发到SND服务器层次结构中。

DNS查询过程如下:(注意:无论查询哪个DNS服务器,都是发送完整的主机名!是DNS服务器自己解析请求报文,然后响应下一层次的DNS服务器IP/目的主机的IP)

多层权威DNS服务器

有时TLD服务器只知道用于主机的权威DNS服务器的IP地址,所以这时可能会查询多台权威DNS服务器,最后才能知道主机的IP

递归查询和迭代查询

前一幅图中DNS的后3个查询时迭代查询。理论上讲,任何DNS查询可以是迭代的也能是递归的。一般就是用前面图中的模式

DNS缓存

看了前面,我们发现一次DNS查询可能8份甚至更多的报文产生。这样必定会有大量的时延。为了改善时延并减少因特网中传输的报文数量,DNS广泛使用了缓存技术

在一个请求链中,当某DNS服务器收到一个DNS回答,它能将映射缓存到本地服务器。比如前面图中后3次都是迭代查询,所有一次查询产生了多条缓存记录。(缓存时间一般是两天)

4.3 DNS记录和报文

  • DNS服务器存储了资源记录(RR),RR提供了主机名到IP的映射。
  • 每个DNS回答报文包含了一条或多条RR

资源记录包含了下列字段的4元组:
(name,value,type,ttl)
name和value的值取决于Type,Type有4种:A\NS\CNAME\MX

DNS报文

DNS的查询会回答报文格式相同。

在DNS数据库中插入记录

也就是向注册登记机构注册域名。

注册域名时,还需要提供基本和辅助权威DNS服务器的名字和IP地址。注册机构会将这些资源记录(至少有A记录和NS记录)插入所有的TLD服务器。

参考

  1. SMTP协议介绍

你可能感兴趣的:(计算机网络/网络编程)