应用层

2022-11-12 17:47:53 浏览数 (2)

应用层位于运输层之上,主要功能为通过应用进程间的交互来完成特定网络应用。

文章目录 1、应用层概述 2、网络应用模型 2.1 C/S模型 2.2 P2P模型 3、DNS系统 3.1 域名 3.2 域名服务器 3.3 域名解析过程 4、文件传输协议FTP 4.1 FTP工作原理 5、电子邮件 5.1 电子邮件系统的组成结构 5.2 SMTP协议 5.3 POP3协议、IMAP协议 6、万维网和HTTP协议 6.1 万维网概述 6.2 超文本传输协议HTTP

1、应用层概述

应用层对应用程序的通信提供服务。

应用层的功能:

文件传输、访问和管理(FTP) 电子邮件(SMTP、POP3) 虚拟终端(HTTP) 查询服务和远程作业登录

2、网络应用模型

2.1 C/S模型 2.2 P2P模型

4.1 FTP工作原理

用户首先要登录 ftp地址 用户名&密码 或匿名登陆

控制连接始终保持,数据连接不是始终保持

是否使用TCP 20端口建立数据连接与传输模式有关

主动方式使用TCP 20端口

被动方式由服务器和客户端自行协商决定(端口>1024)

FTP传输模式:

文本模式: ASCII模式, 以文本序列传输数据; 二进制模式: Binary模式, 以二进制序列传输数据。

5、电子邮件 5

.1 电子邮件系统的组成结构

在这里插入图片描述

1、SMTP介绍 基本概念 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件 的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件 时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程 只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。SMTP 是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议。

工作过程 首先,运行在发送端邮件服务器主机上的SMTP客户,发起建立一个到运行在接收端邮件服务器主机上的 SMTP服务器端口号25之间的TCP连接。如果接收邮件服务器当前不在工作,SMTP客户就等待一段时间后再 尝试建立该连接。

5.2 SMTP协议

SMTP规定了在两个相互通信的SMTP进程之间应如何交换信息。 负责发送邮件的SMTP进程就是SMTP客户,负责接收邮件的进程就是SMTP服务器。 SMTP规定了14条命令(几个字母)和21种应答信息(三位数字代码 简单文字说明)。 TCP连接、端口号25、C/S SMTP通信的三个阶段

连接建立:

每隔一段时间对服务器里的邮件缓存进行扫描,如果有要发送的文件,使用SMTP协议与接收方服务器建立端口号为25的TCP连接 接收方发送 “220 Service ready"表明连接已经建立好了 发送方会发送一个"HELLO"命令,并附上发送方的主机名 接收方若有能力接收邮件,回答“250 OK”,否则,回答“421 Service not available 邮件发送(A表示发送方,B表示接收方):

A: MAIL FROM: wangdao@163.com B: 250 OK/B:451 (452或500…) SMTP服务器是否已经准备好接收邮件 A: RCPT TO:mooc@163.com 可以有多个RCPT命令 B: 250 OK /B: 550 No such user here SMTP服务器确定是否有这个用户 A: DATA 要开始传输邮件的内容了 B: 354 start mail input; end with . SMTP服务器同意传输 A: Date… 开始传输邮件内容 B: 250 OK 接收结束 连接释放:连接释放邮件发完, SMTP客户发送QUIT命令,SMTP服务器返回“221” ,表示同意释放TCP连接。

SMTP的缺点: SMTP不能传送可执行文件或者其他二进制对象。 SMTP仅限于传送7位ASCII码,不能传送其他非英语国家的文字。 SMTP服务器会拒绝超过一定长度的邮件。 通过因特网邮件扩充(MIME):使电子邮件系统可以支持声音、图像、视频、多种国家语言等等。

5.3 POP3协议、IMAP协议 ​ POP3使用TCP连接,端口号110,C/S模式

​ POP3工作方式:下载并保留、下载并删除

​ IMAP协议:IMAP协议比POP协议复杂。当用户PC上的IMAP客户程序打开IMAP服务器的邮箱时,用户可以看到邮箱的首部,若用户需要打开某个邮件,该邮件才上传到用户的计算机上。

​ 基于万维网的电子邮件

6、万维网和HTTP协议 6.1 万维网概述 ​  万维网www (World Wide Web)是一个大规模的、联机式的信息储藏所/资料空间,是无数个网络站点和网页的集合。

​ 统一资源定位符URL:用来唯一标识每一个资源

​ URL一般形式:<协议>://<主机>:<端口>/<路径>

​ URL不区分大小写

​ 用户通过点击超链接获取资源,这些资源通过超文本传输协议(HTTP) 传送给使用者。

​  万维网以客户/服务器方式工作,用户使用的浏览器就是万维网客户程序,万维网文档所驻留的主机运行服务器程序

6.2 超文本传输协议HTTP

​ 用户使用URL访问资源的具体过程:

浏览器分析URL 浏览器向DNS请求解析IP地址 DNS解析出IP地址 浏览器与服务器建立TCP连接 浏览器发出取文件命令 服务器响应 释放TCP连接 浏览器显示 HTTP协议的特点:

HTTP协议是无状态的。 Cookie是存储在用户主机中的文本文件,记录一段时间内某用户(使用识别码识别,如“123456”)的访问记录。 HTTP采用TCP作为运输层协议,但HTTP协议本身是无连接的(通信双方在交换HTTP报文之前不需要先建立HTTP连接) HTTP的连接方式:持久连接(非流水线、流水线)和非持久连接 HTTP的连接方式

​ 非持久连接

​ 持久连接

HTTP的报文格式

​ HTTP报文分为请求报文和响应报文

​ HTTP报文是面向文本的,因此在报文中的每一个字段都是一些ASCII码串。

状态码

1xx表示通知信息的,如请求收到了或正在处理。 2xx表示成功,如接受或知道了。 3xx表示重定向,如要完成请求还必须采取进一步的行动。 4xx表示客户的差错,如请求中有错误的语法或不能完成。 5xx表示服务器的差错,如服务器失效无法完成请求。 ———————————————— 版权声明:本文为CSDN博主「LFuser.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_41596568/article/details/105855644

**

SMTP简单通讯过程

**

通过telnet程序来测试一个SMTP服务器,并进行简单说明,如下所示:

$telnet smtp.example.com 25 < ------------------------- 进行了tcp连接

220 smtp.example.com ESMTP Service(Lotus Domino Release 8.5.3FP6) ready a

t Thu, 23 Jul 2015 20:48:17 0800

HELO zjf <------------------------- HELO命令标记自己的身份

250 smtp.example.com Hello zjf([10.10.34.22]), pleased to meet you

auth login <------------------------- 进行身份认证

334 VXNlcm5hbWU6

base64加密后的用户名

334 UGFzc3dvcmQ6

base64加密后的密码

235 Authentication successful

mail from:xxx@example.com < ------------------------- 说明发件人邮箱

250 xxx@example.com… SenderOK

rcpt to:yyy@example.com < ------------------------- (确认接收方是否已做好准备,防止邮件发送了,却发现无此人,或空间不足等造成资源浪费)

250 yyy@example.com…Recipient OK

DATA <------------------------- 表示开始传送邮件的内容

354 Please start mail input.

<邮件内容>

. <------------------------- 两个回车换行中间用一个点隔开表示邮件内容结束

250 Mail queued for delivery. <------------------------- 邮件放入了发送服务器队列

quit <------------------------- 退出

221 Closing connection. Good bye.

说明:

1、25端口是SMTP的标准服务端口,数据不经过加密处理,以明文方式发送。

当然也支持加密方式SSL/TLS,另有些发送邮箱服务器支持STARTTLS协议。下图是他们之间的区别(并没有详细描述中间的交互过程)

需要注意的是:

1) 不加密默认使用25端口;如明确使用SSL/TLS加密,则使用465端口

2) 在启用STARTTLS协议的时候,使用25端口较好,虽然587主要是针对STARTTLS协议的,但支持该协议的并不一定开放该端口,如网易邮箱。

3) STARTTLS协议不是说只能用TLS加密,也可以使用SSL加密。

————————————————

DNS协议

我们之前已经了解过ARP协议。 如果说ARP协议是用来将IP地址转换为MAC地址,那么DNS协议则是用来将域名转换为IP地址(也可以将IP地址转换为相应的域名地址)。 我们都知道,TCP/IP中使用的是IP地址和端口号来确定网络上某一台主机上的某一个程序,不免有人有疑问,为什么不用域名来直接进行通信呢?

  1. 因为IP地址是固定长度的,IPv4是32位,IPv6是128位,而域名是变长的,不便于计算机处理。
  2. IP地址对于用户来说不方便记忆,但域名便于用户使用,例如www.baidu.com这是百度的域名。 总结一点就是IP地址是面向主机的,而域名则是面向用户的。 hosts文件 域名和IP的对应关系保存在一个叫hosts文件中。 最初,通过互联网信息中心来管理这个文件,如果有一个新的计算机想接入网络,或者某个计算IP变更都需要到信息中心申请变更hosts文件。其他计算机也需要定期更新,才能上网。 但是这样太麻烦了,就出现了DNS系统。

DNS系统 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系 如果新计算机接入网络,将这个信息注册到数据库中 用户输入域名的时候,会自动查询DNS服务器,由DNS服务器检索数据库,得到对应的IP地址 我们可以通过命令查看自己的hosts文件:

在域名解析的过程中仍然会优先查找hosts文件的内容。 DNS理论知识 一、DNS域名结构 1、域名的层次结构 域名系统必须要保持唯一性。 为了达到唯一性的目的,因特网在命名的时候采用了层次结构的命名方法:

  1. 每一个域名(本文只讨论英文域名)都是一个标号序列(labels),用字母(A-Z,a-z,大小写等价)、数字(0-9)和连接符(-)组成
  2. 标号序列总长度不能超过255个字符,它由点号分割成一个个的标号(label)
  3. 每个标号应该在63个字符之内,每个标号都可以看成一个层次的域名。
  4. 级别最低的域名写在左边,级别最高的域名写在右边。 域名服务主要是基于UDP实现的,服务器的端口号为53。

三、域名解析过程 域名解析总体可分为一下过程: (1) 输入域名后, 先查找自己主机对应的域名服务器,域名服务器先查找自己的数据库中的数据. (2) 如果没有, 就向上级域名服务器进行查找, 依次类推 (3) 最多回溯到根域名服务器, 肯定能找到这个域名的IP地址 (4) 域名服务器自身也会进行一些缓存, 把曾经访问过的域名和对应的IP地址缓存起来, 可以加速查找过程 具体可描述如下:

  1. 主机先向本地域名服务器进行递归查询
  2. 本地域名服务器采用迭代查询,向一个根域名服务器进行查询
  3. 根域名服务器告诉本地域名服务器,下一次应该查询的顶级域名服务器的IP地址
  4. 本地域名服务器向顶级域名服务器进行查询
  5. 顶级域名服务器告诉本地域名服务器,下一步查询权限服务器的IP地址
  6. 本地域名服务器向权限服务器进行查询
  7. 权限服务器告诉本地域名服务器所查询的主机的IP地址
  8. 本地域名服务器最后把查询结果告诉主机 如图所示:

上文我们提出了两个概念:递归查询和迭代查询

(1)递归查询:本机向本地域名服务器发出一次查询请求,就静待最终的结果。如果本地域名服务器无法解析,自己会以DNS客户机的身份向其它域名服务器查询,直到得到最终的IP地址告诉本机 (2)迭代查询:本地域名服务 一、主机向本地域名服务器的查询一般都是采用递归查询。

代码语言:javascript复制
    所谓递归查询就是:如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,那么本地域名服务器就以DNS客户的身份,

    向其它根域名服务器继续发出查询请求报文(即替主机继续查询),而不是让主机自己进行下一步查询。

    因此,递归查询返回的查询结果或者是所要查询的IP地址,或者是报错,表示无法查询到所需的IP地址。

二、本地域名服务器向根域名服务器的查询

的迭代查询。

代码语言:javascript复制
   迭代查询的特点:当根域名服务器收到本地域名服务器发出的迭代查询请求报文时,**要么给出所要查询的IP地址,要么告诉本地服务器:“你下一步应当向哪一个域名服务器进行查询”。**

    然后让本地服务器进行后续的查询。**根域名服务器通常是把自己知道的顶级域名服务器的IP地址告诉本地域名服务器,让本地域名服务器再向顶级域名服务器查询。**

    **顶级域名服务器在收到本地域名服务器的查询请求后,要么给出所要查询的IP地址,要么告诉本地服务器下一步应当向哪一个权限域名服务器进行查询。**

    最后,知道了所要解析的IP地址或报错,然后把这个结果返回给发起查询的主机

0 人点赞