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

目录

      • 1. Electronic Mail
        • 电子邮件应用画像
        • 1.1 电子邮件系统
        • 1.2 邮件报文格式
        • 1.3 邮件访问
      • 2. DNS(Domain Name System)
        • 2.1 DNS提供的服务
        • 2.2 DNS工作机理
        • 2.3 DNS资源记录
        • 2.4 DNS协议,报文
        • 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

2. 事务阶段

  • 客户命令:
  • 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服务器(主域名服务器,辅助域名服务器)的名字和IP地址。
    • 对每个权威域名服务器,注册机构往 com TLD 服务器中插。
      入两条资源记录,例如:(networkutopia.com, dns1.networkutopia.com, NS)(dns1.networkutopia.com, 212.212.212.1, A)
  • 建立权威DNS服务器,特别是:
    • 建立www.networkuptopia.com的Type A记录。
    • 建立networkutopia.com的Type MX记录,以及相应邮件服务器的A记录。
2.5 小结
  • DNS
    • 提供了一种按层次结构命名主机的方法
    • 实现了一个由DNS服务器构成的分布式数据库
    • 提供了查询域名数据库的应用层协议
  • 域名服务器的类型和层次(逻辑层次,物理层次)
  • DNS服务的调用方法:
    • 向本地DNS代理的一个RPC调用
    • 递归+迭代的查询方式
  • DNS协议:
    • 主要使用UDP,也可以使用TCP,端口号均为53
    • 报文请求/响应交互
  • DNS缓存

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/131104.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jmeter 请求发送加密参数

最近在做http加密接口&#xff0c;请求头的uid参数及body的请求json参数都经过加密再发送请求&#xff0c;加密方式为&#xff1a;ase256。所以&#xff0c;jmeter发送请求前也需要对uid及json参数进行加密。我这里是让开发写了个加密、解密的jar&#xff0c;jmeter直接调用这个…

React的类式组件和函数式组件之间有什么区别?

React 中的类组件和函数组件是两种不同的组件编写方式&#xff0c;它们之间有一些区别。 语法和写法&#xff1a;类组件是使用类的语法进行定义的&#xff0c;它继承自 React.Component 类&#xff0c;并且需要实现 render() 方法来返回组件的 JSX。函数组件是使用函数的语法进…

Godot 添加Nuget 引用

前言 我的Godot 专栏 我在之前的文章中&#xff0c;解决了Visual Studio 如何去调试正在运行的Godot 程序。Godot 对于C# 的支持只剩下一个&#xff0c;那就是Nuget 添加。 Godot VisualStudio外部编辑器设置 添加Nuget Nuget 添加还是非常的容易的。我们直接添加一个最常用的…

怎么通过Fiddler对APP进行抓包?以及高级应用场景分析

前言 我们经常需要用到Fiddler做代理服务器对Web、APP应用进行抓包&#xff0c;以便我们对接口功能进行测试调试&#xff0c;定位问题等。这篇将讲述怎么通过Fiddler对APP进行抓包&#xff0c;以及简单介绍一些高级应用场景。 首先&#xff0c;附上Fiddler使用的环境配置清单…

实验1机器学习之线性回归实验

一、实验目的&#xff1a; &#xff08;1&#xff09;理解一元线性回归和多元线性回归的数学原理&#xff0c;能够利用sklearn中相关库解决现实世界中的各类回归问题&#xff1b; &#xff08;2&#xff09;掌握利用matplotlib对一元线性回归模型进行可视化的方法&#xff0c…

Vuex的简介以及入门案例

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…

有root权限的共享服务器,返现福利

以下是目前各类型服务器配置与价格目录&#xff1a; 可咨询文末微信号领取返现福利&#xff0c;注册链接&#xff1a; 西柚云超算https://www.xiyoucloud.net/aff/YADJJHWA 微信号&#xff1a;生信小博士

实现一个自己的脚手架教程

前言 脚手架并不实现&#xff0c;难的是最佳实践的整理和沉淀。本文不会涉及到最佳实践方面的内容&#xff0c;只是教会你如何实现一个最基础的脚手架&#xff0c;以此作为展示最佳实践的载体。 如何搭建一个脚手架的工程 如何开发和调试一个脚手架 脚手架中如何接收和处理命…

RabbitMQ开启消息发送确认和消费手动确认

开启RabbitMQ的生产者发送消息到RabbitMQ服务端的接收确认&#xff08;ACK&#xff09;和消费者通过手动确认或者丢弃消费的消息。 通过配置 publisher-confirm-type: correlated 和publisher-returns: true开启生产者确认消息。 server:port: 8014spring:rabbitmq:username: …

【PPT制作】基础篇

文章目录 一、PPT制作必要的基础设置1.1 自动保存1.2 字体嵌入1.3 撤销步数1.4 图像大小和质量 二、必备快捷键三、设计四原则四、总结 ヾ(๑╹◡╹)&#xff89;" 没有坚持的努力&#xff0c;本质上并没有多大意义ヾ(๑╹◡╹)&#xff89;" 一、PPT制作必要的基础…

Gin 文件上传操作(单/多文件操作)

参考地址: 单文件 | Gin Web Framework (gin-gonic.com)https://gin-gonic.com/zh-cn/docs/examples/upload-file/single-file/ 单文件 官方案例: func main() {router := gin.Default()// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)router.MaxMultipartMem…

css吸顶特效(elementui vue3官网)

效果如图&#xff1a;当浏览器滚轮在最上面的时候 没什么区别。当鼠标滚轮超出最上面高度时会有这种粒子感。吸顶遮盖下面内容 首先要 明确 css 基础属性 position: sticky;的用法。再了解 background-image: radial-gradient(transparent 1px, #fff 1px); background-size: …