【计算机网络-自顶向下方法】应用层(SMTP、POP3、DNS)

目录

      • [1. Electronic Mail](#1. Electronic Mail)
        • 电子邮件应用画像
        • [1.1 电子邮件系统](#1.1 电子邮件系统)
        • [1.2 邮件报文格式](#1.2 邮件报文格式)
        • [1.3 邮件访问](#1.3 邮件访问)
      • [2. DNS(Domain Name System)](#2. DNS(Domain Name System))
        • [2.1 DNS提供的服务](#2.1 DNS提供的服务)
        • [2.2 DNS工作机理](#2.2 DNS工作机理)
        • [2.3 DNS资源记录](#2.3 DNS资源记录)
        • [2.4 DNS协议,报文](#2.4 DNS协议,报文)
        • [2.5 小结](#2.5 小结)

1. Electronic Mail

电子邮件应用画像
  • 应用层传输对象:邮件
  • 网络应用架构:客户-服务器架构
  • 使用传输服务:TCP
  • 应用层协议:
    • 邮件传输协议:SMTP(端口号25)
    • 邮件访问协议:POP3(端口号110),IMAP(端口号143),HTTP(端口号80)
  • SMTP、POP3、IMAP采用命令/响应交互
1.1 电子邮件系统

最初由三个部分组成:

  • 用户代理
  • 邮件服务器
  • 简单邮件传输协议

用户代理

  • 编辑、阅读、回复邮件等。
  • 将要外发的邮件发送到用户的邮件服务器。
  • 从用户邮箱中取邮件。
  • 一些用户代理:Outlook, elm, Mozilla, Thunderbird

邮件服务器

  • 用户信箱:存放到来的邮件。
  • 发送报文队列:存放要发送出去的邮件。
  • 报文传输代理MTA:运行在服务器后台的系统守护进程,负责在邮件服务器之间传输邮件,即将收到的邮件放入用户信箱。

电子信箱

  • 电子信箱:
    • 由计算机上的一个存储区域(如磁盘上的一个文件)组成。
    • 每个信箱均被分配了唯一的电子邮件地址。
  • 电子邮件地址:
    • 由两个部分组成,形如:mailbox@computer。
    • 前者为标识用户信箱的字符串,后者为信箱所在的邮件服务器的名字。

简单邮件传输协议--SMTP [RFC 2821]

  • 邮件服务器之间传输邮件采用客户-服务器模式:
    • 客户: 发送邮件的邮件服务器(报文传输代理)
    • 服务器: 接收邮件的邮件服务器(报文传输代理)
  • SMTP使用TCP协议,服务器端口为25
  • 发送方和接收方的邮件服务器之间直接传输邮件
  • SMTP采用命令/响应交互方式:
    • 命令: ASCII文本
    • 响应: 状态码和短语
  • 报文只能包含简单ASCII文本,即7位ASCII码(最初仅为英文电子邮件而设计)

邮件发送示例Scenario: Alice sends message to Bob

  1. Alice使用用户代理编辑邮件,发送给bob@someschool.edu
  2. Alice的用户代理将报文发送给其邮件服务器(使用SMTP)。
  3. 邮件被置于邮件服务器的发送报文队列中。
  4. Alice的邮件服务器与Bob的邮件服务器建立TCP连接,然后发送 Alice的邮件。
  5. Bob的邮件服务器将邮件放置在Bob的信箱中。
  6. Bob调用他的用户代理阅读邮件。

Q:为什么不是直接从 User Agent 直接发送到 User Agent 呢?

A:User Agent这样的终端程序并不是实时在线的,若Bob的Mail Server暂时出现了问题,Alice的 Mail Server会在一段时间内不断尝试发送,尝试多次后才宣布发布失败。User Agent 并不是一直在线的无法向 Mail Server 一样重复这样的过程。

邮件传送具体实现

假设Alice的邮件已经从代理服务器传输到了邮件服务器上,Alice的邮件服务器试图将邮件传送到Bob的邮件服务器上。

  1. 实现连接与握手
    • MTA客户与MTA服务器在端口25建立TCP连接。
    • 服务器发送服务就绪报文。
    • 客户发送HELO报文,用域名标识自己。
    • 服务器响应。
    • 若正常则回复 250 OK,不正常回复 421 Service not Available
  2. 发送邮件内容

可能出现的错误:

451:处理出错

452:存储空间不足

  1. 结束传输
  • 客户发送QUIT命令
  • 服务器响应
  • 释放TCP连接

几个要点:

  • SMTP使用持久连接:
    • 可以在一条TCP连接上传输多个报文(FTP只传输一个文件,HTTP可传输一个或多个对象)
    • 一个方向的报文传输结束后,可以在另一个方向上传输报文(SMTP特有的)
  • SMTP 服务器使用 "." 表示报文结束(FTP使用关闭连接表示文件结束,HTTP使用长度域表示报文结束)。
  • SMTP要求报文(报头和实体)只包含简单ASCII文本(HTTP无此要求)。
1.2 邮件报文格式


如何传输包含非ASCII文本的报文?

  • 现在的电子邮件要求能传输其它语系的文字,甚至非文本信息(如图片)。
    • 非ASCII文本形式的数据,在发送前须转换成简单ASCII文本。
  • 非ASCII文本的报文大多具有特殊的数据类型,需要特殊的邮件浏览器(如JPEG图形的解压缩软件)来阅读。
    • 需扩展报文的数据类型。

Base64编码

Base64用来将一个二进制字节序列,转换成由ASCII字符序列构成的文本。

每24比特数据划分成4个6比特的单元,每个单元编码成一个ASCII字符,其对应关系为:

  • 0~25编码成'A'~'Z'
  • 26~51编码成'a'~'z'
  • 52~61编码成'0'~'9'
  • 62和63分别编码成'+'和'/'
  • 若最后一组只有8比特或16比特,分别加上'=='和 '=' 后缀
  • 回车和换行忽略,可以插在任何地方

quoted-printable编码

适用于绝大部分都是ASCII字符的报文实体,其编码方法是:

  • 每个ASCII字符保持不变
  • 对于非ASCII字符(大于127的字符),将该字符的十六进制表示用两个ASCII字符标记,前面冠以特殊字符"="。

多用途因特网邮件扩展协议MIME

扩展了RFC 822,允许实体具有不同的数据类型,并规定了非ASCII文本信息在传输时的统一编码形式。

扩充了一些首部行,最重要的是:

  • Content-Transfer-Encoding:实体采用的传输编码形式。
  • Content-Type:实体的数据类型及子类型。
1.3 邮件访问

邮件访问方式:

  • 早期:用户登陆到邮件服务器上,直接在服务器上运行一个邮件阅读程序来阅读邮件。
  • 今天:用户在终端上安装用户代理,获取和阅读邮件。

Q:能将用户信箱放在本地终端吗?

A:不能,用户终端不可能一直连在因特网上
Q:用户代理能用SMTP从邮件服务器获取邮件吗?

A:不能,SMTP是一个"推"协议,只能将邮件从用户代理推送到其邮件服务器,或从发送方邮件服务器推送到 收件人邮件服务器。

解决方案:设计一个新的协议从服务器获取邮件。

邮件的两阶段交付

  • 在具有永久因特网连接的计算机上运行一个SMTP服务器,为用户分配一个永久信箱。
  • 第一阶段:邮件被投递到收信人的永久信箱。
  • 第二阶段:用户从永久信箱中获取邮件。
  • 为此,带永久信箱的计算机必须运行两个服务器程序:
    • SMTP服务器:收发用户邮件,将收到的邮件放入用户信箱
    • 邮件访问服务器:允许用户从信箱中提取邮件

邮件访问协议

可以从服务器获取邮件的协议有:

  • POP: Post Office Protocol [RFC 1939]
    • authorization (agent <--->server) and download
  • IMAP: Internet Mail Access Protocol [RFC 1730]
    • more features (more complex)
    • manipulation of stored msgs on server
  • HTTP: gmail, Hotmail, Yahoo! Mail, etc.

POP3协议的两个阶段

  1. 认证和授权阶段
  • 客户命令:
    • user: declare username
    • pass: password
  • 服务器响应
    • +OK
    • -ERR

S: +OK POP3 server ready

C: user bob

S: +OK

C: pass hungry

S: +OK user successfully logged on

  1. 事务阶段
  • 客户命令:
  • list: list message numbers
  • retr: retrieve message by number
  • dele: delete
  • quit

C: list

S: 1 498

S: 2 912

S: .

C: retr 1

S: <message 1 contents>

S: .

C: dele 1

C: retr 2

S: <message 2 contents>

S: .

C: dele 2

C: quit

S: +OK POP3 server signing off

基于web的邮件访问:HTTP

  • 用户代理为普通浏览器:
    • 发送邮件:浏览器使用 HTTP协议 将邮件发送到邮件服务器。
    • 获取邮件:浏览器使用 HTTP协议 从信箱取邮件。
    • 传输邮件:邮件服务器之间仍使用 SMTP协议 传输报文。
  • 和IMAP一样,用户可以在远程服务器上用文件夹来组织他们的邮件。
  • 下图展示了邮件传输的两种方式:
    • 红色线代表为像Outlook这样的代理服务器的邮件传输方式。
    • 蓝色线代表为基于web代理服务器的邮件传输方式。

现代因特网电子邮件系统的组成

  • 用户代理
  • 邮件服务器
  • 简单邮件传输协议SMTP
  • 邮件访问协议(POP3,IMAP,HTTP)

小结

  • 电子邮件系统:
    • 4个组成部分。
  • SMTP协议:
    • 使用TCP协议,服务器端口号25。
    • "推"协议:将邮件推向用户信箱。
    • 命令/响应交互方式。
    • 信体只能包含简单ASCII文本。
  • MIME协议:
    • 允许信体包含非ASCII文本。
    • 规定传输编码类型,扩展数据类型。
  • 两阶段交付过程:
    • 邮件投递:邮件从发信方投递到用户信箱。
    • 邮件访问:收信人从用户信箱获(拉)取邮件。

理解HTTP、FTP、SMTP设计上的不同

  • HTTP、FTP、SMTP均是在TCP连接上传输文件,但是在设计上有一些不同
  • 使用持久连接或非持久连接:HTTP可在一条TCP连接上传输多个对象,SMTP可以传输多个邮件,FTP只传输一个文件。
  • 文件传输结束的标记:HTTP使用长度指示报文结束,FTP使用关闭连接表示文件结束,SMTP 使用 "." 表示报文结束。
  • 文件内容的要求:SMTP要求邮件只包含简单ASCII文本,FTP和HTTP无此要求。
  • 客户-服务器交互方式:HTTP采用报文交互,SMTP和FTP采用命令/响应交互。

2. DNS(Domain Name System)

因特网的目录服务DNS:将主机名映射到IP地址。

DNS实现为一个应用层服务:

  • 由其它网络应用使用的服务
  • 客户-服务器模式
  • 传输服务:主要使用UDP,有时使用TCP
  • 端口号53
  • 请求/响应报文交互
2.1 DNS提供的服务
  • 主机名-IP地址转换
  • 主机别名:
    • 允许主机除了规范名外,具有一个或多个别名(易于记忆),如www.ustc.edu.cn
    • 提供主机别名到规范名的映射。
    • 迁移服务不需要修改主机名。
  • 邮件服务器别名:
    • 允许使用域名作为邮件服务器的别名,如:xxx@ustc.edu.cn
  • 负载分配:
    • 允许一个规范主机名对应一组IP地址。
    • 将服务请求在一群相同功能的服务器之间分配。
2.2 DNS工作机理

将主机名转换成IP地址:

  1. 应用程序(如浏览器)调用一个本地例程(解析器),主机名作为参数之一传递。
  2. 解析器向网络中的DNS服务器发送查询报文,包含要查询的主机名。
  3. 解析器收到包含IP地址的响应报文。
  4. 解析器将IP地址返回给调用者(如浏览器)。

对应用程序而言,DNS是一个提供直接转换服务的黑盒子。

DNS是一个分布式数据库

Q: 为什么不使用集中式的DNS?

  • 单点失效
  • 流量集中:单个DNS服务器需处理全部查询
  • 响应时间长:远距离的集中式数据库
  • 需要维护庞大的数据库

分布式环境中的名字空间

如何在分布式环境下避免出现名字冲突?

DNS使用名字空间来规范对主机的命名:

  • 名字空间是因特网主机名字的集合,它同时给出了命名主机的方法。
  • 概念上,因特网被划分成200多个顶级域,每个顶级域可继续划分子域,依次类推。
  • 主机名字采用分层的命名方法。


域名

域(domain):名字树中,以任何一个节点为根的子树构成一个域。

标记(label):树上每一个节点都有一个标记(最多63个字符),树根的标记是一个空字符串。

域名(domain name):某个域的名字表示为:从该域开始向上直到树根的标记序列,标记之间用句点隔开(类似国外邮政地址的写法)。

域名的任一后缀也是一个域,同一个机构内的主机具有相同的域名后缀。
每个节点只需保证其孩子节点的标记不重名。

顶级域

顶级域分为组织域、国家域和反向域三种。

  • 组织域
      由美国国内及一些国际组织使用。
  • 国家域
      使用二字符的国家代码,每个国家对应一个。
  • 反向域

顶级域名为arpa,用来将一个IP地址映射为注册的域名,反向域名解析是为了溯源。

DNS提供了一个反向解析域in-addr.arpa:

  • 欲解析的IP地址表示成像域名一样的一个串,例如,IP地址132.34.45.121表示为 121.45.34.132.in-addr.arpa。
  • 以这个字符串作为参数调用解析器

电信运营商使用自己的DNS服务器提供相关IP地址的反向解析服务。

域名服务器的组织层次

客户想知道www.amazon.com的IP地址:

  • DNS客户查询根服务器,得到com域的DNS服务器地址。
  • DNS客户查询com域的DNS服务器,得到amazon.com域的DNS服务器地址。
  • DNS客户查询amazon.com域的DNS服务器,得到www.amazon.com的IP地址。

顶级域服务器,权威服务器

  • 顶级域 (Top Level Domain, TLD) 服务器:
    • 每个TLD服务器负责一个顶级域。
    • 知道其所有二级子域的域名服务器的地址。
  • 权威DNS服务器:
    • 机构的DNS服务器,提供机构内部服务器的名字映射。
    • 提供一个主域名服务器、一个或多个辅助域名服务器。
    • 可由机构维护,也可委托ISP维护。

本地DNS服务器

  • 严格来说,本地DNS服务器不属于DNS服务器的层次结构。
  • 每个ISP都有一台本地DNS服务器,也称"默认的DNS服务器"。
  • 解析器的DNS查询报文实际上发送给本地DNS服务器。
  • 本地DNS服务器起着代理的作用,负责将DNS查询报文发送到DNS层次结构中,并将查找结果返回给解析器。

域名解析的例子

Q:cis.poly.edu上的一台主机想知道gaia.cs.umass.edu的IP地址

物理服务器的层次

一个物理服务器保存的信息可能涉及域名空间的若干层,它也可以把它的域划分成若干子域,把其中的一些子域委托给其它服务器。

实际的物理服务器的层次与域名空间的逻辑层次不同。

DNS缓存

  • 每当收到一个响应报文,DNS服务器将报文中的映射信息缓存在本地(每一层的DNS都有缓存)。
  • DNS服务器首先使用缓存中的信息响应查询请求。
  • DNS缓存中的映射在一定时间后被丢弃
  • 特别地,本地DNS服务器通常会缓存TLD服务器的IP地址,因而很少去访问根服务器
2.3 DNS资源记录

DNS更准确的说法: 存储资源记录(RR)的分布式数据库。

  • Type=A(Address)
    • Name:主机名
    • Value:IP地址
  • Type=NS(Name Server)
    • Name:域 (e.g. foo.com)
    • value:该域的权威DNS服务器的主机名
  • Type=CNAME(Canonical Name)
    • Name:别名
    • Value:规范名
  • Type=MX
    • Name:域(e.g. foo.com)
    • Value:该域的邮件服务器名字

DNS数据库内容示例

2.4 DNS协议,报文

DNS协议: 定义了查询和响应两种报文,查询和响应使用相同的报文格式。


DNS报文的封装

  • DNS主要使用UDP,有时使用TCP,服务器的熟知端口都是53:
    • 当响应报文的长度小于512字节时,使用UDP
    • 当响应报文的长度超过512字节时,使用TCP
    • 当解析器事先不知道响应报文的长度时,先使用UDP;若响应报文的长度超过512字节,服务器截断这个报文,置DNS报文首部的TC标志为1;解析程序打开TCP连接,并重复这个请求,以便得到完整的响应。
  • 为什么DNS响应报文的长度小于512字节时,使用UDP,响应报文的长度超过512字节时,使用TCP?
    • 这是因为UDP没有数据分段的能力,一旦发送的报文长度过长,就需要切割成几个报文段来传送。这就有可能导致信息被分成多个报文段发送丢失,造成严重的数据损失。而TCP传输数据时,可以对数据进行分段和重组,保证数据的完整性,因此更适合传输大型的DNS响应报文。另外,DNS使用TCP的情况也不仅限于响应报文超过512字节,还包括查询应答中的TCP标识位被置位、端口53被占用等情况。

往DNS中插入资源记录

  • example: new startup "Network Utopia"。
  • 向DNS注册机构注册域名"networkutopia.com"
  • 建立权威DNS服务器,特别是:
    • 建立www.networkuptopia.com的Type A记录。
    • 建立networkutopia.com的Type MX记录,以及相应邮件服务器的A记录。
2.5 小结
  • DNS
    • 提供了一种按层次结构命名主机的方法
    • 实现了一个由DNS服务器构成的分布式数据库
    • 提供了查询域名数据库的应用层协议
  • 域名服务器的类型和层次(逻辑层次,物理层次)
  • DNS服务的调用方法:
    • 向本地DNS代理的一个RPC调用
    • 递归+迭代的查询方式
  • DNS协议:
    • 主要使用UDP,也可以使用TCP,端口号均为53
    • 报文请求/响应交互
  • DNS缓存
相关推荐
城南vision11 分钟前
计算机网络——TCP篇
网络·tcp/ip·计算机网络
lihuhelihu1 小时前
第3章 CentOS系统管理
linux·运维·服务器·计算机网络·ubuntu·centos·云计算
幸运超级加倍~1 小时前
软件设计师-上午题-15 计算机网络(5分)
笔记·计算机网络
爱吃生蚝的于勒12 小时前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
城南vision13 小时前
计算机网络——HTTP篇
网络协议·计算机网络·http
幺零九零零19 小时前
【计算机网络】TCP协议面试常考(一)
服务器·tcp/ip·计算机网络
长安初雪1 天前
Request 和 Response 万字详解
计算机网络·servlet
ZachOn1y1 天前
计算机网络:运输层 —— 运输层概述
网络·tcp/ip·计算机网络·运输层
黎鹤舞8281 天前
计算机网络易混淆知识点串记
计算机网络
乌龟跌倒1 天前
网络层3——IP数据报转发的过程
网络·tcp/ip·计算机网络·智能路由器